agent-ready-mcp 0.3.0 → 0.4.1
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 +2 -2
- package/dist/mcp-server.mjs +123 -77
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# agent-ready-mcp
|
|
2
2
|
|
|
3
|
-
MCP server for [Agent Ready](https://agent-ready.dev) — scan any URL for AI agent readability against the [Vercel Agent Readability Spec](https://vercel.com/kb/guide/agent-readability-spec), the [llmstxt.org](https://llmstxt.org) standard, and agent-protocol manifests (MCP server cards, A2A, agents.json, agent-permissions.json, UCP, x402, NLWeb).
|
|
3
|
+
MCP server for [Agent Ready](https://agent-ready.dev) — scan any URL for AI agent readability against the [Vercel Agent Readability Spec](https://vercel.com/kb/guide/agent-readability-spec), the [llmstxt.org](https://llmstxt.org) standard, and agent-protocol manifests (MCP server cards, A2A, agents.json, agent-permissions.json, UCP, x402, NLWeb). 68 checks across four spec families — 38 against the Vercel spec (15 site-wide + 23 per-page), 10 against llmstxt.org, and 20 against agent-protocol manifests — each with per-check fix guidance.
|
|
4
4
|
|
|
5
5
|
Hosted at `https://agent-ready.dev/api/v1/mcp` (Streamable HTTP); this package is a thin stdio wrapper around the same REST endpoints, distributed via npm for local MCP clients (Claude Desktop, Claude Code, Cursor, VS Code, Windsurf).
|
|
6
6
|
|
|
@@ -115,7 +115,7 @@ If you'd rather use the hosted MCP server directly (Streamable HTTP transport, n
|
|
|
115
115
|
|
|
116
116
|
## Methodology
|
|
117
117
|
|
|
118
|
-
The
|
|
118
|
+
The 68 checks, their weights, and the score formula are documented at [agent-ready.dev/methodology](https://agent-ready.dev/methodology). Both `manifest.json` and `server.json` in this repo conform to the relevant registry schemas (Glama Marketplace v0.3 and MCP registry 2025-12-11 respectively).
|
|
119
119
|
|
|
120
120
|
## Development
|
|
121
121
|
|
package/dist/mcp-server.mjs
CHANGED
|
@@ -9229,13 +9229,13 @@ var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
|
|
|
9229
9229
|
canary.aborted = true;
|
|
9230
9230
|
return canary;
|
|
9231
9231
|
}
|
|
9232
|
-
const
|
|
9233
|
-
if (
|
|
9232
|
+
const checkResult2 = runChecks(payload, checks, ctx);
|
|
9233
|
+
if (checkResult2 instanceof Promise) {
|
|
9234
9234
|
if (ctx.async === false)
|
|
9235
9235
|
throw new $ZodAsyncError();
|
|
9236
|
-
return
|
|
9236
|
+
return checkResult2.then((checkResult3) => inst._zod.parse(checkResult3, ctx));
|
|
9237
9237
|
}
|
|
9238
|
-
return inst._zod.parse(
|
|
9238
|
+
return inst._zod.parse(checkResult2, ctx);
|
|
9239
9239
|
};
|
|
9240
9240
|
inst._zod.run = (payload, ctx) => {
|
|
9241
9241
|
if (ctx.skipChecks) {
|
|
@@ -31181,7 +31181,7 @@ Skip checks that already pass.`
|
|
|
31181
31181
|
// src/resource-content.ts
|
|
31182
31182
|
var METHODOLOGY_MD = `# How Agent Ready scores a site
|
|
31183
31183
|
|
|
31184
|
-
>
|
|
31184
|
+
> 68 checks across four categories, mapped to the Vercel Agent Readability Spec and the llmstxt.org standard. Every check is open and reproducible.
|
|
31185
31185
|
|
|
31186
31186
|
## What does Agent Ready measure?
|
|
31187
31187
|
|
|
@@ -31218,7 +31218,7 @@ Full guide: <https://agent-ready.dev/methodology>
|
|
|
31218
31218
|
`;
|
|
31219
31219
|
var CHECKS_MD = `# Agent Ready check registry
|
|
31220
31220
|
|
|
31221
|
-
>
|
|
31221
|
+
> 68 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.
|
|
31222
31222
|
|
|
31223
31223
|
## Site checks (15)
|
|
31224
31224
|
|
|
@@ -31289,7 +31289,7 @@ Run when the site has an \`llms.txt\` file. Validate against the [llmstxt.org](h
|
|
|
31289
31289
|
| L9 | Content-Type: text/plain |
|
|
31290
31290
|
| L10 | llms-full.txt available |
|
|
31291
31291
|
|
|
31292
|
-
## Protocol checks (
|
|
31292
|
+
## Protocol checks (20)
|
|
31293
31293
|
|
|
31294
31294
|
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.
|
|
31295
31295
|
|
|
@@ -31307,10 +31307,18 @@ Discover-then-validate: when the relevant well-known endpoint returns 404, the c
|
|
|
31307
31307
|
| C10 | x402 Payment Required response |
|
|
31308
31308
|
| C11 | x402 accepts entries |
|
|
31309
31309
|
| C12 | NLWeb endpoint |
|
|
31310
|
+
| C13 | API Catalog (RFC 9727) |
|
|
31311
|
+
| C14 | Web Bot Auth directory |
|
|
31312
|
+
| C15 | Agent Skills Discovery |
|
|
31313
|
+
| C16 | Content parity (no cloaking) |
|
|
31314
|
+
| C17 | Agent-driven UI (A2UI) |
|
|
31315
|
+
| C18 | MPP Payment challenge |
|
|
31316
|
+
| C19 | MPP challenge params |
|
|
31317
|
+
| C20 | AP2 payment protocol support |
|
|
31310
31318
|
`;
|
|
31311
31319
|
var LLMS_TXT = `# Agent Ready
|
|
31312
31320
|
|
|
31313
|
-
> 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
|
|
31321
|
+
> 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 68 checks and provides actionable fix guidance for every failing check.
|
|
31314
31322
|
|
|
31315
31323
|
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.
|
|
31316
31324
|
|
|
@@ -31339,64 +31347,37 @@ This resource mirrors agent-ready.dev's own /llms.txt so MCP clients can introsp
|
|
|
31339
31347
|
`;
|
|
31340
31348
|
var SPECS_MD = `# Specs Agent Ready validates against
|
|
31341
31349
|
|
|
31342
|
-
Agent Ready's
|
|
31350
|
+
Agent Ready's checks map to the specifications below. Each entry links to the canonical document (where one exists) and notes the check IDs that implement it. Entries marked \`pre-standard\` are drafts or emerging conventions; \`behavioural\` entries have no published document. Protocol (C) checks are reported but unscored.
|
|
31343
31351
|
|
|
31344
|
-
##
|
|
31352
|
+
## Readability
|
|
31345
31353
|
|
|
31346
|
-
Canonical: <https://vercel.com/kb/guide/agent-readability-spec>
|
|
31354
|
+
- **Vercel Agent Readability Spec** \u2014 The core spec for exposing a site to AI agents \u2014 discovery files, structured data, clean HTML, and markdown mirrors. Drives most site (S) and every page (P) check. Canonical: <https://vercel.com/kb/guide/agent-readability-spec> Checks: S5\u2013S15, P1\u2013P23.
|
|
31355
|
+
- **llmstxt.org** \u2014 The /llms.txt curated-context file (and optional llms-full.txt companion). Structural checks carry 3\xD7 weight in the llms.txt sub-score. Canonical: <https://llmstxt.org> Checks: S1\u2013S4, L1\u2013L10.
|
|
31347
31356
|
|
|
31348
|
-
|
|
31357
|
+
## Agent protocols
|
|
31349
31358
|
|
|
31350
|
-
|
|
31359
|
+
- **MCP Server Cards (SEP-1649)** \u2014 The Model Context Protocol discovery card at /.well-known/mcp.json \u2014 its presence (C1) and required fields (C2). Canonical: <https://modelcontextprotocol.io> Checks: C1, C2.
|
|
31360
|
+
- **OAuth Protected Resource Metadata (RFC 9728)** \u2014 Protected-resource metadata an MCP server advertises so agents can locate its authorization server. Canonical: <https://datatracker.ietf.org/doc/html/rfc9728> Checks: C3.
|
|
31361
|
+
- **A2A Protocol \u2014 Agent Cards** \u2014 The agent card at /.well-known/agent-card.json that lets agents discover and call other agents \u2014 existence with correct Content-Type (C4) and required fields (C5). Canonical: <https://a2a-protocol.org> Checks: C4, C5.
|
|
31362
|
+
- **Wildcard agents.json** _(pre-standard)_ \u2014 An OpenAPI extension declaring which existing REST endpoints agents should call. Pre-standard (v0.1.0). Canonical: <https://github.com/wild-card-ai/agents-json> Checks: C6.
|
|
31363
|
+
- **agent-permissions.json** _(pre-standard)_ \u2014 A manifest declaring per-path agent access policies, served at /.well-known/agent-permissions.json. No canonical spec document yet \u2014 defined by the discovery path. Canonical: _none published_ Checks: C7.
|
|
31364
|
+
- **UCP \u2014 Unified Capability Profile** \u2014 A composite profile at /.well-known/ucp bundling OAuth authorization-server metadata with capability declarations. Canonical: <https://ucp.dev> Checks: C8.
|
|
31365
|
+
- **OAuth Authorization Server Metadata (RFC 8414)** \u2014 The authorization-server metadata a UCP profile references so agents can complete an OAuth flow. Gated on C8. Canonical: <https://datatracker.ietf.org/doc/html/rfc8414> Checks: C9.
|
|
31351
31366
|
|
|
31352
|
-
|
|
31367
|
+
## Payments
|
|
31353
31368
|
|
|
31354
|
-
|
|
31369
|
+
- **x402 \u2014 HTTP 402 Payment Required** \u2014 A behavioural payments scheme: a paid endpoint answers with HTTP 402 and a JSON body carrying an accepts array \u2014 the 402 response (C10) and valid accepts entries (C11). Canonical: <https://www.x402.org> Checks: C10, C11.
|
|
31370
|
+
- **MPP \u2014 Machine Payments Protocol** _(pre-standard)_ \u2014 The Stripe- and Tempo-authored "Payment" HTTP auth scheme on the IETF standards track \u2014 the WWW-Authenticate: Payment challenge (C18) and its required params (C19). Canonical: <https://paymentauth.org/> Checks: C18, C19.
|
|
31371
|
+
- **AP2 \u2014 Agent Payments Protocol** _(pre-standard)_ \u2014 Google's trust/authorization layer for agent-led payments, built on A2A: a participant advertises support via the AP2 extension URI in its A2A Agent Card. Detection only \u2014 mandate verifiable credentials are runtime SD-JWTs with no static artifact. Pre-standard (v0.2.0). Canonical: <https://github.com/google-agentic-commerce/AP2> Checks: C20.
|
|
31355
31372
|
|
|
31356
|
-
##
|
|
31373
|
+
## Discovery & integrity
|
|
31357
31374
|
|
|
31358
|
-
Canonical: <https://
|
|
31359
|
-
|
|
31360
|
-
|
|
31361
|
-
|
|
31362
|
-
|
|
31363
|
-
|
|
31364
|
-
|
|
31365
|
-
Canonical: <https://a2a-protocol.org>
|
|
31366
|
-
Schema: a2a.proto v1.0.0
|
|
31367
|
-
|
|
31368
|
-
The agent card published at \`/.well-known/agent-card.json\`. Drives C4 (exists with correct Content-Type) and C5 (required fields).
|
|
31369
|
-
|
|
31370
|
-
## Wildcard agents.json
|
|
31371
|
-
|
|
31372
|
-
Canonical: <https://github.com/wild-card-ai/agents-json>
|
|
31373
|
-
Version: v0.1.0 (pre-standard)
|
|
31374
|
-
|
|
31375
|
-
OpenAPI extension declaring which existing REST endpoints agents should call. Published at \`/agents.json\` or \`/.well-known/agents.json\`. Drives C6.
|
|
31376
|
-
|
|
31377
|
-
## agent-permissions.json
|
|
31378
|
-
|
|
31379
|
-
Discovery path: \`/.well-known/agent-permissions.json\` (preferred) or \`/agent-permissions.json\`
|
|
31380
|
-
|
|
31381
|
-
A manifest declaring per-path agent access policies. Drives C7.
|
|
31382
|
-
|
|
31383
|
-
## UCP \u2014 Unified Capability Profile
|
|
31384
|
-
|
|
31385
|
-
Discovery path: \`/.well-known/ucp\`
|
|
31386
|
-
|
|
31387
|
-
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).
|
|
31388
|
-
|
|
31389
|
-
## x402 \u2014 HTTP 402 Payment Required
|
|
31390
|
-
|
|
31391
|
-
Reference: <https://www.x402.org>
|
|
31392
|
-
|
|
31393
|
-
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.
|
|
31394
|
-
|
|
31395
|
-
## NLWeb
|
|
31396
|
-
|
|
31397
|
-
Canonical: <https://nlweb.ai/docs/specification>
|
|
31398
|
-
|
|
31399
|
-
An open natural-language query protocol: a site exposes \`POST /ask\` returning Schema.org-typed JSON, and every NLWeb instance is also an MCP server. NLWeb has no discovery standard, so detection is heuristic \u2014 Agent Ready does a low-aggression GET to the conventional \`/ask\` path and correlates with the MCP server card. Drives C12 (best-effort NLWeb endpoint detection, informational).
|
|
31375
|
+
- **NLWeb** \u2014 An open natural-language query protocol: a site exposes POST /ask returning Schema.org-typed JSON. Detection is heuristic and informational. Canonical: <https://nlweb.ai/docs/specification> Checks: C12.
|
|
31376
|
+
- **API Catalog (RFC 9727)** \u2014 A /.well-known/api-catalog linkset advertising a site's APIs so agents can enumerate them from one well-known entry point. Canonical: <https://www.rfc-editor.org/info/rfc9727> Checks: C13.
|
|
31377
|
+
- **Web Bot Auth** _(pre-standard)_ \u2014 An HTTP message-signatures directory at /.well-known/http-message-signatures-directory letting well-behaved bots prove their identity. IETF draft. Canonical: <https://datatracker.ietf.org/doc/draft-meunier-web-bot-auth-architecture/> Checks: C14.
|
|
31378
|
+
- **Agent Skills Discovery** _(pre-standard)_ \u2014 A /.well-known/agent-skills/index.json manifest advertising installable agent skills. Pre-standard (Cloudflare RFC v0.2.0). Canonical: <https://github.com/cloudflare/agent-skills-discovery> Checks: C15.
|
|
31379
|
+
- **Content parity (anti-cloaking)** _(behavioural)_ \u2014 Not a published spec \u2014 a behavioural check comparing the AI-bot response to the baseline to detect cloaking (serving agents different content than humans). Canonical: _none published_ Checks: C16.
|
|
31380
|
+
- **Agent-driven UI (A2UI)** _(pre-standard)_ \u2014 MCP-Apps / OpenAI Apps SDK UI surfaces declared on an MCP Server Card, letting agents render interactive widgets inline. Emerging. Canonical: <https://modelcontextprotocol.io> Checks: C17.
|
|
31400
31381
|
`;
|
|
31401
31382
|
|
|
31402
31383
|
// src/resources.ts
|
|
@@ -31406,7 +31387,7 @@ function registerResources(server) {
|
|
|
31406
31387
|
"agent-ready://methodology",
|
|
31407
31388
|
{
|
|
31408
31389
|
title: "Scoring methodology",
|
|
31409
|
-
description: "How Agent Ready computes the 0\u2013100 readability score and the llms.txt sub-score. Covers the
|
|
31390
|
+
description: "How Agent Ready computes the 0\u2013100 readability score and the llms.txt sub-score. Covers the 68 checks across four categories, rating bands, weighting, and JS-rendering handling.",
|
|
31410
31391
|
mimeType: "text/markdown"
|
|
31411
31392
|
},
|
|
31412
31393
|
async () => ({
|
|
@@ -31424,7 +31405,7 @@ function registerResources(server) {
|
|
|
31424
31405
|
"agent-ready://checks",
|
|
31425
31406
|
{
|
|
31426
31407
|
title: "Check registry",
|
|
31427
|
-
description: "Reference table of all
|
|
31408
|
+
description: "Reference table of all 68 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.",
|
|
31428
31409
|
mimeType: "text/markdown"
|
|
31429
31410
|
},
|
|
31430
31411
|
async () => ({
|
|
@@ -31460,7 +31441,7 @@ function registerResources(server) {
|
|
|
31460
31441
|
"agent-ready://specs",
|
|
31461
31442
|
{
|
|
31462
31443
|
title: "Specifications Agent Ready validates against",
|
|
31463
|
-
description: "Canonical URLs and check-ID mappings for the 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), x402
|
|
31444
|
+
description: "Canonical URLs and check-ID mappings for the 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), x402 and MPP payments, NLWeb, API Catalog (RFC 9727), Web Bot Auth, Agent Skills Discovery, content parity, and Agent-driven UI (A2UI).",
|
|
31464
31445
|
mimeType: "text/markdown"
|
|
31465
31446
|
},
|
|
31466
31447
|
async () => ({
|
|
@@ -31529,22 +31510,22 @@ async function scanSite(config2, input) {
|
|
|
31529
31510
|
throw err;
|
|
31530
31511
|
}
|
|
31531
31512
|
if (last && last.status && last.status !== "running") {
|
|
31532
|
-
return {
|
|
31513
|
+
return {
|
|
31514
|
+
content: [{ type: "text", text: JSON.stringify(last) }],
|
|
31515
|
+
structuredContent: last
|
|
31516
|
+
};
|
|
31533
31517
|
}
|
|
31534
31518
|
}
|
|
31519
|
+
const running = {
|
|
31520
|
+
id: placeholder.id,
|
|
31521
|
+
status: "running",
|
|
31522
|
+
url: input.url,
|
|
31523
|
+
pollUrl: placeholder.pollUrl ?? `/api/v1/scans/${placeholder.id}`,
|
|
31524
|
+
message: "Scan still running after the local poll deadline. Call get_scan with this id to fetch the final result."
|
|
31525
|
+
};
|
|
31535
31526
|
return {
|
|
31536
|
-
content: [
|
|
31537
|
-
|
|
31538
|
-
type: "text",
|
|
31539
|
-
text: JSON.stringify({
|
|
31540
|
-
id: placeholder.id,
|
|
31541
|
-
status: "running",
|
|
31542
|
-
url: input.url,
|
|
31543
|
-
pollUrl: placeholder.pollUrl ?? `/api/v1/scans/${placeholder.id}`,
|
|
31544
|
-
message: "Scan still running after the local poll deadline. Call get_scan with this id to fetch the final result."
|
|
31545
|
-
})
|
|
31546
|
-
}
|
|
31547
|
-
]
|
|
31527
|
+
content: [{ type: "text", text: JSON.stringify(running) }],
|
|
31528
|
+
structuredContent: running
|
|
31548
31529
|
};
|
|
31549
31530
|
}
|
|
31550
31531
|
|
|
@@ -31552,7 +31533,10 @@ async function scanSite(config2, input) {
|
|
|
31552
31533
|
async function getScanById(config2, input) {
|
|
31553
31534
|
try {
|
|
31554
31535
|
const scan = await getScanFromApi(config2, input.id);
|
|
31555
|
-
return {
|
|
31536
|
+
return {
|
|
31537
|
+
content: [{ type: "text", text: JSON.stringify(scan) }],
|
|
31538
|
+
structuredContent: scan
|
|
31539
|
+
};
|
|
31556
31540
|
} catch (err) {
|
|
31557
31541
|
if (err instanceof ApiError) {
|
|
31558
31542
|
if (err.status === 404) {
|
|
@@ -31568,7 +31552,10 @@ async function getScanById(config2, input) {
|
|
|
31568
31552
|
async function askQuery(config2, input) {
|
|
31569
31553
|
try {
|
|
31570
31554
|
const envelope = await postAsk(config2, input);
|
|
31571
|
-
return {
|
|
31555
|
+
return {
|
|
31556
|
+
content: [{ type: "text", text: JSON.stringify(envelope) }],
|
|
31557
|
+
structuredContent: envelope && typeof envelope === "object" ? envelope : {}
|
|
31558
|
+
};
|
|
31572
31559
|
} catch (err) {
|
|
31573
31560
|
if (err instanceof ApiError) {
|
|
31574
31561
|
throw new ToolError(err.code, err.message);
|
|
@@ -31577,6 +31564,62 @@ async function askQuery(config2, input) {
|
|
|
31577
31564
|
}
|
|
31578
31565
|
}
|
|
31579
31566
|
|
|
31567
|
+
// src/output.ts
|
|
31568
|
+
var checkResult = external_exports.object({
|
|
31569
|
+
checkId: external_exports.string(),
|
|
31570
|
+
name: external_exports.string(),
|
|
31571
|
+
status: external_exports.enum(["pass", "fail", "warn", "error"]),
|
|
31572
|
+
message: external_exports.string(),
|
|
31573
|
+
howToFix: external_exports.string().nullable(),
|
|
31574
|
+
details: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
31575
|
+
});
|
|
31576
|
+
var pageResult = external_exports.object({
|
|
31577
|
+
url: external_exports.string(),
|
|
31578
|
+
checks: external_exports.array(checkResult)
|
|
31579
|
+
});
|
|
31580
|
+
var scanOutputShape = {
|
|
31581
|
+
id: external_exports.string(),
|
|
31582
|
+
status: external_exports.enum(["running", "completed", "failed"]),
|
|
31583
|
+
rootUrl: external_exports.string().optional(),
|
|
31584
|
+
createdAt: external_exports.string().optional(),
|
|
31585
|
+
completedAt: external_exports.string().nullable().optional(),
|
|
31586
|
+
pagesDiscovered: external_exports.number().optional(),
|
|
31587
|
+
pagesScanned: external_exports.number().optional(),
|
|
31588
|
+
vercelScore: external_exports.number().optional(),
|
|
31589
|
+
vercelRating: external_exports.string().optional(),
|
|
31590
|
+
llmstxtScore: external_exports.number().optional(),
|
|
31591
|
+
siteChecks: external_exports.array(checkResult).optional(),
|
|
31592
|
+
llmstxtChecks: external_exports.array(checkResult).optional(),
|
|
31593
|
+
pageResults: external_exports.array(pageResult).optional(),
|
|
31594
|
+
shareToken: external_exports.string().optional(),
|
|
31595
|
+
// Present only on the running placeholder, not on a full Scan.
|
|
31596
|
+
url: external_exports.string().optional(),
|
|
31597
|
+
pollUrl: external_exports.string().optional(),
|
|
31598
|
+
message: external_exports.string().optional()
|
|
31599
|
+
};
|
|
31600
|
+
var askResult = external_exports.object({
|
|
31601
|
+
url: external_exports.string().optional(),
|
|
31602
|
+
name: external_exports.string().optional(),
|
|
31603
|
+
site: external_exports.string().optional(),
|
|
31604
|
+
score: external_exports.number().optional(),
|
|
31605
|
+
description: external_exports.string().optional(),
|
|
31606
|
+
schema_object: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
31607
|
+
});
|
|
31608
|
+
var askOutputShape = {
|
|
31609
|
+
_meta: external_exports.object({
|
|
31610
|
+
response_type: external_exports.string(),
|
|
31611
|
+
version: external_exports.string().optional(),
|
|
31612
|
+
mode: external_exports.string().optional()
|
|
31613
|
+
}).optional(),
|
|
31614
|
+
query_id: external_exports.string().optional(),
|
|
31615
|
+
site: external_exports.string().optional(),
|
|
31616
|
+
mode: external_exports.string().optional(),
|
|
31617
|
+
query: external_exports.string().optional(),
|
|
31618
|
+
results: external_exports.array(askResult).optional(),
|
|
31619
|
+
summary: external_exports.string().optional(),
|
|
31620
|
+
error: external_exports.object({ code: external_exports.string(), message: external_exports.string() }).optional()
|
|
31621
|
+
};
|
|
31622
|
+
|
|
31580
31623
|
// src/types.ts
|
|
31581
31624
|
var scanSiteInputShape = {
|
|
31582
31625
|
url: external_exports.string().url().max(2e3).describe("Fully-qualified URL to scan, including scheme (https://...)."),
|
|
@@ -31600,7 +31643,7 @@ var askInputShape = {
|
|
|
31600
31643
|
// src/server.ts
|
|
31601
31644
|
var SERVER_INFO = {
|
|
31602
31645
|
name: "agent-ready",
|
|
31603
|
-
version: "0.
|
|
31646
|
+
version: "0.4.0"
|
|
31604
31647
|
};
|
|
31605
31648
|
function createMcpServer(config2) {
|
|
31606
31649
|
const server = new McpServer(SERVER_INFO);
|
|
@@ -31616,6 +31659,7 @@ function createMcpServer(config2) {
|
|
|
31616
31659
|
title: "Scan a site for AI agent readability",
|
|
31617
31660
|
description: "Runs the agent-ready.dev scanner against a URL and returns structured results: Vercel score, llmstxt.org score, and per-check findings with remediation hints. Scans may take up to ~60s; if the local poll deadline elapses, the tool returns the scan id and asks you to poll with get_scan.",
|
|
31618
31661
|
inputSchema: scanSiteInputShape,
|
|
31662
|
+
outputSchema: scanOutputShape,
|
|
31619
31663
|
annotations: READ_ONLY_OPEN_WORLD
|
|
31620
31664
|
},
|
|
31621
31665
|
async (args) => {
|
|
@@ -31632,6 +31676,7 @@ function createMcpServer(config2) {
|
|
|
31632
31676
|
title: "Get a previous scan by id",
|
|
31633
31677
|
description: "Fetches a completed or in-progress scan by its id. Only scans owned by the authenticated API key's user are returned.",
|
|
31634
31678
|
inputSchema: getScanInputShape,
|
|
31679
|
+
outputSchema: scanOutputShape,
|
|
31635
31680
|
annotations: READ_ONLY_OPEN_WORLD
|
|
31636
31681
|
},
|
|
31637
31682
|
async (args) => {
|
|
@@ -31648,6 +31693,7 @@ function createMcpServer(config2) {
|
|
|
31648
31693
|
title: "Ask Agent Ready in natural language",
|
|
31649
31694
|
description: "Natural-language search (NLWeb /ask) over Agent Ready's own content \u2014 scoring methodology, the check registry, and the specs it validates. Public, no API key required. Returns Schema.org-typed result objects; optional itemType narrows to a corpus type and mode 'summarize' adds an extractive summary.",
|
|
31650
31695
|
inputSchema: askInputShape,
|
|
31696
|
+
outputSchema: askOutputShape,
|
|
31651
31697
|
annotations: READ_ONLY_OPEN_WORLD
|
|
31652
31698
|
},
|
|
31653
31699
|
async (args) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-ready-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
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, NLWeb). 60 checks with per-check fix guidance.",
|
|
6
6
|
"license": "MIT",
|