@houtini/seo-audit-console 0.7.8 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +306 -305
- package/dist/audit/checks.d.ts.map +1 -1
- package/dist/audit/checks.js +148 -0
- package/dist/audit/checks.js.map +1 -1
- package/dist/core/DataForSeoClient.d.ts +8 -7
- package/dist/core/DataForSeoClient.d.ts.map +1 -1
- package/dist/core/DataForSeoClient.js +7 -7
- package/dist/core/DataForSeoClient.js.map +1 -1
- package/dist/core/MajesticClient.d.ts +1 -1
- package/dist/core/MajesticClient.js +1 -1
- package/dist/core/webHandlers.d.ts +20 -0
- package/dist/core/webHandlers.d.ts.map +1 -0
- package/dist/core/webHandlers.js +67 -0
- package/dist/core/webHandlers.js.map +1 -0
- package/dist/core/webServer.d.ts +8 -1
- package/dist/core/webServer.d.ts.map +1 -1
- package/dist/core/webServer.js +12 -4
- package/dist/core/webServer.js.map +1 -1
- package/dist/dashboard.d.ts +3 -0
- package/dist/dashboard.d.ts.map +1 -0
- package/dist/dashboard.js +58 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +35 -63
- package/dist/server.js.map +1 -1
- package/package.json +108 -107
- package/server.json +85 -85
package/package.json
CHANGED
|
@@ -1,107 +1,108 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@houtini/seo-audit-console",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"mcpName": "io.github.houtini-ai/seo-audit-console",
|
|
5
|
-
"description": "The complete technical SEO audit at conversation speed: Google Search Console history + a first-party crawl + on-demand DataForSEO, merged into one prioritised audit inside Claude -
|
|
6
|
-
"type": "module",
|
|
7
|
-
"main": "dist/index.js",
|
|
8
|
-
"bin": {
|
|
9
|
-
"seo-audit-console": "dist/index.js"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
"seo
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"mcp
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"build:
|
|
45
|
-
"build:ui:
|
|
46
|
-
"build:ui": "
|
|
47
|
-
"build": "npm run build:
|
|
48
|
-
"build
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"probe:
|
|
57
|
-
"probe:
|
|
58
|
-
"probe:schema
|
|
59
|
-
"probe:
|
|
60
|
-
"probe:
|
|
61
|
-
"probe:
|
|
62
|
-
"probe:
|
|
63
|
-
"probe:
|
|
64
|
-
"probe:
|
|
65
|
-
"probe:
|
|
66
|
-
"probe:
|
|
67
|
-
"probe:
|
|
68
|
-
"probe:
|
|
69
|
-
"probe:
|
|
70
|
-
"probe:
|
|
71
|
-
"probe:
|
|
72
|
-
"probe:
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
"@fontsource-variable/
|
|
82
|
-
"@
|
|
83
|
-
"@
|
|
84
|
-
"@modelcontextprotocol/
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
"@fontsource-variable/
|
|
95
|
-
"@
|
|
96
|
-
"@types/
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"vite
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
"
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@houtini/seo-audit-console",
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"mcpName": "io.github.houtini-ai/seo-audit-console",
|
|
5
|
+
"description": "The complete technical SEO audit at conversation speed: Google Search Console history + a first-party crawl + on-demand DataForSEO, merged into one prioritised audit inside Claude - 99 checks ranked by recoverable clicks, with paste-ready fixes, keyword and content-gap research, and AI-search readiness.",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"bin": {
|
|
9
|
+
"seo-audit-console": "dist/index.js",
|
|
10
|
+
"seo-audit-dashboard": "dist/dashboard.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"server.json",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE"
|
|
17
|
+
],
|
|
18
|
+
"author": "Richard Baxter <hello@houtini.com>",
|
|
19
|
+
"license": "Apache-2.0",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/houtini-ai/seo-audit.git"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"seo",
|
|
26
|
+
"technical-seo",
|
|
27
|
+
"seo-audit",
|
|
28
|
+
"search-console",
|
|
29
|
+
"google-search-console",
|
|
30
|
+
"crawler",
|
|
31
|
+
"site-audit",
|
|
32
|
+
"dataforseo",
|
|
33
|
+
"keyword-research",
|
|
34
|
+
"content-gap",
|
|
35
|
+
"mcp",
|
|
36
|
+
"mcp-server",
|
|
37
|
+
"model-context-protocol",
|
|
38
|
+
"claude",
|
|
39
|
+
"ai-search",
|
|
40
|
+
"structured-data",
|
|
41
|
+
"core-web-vitals"
|
|
42
|
+
],
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build:server": "tsc -p tsconfig.server.json",
|
|
45
|
+
"build:ui:dashboard": "cross-env INPUT=src/ui/dashboard.html vite build",
|
|
46
|
+
"build:ui:sync": "cross-env INPUT=src/ui/sync-progress.html vite build",
|
|
47
|
+
"build:ui": "npm run build:ui:dashboard && npm run build:ui:sync",
|
|
48
|
+
"build": "npm run build:server && npm run build:ui",
|
|
49
|
+
"build:mcpb": "npm run build && node scripts/build-mcpb.mjs",
|
|
50
|
+
"dev": "tsc -p tsconfig.server.json --watch",
|
|
51
|
+
"start": "node dist/index.js",
|
|
52
|
+
"test": "npm run build:server && npm run smoke",
|
|
53
|
+
"smoke": "node scripts/smoke.mjs",
|
|
54
|
+
"probe:crawl": "node scripts/probe-crawl.mjs",
|
|
55
|
+
"qa:crawl": "node scripts/qa-crawl.mjs",
|
|
56
|
+
"probe:gsc": "node scripts/probe-gsc.mjs",
|
|
57
|
+
"probe:fixfinding": "node scripts/probe-fixfinding.mjs",
|
|
58
|
+
"probe:schema": "node scripts/probe-schema.mjs",
|
|
59
|
+
"probe:schema-rules": "node scripts/probe-schema-rules.mjs",
|
|
60
|
+
"probe:extract": "node scripts/probe-extract.mjs",
|
|
61
|
+
"probe:extract2": "node scripts/probe-extract2.mjs",
|
|
62
|
+
"probe:backlinks": "node scripts/probe-backlinks.mjs",
|
|
63
|
+
"probe:dfs-labs": "node scripts/probe-dfs-labs.mjs",
|
|
64
|
+
"probe:6a": "node scripts/probe-6a.mjs",
|
|
65
|
+
"probe:priority": "node scripts/probe-priority.mjs",
|
|
66
|
+
"probe:templates": "node scripts/probe-templates.mjs",
|
|
67
|
+
"probe:6b": "node scripts/probe-6b.mjs",
|
|
68
|
+
"probe:6c": "node scripts/probe-6c.mjs",
|
|
69
|
+
"probe:6d": "node scripts/probe-6d.mjs",
|
|
70
|
+
"probe:migrate": "node scripts/probe-migrate.mjs",
|
|
71
|
+
"probe:boot": "node scripts/probe-boot.mjs",
|
|
72
|
+
"probe:drift-fixes": "node scripts/probe-drift-fixes.mjs",
|
|
73
|
+
"probe:majestic": "node scripts/probe-majestic.mjs",
|
|
74
|
+
"clean": "rimraf dist",
|
|
75
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
76
|
+
},
|
|
77
|
+
"engines": {
|
|
78
|
+
"node": ">=20.0.0"
|
|
79
|
+
},
|
|
80
|
+
"dependencies": {
|
|
81
|
+
"@fontsource-variable/rubik": "^5.3.0",
|
|
82
|
+
"@fontsource-variable/work-sans": "^5.3.0",
|
|
83
|
+
"@huggingface/transformers": "^4.2.0",
|
|
84
|
+
"@modelcontextprotocol/ext-apps": "^1.7.4",
|
|
85
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
86
|
+
"better-sqlite3": "^12.11.1",
|
|
87
|
+
"cheerio": "^1.0.0",
|
|
88
|
+
"echarts": "^6.0.0",
|
|
89
|
+
"googleapis": "^173.0.0",
|
|
90
|
+
"undici": "^8.7.0",
|
|
91
|
+
"zod": "^3.25.1"
|
|
92
|
+
},
|
|
93
|
+
"devDependencies": {
|
|
94
|
+
"@fontsource-variable/jetbrains-mono": "^5.2.8",
|
|
95
|
+
"@fontsource-variable/schibsted-grotesk": "^5.2.8",
|
|
96
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
97
|
+
"@types/node": "^20.11.0",
|
|
98
|
+
"cross-env": "^10.1.0",
|
|
99
|
+
"rimraf": "^6.0.1",
|
|
100
|
+
"typescript": "^5.9.3",
|
|
101
|
+
"vite": "^6.4.1",
|
|
102
|
+
"vite-plugin-singlefile": "^2.3.3"
|
|
103
|
+
},
|
|
104
|
+
"homepage": "https://github.com/houtini-ai/seo-audit#readme",
|
|
105
|
+
"bugs": {
|
|
106
|
+
"url": "https://github.com/houtini-ai/seo-audit/issues"
|
|
107
|
+
}
|
|
108
|
+
}
|
package/server.json
CHANGED
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
-
"name": "io.github.houtini-ai/seo-audit-console",
|
|
4
|
-
"description": "Technical SEO in Claude: GSC + crawl + DataForSEO - audit, market sizing, content recon.",
|
|
5
|
-
"repository": {
|
|
6
|
-
"url": "https://github.com/houtini-ai/seo-audit",
|
|
7
|
-
"source": "github"
|
|
8
|
-
},
|
|
9
|
-
"version": "0.
|
|
10
|
-
"packages": [
|
|
11
|
-
{
|
|
12
|
-
"registryType": "npm",
|
|
13
|
-
"identifier": "@houtini/seo-audit-console",
|
|
14
|
-
"version": "0.
|
|
15
|
-
"transport": {
|
|
16
|
-
"type": "stdio"
|
|
17
|
-
},
|
|
18
|
-
"environmentVariables": [
|
|
19
|
-
{
|
|
20
|
-
"name": "GOOGLE_APPLICATION_CREDENTIALS",
|
|
21
|
-
"description": "Path to the Google service-account JSON key with Search Console access.",
|
|
22
|
-
"isRequired": true,
|
|
23
|
-
"format": "string",
|
|
24
|
-
"isSecret": false
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"name": "SAC_DATA_DIR",
|
|
28
|
-
"description": "Directory for per-property SQLite databases and reports. Defaults to ~/Documents/seo-audit-console.",
|
|
29
|
-
"isRequired": false,
|
|
30
|
-
"format": "string",
|
|
31
|
-
"isSecret": false
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"name": "DATAFORSEO_USERNAME",
|
|
35
|
-
"description": "DataForSEO API username (optional, enables SERP/keyword/domain/market/recon checks).",
|
|
36
|
-
"isRequired": false,
|
|
37
|
-
"format": "string",
|
|
38
|
-
"isSecret": false
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"name": "DATAFORSEO_PASSWORD",
|
|
42
|
-
"description": "DataForSEO API password (optional).",
|
|
43
|
-
"isRequired": false,
|
|
44
|
-
"format": "string",
|
|
45
|
-
"isSecret": true
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"name": "DATAFORSEO_CACHE_DAYS",
|
|
49
|
-
"description": "TTL for the DataForSEO response cache. Default
|
|
50
|
-
"isRequired": false,
|
|
51
|
-
"format": "string",
|
|
52
|
-
"isSecret": false
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"name": "FIRECRAWL_API_KEY",
|
|
56
|
-
"description": "Firecrawl API key (optional). Lets content recon scrape competitor pages. Get one at https://firecrawl.link/2d1PLD8",
|
|
57
|
-
"isRequired": false,
|
|
58
|
-
"format": "string",
|
|
59
|
-
"isSecret": true
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
"name": "SUPADATA_API_KEY",
|
|
63
|
-
"description": "Supadata API key (optional). Lets content recon transcribe the ranking videos (YouTube/TikTok/X).",
|
|
64
|
-
"isRequired": false,
|
|
65
|
-
"format": "string",
|
|
66
|
-
"isSecret": true
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
"name": "MAJESTIC_API_KEY",
|
|
70
|
-
"description": "Majestic API key (optional). Enriches link_intersect with Trust Flow + Topical Trust Flow and re-sorts prospects by real authority.",
|
|
71
|
-
"isRequired": false,
|
|
72
|
-
"format": "string",
|
|
73
|
-
"isSecret": true
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
"name": "MAJESTIC_CACHE_DAYS",
|
|
77
|
-
"description": "TTL for the Majestic response cache. Default
|
|
78
|
-
"isRequired": false,
|
|
79
|
-
"format": "string",
|
|
80
|
-
"isSecret": false
|
|
81
|
-
}
|
|
82
|
-
]
|
|
83
|
-
}
|
|
84
|
-
]
|
|
85
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.houtini-ai/seo-audit-console",
|
|
4
|
+
"description": "Technical SEO in Claude: GSC + crawl + DataForSEO - audit, market sizing, content recon.",
|
|
5
|
+
"repository": {
|
|
6
|
+
"url": "https://github.com/houtini-ai/seo-audit",
|
|
7
|
+
"source": "github"
|
|
8
|
+
},
|
|
9
|
+
"version": "0.9.0",
|
|
10
|
+
"packages": [
|
|
11
|
+
{
|
|
12
|
+
"registryType": "npm",
|
|
13
|
+
"identifier": "@houtini/seo-audit-console",
|
|
14
|
+
"version": "0.9.0",
|
|
15
|
+
"transport": {
|
|
16
|
+
"type": "stdio"
|
|
17
|
+
},
|
|
18
|
+
"environmentVariables": [
|
|
19
|
+
{
|
|
20
|
+
"name": "GOOGLE_APPLICATION_CREDENTIALS",
|
|
21
|
+
"description": "Path to the Google service-account JSON key with Search Console access.",
|
|
22
|
+
"isRequired": true,
|
|
23
|
+
"format": "string",
|
|
24
|
+
"isSecret": false
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "SAC_DATA_DIR",
|
|
28
|
+
"description": "Directory for per-property SQLite databases and reports. Defaults to ~/Documents/seo-audit-console.",
|
|
29
|
+
"isRequired": false,
|
|
30
|
+
"format": "string",
|
|
31
|
+
"isSecret": false
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "DATAFORSEO_USERNAME",
|
|
35
|
+
"description": "DataForSEO API username (optional, enables SERP/keyword/domain/market/recon checks).",
|
|
36
|
+
"isRequired": false,
|
|
37
|
+
"format": "string",
|
|
38
|
+
"isSecret": false
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "DATAFORSEO_PASSWORD",
|
|
42
|
+
"description": "DataForSEO API password (optional).",
|
|
43
|
+
"isRequired": false,
|
|
44
|
+
"format": "string",
|
|
45
|
+
"isSecret": true
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "DATAFORSEO_CACHE_DAYS",
|
|
49
|
+
"description": "TTL for the DataForSEO response cache, in days. Default 7.",
|
|
50
|
+
"isRequired": false,
|
|
51
|
+
"format": "string",
|
|
52
|
+
"isSecret": false
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "FIRECRAWL_API_KEY",
|
|
56
|
+
"description": "Firecrawl API key (optional). Lets content recon scrape competitor pages. Get one at https://firecrawl.link/2d1PLD8",
|
|
57
|
+
"isRequired": false,
|
|
58
|
+
"format": "string",
|
|
59
|
+
"isSecret": true
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "SUPADATA_API_KEY",
|
|
63
|
+
"description": "Supadata API key (optional). Lets content recon transcribe the ranking videos (YouTube/TikTok/X).",
|
|
64
|
+
"isRequired": false,
|
|
65
|
+
"format": "string",
|
|
66
|
+
"isSecret": true
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "MAJESTIC_API_KEY",
|
|
70
|
+
"description": "Majestic API key (optional). Enriches link_intersect with Trust Flow + Topical Trust Flow and re-sorts prospects by real authority.",
|
|
71
|
+
"isRequired": false,
|
|
72
|
+
"format": "string",
|
|
73
|
+
"isSecret": true
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "MAJESTIC_CACHE_DAYS",
|
|
77
|
+
"description": "TTL for the Majestic response cache, in days. Default 30.",
|
|
78
|
+
"isRequired": false,
|
|
79
|
+
"format": "string",
|
|
80
|
+
"isSecret": false
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|