agent-ready-mcp 0.1.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/LICENSE +21 -0
- package/README.md +129 -0
- package/dist/mcp-server.mjs +31311 -0
- package/package.json +64 -0
- package/skills/agent-ready/SKILL.md +88 -0
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agent-ready-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"mcpName": "io.github.mlava/agent-ready-mcp",
|
|
5
|
+
"description": "MCP server for Agent Ready — scan any URL for AI-readability against the Vercel Agent Readability Spec, the llmstxt.org standard, and agent-protocol manifests (MCP server cards, A2A, agents.json, agent-permissions.json, UCP, x402). 59 checks with per-check fix guidance.",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Agent Ready",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/mlava/agent-ready-mcp.git"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://agent-ready.dev",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"mcp",
|
|
15
|
+
"model-context-protocol",
|
|
16
|
+
"seo",
|
|
17
|
+
"ai-search",
|
|
18
|
+
"llms-txt",
|
|
19
|
+
"agents.md",
|
|
20
|
+
"agent-readability",
|
|
21
|
+
"scanner",
|
|
22
|
+
"validator",
|
|
23
|
+
"vercel-spec",
|
|
24
|
+
"mcp-server-card",
|
|
25
|
+
"a2a",
|
|
26
|
+
"agents-json",
|
|
27
|
+
"agent-permissions",
|
|
28
|
+
"ucp",
|
|
29
|
+
"x402",
|
|
30
|
+
"claude"
|
|
31
|
+
],
|
|
32
|
+
"type": "module",
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=20"
|
|
35
|
+
},
|
|
36
|
+
"bin": {
|
|
37
|
+
"agent-ready-mcp": "dist/mcp-server.mjs"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist/mcp-server.mjs",
|
|
41
|
+
"skills/",
|
|
42
|
+
"README.md",
|
|
43
|
+
"LICENSE"
|
|
44
|
+
],
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "node scripts/build.mjs",
|
|
47
|
+
"test": "vitest run",
|
|
48
|
+
"test:coverage": "vitest run --coverage",
|
|
49
|
+
"typecheck": "tsc --noEmit",
|
|
50
|
+
"prepublishOnly": "npm run build"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
54
|
+
"zod": "^4.1.5"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@types/node": "^20.11.30",
|
|
58
|
+
"@vitest/coverage-v8": "^2.1.9",
|
|
59
|
+
"esbuild": "^0.25.8",
|
|
60
|
+
"typescript": "^5.9.3",
|
|
61
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
62
|
+
"vitest": "^2.1.9"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-ready
|
|
3
|
+
description: This skill should be used when the user wants to check how readable a website is to AI agents (ChatGPT, Claude, Perplexity, Google Gemini, MCP clients). Activates for "scan this site for AI readability", "check my llms.txt", "audit our agent-readability", "is my MCP server card valid", "what's our Vercel Agent Readability score", "fix my agents.json", and similar audit-style requests against a public URL. Does not edit the target site — pair with a code-editing MCP tool to apply the fixes the scanner surfaces.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
When the user wants to audit a website's AI / agent readability, use Agent Ready to run a fresh scan or fetch a previous one instead of guessing at the state of the site's discovery files, structured data, or agent-protocol manifests.
|
|
7
|
+
|
|
8
|
+
## When to Use This Skill
|
|
9
|
+
|
|
10
|
+
Activate this skill when the user:
|
|
11
|
+
|
|
12
|
+
- Asks how AI-readable a website is, or wants a score against the Vercel Agent Readability Spec or the llmstxt.org standard
|
|
13
|
+
- Pastes a URL and says "scan this", "check this", "audit this", or similar
|
|
14
|
+
- Asks specifically about `llms.txt`, `AGENTS.md`, `sitemap.md`, `robots.txt` (AI bots), `/.well-known/mcp.json`, `/.well-known/agent-card.json`, `agents.json`, `agent-permissions.json`, UCP profiles, x402 payment endpoints, or markdown mirrors
|
|
15
|
+
- Wants a prioritised list of fixes to make their site more visible to AI agents and AI search engines
|
|
16
|
+
- References a previous scan by id and wants to interpret, compare, or generate fixes from it
|
|
17
|
+
|
|
18
|
+
## How to Use
|
|
19
|
+
|
|
20
|
+
### Step 1: Pick the right tool
|
|
21
|
+
|
|
22
|
+
- **`scan_site`** — when the user wants a fresh agent-readability scan. Takes a URL (and an optional `pageLimit`). Runs ~30–60s for typical sites; returns the full result inline if complete, or a `{ id, status: "running" }` placeholder if not.
|
|
23
|
+
- **`get_scan`** — when the user references a specific scan id or asks you to re-fetch a previous scan. Returns the same result shape as `scan_site` when complete.
|
|
24
|
+
|
|
25
|
+
For end-to-end "scan + interpret + plan fixes" workflows, the server also exposes three prompts that wire these tools together:
|
|
26
|
+
|
|
27
|
+
- `scan` — fresh scan + high-level summary
|
|
28
|
+
- `interpret_scan` — plain-English explanation of a scan's findings
|
|
29
|
+
- `remediation_plan` — prioritised fix-it doc (optional `focus`: `"seo"` or `"agents"`)
|
|
30
|
+
|
|
31
|
+
If the user describes one of these flows, surface the corresponding prompt name rather than reconstructing the workflow yourself.
|
|
32
|
+
|
|
33
|
+
### Step 2: Pass the URL verbatim
|
|
34
|
+
|
|
35
|
+
Pass the user's URL exactly — including scheme, path, and trailing slash. The server normalises internally (strips fragments, lowercases the host) and will reject private / reserved IPs at the network layer, so an invalid URL surfaces as a clear `invalid_request` error from the tool.
|
|
36
|
+
|
|
37
|
+
### Step 3: Handle the "running" placeholder
|
|
38
|
+
|
|
39
|
+
`scan_site` polls the hosted API for up to ~60s. If the scan hasn't completed by the deadline, the tool returns:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"id": "abc1234567",
|
|
44
|
+
"status": "running",
|
|
45
|
+
"pollUrl": "/api/v1/scans/abc1234567",
|
|
46
|
+
"message": "Scan still running after the local poll deadline. Call get_scan with this id to fetch the final result."
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Tell the user the scan is in progress, surface the id, and offer to call `get_scan` with that id when they're ready. Don't loop `get_scan` automatically — wait for the user.
|
|
51
|
+
|
|
52
|
+
### Step 4: Summarise findings, don't dump raw JSON
|
|
53
|
+
|
|
54
|
+
The full scan payload contains 50+ check results across four categories. When summarising to the user, lead with:
|
|
55
|
+
|
|
56
|
+
1. The overall agent-readability score (0–100) and its rating band (Excellent / Good / Fair / Needs Improvement).
|
|
57
|
+
2. The llms.txt sub-score, if the site has an `llms.txt` file.
|
|
58
|
+
3. The 3–5 highest-impact failing checks (look for `status: "fail"` in `details`).
|
|
59
|
+
4. A one-line next step.
|
|
60
|
+
|
|
61
|
+
For each failing check, the payload includes a `howToFix` string — use it verbatim or paraphrase tightly; don't invent fix guidance.
|
|
62
|
+
|
|
63
|
+
### Step 5: Distinguish the four check families
|
|
64
|
+
|
|
65
|
+
When grouping or filtering, use the check-id prefix:
|
|
66
|
+
|
|
67
|
+
- **S1–S15** — site-wide checks (run once per scan): llms.txt, robots.txt, sitemap.xml, sitemap.md, AGENTS.md, HTTPS, OpenAPI
|
|
68
|
+
- **P1–P23** — per-page checks (run on every fetched URL): HTTP semantics, metadata, JSON-LD, markdown mirrors, content negotiation, code-block language, JS-rendering dependency
|
|
69
|
+
- **L1–L10** — llms.txt content checks (run when llms.txt exists): structure, link format, content-type, llms-full.txt companion
|
|
70
|
+
- **C1–C11** — agent-protocol checks (run when the relevant `/.well-known` endpoint exists): MCP server cards, A2A agent cards, agents.json, agent-permissions.json, UCP, x402
|
|
71
|
+
|
|
72
|
+
C-series checks follow a discover-then-validate pattern: missing endpoints drop the check rather than failing it. Don't report a missing C-check as a problem unless the user explicitly wants that protocol.
|
|
73
|
+
|
|
74
|
+
## Guidelines
|
|
75
|
+
|
|
76
|
+
- **Don't restate the entire spec.** When explaining a failure, name the check (e.g. "P11 — JSON-LD missing top-level BreadcrumbList"), summarise what it measures in one sentence, then jump to the fix. The full Vercel Spec and llmstxt.org spec are linked from `https://agent-ready.dev/methodology`.
|
|
77
|
+
- **Markdown-mirror failures cluster.** P15–P20 typically fail together (no `.md` mirror at all). When you see all six failing on a page, recommend creating the `.md` route first — the rest cascade.
|
|
78
|
+
- **Page-level vs site-level fixes.** A failure on the home page might require a one-line change; the same failure across every page might be a layout-level change. Surface the difference: "this failed on 1 page" vs "this failed on every page scanned" matters for prioritisation.
|
|
79
|
+
- **Score deltas matter more than absolute scores.** If the user is iterating (scan → fix → re-scan), a +5 point movement after a single fix is the signal — call it out.
|
|
80
|
+
- **Don't fabricate scan ids.** If the user references a scan id you don't have evidence of, call `get_scan` first. A 404 is a clearer error message than a hallucinated scan.
|
|
81
|
+
|
|
82
|
+
## When NOT to Use This Skill
|
|
83
|
+
|
|
84
|
+
- **General SEO audits** (page speed, Core Web Vitals, keyword optimisation, backlink analysis) — use a Lighthouse or Ahrefs MCP wrapper. Agent Ready measures AI-readability specifically, not traditional SEO.
|
|
85
|
+
- **Performance profiling** (load time, JavaScript bundle size, Cumulative Layout Shift) — use Chrome DevTools MCP or a Lighthouse wrapper.
|
|
86
|
+
- **Crawl-discovery** (find broken links, generate a sitemap, audit redirects) — use a dedicated crawler. Agent Ready follows a small page-set against a check list, not a broad-discovery crawl.
|
|
87
|
+
- **Applying the fixes the scanner surfaces** — Agent Ready is read-only. Pair it with a code-editing MCP tool (or have the user edit by hand) to land the changes.
|
|
88
|
+
- **Scanning intranet / private / authenticated pages** — the scanner blocks private and reserved IP ranges at the network layer. It only works against publicly-reachable URLs.
|