@automatelab/ai-seo-mcp 0.1.2 → 0.3.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 +61 -141
- package/action.yml +70 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/scorecard-html.d.ts +21 -0
- package/dist/lib/scorecard-html.d.ts.map +1 -0
- package/dist/lib/scorecard-html.js +167 -0
- package/dist/lib/scorecard-html.js.map +1 -0
- package/dist/tools/audit-page.d.ts +15 -0
- package/dist/tools/audit-page.d.ts.map +1 -1
- package/dist/tools/audit-page.js +40 -0
- package/dist/tools/audit-page.js.map +1 -1
- package/dist/tools/diff-pages.d.ts +58 -0
- package/dist/tools/diff-pages.d.ts.map +1 -0
- package/dist/tools/diff-pages.js +120 -0
- package/dist/tools/diff-pages.js.map +1 -0
- package/package.json +8 -6
package/README.md
CHANGED
|
@@ -1,36 +1,67 @@
|
|
|
1
1
|
# @automatelab/ai-seo-mcp
|
|
2
2
|
|
|
3
|
+
> AI Citation Toolkit for the Model Context Protocol
|
|
4
|
+
|
|
3
5
|
[](https://www.npmjs.com/package/@automatelab/ai-seo-mcp)
|
|
4
6
|
[](./LICENSE)
|
|
5
7
|
[](https://nodejs.org)
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
**Audit why AI systems do or do not cite your pages.** MCP server. No API keys.
|
|
8
10
|
|
|
9
|
-
Works
|
|
11
|
+
Works inside Claude, Cursor, Windsurf, Codex, and any MCP client that speaks stdio.
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
---
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
## What it checks
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
- **AI crawler access** - GPTBot, OAI-SearchBot, ClaudeBot, and PerplexityBot allowed or blocked in `robots.txt`
|
|
18
|
+
- **`llms.txt`** - present, spec-compliant, links alive
|
|
19
|
+
- **Structured answer extraction** - FAQ headings, BLUF paragraphs, answer-ready blocks
|
|
20
|
+
- **Schema completeness** - FAQPage, Article, Organization, Person; flags deprecated patterns
|
|
21
|
+
- **Entity clarity** - named entity density and `sameAs` coverage that help AI systems identify the subject
|
|
22
|
+
- **Citation formatting** - canonical URL hygiene, `og:url`, `hreflang`, noindex traps
|
|
23
|
+
- **Sitemap freshness** - `lastmod` signals that tell crawlers the page is current
|
|
16
24
|
|
|
17
|
-
|
|
25
|
+
---
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
## Run an audit. Get a list of citation-blockers, ranked.
|
|
20
28
|
|
|
21
|
-
|
|
29
|
+
> **You:** Run an AI-SEO audit on `https://automatelab.tech/how-to-connect-zapier-to-notion`.
|
|
22
30
|
|
|
23
|
-
|
|
31
|
+
Result (truncated):
|
|
24
32
|
|
|
25
|
-
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"url": "https://automatelab.tech/how-to-connect-zapier-to-notion",
|
|
36
|
+
"score": 61,
|
|
37
|
+
"grade": "C",
|
|
38
|
+
"dimension_scores": {
|
|
39
|
+
"schema": 45, "technical": 80, "structure": 40,
|
|
40
|
+
"robots": 90, "freshness": 85, "authority": 40,
|
|
41
|
+
"entity_density": 21, "sitemap": 100
|
|
42
|
+
},
|
|
43
|
+
"findings": [
|
|
44
|
+
{
|
|
45
|
+
"severity": "critical",
|
|
46
|
+
"category": "structure",
|
|
47
|
+
"message": "No FAQ structure found (no FAQPage schema or H3 question headings).",
|
|
48
|
+
"fix": "Add FAQ H3 headings ending in '?' with answer paragraphs, and a FAQPage JSON-LD block.",
|
|
49
|
+
"estimated_impact": "high"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"severity": "warning",
|
|
53
|
+
"category": "authority",
|
|
54
|
+
"message": "Low authority signals - missing Organization or author Person schema.",
|
|
55
|
+
"fix": "Add Organization JSON-LD and Article.author as a Person node with sameAs links.",
|
|
56
|
+
"estimated_impact": "high"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
```
|
|
26
61
|
|
|
27
|
-
|
|
28
|
-
- What schema is missing, malformed, or deprecated?
|
|
29
|
-
- Are GPTBot, ClaudeBot, OAI-SearchBot, and PerplexityBot allowed by `robots.txt`?
|
|
30
|
-
- Does the page have a chance at the Answer Engine slot for a given query?
|
|
31
|
-
- Rewrite this passage into a citation-ready answer block.
|
|
62
|
+
Each finding names the exact fix. No opaque scores, no guesswork.
|
|
32
63
|
|
|
33
|
-
|
|
64
|
+
---
|
|
34
65
|
|
|
35
66
|
## Install
|
|
36
67
|
|
|
@@ -38,11 +69,11 @@ This MCP gives any AI client a toolkit to inspect a URL and answer questions lik
|
|
|
38
69
|
npx -y @automatelab/ai-seo-mcp
|
|
39
70
|
```
|
|
40
71
|
|
|
41
|
-
Requires Node 20 or later.
|
|
72
|
+
Requires Node 20 or later.
|
|
42
73
|
|
|
43
74
|
### Claude Desktop
|
|
44
75
|
|
|
45
|
-
Add to `%APPDATA%\Claude\claude_desktop_config.json`
|
|
76
|
+
Add to `%APPDATA%\Claude\claude_desktop_config.json` (Windows) or `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
|
|
46
77
|
|
|
47
78
|
```json
|
|
48
79
|
{
|
|
@@ -55,57 +86,18 @@ Add to `%APPDATA%\Claude\claude_desktop_config.json` on Windows, or `~/Library/A
|
|
|
55
86
|
}
|
|
56
87
|
```
|
|
57
88
|
|
|
58
|
-
Restart Claude Desktop.
|
|
59
|
-
|
|
60
|
-
### Cursor
|
|
61
|
-
|
|
62
|
-
Add to `.cursor/mcp.json` in the project root or `~/.cursor/mcp.json` globally:
|
|
63
|
-
|
|
64
|
-
```json
|
|
65
|
-
{
|
|
66
|
-
"mcpServers": {
|
|
67
|
-
"ai-seo": {
|
|
68
|
-
"command": "npx",
|
|
69
|
-
"args": ["-y", "@automatelab/ai-seo-mcp"]
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Cline
|
|
76
|
-
|
|
77
|
-
Add to VS Code settings or `.cline/mcp_settings.json`:
|
|
78
|
-
|
|
79
|
-
```json
|
|
80
|
-
{
|
|
81
|
-
"mcpServers": {
|
|
82
|
-
"ai-seo": {
|
|
83
|
-
"command": "npx",
|
|
84
|
-
"args": ["-y", "@automatelab/ai-seo-mcp"],
|
|
85
|
-
"disabled": false,
|
|
86
|
-
"autoApprove": []
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### Windsurf, Continue, VS Code Copilot
|
|
93
|
-
|
|
94
|
-
Use the same `command` / `args` pattern. Any MCP client that supports stdio transport works.
|
|
89
|
+
Restart Claude Desktop. Any MCP client that supports stdio transport works - same `command` / `args` pattern.
|
|
95
90
|
|
|
96
|
-
|
|
91
|
+
---
|
|
97
92
|
|
|
98
|
-
|
|
93
|
+
## Further reading
|
|
99
94
|
|
|
100
|
-
-
|
|
101
|
-
- *"Check which AI crawlers my site allows in `robots.txt` for `https://yourdomain.com`."* - calls `check_robots` and lists per-crawler allow/disallow.
|
|
102
|
-
- *"Score how citation-worthy this blog post is for Perplexity and ChatGPT: `https://...`."* - calls `score_citation_worthiness`.
|
|
103
|
-
- *"Generate an `llms.txt` for `https://yourdomain.com` from its sitemap."* - calls `generate_llms_txt`.
|
|
104
|
-
- *"Rewrite this passage for Answer Engine Optimization: [paste passage]."* - calls `rewrite_for_aeo` (uses MCP sampling if your client supports it).
|
|
95
|
+
- [automatelab.tech](https://automatelab.tech/products/mcp/ai-seo/) - teardowns and case studies
|
|
105
96
|
|
|
106
|
-
|
|
97
|
+
---
|
|
107
98
|
|
|
108
|
-
|
|
99
|
+
<details>
|
|
100
|
+
<summary>All 14 tools</summary>
|
|
109
101
|
|
|
110
102
|
| Tool | Purpose |
|
|
111
103
|
|------|---------|
|
|
@@ -122,81 +114,13 @@ No API keys. No accounts. The first call may take a few seconds while `npx` down
|
|
|
122
114
|
| `rewrite_for_aeo` | Rewrite content for Answer Engine Optimization (BLUF structure, FAQ format, schema additions). |
|
|
123
115
|
| `rewrite_for_geo` | Rewrite content for Generative Engine Optimization (entity definitions, comparison tables, synthesis-ready structure). |
|
|
124
116
|
| `extract_entities` | Extract named entities, `sameAs` links, and citation-density score from a page's content and structured data. |
|
|
117
|
+
| `diff_pages` | Compare two URLs for AI citation-worthiness: side-by-side dimension scores, gap analysis, and prioritized fix recommendations for url_a. |
|
|
125
118
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
In Claude Desktop, after wiring the server above:
|
|
129
|
-
|
|
130
|
-
> **You:** Run an AI-SEO audit on `https://automatelab.tech/how-to-connect-zapier-to-notion`.
|
|
131
|
-
|
|
132
|
-
Claude calls `audit_page`. Result (truncated):
|
|
133
|
-
|
|
134
|
-
```json
|
|
135
|
-
{
|
|
136
|
-
"url": "https://automatelab.tech/how-to-connect-zapier-to-notion",
|
|
137
|
-
"fetched_at": "2026-05-15T10:32:00Z",
|
|
138
|
-
"score": 61,
|
|
139
|
-
"grade": "C",
|
|
140
|
-
"dimension_scores": {
|
|
141
|
-
"schema": 45, "technical": 80, "structure": 40,
|
|
142
|
-
"robots": 90, "freshness": 85, "authority": 40,
|
|
143
|
-
"entity_density": 21, "sitemap": 100
|
|
144
|
-
},
|
|
145
|
-
"findings": [
|
|
146
|
-
{
|
|
147
|
-
"severity": "critical",
|
|
148
|
-
"category": "structure",
|
|
149
|
-
"where": "<body>",
|
|
150
|
-
"message": "No FAQ structure found (no FAQPage schema or H3 question headings).",
|
|
151
|
-
"fix": "Add FAQ H3 headings ending in '?' with answer paragraphs, and a FAQPage JSON-LD block.",
|
|
152
|
-
"estimated_impact": "high"
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
"severity": "warning",
|
|
156
|
-
"category": "authority",
|
|
157
|
-
"where": "page-level",
|
|
158
|
-
"message": "Low authority signals - missing Organization or author Person schema.",
|
|
159
|
-
"fix": "Add Organization JSON-LD and Article.author as a Person node with sameAs links.",
|
|
160
|
-
"estimated_impact": "high"
|
|
161
|
-
}
|
|
162
|
-
]
|
|
163
|
-
}
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
Claude then summarizes the findings and proposes fixes. For rewrite tools, the host model (Claude / GPT / etc.) does the rewriting via MCP sampling.
|
|
167
|
-
|
|
168
|
-
## Environment variables
|
|
169
|
-
|
|
170
|
-
All variables are optional. Set them in the MCP client config under `"env"`.
|
|
171
|
-
|
|
172
|
-
| Variable | Default | Description |
|
|
173
|
-
|----------|---------|-------------|
|
|
174
|
-
| `USER_AGENT` | `automatelab-ai-seo-mcp/0.1.0 (+https://github.com/AutomateLab-tech/ai-seo)` | HTTP User-Agent on all fetches. |
|
|
175
|
-
| `FETCH_TIMEOUT_MS` | `15000` | Per-request timeout in milliseconds. |
|
|
176
|
-
| `MAX_BYTES` | `5242880` | Maximum response body size in bytes (5 MB). |
|
|
177
|
-
| `RESPECT_ROBOTS` | `true` | Global default for robots.txt compliance. Set `"false"` to disable. |
|
|
178
|
-
| `INTER_REQUEST_DELAY_MS` | `1500` | Minimum delay between requests to the same host within a tool call. |
|
|
119
|
+
Environment variables: see [ENV.md](./ENV.md).
|
|
179
120
|
|
|
180
|
-
|
|
121
|
+
</details>
|
|
181
122
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
- Respects `robots.txt` for the configured User-Agent (override with `RESPECT_ROBOTS=false`).
|
|
185
|
-
- Identifies itself honestly via `User-Agent` (no spoofing as a browser).
|
|
186
|
-
- Sleeps `INTER_REQUEST_DELAY_MS` between requests to the same host within a tool call.
|
|
187
|
-
- Times out at `FETCH_TIMEOUT_MS` per request.
|
|
188
|
-
- Caps response body at `MAX_BYTES` and refuses non-HTML / non-XML payloads where inappropriate.
|
|
189
|
-
|
|
190
|
-
This MCP is not a scraper. It audits public pages the way Lighthouse or Screaming Frog do, one URL at a time.
|
|
191
|
-
|
|
192
|
-
## What it does not do
|
|
193
|
-
|
|
194
|
-
- No JavaScript-rendered scraping. Only static HTML is fetched. SPAs that render content client-side will produce incomplete audits.
|
|
195
|
-
- No paid-API integrations (Search Console, Ahrefs, Semrush). Bring those signals manually if you need them.
|
|
196
|
-
- No site-wide crawling. Tools that need multiple URLs read from the public sitemap.
|
|
197
|
-
- No live SERP checks. AI Overview eligibility is a deterministic heuristic, not a guarantee.
|
|
198
|
-
- English-language tuning. Technical checks (schema, robots, canonical) are language-agnostic; content scoring assumes English.
|
|
199
|
-
- Entity extraction is regex-based (title-case phrases, acronyms, CamelCase). False positives and misses are expected on v0.1.
|
|
123
|
+
---
|
|
200
124
|
|
|
201
125
|
## Contributing
|
|
202
126
|
|
|
@@ -210,8 +134,4 @@ To report a vulnerability, see [SECURITY.md](./SECURITY.md).
|
|
|
210
134
|
|
|
211
135
|
MIT - see [LICENSE](./LICENSE).
|
|
212
136
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
Built by [automatelab.tech](https://automatelab.tech/products/mcp/ai-seo/)
|
|
216
|
-
|
|
217
|
-
Schema.org, `robots.txt`, and `llms.txt` are open standards. Crawler user-agent data is sourced from Anthropic, OpenAI, Google, Perplexity, and Cloudflare documentation. The MCP itself is built on the [Model Context Protocol](https://modelcontextprotocol.io) by Anthropic.
|
|
137
|
+
Built by [automatelab.tech](https://automatelab.tech)
|
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"
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,7 @@ 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 { diffPages, diffPagesInputSchema } from "./tools/diff-pages.js";
|
|
20
21
|
import { ToolFetchError } from "./lib/fetch.js";
|
|
21
22
|
const server = new McpServer({
|
|
22
23
|
name: "@automatelab/ai-seo-mcp",
|
|
@@ -296,6 +297,14 @@ server.tool("extract_entities", [
|
|
|
296
297
|
}
|
|
297
298
|
return wrapHandler(() => extractEntities(input));
|
|
298
299
|
});
|
|
300
|
+
// --- Tool 14: diff_pages ---
|
|
301
|
+
server.tool("diff_pages", [
|
|
302
|
+
"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
|
+
"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.",
|
|
304
|
+
"Deterministic, rule-based; no LLM calls. Same two URLs return the same comparison on repeated runs.",
|
|
305
|
+
"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
|
+
"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
|
+
].join("\n\n"), diffPagesInputSchema.shape, async (input) => wrapHandler(() => diffPages(input)));
|
|
299
308
|
// --- Start server ---
|
|
300
309
|
async function main() {
|
|
301
310
|
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":";AACA,kCAAkC;AAClC,yEAAyE;AAEzE,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,qCAAqC,EAAE,MAAM,0CAA0C,CAAC;AAC7H,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// All values are read once at server startup.
|
|
3
3
|
export const POLITE_FETCH = {
|
|
4
4
|
USER_AGENT: process.env["USER_AGENT"] ??
|
|
5
|
-
"automatelab-ai-seo-mcp/0.1.
|
|
5
|
+
"automatelab-ai-seo-mcp/0.1.3 (+https://github.com/AutomateLab-tech/ai-seo-mcp)",
|
|
6
6
|
TIMEOUT_MS: Number(process.env["FETCH_TIMEOUT_MS"] ?? 15_000),
|
|
7
7
|
MAX_BYTES: Number(process.env["MAX_BYTES"] ?? 5 * 1024 * 1024), // 5MB
|
|
8
8
|
INTER_REQUEST_DELAY_MS: Number(process.env["INTER_REQUEST_DELAY_MS"] ?? 1_500),
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,8CAA8C;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACzB,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,8CAA8C;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACzB,gFAAgF;IAClF,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC;IAC7D,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,MAAM;IACtE,sBAAsB,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC;IAC9E,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,OAAO;CACjD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CitationVerdict } from "../tools/audit-page.js";
|
|
2
|
+
interface ScorecardInput {
|
|
3
|
+
url: string;
|
|
4
|
+
fetched_at: string;
|
|
5
|
+
score: number;
|
|
6
|
+
grade: "A" | "B" | "C" | "D" | "F";
|
|
7
|
+
citation_verdict: CitationVerdict;
|
|
8
|
+
dimension_scores: {
|
|
9
|
+
schema: number;
|
|
10
|
+
robots: number;
|
|
11
|
+
technical: number;
|
|
12
|
+
freshness: number;
|
|
13
|
+
structure: number;
|
|
14
|
+
authority: number;
|
|
15
|
+
entity_density: number;
|
|
16
|
+
sitemap: number;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export declare function renderScorecardHtml(input: ScorecardInput): string;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=scorecard-html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scorecard-html.d.ts","sourceRoot":"","sources":["../../src/lib/scorecard-html.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACnC,gBAAgB,EAAE,eAAe,CAAC;IAClC,gBAAgB,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAyCD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAgIjE"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
// Render a standalone HTML scorecard from an audit_page result.
|
|
2
|
+
// No external dependencies - inline CSS only.
|
|
3
|
+
const DIMENSION_LABELS = {
|
|
4
|
+
schema: "Schema",
|
|
5
|
+
technical: "Technical",
|
|
6
|
+
structure: "Structure",
|
|
7
|
+
robots: "Robots",
|
|
8
|
+
freshness: "Freshness",
|
|
9
|
+
authority: "Authority",
|
|
10
|
+
entity_density: "Entity Density",
|
|
11
|
+
sitemap: "Sitemap",
|
|
12
|
+
};
|
|
13
|
+
function escHtml(str) {
|
|
14
|
+
return str
|
|
15
|
+
.replace(/&/g, "&")
|
|
16
|
+
.replace(/</g, "<")
|
|
17
|
+
.replace(/>/g, ">")
|
|
18
|
+
.replace(/"/g, """);
|
|
19
|
+
}
|
|
20
|
+
function barColor(score) {
|
|
21
|
+
if (score >= 75)
|
|
22
|
+
return "#22c55e";
|
|
23
|
+
if (score >= 50)
|
|
24
|
+
return "#f59e0b";
|
|
25
|
+
return "#ef4444";
|
|
26
|
+
}
|
|
27
|
+
function verdictColor(verdict) {
|
|
28
|
+
if (verdict === "likely")
|
|
29
|
+
return "#22c55e";
|
|
30
|
+
if (verdict === "marginal")
|
|
31
|
+
return "#f59e0b";
|
|
32
|
+
return "#ef4444";
|
|
33
|
+
}
|
|
34
|
+
function gradeColor(grade) {
|
|
35
|
+
if (grade === "A")
|
|
36
|
+
return "#22c55e";
|
|
37
|
+
if (grade === "B")
|
|
38
|
+
return "#84cc16";
|
|
39
|
+
if (grade === "C")
|
|
40
|
+
return "#f59e0b";
|
|
41
|
+
if (grade === "D")
|
|
42
|
+
return "#f97316";
|
|
43
|
+
return "#ef4444";
|
|
44
|
+
}
|
|
45
|
+
export function renderScorecardHtml(input) {
|
|
46
|
+
const { url, fetched_at, score, grade, citation_verdict, dimension_scores } = input;
|
|
47
|
+
const formattedDate = new Date(fetched_at).toUTCString();
|
|
48
|
+
const verdictLabel = citation_verdict.will_ai_cite === "likely"
|
|
49
|
+
? "Likely to be cited"
|
|
50
|
+
: citation_verdict.will_ai_cite === "marginal"
|
|
51
|
+
? "Marginally citable"
|
|
52
|
+
: "Unlikely to be cited";
|
|
53
|
+
const dimensionRows = Object.entries(dimension_scores)
|
|
54
|
+
.map(([key, val]) => {
|
|
55
|
+
const label = DIMENSION_LABELS[key] ?? key;
|
|
56
|
+
const color = barColor(val);
|
|
57
|
+
return `
|
|
58
|
+
<div class="dim-row">
|
|
59
|
+
<span class="dim-label">${escHtml(label)}</span>
|
|
60
|
+
<div class="bar-track">
|
|
61
|
+
<div class="bar-fill" style="width:${val}%;background:${color};"></div>
|
|
62
|
+
</div>
|
|
63
|
+
<span class="dim-score">${val}</span>
|
|
64
|
+
</div>`;
|
|
65
|
+
})
|
|
66
|
+
.join("");
|
|
67
|
+
const blockerItems = citation_verdict.top_3_blockers
|
|
68
|
+
.map((b, i) => {
|
|
69
|
+
const impactBadge = b.estimated_impact
|
|
70
|
+
? `<span class="badge badge-${b.estimated_impact}">${escHtml(b.estimated_impact)}</span>`
|
|
71
|
+
: "";
|
|
72
|
+
return `
|
|
73
|
+
<div class="blocker">
|
|
74
|
+
<div class="blocker-header">
|
|
75
|
+
<span class="blocker-num">${i + 1}</span>
|
|
76
|
+
<span class="blocker-cat">${escHtml(b.category)}</span>
|
|
77
|
+
${impactBadge}
|
|
78
|
+
</div>
|
|
79
|
+
<p class="blocker-msg">${escHtml(b.message)}</p>
|
|
80
|
+
<p class="blocker-fix"><strong>Fix:</strong> ${escHtml(b.fix)}</p>
|
|
81
|
+
</div>`;
|
|
82
|
+
})
|
|
83
|
+
.join("");
|
|
84
|
+
const noBlockers = citation_verdict.top_3_blockers.length === 0
|
|
85
|
+
? `<p class="no-blockers">No critical blockers found.</p>`
|
|
86
|
+
: "";
|
|
87
|
+
return `<!DOCTYPE html>
|
|
88
|
+
<html lang="en">
|
|
89
|
+
<head>
|
|
90
|
+
<meta charset="UTF-8">
|
|
91
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
92
|
+
<title>AI-SEO Scorecard - ${escHtml(url)}</title>
|
|
93
|
+
<style>
|
|
94
|
+
*{box-sizing:border-box;margin:0;padding:0}
|
|
95
|
+
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;background:#0f172a;color:#e2e8f0;min-height:100vh;padding:2rem 1rem}
|
|
96
|
+
.card{max-width:700px;margin:0 auto;background:#1e293b;border-radius:12px;overflow:hidden;box-shadow:0 4px 32px rgba(0,0,0,.4)}
|
|
97
|
+
.header{padding:2rem;border-bottom:1px solid #334155}
|
|
98
|
+
.header-url{font-size:.85rem;color:#94a3b8;word-break:break-all;margin-bottom:.5rem}
|
|
99
|
+
.header-ts{font-size:.78rem;color:#64748b}
|
|
100
|
+
.grade-row{display:flex;align-items:center;gap:1.5rem;margin-top:1.25rem}
|
|
101
|
+
.grade-badge{font-size:3rem;font-weight:800;line-height:1;color:${gradeColor(grade)}}
|
|
102
|
+
.score-num{font-size:1.75rem;font-weight:700;color:#f1f5f9}
|
|
103
|
+
.score-label{font-size:.8rem;color:#94a3b8;margin-top:.2rem}
|
|
104
|
+
.verdict-pill{display:inline-block;padding:.35rem .9rem;border-radius:999px;font-size:.85rem;font-weight:600;background:${verdictColor(citation_verdict.will_ai_cite)}22;color:${verdictColor(citation_verdict.will_ai_cite)};border:1px solid ${verdictColor(citation_verdict.will_ai_cite)}44;margin-top:.5rem}
|
|
105
|
+
.summary{font-size:.9rem;color:#cbd5e1;margin-top:.75rem;line-height:1.5}
|
|
106
|
+
.section{padding:1.5rem 2rem}
|
|
107
|
+
.section + .section{border-top:1px solid #334155}
|
|
108
|
+
.section-title{font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#64748b;margin-bottom:1rem}
|
|
109
|
+
.dim-row{display:grid;grid-template-columns:110px 1fr 36px;align-items:center;gap:.75rem;margin-bottom:.6rem}
|
|
110
|
+
.dim-label{font-size:.82rem;color:#94a3b8;text-align:right}
|
|
111
|
+
.bar-track{height:8px;background:#0f172a;border-radius:4px;overflow:hidden}
|
|
112
|
+
.bar-fill{height:100%;border-radius:4px;transition:width .3s}
|
|
113
|
+
.dim-score{font-size:.82rem;font-weight:600;color:#e2e8f0;text-align:right}
|
|
114
|
+
.blocker{background:#0f172a;border-radius:8px;padding:1rem;margin-bottom:.75rem;border-left:3px solid #ef4444}
|
|
115
|
+
.blocker:last-child{margin-bottom:0}
|
|
116
|
+
.blocker-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}
|
|
117
|
+
.blocker-num{width:22px;height:22px;border-radius:50%;background:#ef4444;color:#fff;font-size:.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}
|
|
118
|
+
.blocker-cat{font-size:.8rem;font-weight:600;color:#cbd5e1;text-transform:capitalize}
|
|
119
|
+
.badge{padding:.15rem .5rem;border-radius:4px;font-size:.7rem;font-weight:600;text-transform:uppercase}
|
|
120
|
+
.badge-high{background:#ef444422;color:#ef4444}
|
|
121
|
+
.badge-medium{background:#f59e0b22;color:#f59e0b}
|
|
122
|
+
.badge-low{background:#22c55e22;color:#22c55e}
|
|
123
|
+
.blocker-msg{font-size:.82rem;color:#94a3b8;margin-bottom:.35rem;line-height:1.4}
|
|
124
|
+
.blocker-fix{font-size:.82rem;color:#64748b;line-height:1.4}
|
|
125
|
+
.blocker-fix strong{color:#94a3b8}
|
|
126
|
+
.no-blockers{font-size:.9rem;color:#22c55e}
|
|
127
|
+
.footer{padding:1rem 2rem;text-align:center;font-size:.75rem;color:#475569;border-top:1px solid #334155}
|
|
128
|
+
.footer a{color:#6366f1;text-decoration:none}
|
|
129
|
+
.footer a:hover{text-decoration:underline}
|
|
130
|
+
</style>
|
|
131
|
+
</head>
|
|
132
|
+
<body>
|
|
133
|
+
<div class="card">
|
|
134
|
+
<div class="header">
|
|
135
|
+
<div class="header-url">${escHtml(url)}</div>
|
|
136
|
+
<div class="header-ts">Audited ${escHtml(formattedDate)}</div>
|
|
137
|
+
<div class="grade-row">
|
|
138
|
+
<div>
|
|
139
|
+
<div class="grade-badge">${escHtml(grade)}</div>
|
|
140
|
+
</div>
|
|
141
|
+
<div>
|
|
142
|
+
<div class="score-num">${score}<span style="font-size:1rem;color:#64748b">/100</span></div>
|
|
143
|
+
<div class="score-label">AI Citation Score</div>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
<div class="verdict-pill">${escHtml(verdictLabel)}</div>
|
|
147
|
+
<p class="summary">${escHtml(citation_verdict.one_line_summary)}</p>
|
|
148
|
+
</div>
|
|
149
|
+
|
|
150
|
+
<div class="section">
|
|
151
|
+
<div class="section-title">Dimension Scores</div>
|
|
152
|
+
${dimensionRows}
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
<div class="section">
|
|
156
|
+
<div class="section-title">Top Blockers</div>
|
|
157
|
+
${blockerItems}${noBlockers}
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
<div class="footer">
|
|
161
|
+
Generated by <a href="https://github.com/AutomateLab-tech/ai-seo-mcp" target="_blank" rel="noopener">AI Citation Toolkit</a> - github.com/AutomateLab-tech/ai-seo-mcp
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
</body>
|
|
165
|
+
</html>`;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=scorecard-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scorecard-html.js","sourceRoot":"","sources":["../../src/lib/scorecard-html.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,17 +4,31 @@ export declare const auditPageInputSchema: z.ZodObject<{
|
|
|
4
4
|
url: z.ZodString;
|
|
5
5
|
include_raw_html: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
6
6
|
respect_robots: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
7
|
+
generate_report: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
7
8
|
}, "strip", z.ZodTypeAny, {
|
|
8
9
|
url: string;
|
|
9
10
|
respect_robots: boolean;
|
|
10
11
|
include_raw_html: boolean;
|
|
12
|
+
generate_report: boolean;
|
|
11
13
|
}, {
|
|
12
14
|
url: string;
|
|
13
15
|
respect_robots?: boolean | undefined;
|
|
14
16
|
include_raw_html?: boolean | undefined;
|
|
17
|
+
generate_report?: boolean | undefined;
|
|
15
18
|
}>;
|
|
16
19
|
export type AuditPageInput = z.infer<typeof auditPageInputSchema>;
|
|
20
|
+
export interface CitationVerdict {
|
|
21
|
+
will_ai_cite: "unlikely" | "marginal" | "likely";
|
|
22
|
+
top_3_blockers: Array<{
|
|
23
|
+
category: string;
|
|
24
|
+
message: string;
|
|
25
|
+
fix: string;
|
|
26
|
+
estimated_impact?: "high" | "medium" | "low";
|
|
27
|
+
}>;
|
|
28
|
+
one_line_summary: string;
|
|
29
|
+
}
|
|
17
30
|
export interface AuditPageResult extends AuditResult {
|
|
31
|
+
citation_verdict: CitationVerdict;
|
|
18
32
|
dimension_scores: {
|
|
19
33
|
schema: number;
|
|
20
34
|
robots: number;
|
|
@@ -26,6 +40,7 @@ export interface AuditPageResult extends AuditResult {
|
|
|
26
40
|
sitemap: number;
|
|
27
41
|
};
|
|
28
42
|
raw_html?: string;
|
|
43
|
+
report_html?: string;
|
|
29
44
|
}
|
|
30
45
|
export declare function auditPage(input: AuditPageInput): Promise<AuditPageResult>;
|
|
31
46
|
//# sourceMappingURL=audit-page.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-page.d.ts","sourceRoot":"","sources":["../../src/tools/audit-page.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"audit-page.d.ts","sourceRoot":"","sources":["../../src/tools/audit-page.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAoB/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjD,cAAc,EAAE,KAAK,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;KAC9C,CAAC,CAAC;IACH,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,gBAAgB,EAAE,eAAe,CAAC;IAClC,gBAAgB,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA8Q/E"}
|
package/dist/tools/audit-page.js
CHANGED
|
@@ -9,6 +9,7 @@ import { auditSchema } from "./audit-schema.js";
|
|
|
9
9
|
import { checkRobots } from "./check-robots.js";
|
|
10
10
|
import { checkSitemap } from "./check-sitemap.js";
|
|
11
11
|
import { freshnessScore, deriveGrade, computeWeightedScore } from "../lib/score.js";
|
|
12
|
+
import { renderScorecardHtml } from "../lib/scorecard-html.js";
|
|
12
13
|
export const auditPageInputSchema = z.object({
|
|
13
14
|
url: z
|
|
14
15
|
.string()
|
|
@@ -24,6 +25,11 @@ export const auditPageInputSchema = z.object({
|
|
|
24
25
|
.optional()
|
|
25
26
|
.default(true)
|
|
26
27
|
.describe("If true (default), the tool checks robots.txt before fetching and skips disallowed paths, returning a robots_blocked finding instead. Set to false ONLY for auditing your own site where you've intentionally blocked crawlers and need the audit to bypass that block."),
|
|
28
|
+
generate_report: z
|
|
29
|
+
.boolean()
|
|
30
|
+
.optional()
|
|
31
|
+
.default(false)
|
|
32
|
+
.describe("If true, return a standalone HTML scorecard in the `report_html` field. The HTML is self-contained (no external dependencies) and can be saved as a .html file or pasted to Gist/CodePen. Default false to keep audits cheap."),
|
|
27
33
|
});
|
|
28
34
|
export async function auditPage(input) {
|
|
29
35
|
const hostDelays = new Map();
|
|
@@ -216,9 +222,33 @@ export async function auditPage(input) {
|
|
|
216
222
|
seen.add(key);
|
|
217
223
|
return true;
|
|
218
224
|
});
|
|
225
|
+
// --- Citation verdict (prepended block) ---
|
|
226
|
+
const will_ai_cite = score < 50 ? "unlikely" : score <= 75 ? "marginal" : "likely";
|
|
227
|
+
const impactOrder = { high: 0, medium: 1, low: 2, undefined: 3 };
|
|
228
|
+
const severityOrder = { critical: 0, warning: 1, info: 2 };
|
|
229
|
+
const top_3_blockers = [...deduped]
|
|
230
|
+
.filter((f) => f.severity === "critical" || f.severity === "warning")
|
|
231
|
+
.sort((a, b) => {
|
|
232
|
+
const ia = impactOrder[a.estimated_impact ?? "undefined"];
|
|
233
|
+
const ib = impactOrder[b.estimated_impact ?? "undefined"];
|
|
234
|
+
if (ia !== ib)
|
|
235
|
+
return ia - ib;
|
|
236
|
+
return severityOrder[a.severity] - severityOrder[b.severity];
|
|
237
|
+
})
|
|
238
|
+
.slice(0, 3)
|
|
239
|
+
.map((f) => ({
|
|
240
|
+
category: f.category,
|
|
241
|
+
message: f.message,
|
|
242
|
+
fix: f.fix,
|
|
243
|
+
estimated_impact: f.estimated_impact,
|
|
244
|
+
}));
|
|
245
|
+
const topBlockerMessage = top_3_blockers.length > 0 ? top_3_blockers[0].message : "no critical blockers found";
|
|
246
|
+
const one_line_summary = `AI assistants are ${will_ai_cite} to cite this page because ${topBlockerMessage.charAt(0).toLowerCase()}${topBlockerMessage.slice(1).replace(/\.$/, "")}.`;
|
|
247
|
+
const citation_verdict = { will_ai_cite, top_3_blockers, one_line_summary };
|
|
219
248
|
const output = {
|
|
220
249
|
url: input.url,
|
|
221
250
|
fetched_at,
|
|
251
|
+
citation_verdict,
|
|
222
252
|
findings: deduped,
|
|
223
253
|
score,
|
|
224
254
|
grade,
|
|
@@ -227,6 +257,16 @@ export async function auditPage(input) {
|
|
|
227
257
|
if (input.include_raw_html) {
|
|
228
258
|
output.raw_html = result.body;
|
|
229
259
|
}
|
|
260
|
+
if (input.generate_report) {
|
|
261
|
+
output.report_html = renderScorecardHtml({
|
|
262
|
+
url: input.url,
|
|
263
|
+
fetched_at,
|
|
264
|
+
score,
|
|
265
|
+
grade,
|
|
266
|
+
citation_verdict,
|
|
267
|
+
dimension_scores: dimensionScores,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
230
270
|
return output;
|
|
231
271
|
}
|
|
232
272
|
//# sourceMappingURL=audit-page.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-page.js","sourceRoot":"","sources":["../../src/tools/audit-page.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"audit-page.js","sourceRoot":"","sources":["../../src/tools/audit-page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const diffPagesInputSchema: z.ZodObject<{
|
|
3
|
+
url_a: z.ZodString;
|
|
4
|
+
url_b: z.ZodString;
|
|
5
|
+
query: z.ZodOptional<z.ZodString>;
|
|
6
|
+
respect_robots: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
respect_robots: boolean;
|
|
9
|
+
url_a: string;
|
|
10
|
+
url_b: string;
|
|
11
|
+
query?: string | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
url_a: string;
|
|
14
|
+
url_b: string;
|
|
15
|
+
respect_robots?: boolean | undefined;
|
|
16
|
+
query?: string | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
export type DiffPagesInput = z.infer<typeof diffPagesInputSchema>;
|
|
19
|
+
export interface DimensionDiff {
|
|
20
|
+
a: number;
|
|
21
|
+
b: number;
|
|
22
|
+
/** Which URL has the higher score for this dimension, or 'tie' if equal. */
|
|
23
|
+
advantage: "a" | "b" | "tie";
|
|
24
|
+
}
|
|
25
|
+
export interface DiffPagesResult {
|
|
26
|
+
url_a: string;
|
|
27
|
+
url_b: string;
|
|
28
|
+
query?: string;
|
|
29
|
+
/** Which URL is more citation-worthy overall, or 'tie' if within 5 points. */
|
|
30
|
+
better_for_citation: "a" | "b" | "tie";
|
|
31
|
+
scores: {
|
|
32
|
+
a: number;
|
|
33
|
+
b: number;
|
|
34
|
+
};
|
|
35
|
+
delta: {
|
|
36
|
+
schema: DimensionDiff;
|
|
37
|
+
structure: DimensionDiff;
|
|
38
|
+
robots: DimensionDiff;
|
|
39
|
+
entity_density: DimensionDiff;
|
|
40
|
+
freshness: DimensionDiff;
|
|
41
|
+
technical: DimensionDiff;
|
|
42
|
+
authority: DimensionDiff;
|
|
43
|
+
sitemap: DimensionDiff;
|
|
44
|
+
};
|
|
45
|
+
/** Categories (or entities) present on B but absent from A's findings (A is missing these). */
|
|
46
|
+
missing_in_a: string[];
|
|
47
|
+
/** Categories (or entities) present on A but absent from B's findings (B is missing these). */
|
|
48
|
+
missing_in_b: string[];
|
|
49
|
+
/** Prioritized, actionable recommendations for improving URL A's citation probability. */
|
|
50
|
+
fix_recommendations_for_a: Array<{
|
|
51
|
+
category: string;
|
|
52
|
+
message: string;
|
|
53
|
+
fix: string;
|
|
54
|
+
estimated_impact?: "high" | "medium" | "low";
|
|
55
|
+
}>;
|
|
56
|
+
}
|
|
57
|
+
export declare function diffPages(input: DiffPagesInput): Promise<DiffPagesResult>;
|
|
58
|
+
//# sourceMappingURL=diff-pages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-pages.d.ts","sourceRoot":"","sources":["../../src/tools/diff-pages.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EA0B/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,4EAA4E;IAC5E,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,mBAAmB,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;IACvC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,KAAK,EAAE;QACL,MAAM,EAAE,aAAa,CAAC;QACtB,SAAS,EAAE,aAAa,CAAC;QACzB,MAAM,EAAE,aAAa,CAAC;QACtB,cAAc,EAAE,aAAa,CAAC;QAC9B,SAAS,EAAE,aAAa,CAAC;QACzB,SAAS,EAAE,aAAa,CAAC;QACzB,SAAS,EAAE,aAAa,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;KACxB,CAAC;IACF,+FAA+F;IAC/F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+FAA+F;IAC/F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0FAA0F;IAC1F,yBAAyB,EAAE,KAAK,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;KAC9C,CAAC,CAAC;CACJ;AAwDD,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA2D/E"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// Tool: diff_pages
|
|
2
|
+
// Compares two URLs (e.g. user's page vs competitor) and returns a structured
|
|
3
|
+
// breakdown of why one is more citation-worthy than the other.
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { auditPage } from "./audit-page.js";
|
|
6
|
+
export const diffPagesInputSchema = z.object({
|
|
7
|
+
url_a: z
|
|
8
|
+
.string()
|
|
9
|
+
.url()
|
|
10
|
+
.describe("First URL to compare - typically your own page. Must be a fully-qualified http(s) URL that returns HTTP 200 (redirects are followed)."),
|
|
11
|
+
url_b: z
|
|
12
|
+
.string()
|
|
13
|
+
.url()
|
|
14
|
+
.describe("Second URL to compare - typically a competitor's page. Must be a fully-qualified http(s) URL that returns HTTP 200 (redirects are followed)."),
|
|
15
|
+
query: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Optional target search query both pages are competing for (e.g. 'how to connect Zapier to Notion'). When provided, it is surfaced in fix_recommendations_for_a as context. Does not alter the scoring algorithm - scoring is based on audit_page's existing rubric."),
|
|
19
|
+
respect_robots: z
|
|
20
|
+
.boolean()
|
|
21
|
+
.optional()
|
|
22
|
+
.default(true)
|
|
23
|
+
.describe("If true (default), respect robots.txt before fetching each URL. Set false only when auditing your own sites where you have intentionally blocked crawlers."),
|
|
24
|
+
});
|
|
25
|
+
/** Return "a", "b", or "tie" based on score values (tie within 5 points). */
|
|
26
|
+
function advantage(aScore, bScore) {
|
|
27
|
+
if (Math.abs(aScore - bScore) <= 5)
|
|
28
|
+
return "tie";
|
|
29
|
+
return aScore > bScore ? "a" : "b";
|
|
30
|
+
}
|
|
31
|
+
/** Derive missing_in_a and missing_in_b by comparing findings categories. */
|
|
32
|
+
function deriveMissing(findingsA, findingsB) {
|
|
33
|
+
const categoriesInA = new Set(findingsA.filter((f) => f.severity === "critical" || f.severity === "warning").map((f) => f.category));
|
|
34
|
+
const categoriesInB = new Set(findingsB.filter((f) => f.severity === "critical" || f.severity === "warning").map((f) => f.category));
|
|
35
|
+
// Collect distinct finding messages in each set to surface actionable gaps
|
|
36
|
+
const messagesInA = new Set(findingsA.filter((f) => f.severity === "critical" || f.severity === "warning").map((f) => f.message));
|
|
37
|
+
const messagesInB = new Set(findingsB.filter((f) => f.severity === "critical" || f.severity === "warning").map((f) => f.message));
|
|
38
|
+
// missing_in_a: findings B has (problems B solved that A hasn't addressed) - i.e. categories B has clean that A doesn't
|
|
39
|
+
// Cleaner interpretation: dimensions where B scores higher represent gaps A has
|
|
40
|
+
const missingInA = [];
|
|
41
|
+
for (const msg of messagesInB) {
|
|
42
|
+
if (!messagesInA.has(msg)) {
|
|
43
|
+
missingInA.push(msg);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const missingInB = [];
|
|
47
|
+
for (const msg of messagesInA) {
|
|
48
|
+
if (!messagesInB.has(msg)) {
|
|
49
|
+
missingInB.push(msg);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// If no message-level gaps, fall back to category-level gaps
|
|
53
|
+
if (missingInA.length === 0) {
|
|
54
|
+
for (const cat of categoriesInB) {
|
|
55
|
+
if (!categoriesInA.has(cat))
|
|
56
|
+
missingInA.push(`${cat} issues (present on B but not A)`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (missingInB.length === 0) {
|
|
60
|
+
for (const cat of categoriesInA) {
|
|
61
|
+
if (!categoriesInB.has(cat))
|
|
62
|
+
missingInB.push(`${cat} issues (present on A but not B)`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return { missingInA, missingInB };
|
|
66
|
+
}
|
|
67
|
+
export async function diffPages(input) {
|
|
68
|
+
// Run both audits in parallel
|
|
69
|
+
const [resultA, resultB] = await Promise.all([
|
|
70
|
+
auditPage({ url: input.url_a, include_raw_html: false, generate_report: false, respect_robots: input.respect_robots }),
|
|
71
|
+
auditPage({ url: input.url_b, include_raw_html: false, generate_report: false, respect_robots: input.respect_robots }),
|
|
72
|
+
]);
|
|
73
|
+
const dimA = resultA.dimension_scores;
|
|
74
|
+
const dimB = resultB.dimension_scores;
|
|
75
|
+
const delta = {
|
|
76
|
+
schema: { a: dimA.schema, b: dimB.schema, advantage: advantage(dimA.schema, dimB.schema) },
|
|
77
|
+
structure: { a: dimA.structure, b: dimB.structure, advantage: advantage(dimA.structure, dimB.structure) },
|
|
78
|
+
robots: { a: dimA.robots, b: dimB.robots, advantage: advantage(dimA.robots, dimB.robots) },
|
|
79
|
+
entity_density: { a: dimA.entity_density, b: dimB.entity_density, advantage: advantage(dimA.entity_density, dimB.entity_density) },
|
|
80
|
+
freshness: { a: dimA.freshness, b: dimB.freshness, advantage: advantage(dimA.freshness, dimB.freshness) },
|
|
81
|
+
technical: { a: dimA.technical, b: dimB.technical, advantage: advantage(dimA.technical, dimB.technical) },
|
|
82
|
+
authority: { a: dimA.authority, b: dimB.authority, advantage: advantage(dimA.authority, dimB.authority) },
|
|
83
|
+
sitemap: { a: dimA.sitemap, b: dimB.sitemap, advantage: advantage(dimA.sitemap, dimB.sitemap) },
|
|
84
|
+
};
|
|
85
|
+
const overallAdvantage = advantage(resultA.score, resultB.score);
|
|
86
|
+
const { missingInA, missingInB } = deriveMissing(resultA.findings, resultB.findings);
|
|
87
|
+
// fix_recommendations_for_a: A's own critical + warning findings, sorted by impact
|
|
88
|
+
const impactOrder = { high: 0, medium: 1, low: 2 };
|
|
89
|
+
const severityOrder = { critical: 0, warning: 1, info: 2 };
|
|
90
|
+
const recsForA = [...resultA.findings]
|
|
91
|
+
.filter((f) => f.severity === "critical" || f.severity === "warning")
|
|
92
|
+
.sort((a, b) => {
|
|
93
|
+
const ia = impactOrder[a.estimated_impact ?? "low"] ?? 2;
|
|
94
|
+
const ib = impactOrder[b.estimated_impact ?? "low"] ?? 2;
|
|
95
|
+
if (ia !== ib)
|
|
96
|
+
return ia - ib;
|
|
97
|
+
return (severityOrder[a.severity] ?? 2) - (severityOrder[b.severity] ?? 2);
|
|
98
|
+
})
|
|
99
|
+
.map((f) => ({
|
|
100
|
+
category: f.category,
|
|
101
|
+
message: f.message,
|
|
102
|
+
fix: f.fix,
|
|
103
|
+
estimated_impact: f.estimated_impact,
|
|
104
|
+
}));
|
|
105
|
+
const output = {
|
|
106
|
+
url_a: input.url_a,
|
|
107
|
+
url_b: input.url_b,
|
|
108
|
+
better_for_citation: overallAdvantage,
|
|
109
|
+
scores: { a: resultA.score, b: resultB.score },
|
|
110
|
+
delta,
|
|
111
|
+
missing_in_a: missingInA,
|
|
112
|
+
missing_in_b: missingInB,
|
|
113
|
+
fix_recommendations_for_a: recsForA,
|
|
114
|
+
};
|
|
115
|
+
if (input.query) {
|
|
116
|
+
output.query = input.query;
|
|
117
|
+
}
|
|
118
|
+
return output;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=diff-pages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-pages.js","sourceRoot":"","sources":["../../src/tools/diff-pages.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@automatelab/ai-seo-mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"mcpName": "io.github.AutomateLab-tech/ai-seo",
|
|
5
|
-
"description": "
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"mcpName": "io.github.AutomateLab-tech/ai-seo-mcp",
|
|
5
|
+
"description": "AI Citation Toolkit - audit, score, and rewrite web pages for AI-citation eligibility. AEO/GEO/LLM visibility for any MCP client.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "automatelab.tech",
|
|
8
|
-
"homepage": "https://github.com/AutomateLab-tech/ai-seo",
|
|
8
|
+
"homepage": "https://github.com/AutomateLab-tech/ai-seo-mcp",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
|
-
"url": "https://github.com/AutomateLab-tech/ai-seo.git"
|
|
11
|
+
"url": "https://github.com/AutomateLab-tech/ai-seo-mcp.git"
|
|
12
12
|
},
|
|
13
13
|
"engines": { "node": ">=20" },
|
|
14
14
|
"type": "module",
|
|
15
15
|
"bin": {
|
|
16
|
-
"ai-seo-mcp": "dist/index.js"
|
|
16
|
+
"ai-seo-mcp": "dist/index.js",
|
|
17
|
+
"ai-seo-audit": "dist/cli/audit-cli.js"
|
|
17
18
|
},
|
|
18
19
|
"main": "dist/index.js",
|
|
19
20
|
"scripts": {
|
|
@@ -43,6 +44,7 @@
|
|
|
43
44
|
"dist",
|
|
44
45
|
"src/lib/crawlers.json",
|
|
45
46
|
"src/lib/schema-types.json",
|
|
47
|
+
"action.yml",
|
|
46
48
|
"README.md",
|
|
47
49
|
"LICENSE"
|
|
48
50
|
],
|