agent-ready-mcp 0.1.1 → 0.2.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 +24 -0
- package/dist/mcp-server.mjs +292 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -124,6 +124,30 @@ npm test
|
|
|
124
124
|
npm run typecheck
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
+
## Releasing
|
|
128
|
+
|
|
129
|
+
Two GitHub Actions handle CI and release publishing:
|
|
130
|
+
|
|
131
|
+
- `.github/workflows/ci.yml` — runs typecheck, tests, and `npm run build` on every PR and push to `main`.
|
|
132
|
+
- `.github/workflows/release.yml` — runs on every `v*` tag push. Publishes to npm (with Sigstore provenance) and to the [MCP registry](https://registry.modelcontextprotocol.io) via GitHub OIDC.
|
|
133
|
+
|
|
134
|
+
To cut a release:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# bump version in package.json, manifest.json, server.json, src/server.ts
|
|
138
|
+
git commit -am "vX.Y.Z: ..."
|
|
139
|
+
git tag vX.Y.Z
|
|
140
|
+
git push && git push --tags
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
The release workflow handles npm + MCP registry automatically. Smithery republish (for the `.mcpb` bundle) and the GitHub release with custom notes are still manual — both have custom-content friction that's not worth automating today.
|
|
144
|
+
|
|
145
|
+
### Required repository secret
|
|
146
|
+
|
|
147
|
+
- `NPM_TOKEN` — npm automation token with publish access for `agent-ready-mcp`. Add at GitHub repo Settings → Secrets and variables → Actions.
|
|
148
|
+
|
|
149
|
+
The MCP registry publish uses GitHub OIDC (no stored secret required).
|
|
150
|
+
|
|
127
151
|
## License
|
|
128
152
|
|
|
129
153
|
MIT — see [LICENSE](LICENSE).
|
package/dist/mcp-server.mjs
CHANGED
|
@@ -31133,6 +31133,296 @@ Skip checks that already pass.`
|
|
|
31133
31133
|
);
|
|
31134
31134
|
}
|
|
31135
31135
|
|
|
31136
|
+
// src/resource-content.ts
|
|
31137
|
+
var METHODOLOGY_MD = `# How Agent Ready scores a site
|
|
31138
|
+
|
|
31139
|
+
> 59 checks across four categories, mapped to the Vercel Agent Readability Spec and the llmstxt.org standard. Every check is open and reproducible.
|
|
31140
|
+
|
|
31141
|
+
## What does Agent Ready measure?
|
|
31142
|
+
|
|
31143
|
+
Agent Ready is an independent validator for the [Vercel Agent Readability Spec](https://vercel.com/kb/guide/agent-readability-spec) and the [llmstxt.org standard](https://llmstxt.org). The score reports how well your site exposes itself to AI agents and LLM-based clients \u2014 the same way a Lighthouse score reports how well your site performs for human users. We fetch your URL once, fan out to the discovery files and well-known endpoints AI agents probe, and grade the result.
|
|
31144
|
+
|
|
31145
|
+
## How is the score calculated?
|
|
31146
|
+
|
|
31147
|
+
Two scores are reported: an overall agent readability score (0\u2013100) and an llms.txt sub-score (0\u2013100).
|
|
31148
|
+
|
|
31149
|
+
The overall score is a simple percentage: count of passing checks divided by total checks, rounded. Warns and fails both count against you; \`pass\` is the only state that earns credit. Checks marked \`unreliable\` by the JS-rendering check (P23) are excluded entirely so a single architectural choice doesn't penalise four dependent checks at once.
|
|
31150
|
+
|
|
31151
|
+
Rating bands:
|
|
31152
|
+
|
|
31153
|
+
| Score | Rating | Meaning |
|
|
31154
|
+
|---|---|---|
|
|
31155
|
+
| 90\u2013100 | excellent | Ready for AI citation; all critical surfaces present. |
|
|
31156
|
+
| 70\u201389 | good | Discoverable, but a few extractability gaps. |
|
|
31157
|
+
| 50\u201369 | fair | Partial coverage; multiple required surfaces missing. |
|
|
31158
|
+
| 0\u201349 | needs improvement | Not yet AI-readable; start with llms.txt and AGENTS.md. |
|
|
31159
|
+
|
|
31160
|
+
## Why is the llms.txt sub-score weighted differently?
|
|
31161
|
+
|
|
31162
|
+
The llmstxt.org spec treats some properties as foundational and others as optional. We mirror that with weights: structural checks (file accessible, H1 present, valid markdown) count 3\xD7, content checks count 1\xD7, and the optional \`llms-full.txt\` presence check counts 0.5\xD7. The overall score is unweighted because every check on the Vercel spec is equally normative; the llmstxt.org spec is explicitly layered.
|
|
31163
|
+
|
|
31164
|
+
## How are JavaScript-rendered pages handled?
|
|
31165
|
+
|
|
31166
|
+
P23 detects pages where the static HTML response lacks data that only appears after client-side rendering \u2014 missing H1, empty body text, JSON-LD that injects after hydration. When P23 fires, the runner marks dependent checks (P10, P11, P12, P14) as \`unreliable\` and the scorer excludes them from both numerator and denominator. Without this, a single SPA architecture choice would compound into a 4-point score drop across unrelated checks.
|
|
31167
|
+
|
|
31168
|
+
## Where is the source for each check?
|
|
31169
|
+
|
|
31170
|
+
Every check is implemented as a single function in \`src/lib/checks/{site,page,llmstxt,protocol}/\`. The naming convention is \`{id}-{slug}.ts\` (e.g. \`p11-json-ld-fields.ts\`). Each file exports a check definition; the registry collects them into a single array that the runner iterates. One check per file \u2014 read the source to see exactly what is being asserted.
|
|
31171
|
+
|
|
31172
|
+
Full guide: <https://agent-ready.dev/methodology>
|
|
31173
|
+
`;
|
|
31174
|
+
var CHECKS_MD = `# Agent Ready check registry
|
|
31175
|
+
|
|
31176
|
+
> 59 checks total across four categories. IDs are stable and referenced in every scan result's \`details\` array. Each check is implemented as a single function in \`src/lib/checks/{category}/{id}-{slug}.ts\` in the agent-ready repository.
|
|
31177
|
+
|
|
31178
|
+
## Site checks (15)
|
|
31179
|
+
|
|
31180
|
+
Run once per scan against the root URL. Cover discovery files (\`llms.txt\`, \`robots.txt\`, \`sitemap.xml\`, \`AGENTS.md\`), HTTPS, and the OpenAPI spec probe.
|
|
31181
|
+
|
|
31182
|
+
| ID | Check |
|
|
31183
|
+
|---|---|
|
|
31184
|
+
| S1 | llms.txt exists |
|
|
31185
|
+
| S2 | llms.txt Content-Type |
|
|
31186
|
+
| S3 | llms.txt not empty |
|
|
31187
|
+
| S4 | llms.txt URL format |
|
|
31188
|
+
| S5 | robots.txt \u2014 AI bots allowed |
|
|
31189
|
+
| S6 | robots.txt \u2014 /llms.txt not blocked |
|
|
31190
|
+
| S7 | robots.txt exists |
|
|
31191
|
+
| S8 | sitemap.xml valid |
|
|
31192
|
+
| S9 | sitemap.xml has lastmod |
|
|
31193
|
+
| S10 | sitemap.md exists |
|
|
31194
|
+
| S11 | sitemap.md has headings + links |
|
|
31195
|
+
| S12 | AGENTS.md exists |
|
|
31196
|
+
| S13 | AGENTS.md has required sections |
|
|
31197
|
+
| S14 | HTTPS |
|
|
31198
|
+
| S15 | Root OpenAPI spec |
|
|
31199
|
+
|
|
31200
|
+
## Page checks (23)
|
|
31201
|
+
|
|
31202
|
+
Run against every URL fetched in the scan. Cover HTTP semantics, metadata, JSON-LD, markdown mirrors, content negotiation, code-block language tags, and JS-rendering dependency.
|
|
31203
|
+
|
|
31204
|
+
| ID | Check |
|
|
31205
|
+
|---|---|
|
|
31206
|
+
| P1 | HTTP 200 |
|
|
31207
|
+
| P2 | Redirect chain |
|
|
31208
|
+
| P3 | Content-Type header |
|
|
31209
|
+
| P4 | x-robots-tag |
|
|
31210
|
+
| P5 | Canonical link |
|
|
31211
|
+
| P6 | Meta description |
|
|
31212
|
+
| P7 | og:title |
|
|
31213
|
+
| P8 | og:description |
|
|
31214
|
+
| P9 | HTML lang attribute |
|
|
31215
|
+
| P10 | JSON-LD present |
|
|
31216
|
+
| P11 | JSON-LD has required fields |
|
|
31217
|
+
| P12 | Section headings |
|
|
31218
|
+
| P13 | Text-to-HTML ratio |
|
|
31219
|
+
| P14 | Glossary link |
|
|
31220
|
+
| P15 | Markdown mirror exists |
|
|
31221
|
+
| P16 | Markdown frontmatter |
|
|
31222
|
+
| P17 | Alternate link (markdown) |
|
|
31223
|
+
| P18 | Link header in markdown |
|
|
31224
|
+
| P19 | Content negotiation |
|
|
31225
|
+
| P20 | Sitemap section in markdown |
|
|
31226
|
+
| P21 | Code block language tags |
|
|
31227
|
+
| P22 | API schema link |
|
|
31228
|
+
| P23 | JS rendering dependency |
|
|
31229
|
+
|
|
31230
|
+
## llms.txt checks (10)
|
|
31231
|
+
|
|
31232
|
+
Run when the site has an \`llms.txt\` file. Validate against the [llmstxt.org](https://llmstxt.org) specification. Weighted in the llms.txt sub-score: structural 3\xD7, content 1\xD7, \`llms-full.txt\` 0.5\xD7.
|
|
31233
|
+
|
|
31234
|
+
| ID | Check |
|
|
31235
|
+
|---|---|
|
|
31236
|
+
| L1 | File accessible |
|
|
31237
|
+
| L2 | H1 present |
|
|
31238
|
+
| L3 | Valid markdown |
|
|
31239
|
+
| L4 | Blockquote summary |
|
|
31240
|
+
| L5 | H2 file-list sections |
|
|
31241
|
+
| L6 | Link format correct |
|
|
31242
|
+
| L7 | Links are accessible |
|
|
31243
|
+
| L8 | Optional section used correctly |
|
|
31244
|
+
| L9 | Content-Type: text/plain |
|
|
31245
|
+
| L10 | llms-full.txt available |
|
|
31246
|
+
|
|
31247
|
+
## Protocol checks (11)
|
|
31248
|
+
|
|
31249
|
+
Discover-then-validate: when the relevant well-known endpoint returns 404, the check drops rather than failing. A marketing site doesn't score itself against agent manifests it has no reason to ship.
|
|
31250
|
+
|
|
31251
|
+
| ID | Check |
|
|
31252
|
+
|---|---|
|
|
31253
|
+
| C1 | MCP Server Card exists |
|
|
31254
|
+
| C2 | MCP Server Card fields |
|
|
31255
|
+
| C3 | MCP OAuth Protected Resource metadata |
|
|
31256
|
+
| C4 | A2A Agent Card exists |
|
|
31257
|
+
| C5 | A2A Agent Card fields |
|
|
31258
|
+
| C6 | Wildcard agents.json |
|
|
31259
|
+
| C7 | agent-permissions.json |
|
|
31260
|
+
| C8 | UCP profile (/.well-known/ucp) |
|
|
31261
|
+
| C9 | UCP OAuth Authorization Server metadata |
|
|
31262
|
+
| C10 | x402 Payment Required response |
|
|
31263
|
+
| C11 | x402 accepts entries |
|
|
31264
|
+
`;
|
|
31265
|
+
var LLMS_TXT = `# Agent Ready
|
|
31266
|
+
|
|
31267
|
+
> Agent Ready is a free tool that scores any website against the Vercel Agent Readability Spec, the llmstxt.org specification, and agent-protocol specs (MCP, A2A, agents.json). It runs 59 checks and provides actionable fix guidance for every failing check.
|
|
31268
|
+
|
|
31269
|
+
This resource mirrors agent-ready.dev's own /llms.txt so MCP clients can introspect the same surface that ChatGPT, Perplexity, and other AI agents see when discovering Agent Ready as a tool.
|
|
31270
|
+
|
|
31271
|
+
## Tools
|
|
31272
|
+
|
|
31273
|
+
- Home: <https://agent-ready.dev>
|
|
31274
|
+
- Agent Readability Score: <https://agent-ready.dev/agent-readability-score>
|
|
31275
|
+
- llms.txt Checker: <https://agent-ready.dev/llms-txt-checker>
|
|
31276
|
+
- AGENTS.md Validator: <https://agent-ready.dev/agents-md-validator>
|
|
31277
|
+
- MCP Server Card Validator: <https://agent-ready.dev/mcp-card-validator>
|
|
31278
|
+
- A2A Agent Card Validator: <https://agent-ready.dev/agent-card-validator>
|
|
31279
|
+
- agents.json Validator: <https://agent-ready.dev/agents-json-validator>
|
|
31280
|
+
- agent-permissions.json Validator: <https://agent-ready.dev/agent-permissions-validator>
|
|
31281
|
+
- UCP Validator: <https://agent-ready.dev/ucp-validator>
|
|
31282
|
+
- x402 Checker: <https://agent-ready.dev/x402-checker>
|
|
31283
|
+
- API & integrations: <https://agent-ready.dev/docs/api>
|
|
31284
|
+
- MCP server install guide: <https://agent-ready.dev/mcp>
|
|
31285
|
+
|
|
31286
|
+
## Specs
|
|
31287
|
+
|
|
31288
|
+
- Vercel Agent Readability Spec: <https://vercel.com/kb/guide/agent-readability-spec>
|
|
31289
|
+
- llmstxt.org: <https://llmstxt.org>
|
|
31290
|
+
- Model Context Protocol: <https://modelcontextprotocol.io>
|
|
31291
|
+
- A2A Protocol: <https://a2a-protocol.org>
|
|
31292
|
+
- Wildcard agents.json: <https://github.com/wild-card-ai/agents-json>
|
|
31293
|
+
`;
|
|
31294
|
+
var SPECS_MD = `# Specs Agent Ready validates against
|
|
31295
|
+
|
|
31296
|
+
Agent Ready's 59 checks map to seven specifications. Each entry below links to the canonical document and notes the check IDs that implement it.
|
|
31297
|
+
|
|
31298
|
+
## Vercel Agent Readability Spec
|
|
31299
|
+
|
|
31300
|
+
Canonical: <https://vercel.com/kb/guide/agent-readability-spec>
|
|
31301
|
+
|
|
31302
|
+
Maintained on the Vercel Knowledge Base. Drives the S- (site, 15 checks), P- (page, 23 checks), and most C- (protocol) check series.
|
|
31303
|
+
|
|
31304
|
+
## llmstxt.org
|
|
31305
|
+
|
|
31306
|
+
Canonical: <https://llmstxt.org>
|
|
31307
|
+
|
|
31308
|
+
The \`llms.txt\` file specification (and the optional \`llms-full.txt\` companion). Drives the L1\u2013L10 check series. Structural checks (file accessible, H1 present, valid markdown) carry 3\xD7 weight in the llms.txt sub-score; content checks 1\xD7; \`llms-full.txt\` presence 0.5\xD7.
|
|
31309
|
+
|
|
31310
|
+
## Model Context Protocol \u2014 Server Cards (SEP-1649)
|
|
31311
|
+
|
|
31312
|
+
Canonical: <https://modelcontextprotocol.io>
|
|
31313
|
+
SEP: <https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1649> (ratified 2025-11-25)
|
|
31314
|
+
|
|
31315
|
+
The discovery card published at \`/.well-known/mcp.json\`. Drives C1 (exists), C2 (required fields), and C3 (OAuth Protected Resource metadata per [RFC 9728](https://datatracker.ietf.org/doc/html/rfc9728)).
|
|
31316
|
+
|
|
31317
|
+
## A2A Protocol \u2014 Agent Cards
|
|
31318
|
+
|
|
31319
|
+
Canonical: <https://a2a-protocol.org>
|
|
31320
|
+
Schema: a2a.proto v1.0.0
|
|
31321
|
+
|
|
31322
|
+
The agent card published at \`/.well-known/agent-card.json\`. Drives C4 (exists with correct Content-Type) and C5 (required fields).
|
|
31323
|
+
|
|
31324
|
+
## Wildcard agents.json
|
|
31325
|
+
|
|
31326
|
+
Canonical: <https://github.com/wild-card-ai/agents-json>
|
|
31327
|
+
Version: v0.1.0 (pre-standard)
|
|
31328
|
+
|
|
31329
|
+
OpenAPI extension declaring which existing REST endpoints agents should call. Published at \`/agents.json\` or \`/.well-known/agents.json\`. Drives C6.
|
|
31330
|
+
|
|
31331
|
+
## agent-permissions.json
|
|
31332
|
+
|
|
31333
|
+
Discovery path: \`/.well-known/agent-permissions.json\` (preferred) or \`/agent-permissions.json\`
|
|
31334
|
+
|
|
31335
|
+
A manifest declaring per-path agent access policies. Drives C7.
|
|
31336
|
+
|
|
31337
|
+
## UCP \u2014 Unified Capability Profile
|
|
31338
|
+
|
|
31339
|
+
Discovery path: \`/.well-known/ucp\`
|
|
31340
|
+
|
|
31341
|
+
A composite profile that bundles OAuth authorization server metadata ([RFC 8414](https://datatracker.ietf.org/doc/html/rfc8414)) with capability declarations. Drives C8 (profile exists) and C9 (OAuth Authorization Server metadata, gated on C8).
|
|
31342
|
+
|
|
31343
|
+
## x402 \u2014 HTTP 402 Payment Required
|
|
31344
|
+
|
|
31345
|
+
Reference: <https://www.x402.org>
|
|
31346
|
+
|
|
31347
|
+
Behavioural rather than manifest-based. Agent Ready probes the scanned URL preserving its path; if the response is HTTP 402 with valid \`accepts\` entries, C10 and C11 pass. Otherwise both drop.
|
|
31348
|
+
`;
|
|
31349
|
+
|
|
31350
|
+
// src/resources.ts
|
|
31351
|
+
function registerResources(server) {
|
|
31352
|
+
server.registerResource(
|
|
31353
|
+
"methodology",
|
|
31354
|
+
"agent-ready://methodology",
|
|
31355
|
+
{
|
|
31356
|
+
title: "Scoring methodology",
|
|
31357
|
+
description: "How Agent Ready computes the 0\u2013100 readability score and the llms.txt sub-score. Covers the 59 checks across four categories, rating bands, weighting, and JS-rendering handling.",
|
|
31358
|
+
mimeType: "text/markdown"
|
|
31359
|
+
},
|
|
31360
|
+
async () => ({
|
|
31361
|
+
contents: [
|
|
31362
|
+
{
|
|
31363
|
+
uri: "agent-ready://methodology",
|
|
31364
|
+
mimeType: "text/markdown",
|
|
31365
|
+
text: METHODOLOGY_MD
|
|
31366
|
+
}
|
|
31367
|
+
]
|
|
31368
|
+
})
|
|
31369
|
+
);
|
|
31370
|
+
server.registerResource(
|
|
31371
|
+
"checks",
|
|
31372
|
+
"agent-ready://checks",
|
|
31373
|
+
{
|
|
31374
|
+
title: "Check registry",
|
|
31375
|
+
description: "Reference table of all 59 checks Agent Ready runs, grouped by category (site, page, llms.txt, protocol). Each row pairs the stable check ID (e.g. P11, S15, L9, C3) with its human-readable name. Use this to identify a check by id when interpreting scan results.",
|
|
31376
|
+
mimeType: "text/markdown"
|
|
31377
|
+
},
|
|
31378
|
+
async () => ({
|
|
31379
|
+
contents: [
|
|
31380
|
+
{
|
|
31381
|
+
uri: "agent-ready://checks",
|
|
31382
|
+
mimeType: "text/markdown",
|
|
31383
|
+
text: CHECKS_MD
|
|
31384
|
+
}
|
|
31385
|
+
]
|
|
31386
|
+
})
|
|
31387
|
+
);
|
|
31388
|
+
server.registerResource(
|
|
31389
|
+
"llms-txt",
|
|
31390
|
+
"agent-ready://llms.txt",
|
|
31391
|
+
{
|
|
31392
|
+
title: "Agent Ready's own llms.txt",
|
|
31393
|
+
description: "The /llms.txt file agent-ready.dev publishes for AI agents discovering it as a tool. Mirrors the live document at https://agent-ready.dev/llms.txt. Useful as a worked example for the llms.txt validator and for clients introspecting Agent Ready's surface.",
|
|
31394
|
+
mimeType: "text/markdown"
|
|
31395
|
+
},
|
|
31396
|
+
async () => ({
|
|
31397
|
+
contents: [
|
|
31398
|
+
{
|
|
31399
|
+
uri: "agent-ready://llms.txt",
|
|
31400
|
+
mimeType: "text/markdown",
|
|
31401
|
+
text: LLMS_TXT
|
|
31402
|
+
}
|
|
31403
|
+
]
|
|
31404
|
+
})
|
|
31405
|
+
);
|
|
31406
|
+
server.registerResource(
|
|
31407
|
+
"specs",
|
|
31408
|
+
"agent-ready://specs",
|
|
31409
|
+
{
|
|
31410
|
+
title: "Specifications Agent Ready validates against",
|
|
31411
|
+
description: "Canonical URLs and check-ID mappings for the seven specifications Agent Ready implements: Vercel Agent Readability Spec, llmstxt.org, MCP Server Cards (SEP-1649 / RFC 9728), A2A Agent Cards (a2a.proto v1.0.0), Wildcard agents.json, agent-permissions.json, UCP (RFC 8414), and x402 Payment Required.",
|
|
31412
|
+
mimeType: "text/markdown"
|
|
31413
|
+
},
|
|
31414
|
+
async () => ({
|
|
31415
|
+
contents: [
|
|
31416
|
+
{
|
|
31417
|
+
uri: "agent-ready://specs",
|
|
31418
|
+
mimeType: "text/markdown",
|
|
31419
|
+
text: SPECS_MD
|
|
31420
|
+
}
|
|
31421
|
+
]
|
|
31422
|
+
})
|
|
31423
|
+
);
|
|
31424
|
+
}
|
|
31425
|
+
|
|
31136
31426
|
// src/tools/scanSite.ts
|
|
31137
31427
|
var ToolError = class extends Error {
|
|
31138
31428
|
constructor(code, message) {
|
|
@@ -31238,7 +31528,7 @@ var getScanInputShape = {
|
|
|
31238
31528
|
// src/server.ts
|
|
31239
31529
|
var SERVER_INFO = {
|
|
31240
31530
|
name: "agent-ready",
|
|
31241
|
-
version: "0.
|
|
31531
|
+
version: "0.2.0"
|
|
31242
31532
|
};
|
|
31243
31533
|
function createMcpServer(config2) {
|
|
31244
31534
|
const server = new McpServer(SERVER_INFO);
|
|
@@ -31281,6 +31571,7 @@ function createMcpServer(config2) {
|
|
|
31281
31571
|
}
|
|
31282
31572
|
);
|
|
31283
31573
|
registerPrompts(server);
|
|
31574
|
+
registerResources(server);
|
|
31284
31575
|
return server;
|
|
31285
31576
|
}
|
|
31286
31577
|
function toolErrorToContent(err) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-ready-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"mcpName": "io.github.mlava/agent-ready-mcp",
|
|
5
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
6
|
"license": "MIT",
|