@automatelab/ai-seo-mcp 0.1.3 → 0.3.4
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/LICENSE +21 -21
- package/README.md +14 -1
- package/action.yml +70 -0
- package/dist/cli/audit-cli.d.ts +3 -0
- package/dist/cli/audit-cli.d.ts.map +1 -0
- package/dist/cli/audit-cli.js +136 -0
- package/dist/cli/audit-cli.js.map +1 -0
- package/dist/index.js +246 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/cache.d.ts +12 -0
- package/dist/lib/cache.d.ts.map +1 -0
- package/dist/lib/cache.js +51 -0
- package/dist/lib/cache.js.map +1 -0
- package/dist/lib/config.js +1 -1
- package/dist/lib/fetch.d.ts +5 -0
- package/dist/lib/fetch.d.ts.map +1 -1
- package/dist/lib/fetch.js +42 -1
- package/dist/lib/fetch.js.map +1 -1
- package/dist/lib/headless.d.ts +13 -0
- package/dist/lib/headless.d.ts.map +1 -0
- package/dist/lib/headless.js +73 -0
- package/dist/lib/headless.js.map +1 -0
- package/dist/lib/scorecard-html.js +94 -94
- package/dist/tools/audit-page.d.ts +11 -0
- package/dist/tools/audit-page.d.ts.map +1 -1
- package/dist/tools/audit-page.js +49 -2
- package/dist/tools/audit-page.js.map +1 -1
- package/dist/tools/audit-schema.d.ts +2 -1
- package/dist/tools/audit-schema.d.ts.map +1 -1
- package/dist/tools/audit-schema.js +2 -1
- package/dist/tools/audit-schema.js.map +1 -1
- package/dist/tools/audit-site.d.ts +41 -0
- package/dist/tools/audit-site.d.ts.map +1 -0
- package/dist/tools/audit-site.js +113 -0
- package/dist/tools/audit-site.js.map +1 -0
- package/dist/tools/audit-sitemap.d.ts +66 -0
- package/dist/tools/audit-sitemap.d.ts.map +1 -0
- package/dist/tools/audit-sitemap.js +264 -0
- package/dist/tools/audit-sitemap.js.map +1 -0
- package/dist/tools/check-technical.d.ts +2 -1
- package/dist/tools/check-technical.d.ts.map +1 -1
- package/dist/tools/check-technical.js +2 -1
- package/dist/tools/check-technical.js.map +1 -1
- package/dist/tools/diff-pages.js +2 -2
- package/dist/tools/diff-pages.js.map +1 -1
- package/dist/tools/extract-entities.d.ts +8 -1
- package/dist/tools/extract-entities.d.ts.map +1 -1
- package/dist/tools/extract-entities.js +110 -3
- package/dist/tools/extract-entities.js.map +1 -1
- package/dist/tools/rewrite-for-aeo.js +28 -28
- package/dist/tools/rewrite-for-geo.js +28 -28
- package/dist/tools/save-audit-report.d.ts +22 -0
- package/dist/tools/save-audit-report.d.ts.map +1 -0
- package/dist/tools/save-audit-report.js +133 -0
- package/dist/tools/save-audit-report.js.map +1 -0
- package/dist/tools/test-citation.d.ts +51 -0
- package/dist/tools/test-citation.d.ts.map +1 -0
- package/dist/tools/test-citation.js +159 -0
- package/dist/tools/test-citation.js.map +1 -0
- package/package.json +10 -2
- package/src/lib/crawlers.json +6 -6
- package/src/lib/schema-types.json +56 -56
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 automatelab
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 automatelab
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Works inside Claude, Cursor, Windsurf, Codex, and any MCP client that speaks std
|
|
|
17
17
|
- **AI crawler access** - GPTBot, OAI-SearchBot, ClaudeBot, and PerplexityBot allowed or blocked in `robots.txt`
|
|
18
18
|
- **`llms.txt`** - present, spec-compliant, links alive
|
|
19
19
|
- **Structured answer extraction** - FAQ headings, BLUF paragraphs, answer-ready blocks
|
|
20
|
-
- **
|
|
20
|
+
- **[[schema]] completeness** - FAQPage, Article, Organization, Person; flags deprecated patterns
|
|
21
21
|
- **Entity clarity** - named entity density and `sameAs` coverage that help AI systems identify the subject
|
|
22
22
|
- **Citation formatting** - canonical URL hygiene, `og:url`, `hreflang`, noindex traps
|
|
23
23
|
- **Sitemap freshness** - `lastmod` signals that tell crawlers the page is current
|
|
@@ -88,6 +88,19 @@ Add to `%APPDATA%\Claude\claude_desktop_config.json` (Windows) or `~/Library/App
|
|
|
88
88
|
|
|
89
89
|
Restart Claude Desktop. Any MCP client that supports stdio transport works - same `command` / `args` pattern.
|
|
90
90
|
|
|
91
|
+
### Optional: headless rendering for SPAs
|
|
92
|
+
|
|
93
|
+
By default `audit_page` reads raw HTML — fast, but misses content on React/Vue/Angular SPAs. Pass `render: "headless"` to spin up Chromium and audit the rendered DOM (adds 3-10s per audit).
|
|
94
|
+
|
|
95
|
+
One-time install:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
npm install playwright-core
|
|
99
|
+
npx playwright install chromium
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Then call `audit_page` with `render: "headless"`. Use static for everything else — most marketing sites and docs render fine without it.
|
|
103
|
+
|
|
91
104
|
---
|
|
92
105
|
|
|
93
106
|
## Further reading
|
package/action.yml
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
name: "AI-SEO audit"
|
|
2
|
+
description: "Audits URLs for AI-citation readiness. Posts results as a workflow summary."
|
|
3
|
+
author: "automatelab.tech"
|
|
4
|
+
branding:
|
|
5
|
+
icon: "search"
|
|
6
|
+
color: "purple"
|
|
7
|
+
|
|
8
|
+
inputs:
|
|
9
|
+
urls:
|
|
10
|
+
description: "Comma-separated list of URLs to audit."
|
|
11
|
+
required: true
|
|
12
|
+
min-score:
|
|
13
|
+
description: "Minimum score (0-100) per URL. Build fails if any URL scores below this and fail-on-regression is true."
|
|
14
|
+
required: false
|
|
15
|
+
default: "70"
|
|
16
|
+
respect-robots:
|
|
17
|
+
description: "Honour robots.txt when fetching. Set false for staging or sites you own."
|
|
18
|
+
required: false
|
|
19
|
+
default: "true"
|
|
20
|
+
report-path:
|
|
21
|
+
description: "Optional path (relative to the workspace) to write a Markdown report for the first URL. Useful for uploading as an artifact or posting to PRs."
|
|
22
|
+
required: false
|
|
23
|
+
default: ""
|
|
24
|
+
fail-on-regression:
|
|
25
|
+
description: "Exit non-zero if any URL scores below min-score."
|
|
26
|
+
required: false
|
|
27
|
+
default: "true"
|
|
28
|
+
|
|
29
|
+
outputs:
|
|
30
|
+
min_score_observed:
|
|
31
|
+
description: "The lowest score observed across all audited URLs."
|
|
32
|
+
urls_audited:
|
|
33
|
+
description: "Number of URLs successfully audited."
|
|
34
|
+
report_path:
|
|
35
|
+
description: "Absolute path to the saved Markdown report, if report-path was provided."
|
|
36
|
+
|
|
37
|
+
runs:
|
|
38
|
+
using: "composite"
|
|
39
|
+
steps:
|
|
40
|
+
- name: Set up Node.js
|
|
41
|
+
uses: actions/setup-node@v4
|
|
42
|
+
with:
|
|
43
|
+
node-version: "20"
|
|
44
|
+
|
|
45
|
+
- name: Install @automatelab/ai-seo-mcp
|
|
46
|
+
shell: bash
|
|
47
|
+
run: npm install --no-save --no-audit --no-fund @automatelab/ai-seo-mcp@^0.3.0
|
|
48
|
+
|
|
49
|
+
- name: Run audit
|
|
50
|
+
id: audit
|
|
51
|
+
shell: bash
|
|
52
|
+
env:
|
|
53
|
+
URLS: ${{ inputs.urls }}
|
|
54
|
+
MIN_SCORE: ${{ inputs.min-score }}
|
|
55
|
+
RESPECT_ROBOTS: ${{ inputs.respect-robots }}
|
|
56
|
+
REPORT_PATH: ${{ inputs.report-path }}
|
|
57
|
+
FAIL_ON_REGRESSION: ${{ inputs.fail-on-regression }}
|
|
58
|
+
run: |
|
|
59
|
+
ARGS=(--urls "$URLS" --min-score "$MIN_SCORE" --respect-robots "$RESPECT_ROBOTS" --fail-on-regression "$FAIL_ON_REGRESSION")
|
|
60
|
+
if [ -n "$REPORT_PATH" ]; then
|
|
61
|
+
ARGS+=(--report-path "$REPORT_PATH")
|
|
62
|
+
fi
|
|
63
|
+
node ./node_modules/@automatelab/ai-seo-mcp/dist/cli/audit-cli.js "${ARGS[@]}" | tee "$RUNNER_TEMP/ai-seo-audit.log"
|
|
64
|
+
{
|
|
65
|
+
echo "## AI-SEO audit"
|
|
66
|
+
echo ""
|
|
67
|
+
echo '```'
|
|
68
|
+
cat "$RUNNER_TEMP/ai-seo-audit.log"
|
|
69
|
+
echo '```'
|
|
70
|
+
} >> "$GITHUB_STEP_SUMMARY"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-cli.d.ts","sourceRoot":"","sources":["../../src/cli/audit-cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// CLI wrapper around audit_page / audit_site, used by the ai-seo GitHub Action.
|
|
3
|
+
// Not part of the MCP protocol; reads flags and prints results to stdout/stderr.
|
|
4
|
+
//
|
|
5
|
+
// Usage:
|
|
6
|
+
// ai-seo-audit --urls "https://a.com,https://b.com/post" [--min-score 70] [--respect-robots true] [--report-path report.md]
|
|
7
|
+
//
|
|
8
|
+
// Exit code:
|
|
9
|
+
// 0 all audited URLs scored >= min-score
|
|
10
|
+
// 1 any URL scored < min-score (regression)
|
|
11
|
+
// 2 bad arguments / runtime error
|
|
12
|
+
import { appendFileSync } from "node:fs";
|
|
13
|
+
import { auditPage } from "../tools/audit-page.js";
|
|
14
|
+
import { saveAuditReport } from "../tools/save-audit-report.js";
|
|
15
|
+
function parseArgs(argv) {
|
|
16
|
+
const args = {
|
|
17
|
+
urls: [],
|
|
18
|
+
minScore: 70,
|
|
19
|
+
respectRobots: true,
|
|
20
|
+
reportPath: null,
|
|
21
|
+
failOnRegression: true,
|
|
22
|
+
};
|
|
23
|
+
for (let i = 0; i < argv.length; i++) {
|
|
24
|
+
const a = argv[i];
|
|
25
|
+
const next = () => {
|
|
26
|
+
const v = argv[i + 1];
|
|
27
|
+
if (v === undefined)
|
|
28
|
+
throw new Error(`flag ${a} requires a value`);
|
|
29
|
+
i++;
|
|
30
|
+
return v;
|
|
31
|
+
};
|
|
32
|
+
switch (a) {
|
|
33
|
+
case "--urls":
|
|
34
|
+
args.urls = next().split(",").map((s) => s.trim()).filter(Boolean);
|
|
35
|
+
break;
|
|
36
|
+
case "--min-score":
|
|
37
|
+
args.minScore = Number(next());
|
|
38
|
+
break;
|
|
39
|
+
case "--respect-robots":
|
|
40
|
+
args.respectRobots = next().toLowerCase() !== "false";
|
|
41
|
+
break;
|
|
42
|
+
case "--report-path":
|
|
43
|
+
args.reportPath = next();
|
|
44
|
+
break;
|
|
45
|
+
case "--fail-on-regression":
|
|
46
|
+
args.failOnRegression = next().toLowerCase() !== "false";
|
|
47
|
+
break;
|
|
48
|
+
case "--help":
|
|
49
|
+
case "-h":
|
|
50
|
+
console.log("Usage: ai-seo-audit --urls <csv> [--min-score N] [--respect-robots true|false] [--report-path FILE] [--fail-on-regression true|false]");
|
|
51
|
+
process.exit(0);
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
throw new Error(`unknown flag: ${a}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (args.urls.length === 0)
|
|
58
|
+
throw new Error("at least one URL is required via --urls");
|
|
59
|
+
if (!Number.isFinite(args.minScore))
|
|
60
|
+
throw new Error("--min-score must be a number");
|
|
61
|
+
return args;
|
|
62
|
+
}
|
|
63
|
+
function emitGithubOutput(key, value) {
|
|
64
|
+
const file = process.env["GITHUB_OUTPUT"];
|
|
65
|
+
if (!file)
|
|
66
|
+
return;
|
|
67
|
+
const safe = String(value).replace(/\r?\n/g, " ");
|
|
68
|
+
try {
|
|
69
|
+
appendFileSync(file, `${key}=${safe}\n`);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// best-effort; CI step will still see stdout/stderr
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function main() {
|
|
76
|
+
let args;
|
|
77
|
+
try {
|
|
78
|
+
args = parseArgs(process.argv.slice(2));
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
console.error("[ai-seo-audit] argument error:", err instanceof Error ? err.message : String(err));
|
|
82
|
+
process.exit(2);
|
|
83
|
+
}
|
|
84
|
+
const results = [];
|
|
85
|
+
let anyBelow = false;
|
|
86
|
+
let minObserved = 100;
|
|
87
|
+
for (const url of args.urls) {
|
|
88
|
+
try {
|
|
89
|
+
const result = await auditPage({
|
|
90
|
+
url,
|
|
91
|
+
include_raw_html: false,
|
|
92
|
+
respect_robots: args.respectRobots,
|
|
93
|
+
generate_report: false,
|
|
94
|
+
render: "static",
|
|
95
|
+
});
|
|
96
|
+
const below = result.score < args.minScore;
|
|
97
|
+
if (below)
|
|
98
|
+
anyBelow = true;
|
|
99
|
+
if (result.score < minObserved)
|
|
100
|
+
minObserved = result.score;
|
|
101
|
+
console.log(`${below ? "❌" : "✅"} ${url} — score=${result.score} grade=${result.grade} quality=${result.content_quality}`);
|
|
102
|
+
results.push(result);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
console.error(`[ai-seo-audit] failed for ${url}:`, err instanceof Error ? err.message : String(err));
|
|
106
|
+
anyBelow = true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (args.reportPath && results.length > 0) {
|
|
110
|
+
// Save the first result; users who pass multiple URLs typically want one report per run,
|
|
111
|
+
// and the action wires --report-path to a single file. Multi-URL reporting can be added if asked.
|
|
112
|
+
try {
|
|
113
|
+
const saved = await saveAuditReport({
|
|
114
|
+
audit_result: results[0],
|
|
115
|
+
path: args.reportPath,
|
|
116
|
+
overwrite: true,
|
|
117
|
+
});
|
|
118
|
+
console.log(`[ai-seo-audit] wrote ${saved.bytes_written}b -> ${saved.saved_to}`);
|
|
119
|
+
emitGithubOutput("report_path", saved.saved_to);
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
console.error("[ai-seo-audit] could not save report:", err instanceof Error ? err.message : String(err));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
emitGithubOutput("min_score_observed", minObserved);
|
|
126
|
+
emitGithubOutput("urls_audited", results.length);
|
|
127
|
+
if (anyBelow && args.failOnRegression) {
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
process.exit(0);
|
|
131
|
+
}
|
|
132
|
+
main().catch((err) => {
|
|
133
|
+
console.error("[ai-seo-audit] fatal:", err);
|
|
134
|
+
process.exit(2);
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=audit-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-cli.js","sourceRoot":"","sources":["../../src/cli/audit-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -17,11 +17,15 @@ import { scoreCitationWorthiness } from "./tools/score-citation-worthiness.js";
|
|
|
17
17
|
import { rewriteForAeo } from "./tools/rewrite-for-aeo.js";
|
|
18
18
|
import { rewriteForGeo } from "./tools/rewrite-for-geo.js";
|
|
19
19
|
import { extractEntities } from "./tools/extract-entities.js";
|
|
20
|
+
import { testCitation } from "./tools/test-citation.js";
|
|
20
21
|
import { diffPages, diffPagesInputSchema } from "./tools/diff-pages.js";
|
|
22
|
+
import { auditSite, auditSiteInputSchema } from "./tools/audit-site.js";
|
|
23
|
+
import { auditSitemap, auditSitemapInputSchema } from "./tools/audit-sitemap.js";
|
|
24
|
+
import { saveAuditReport, saveAuditReportInputSchema } from "./tools/save-audit-report.js";
|
|
21
25
|
import { ToolFetchError } from "./lib/fetch.js";
|
|
22
26
|
const server = new McpServer({
|
|
23
27
|
name: "@automatelab/ai-seo-mcp",
|
|
24
|
-
version: "0.
|
|
28
|
+
version: "0.3.4",
|
|
25
29
|
});
|
|
26
30
|
/** Serialize a ToolError to MCP error content. */
|
|
27
31
|
function toolError(err) {
|
|
@@ -50,6 +54,7 @@ server.tool("audit_page", [
|
|
|
50
54
|
"Full AI-SEO audit of a single URL: returns categorized findings (info/warning/error) with severity, fix instructions, and a 0-100 composite score plus per-dimension subscores.",
|
|
51
55
|
"Read-only. Fetches the URL once and runs every sub-audit (schema, robots, technical, sitemap, AI-Overview eligibility) against the response. No writes, no third-party APIs, no auth required, no rate limits beyond polite per-host throttling.",
|
|
52
56
|
"Deterministic, rule-based scoring; no LLM calls. Same URL + same input flags returns the same score.",
|
|
57
|
+
"Supports `render: \"static\" | \"headless\"`. Default `static` (fast, raw HTML only). Use `headless` for React/Vue/Angular SPAs — adds 3-10s and requires the optional `playwright-core` peer dep plus a one-time `npx playwright install chromium`.",
|
|
53
58
|
"When to use: the default entry point for `audit any page`. Use this instead of calling check_technical / audit_schema / check_robots / check_sitemap / score_ai_overview_eligibility individually unless you specifically need only one dimension - this tool composes all of them.",
|
|
54
59
|
].join("\n\n"), auditPageInputSchema.shape, async (input) => wrapHandler(() => auditPage(input)));
|
|
55
60
|
// --- Tool 2: audit_schema ---
|
|
@@ -271,9 +276,9 @@ server.tool("rewrite_for_geo", [
|
|
|
271
276
|
});
|
|
272
277
|
// --- Tool 13: extract_entities ---
|
|
273
278
|
server.tool("extract_entities", [
|
|
274
|
-
"Extract named entities, linked concepts, and sameAs graph nodes from a page's content and structured data. Combines body-text NER
|
|
279
|
+
"Extract named entities, linked concepts, and sameAs graph nodes from a page's content and structured data. Combines body-text NER with JSON-LD `@type` / `sameAs` walking.",
|
|
275
280
|
"Read-only when given `url` (one HTTP GET). Zero network when given `text`.",
|
|
276
|
-
"
|
|
281
|
+
"Primary path: MCP sampling - the host LLM does the NER and returns typed entities with sameAs URIs. Fallback path: deterministic regex-based extractor when sampling is unavailable. The result includes `mode: \"sampling\" | \"regex_fallback\"` so callers can tell which path ran.",
|
|
277
282
|
"When to use: building an entity map for schema generation, or auditing whether a page's entities match its target topic. To validate the JSON-LD itself, use `audit_schema`.",
|
|
278
283
|
"Either `url` or `text` must be provided.",
|
|
279
284
|
].join("\n\n"), {
|
|
@@ -291,13 +296,55 @@ server.tool("extract_entities", [
|
|
|
291
296
|
.optional()
|
|
292
297
|
.default(true)
|
|
293
298
|
.describe("If true (default), respect robots.txt when fetching `url`. Ignored when `text` is used."),
|
|
299
|
+
render: z
|
|
300
|
+
.enum(["static", "headless"])
|
|
301
|
+
.optional()
|
|
302
|
+
.default("static")
|
|
303
|
+
.describe("Rendering mode for `url`. `static` (default) reads raw HTML. `headless` runs Playwright Chromium to capture JS-rendered content (adds 3-10s; requires `playwright-core` + `npx playwright install chromium`). Ignored when `text` is used."),
|
|
304
|
+
}, async (input) => {
|
|
305
|
+
if (!input.url && !input.text) {
|
|
306
|
+
return toolError({ type: "invalid_url", message: "One of url or text is required" });
|
|
307
|
+
}
|
|
308
|
+
return wrapHandler(() => extractEntities(input, undefined, undefined, server));
|
|
309
|
+
});
|
|
310
|
+
// --- Tool 14: test_citation ---
|
|
311
|
+
server.tool("test_citation", [
|
|
312
|
+
"Simulate `would an AI engine cite this page for this query?`. The host LLM role-plays the chosen engine (chatgpt / claude / perplexity / google_ai_overviews / any), reads the page content, and returns a cite/no-cite verdict with the verbatim excerpt it would surface plus ranked improvements.",
|
|
313
|
+
"Read-only when given `url` (one HTTP GET). Zero network when given `text`.",
|
|
314
|
+
"Primary path uses MCP sampling. If the host doesn't support sampling, falls back to a deterministic heuristic derived from `score_citation_worthiness` (overall_score + per-engine subscore must both clear thresholds). The result includes `mode: \"sampling\" | \"static_heuristic\"` so callers can tell which path ran.",
|
|
315
|
+
"When to use: pre-publish gut-check for a specific query, or auditing whether existing content earns citation surface. Distinct from `score_citation_worthiness` (deterministic 0-100 score) and `audit_page` (whole-page rubric); this returns a binary cite/no-cite verdict tied to one query.",
|
|
316
|
+
"Either `url` or `text` must be provided. `target_query` is required.",
|
|
317
|
+
].join("\n\n"), {
|
|
318
|
+
url: z
|
|
319
|
+
.string()
|
|
320
|
+
.url()
|
|
321
|
+
.optional()
|
|
322
|
+
.describe("Public URL to fetch and test. Either this OR `text` is required."),
|
|
323
|
+
text: z
|
|
324
|
+
.string()
|
|
325
|
+
.optional()
|
|
326
|
+
.describe("Raw text/HTML to test directly. Either this OR `url` is required."),
|
|
327
|
+
target_query: z
|
|
328
|
+
.string()
|
|
329
|
+
.min(3)
|
|
330
|
+
.describe("The user query the engine is answering. Required. Example: `how to add JSON-LD to a Next.js app`."),
|
|
331
|
+
engine: z
|
|
332
|
+
.enum(["chatgpt", "claude", "perplexity", "google_ai_overviews", "any"])
|
|
333
|
+
.optional()
|
|
334
|
+
.default("any")
|
|
335
|
+
.describe("Which engine to simulate. `any` (default) uses a generic AI-search persona. Specific engines tune the cite criteria (e.g. perplexity favors statistic-dense excerpts; google_ai_overviews favors schema + freshness)."),
|
|
336
|
+
respect_robots: z
|
|
337
|
+
.boolean()
|
|
338
|
+
.optional()
|
|
339
|
+
.default(true)
|
|
340
|
+
.describe("If true (default), respect robots.txt when fetching `url`. Ignored when `text` is used."),
|
|
294
341
|
}, async (input) => {
|
|
295
342
|
if (!input.url && !input.text) {
|
|
296
343
|
return toolError({ type: "invalid_url", message: "One of url or text is required" });
|
|
297
344
|
}
|
|
298
|
-
return wrapHandler(() =>
|
|
345
|
+
return wrapHandler(() => testCitation(input, undefined, undefined, server));
|
|
299
346
|
});
|
|
300
|
-
// --- Tool
|
|
347
|
+
// --- Tool 15: diff_pages ---
|
|
301
348
|
server.tool("diff_pages", [
|
|
302
349
|
"Compare two URLs for AI citation-worthiness and return a structured breakdown of which page is more likely to be cited and why. Typical use: your page (url_a) vs a competitor's page (url_b).",
|
|
303
350
|
"Read-only. Runs audit_page on both URLs in parallel (2 HTTP fetches per URL), then diffs dimension_scores and findings. No new fetch logic beyond what audit_page already does.",
|
|
@@ -305,6 +352,200 @@ server.tool("diff_pages", [
|
|
|
305
352
|
"When to use: competitive gap analysis - understand exactly which dimensions (schema, structure, robots, entity density, freshness, technical, authority, sitemap) put a competitor ahead, and get prioritized fix_recommendations_for_a to close the gap. For a single-URL audit, use audit_page. For overall scoring of one page, use score_citation_worthiness.",
|
|
306
353
|
"Capped at 2 URLs per call. Heuristic verdict - does not claim to know what AI assistants actually cite; verdict matches audit_page's existing rubric.",
|
|
307
354
|
].join("\n\n"), diffPagesInputSchema.shape, async (input) => wrapHandler(() => diffPages(input)));
|
|
355
|
+
// --- Tool 16: audit_site ---
|
|
356
|
+
server.tool("audit_site", "Single-call site sweep: runs audit_page (homepage), check_robots, check_sitemap, and audit_schema in parallel and returns an overall grade plus top-5 fixes.", auditSiteInputSchema.shape, async (input) => wrapHandler(() => auditSite(input)));
|
|
357
|
+
// --- Tool 17: audit_sitemap ---
|
|
358
|
+
server.tool("audit_sitemap", [
|
|
359
|
+
"Site-wide content audit: discovers the sitemap, samples N URLs by deterministic uniform stride, runs audit_page on each, and returns score distribution + worst pages + most-common findings.",
|
|
360
|
+
"Read-only. One HTTP GET for sitemap discovery, optionally a few more for sitemap-index children, then `sample_size` × audit_page calls (each one HTTP GET + parsing). Polite throttling is enforced per host.",
|
|
361
|
+
"Deterministic — same domain + same sample_size returns the same set of URLs (uniform-stride sampling). Per-page scoring is rule-based; no LLM.",
|
|
362
|
+
"When to use: portfolio-level health check across a site (\"how does our content score on average?\"). Distinct from `audit_site` (homepage-only composite) and `check_sitemap` (validates sitemap.xml structure, not page content).",
|
|
363
|
+
].join("\n\n"), auditSitemapInputSchema.shape, async (input) => wrapHandler(() => auditSitemap(input)));
|
|
364
|
+
// --- Tool 18: save_audit_report ---
|
|
365
|
+
server.tool("save_audit_report", "Render an audit_page or audit_site result as a Markdown report and write it to a file under MCP_WORKSPACE_ROOT (defaults to cwd).", saveAuditReportInputSchema.shape, async (input) => wrapHandler(() => saveAuditReport(input)));
|
|
366
|
+
// --- Prompts: one-click entry points for AI-SEO workflows ---
|
|
367
|
+
// Surfaced by hosts like Claude Desktop as suggested actions. Lowers activation cost
|
|
368
|
+
// vs. asking users to pick among the 16-tool catalog.
|
|
369
|
+
server.prompt("audit_my_homepage", "Run a full AI-SEO audit of a site's homepage.", { domain: z.string().describe("The site domain, e.g. example.com or https://example.com") }, ({ domain }) => ({
|
|
370
|
+
messages: [
|
|
371
|
+
{
|
|
372
|
+
role: "user",
|
|
373
|
+
content: {
|
|
374
|
+
type: "text",
|
|
375
|
+
text: `Call the \`audit_site\` tool with domain="${domain}" and respect_robots=true. ` +
|
|
376
|
+
`When the result returns, summarize the overall_grade, the top_5_fixes (highest-impact first), ` +
|
|
377
|
+
`and the content_quality from the underlying audit_page. Recommend the single most leveraged fix first.`,
|
|
378
|
+
},
|
|
379
|
+
},
|
|
380
|
+
],
|
|
381
|
+
}));
|
|
382
|
+
server.prompt("find_citation_blockers", "Audit a URL and surface only the critical findings blocking AI citations.", { url: z.string().url().describe("The URL to audit") }, ({ url }) => ({
|
|
383
|
+
messages: [
|
|
384
|
+
{
|
|
385
|
+
role: "user",
|
|
386
|
+
content: {
|
|
387
|
+
type: "text",
|
|
388
|
+
text: `Call \`audit_page\` with url="${url}" and respect_robots=true. ` +
|
|
389
|
+
`From the result, filter findings to severity="critical" only. ` +
|
|
390
|
+
`Group them by category and present a prioritized fix list. ` +
|
|
391
|
+
`Ignore warnings and info-level findings for this pass.`,
|
|
392
|
+
},
|
|
393
|
+
},
|
|
394
|
+
],
|
|
395
|
+
}));
|
|
396
|
+
server.prompt("generate_llms_txt_for_domain", "Generate a valid llms.txt for a domain.", { domain: z.string().describe("The site domain, e.g. example.com") }, ({ domain }) => ({
|
|
397
|
+
messages: [
|
|
398
|
+
{
|
|
399
|
+
role: "user",
|
|
400
|
+
content: {
|
|
401
|
+
type: "text",
|
|
402
|
+
text: `Call \`generate_llms_txt\` with domain="${domain}", max_pages=50, include_full=false. ` +
|
|
403
|
+
`Return the generated llms.txt verbatim in a code block, then summarize how many pages were indexed.`,
|
|
404
|
+
},
|
|
405
|
+
},
|
|
406
|
+
],
|
|
407
|
+
}));
|
|
408
|
+
server.prompt("check_ai_crawler_access", "Report which AI training and search crawlers can access a domain.", { domain: z.string().describe("The site domain, e.g. example.com") }, ({ domain }) => ({
|
|
409
|
+
messages: [
|
|
410
|
+
{
|
|
411
|
+
role: "user",
|
|
412
|
+
content: {
|
|
413
|
+
type: "text",
|
|
414
|
+
text: `Call \`check_robots\` with domain="${domain}". ` +
|
|
415
|
+
`From the result, build a table grouped by training_crawlers / search_crawlers / user_triggered, ` +
|
|
416
|
+
`with one row per crawler and an allowed/blocked verdict. ` +
|
|
417
|
+
`Highlight any AI search crawlers that are blocked - those silently kill citation surface.`,
|
|
418
|
+
},
|
|
419
|
+
},
|
|
420
|
+
],
|
|
421
|
+
}));
|
|
422
|
+
server.prompt("score_my_citation_worthiness", "Score how citable a URL is for AI engines and recommend improvements.", {
|
|
423
|
+
url: z.string().url().describe("The URL to score"),
|
|
424
|
+
target_query: z.string().describe("The query the page should be cited for"),
|
|
425
|
+
}, ({ url, target_query }) => ({
|
|
426
|
+
messages: [
|
|
427
|
+
{
|
|
428
|
+
role: "user",
|
|
429
|
+
content: {
|
|
430
|
+
type: "text",
|
|
431
|
+
text: `Call \`score_citation_worthiness\` with url="${url}", target_query="${target_query}", respect_robots=true. ` +
|
|
432
|
+
`Present overall_score and per-engine scores (Perplexity, ChatGPT, Google AI Overviews, Claude). ` +
|
|
433
|
+
`Then suggest the 3 most impactful structural changes (BLUF opening, FAQ blocks, entity density) to lift the lowest score.`,
|
|
434
|
+
},
|
|
435
|
+
},
|
|
436
|
+
],
|
|
437
|
+
}));
|
|
438
|
+
// --- Resources: browsable reference data ---
|
|
439
|
+
// Hosts can read these on demand to ground answers about AI-SEO without a tool call.
|
|
440
|
+
const SIGNALS_DOC = `# AI-citation signals
|
|
441
|
+
|
|
442
|
+
The 13 signals AI assistants weigh when deciding what to cite.
|
|
443
|
+
|
|
444
|
+
## 1. JSON-LD structured data
|
|
445
|
+
Article / FAQPage / HowTo schema. With Person/Organization author nodes carrying \`sameAs\` links.
|
|
446
|
+
Example:
|
|
447
|
+
\`\`\`json
|
|
448
|
+
{"@context":"https://schema.org","@type":"Article","author":{"@type":"Person","name":"Jane","sameAs":["https://linkedin.com/in/jane"]}}
|
|
449
|
+
\`\`\`
|
|
450
|
+
|
|
451
|
+
## 2. FAQ structure
|
|
452
|
+
H3 headings ending in "?" with concise answer paragraphs. FAQPage JSON-LD doubles the signal.
|
|
453
|
+
|
|
454
|
+
## 3. BLUF (bottom line up front)
|
|
455
|
+
First 1-2 sentences answer the query directly. No throat-clearing.
|
|
456
|
+
|
|
457
|
+
## 4. Statistic density
|
|
458
|
+
2-3+ specific numbers per 500 words. Source-attributed where possible.
|
|
459
|
+
|
|
460
|
+
## 5. Named entities
|
|
461
|
+
People, products, places, organizations - named explicitly (not "this product" / "they").
|
|
462
|
+
|
|
463
|
+
## 6. Entity links
|
|
464
|
+
External links to authoritative domains: wikipedia.org, .gov, linkedin.com, crunchbase.com.
|
|
465
|
+
|
|
466
|
+
## 7. Comparison tables
|
|
467
|
+
Side-by-side product/option tables. AI engines extract these directly.
|
|
468
|
+
|
|
469
|
+
## 8. Ordered lists
|
|
470
|
+
Numbered step-by-step. Especially "how to X" content.
|
|
471
|
+
|
|
472
|
+
## 9. Schema author identity
|
|
473
|
+
Author as a Person node with profile URL, not a plain string.
|
|
474
|
+
|
|
475
|
+
## 10. Freshness
|
|
476
|
+
\`dateModified\` within 90 days. Stale content is downranked aggressively.
|
|
477
|
+
|
|
478
|
+
## 11. Canonical hygiene
|
|
479
|
+
Self-referencing canonical, no trailing-slash redirects, \`og:url\` matches canonical.
|
|
480
|
+
|
|
481
|
+
## 12. AI crawler allowance
|
|
482
|
+
robots.txt allows OAI-SearchBot, PerplexityBot, Claude-SearchBot. Blocking training-only crawlers (GPTBot, ClaudeBot) is fine; blocking search crawlers kills citation surface.
|
|
483
|
+
|
|
484
|
+
## 13. Sitemap freshness
|
|
485
|
+
XML sitemap present, lastmod >80% coverage, listed in robots.txt.
|
|
486
|
+
|
|
487
|
+
Use \`audit_page\` to score a URL across all 13 signals at once.
|
|
488
|
+
`;
|
|
489
|
+
const CRAWLERS_DOC = `# AI crawlers reference
|
|
490
|
+
|
|
491
|
+
The user-agents AI assistants use, what they do, and how to allow / block them in robots.txt.
|
|
492
|
+
|
|
493
|
+
## Training crawlers
|
|
494
|
+
These scrape content to train future model weights. Blocking them does not affect live AI citations.
|
|
495
|
+
|
|
496
|
+
- **GPTBot** - OpenAI training crawler. \`User-agent: GPTBot\`
|
|
497
|
+
- **ClaudeBot** - Anthropic training crawler. \`User-agent: ClaudeBot\`
|
|
498
|
+
- **CCBot** - Common Crawl. Powers many downstream models. \`User-agent: CCBot\`
|
|
499
|
+
- **Meta-ExternalAgent** - Meta training crawler. \`User-agent: Meta-ExternalAgent\`
|
|
500
|
+
- **Amazonbot** - Amazon training crawler. \`User-agent: Amazonbot\`
|
|
501
|
+
|
|
502
|
+
## Search crawlers
|
|
503
|
+
These power live AI search / answer engines. Blocking these directly suppresses your visibility in AI answers.
|
|
504
|
+
|
|
505
|
+
- **OAI-SearchBot** - ChatGPT search index. \`User-agent: OAI-SearchBot\`
|
|
506
|
+
- **Claude-SearchBot** - Claude live search. \`User-agent: Claude-SearchBot\`
|
|
507
|
+
- **PerplexityBot** - Perplexity search index. \`User-agent: PerplexityBot\`
|
|
508
|
+
- **Bingbot** - Bing, also powers Copilot. \`User-agent: Bingbot\`
|
|
509
|
+
- **DuckAssistBot** - DuckDuckGo AI assist. \`User-agent: DuckAssistBot\`
|
|
510
|
+
|
|
511
|
+
## User-triggered fetchers
|
|
512
|
+
On-demand fetches when a user shares a URL in chat. Blocking these breaks user-pasted links.
|
|
513
|
+
|
|
514
|
+
- **ChatGPT-User** - ChatGPT browsing on user request. \`User-agent: ChatGPT-User\`
|
|
515
|
+
- **Claude-User** - Claude browsing on user request. \`User-agent: Claude-User\`
|
|
516
|
+
- **Google-Agent** - Google Search agent fetches. \`User-agent: Google-Agent\`
|
|
517
|
+
|
|
518
|
+
## Robots-token-only signals
|
|
519
|
+
These are not crawlers - they are tokens that modify whether the existing Googlebot / Applebot crawl is used for AI grounding.
|
|
520
|
+
|
|
521
|
+
- **Google-Extended** - opts out of Google AI training/grounding. \`User-agent: Google-Extended\`
|
|
522
|
+
- **Applebot-Extended** - opts out of Apple AI training. \`User-agent: Applebot-Extended\`
|
|
523
|
+
|
|
524
|
+
## Recommended posture
|
|
525
|
+
For most sites that want AI citation surface:
|
|
526
|
+
\`\`\`
|
|
527
|
+
User-agent: GPTBot
|
|
528
|
+
Disallow: /
|
|
529
|
+
|
|
530
|
+
User-agent: ClaudeBot
|
|
531
|
+
Disallow: /
|
|
532
|
+
|
|
533
|
+
User-agent: CCBot
|
|
534
|
+
Disallow: /
|
|
535
|
+
|
|
536
|
+
User-agent: *
|
|
537
|
+
Allow: /
|
|
538
|
+
\`\`\`
|
|
539
|
+
(Blocks training, allows everything else - including search crawlers.)
|
|
540
|
+
|
|
541
|
+
Use \`check_robots\` to see your current posture per crawler.
|
|
542
|
+
`;
|
|
543
|
+
server.resource("ai-citation-signals", "ai-citation://signals", { mimeType: "text/markdown", description: "The 13 signals AI assistants use to decide what to cite, with examples." }, async (uri) => ({
|
|
544
|
+
contents: [{ uri: uri.href, mimeType: "text/markdown", text: SIGNALS_DOC }],
|
|
545
|
+
}));
|
|
546
|
+
server.resource("ai-crawlers", "ai-citation://crawlers", { mimeType: "text/markdown", description: "Catalog of AI training, search, and user-triggered crawlers with robots.txt syntax." }, async (uri) => ({
|
|
547
|
+
contents: [{ uri: uri.href, mimeType: "text/markdown", text: CRAWLERS_DOC }],
|
|
548
|
+
}));
|
|
308
549
|
// --- Start server ---
|
|
309
550
|
async function main() {
|
|
310
551
|
const transport = new StdioServerTransport();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|