agent-ready-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 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). 59 checks with per-check fix guidance.
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). 60 checks 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
 
@@ -8,6 +8,7 @@ Hosted at `https://agent-ready.dev/api/v1/mcp` (Streamable HTTP); this package i
8
8
 
9
9
  - **`scan_site`** — fresh agent-readability scan on any URL. Polls the hosted API up to 60s; returns the full scan or a `running` placeholder.
10
10
  - **`get_scan`** — fetch a previously-run scan by id.
11
+ - **`ask`** — natural-language (NLWeb) search over Agent Ready's own methodology, checks, and specs. Public, no API key required; returns Schema.org-typed results.
11
12
  - **Three discovery prompts** — `scan`, `interpret_scan`, `remediation_plan`. End-to-end workflows from URL → score → fix-it plan.
12
13
  - **`SKILL.md`** — Claude Skill descriptor included under `skills/agent-ready/` for activation routing.
13
14
 
@@ -74,6 +75,7 @@ claude mcp add agent-ready \
74
75
  |---|---|---|
75
76
  | `scan_site` | `url` (string, required), `pageLimit` (number, optional, max 2000 — capped by your plan) | Scan object: Vercel score 0–100, llms.txt sub-score 0–100, per-check findings with `howToFix` strings. Returns `{ id, status: "running" }` placeholder if the scan exceeds the poll deadline. |
76
77
  | `get_scan` | `id` (string, scan id from a prior `scan_site` call) | Same scan object as `scan_site`, or `not_found` if the id is unknown or doesn't belong to the authenticated user. |
78
+ | `ask` | `q` (string, required), `itemType` (optional corpus filter), `mode` (optional, `list` or `summarize`) | NLWeb `/ask` over Agent Ready's methodology, checks, and specs. Public — no API key required. Schema.org-typed result objects. |
77
79
 
78
80
  ## Prompts
79
81
 
@@ -113,7 +115,7 @@ If you'd rather use the hosted MCP server directly (Streamable HTTP transport, n
113
115
 
114
116
  ## Methodology
115
117
 
116
- The 59 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).
118
+ The 60 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).
117
119
 
118
120
  ## Development
119
121
 
@@ -23108,6 +23108,51 @@ async function getScanFromApi(config2, id) {
23108
23108
  timeoutMs: config2.getTimeoutMs
23109
23109
  });
23110
23110
  }
23111
+ async function postAsk(config2, body) {
23112
+ const url2 = `${config2.baseUrl}/api/v1/ask`;
23113
+ const headers = {
23114
+ "Content-Type": "application/json",
23115
+ Accept: "application/json"
23116
+ };
23117
+ if (config2.apiKey) headers.Authorization = `Bearer ${config2.apiKey}`;
23118
+ const payloadBody = {
23119
+ query: { q: body.q, itemType: body.itemType },
23120
+ prefer: body.mode ? { mode: body.mode } : void 0
23121
+ };
23122
+ let res;
23123
+ try {
23124
+ res = await fetch(url2, {
23125
+ method: "POST",
23126
+ headers,
23127
+ body: JSON.stringify(payloadBody),
23128
+ signal: AbortSignal.timeout(config2.getTimeoutMs)
23129
+ });
23130
+ } catch (err) {
23131
+ if (err instanceof Error && err.name === "TimeoutError") {
23132
+ throw new ApiError(
23133
+ "timeout",
23134
+ `Request to /api/v1/ask timed out after ${config2.getTimeoutMs}ms.`
23135
+ );
23136
+ }
23137
+ const message = err instanceof Error ? err.message : String(err);
23138
+ throw new ApiError("network_error", `Network error calling /api/v1/ask: ${message}`);
23139
+ }
23140
+ const text = await res.text();
23141
+ let payload = null;
23142
+ if (text.length > 0) {
23143
+ try {
23144
+ payload = JSON.parse(text);
23145
+ } catch {
23146
+ }
23147
+ }
23148
+ if (payload && typeof payload === "object" && "_meta" in payload) {
23149
+ return payload;
23150
+ }
23151
+ if (!res.ok) {
23152
+ throw new ApiError(`http_${res.status}`, text || `HTTP ${res.status}`, res.status);
23153
+ }
23154
+ return payload;
23155
+ }
23111
23156
 
23112
23157
  // node_modules/zod/v3/helpers/util.js
23113
23158
  var util;
@@ -31133,6 +31178,303 @@ Skip checks that already pass.`
31133
31178
  );
31134
31179
  }
31135
31180
 
31181
+ // src/resource-content.ts
31182
+ var METHODOLOGY_MD = `# How Agent Ready scores a site
31183
+
31184
+ > 60 checks across four categories, mapped to the Vercel Agent Readability Spec and the llmstxt.org standard. Every check is open and reproducible.
31185
+
31186
+ ## What does Agent Ready measure?
31187
+
31188
+ 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.
31189
+
31190
+ ## How is the score calculated?
31191
+
31192
+ Two scores are reported: an overall agent readability score (0\u2013100) and an llms.txt sub-score (0\u2013100).
31193
+
31194
+ 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.
31195
+
31196
+ Rating bands:
31197
+
31198
+ | Score | Rating | Meaning |
31199
+ |---|---|---|
31200
+ | 90\u2013100 | excellent | Ready for AI citation; all critical surfaces present. |
31201
+ | 70\u201389 | good | Discoverable, but a few extractability gaps. |
31202
+ | 50\u201369 | fair | Partial coverage; multiple required surfaces missing. |
31203
+ | 0\u201349 | needs improvement | Not yet AI-readable; start with llms.txt and AGENTS.md. |
31204
+
31205
+ ## Why is the llms.txt sub-score weighted differently?
31206
+
31207
+ 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.
31208
+
31209
+ ## How are JavaScript-rendered pages handled?
31210
+
31211
+ 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.
31212
+
31213
+ ## Where is the source for each check?
31214
+
31215
+ 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.
31216
+
31217
+ Full guide: <https://agent-ready.dev/methodology>
31218
+ `;
31219
+ var CHECKS_MD = `# Agent Ready check registry
31220
+
31221
+ > 60 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
+
31223
+ ## Site checks (15)
31224
+
31225
+ 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.
31226
+
31227
+ | ID | Check |
31228
+ |---|---|
31229
+ | S1 | llms.txt exists |
31230
+ | S2 | llms.txt Content-Type |
31231
+ | S3 | llms.txt not empty |
31232
+ | S4 | llms.txt URL format |
31233
+ | S5 | robots.txt \u2014 AI bots allowed |
31234
+ | S6 | robots.txt \u2014 /llms.txt not blocked |
31235
+ | S7 | robots.txt exists |
31236
+ | S8 | sitemap.xml valid |
31237
+ | S9 | sitemap.xml has lastmod |
31238
+ | S10 | sitemap.md exists |
31239
+ | S11 | sitemap.md has headings + links |
31240
+ | S12 | AGENTS.md exists |
31241
+ | S13 | AGENTS.md has required sections |
31242
+ | S14 | HTTPS |
31243
+ | S15 | Root OpenAPI spec |
31244
+
31245
+ ## Page checks (23)
31246
+
31247
+ 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.
31248
+
31249
+ | ID | Check |
31250
+ |---|---|
31251
+ | P1 | HTTP 200 |
31252
+ | P2 | Redirect chain |
31253
+ | P3 | Content-Type header |
31254
+ | P4 | x-robots-tag |
31255
+ | P5 | Canonical link |
31256
+ | P6 | Meta description |
31257
+ | P7 | og:title |
31258
+ | P8 | og:description |
31259
+ | P9 | HTML lang attribute |
31260
+ | P10 | JSON-LD present |
31261
+ | P11 | JSON-LD has required fields |
31262
+ | P12 | Section headings |
31263
+ | P13 | Text-to-HTML ratio |
31264
+ | P14 | Glossary link |
31265
+ | P15 | Markdown mirror exists |
31266
+ | P16 | Markdown frontmatter |
31267
+ | P17 | Alternate link (markdown) |
31268
+ | P18 | Link header in markdown |
31269
+ | P19 | Content negotiation |
31270
+ | P20 | Sitemap section in markdown |
31271
+ | P21 | Code block language tags |
31272
+ | P22 | API schema link |
31273
+ | P23 | JS rendering dependency |
31274
+
31275
+ ## llms.txt checks (10)
31276
+
31277
+ 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.
31278
+
31279
+ | ID | Check |
31280
+ |---|---|
31281
+ | L1 | File accessible |
31282
+ | L2 | H1 present |
31283
+ | L3 | Valid markdown |
31284
+ | L4 | Blockquote summary |
31285
+ | L5 | H2 file-list sections |
31286
+ | L6 | Link format correct |
31287
+ | L7 | Links are accessible |
31288
+ | L8 | Optional section used correctly |
31289
+ | L9 | Content-Type: text/plain |
31290
+ | L10 | llms-full.txt available |
31291
+
31292
+ ## Protocol checks (12)
31293
+
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
+
31296
+ | ID | Check |
31297
+ |---|---|
31298
+ | C1 | MCP Server Card exists |
31299
+ | C2 | MCP Server Card fields |
31300
+ | C3 | MCP OAuth Protected Resource metadata |
31301
+ | C4 | A2A Agent Card exists |
31302
+ | C5 | A2A Agent Card fields |
31303
+ | C6 | Wildcard agents.json |
31304
+ | C7 | agent-permissions.json |
31305
+ | C8 | UCP profile (/.well-known/ucp) |
31306
+ | C9 | UCP OAuth Authorization Server metadata |
31307
+ | C10 | x402 Payment Required response |
31308
+ | C11 | x402 accepts entries |
31309
+ | C12 | NLWeb endpoint |
31310
+ `;
31311
+ var LLMS_TXT = `# Agent Ready
31312
+
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 60 checks and provides actionable fix guidance for every failing check.
31314
+
31315
+ 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
+
31317
+ ## Tools
31318
+
31319
+ - Home: <https://agent-ready.dev>
31320
+ - Agent Readability Score: <https://agent-ready.dev/agent-readability-score>
31321
+ - llms.txt Checker: <https://agent-ready.dev/llms-txt-checker>
31322
+ - AGENTS.md Validator: <https://agent-ready.dev/agents-md-validator>
31323
+ - MCP Server Card Validator: <https://agent-ready.dev/mcp-card-validator>
31324
+ - A2A Agent Card Validator: <https://agent-ready.dev/agent-card-validator>
31325
+ - agents.json Validator: <https://agent-ready.dev/agents-json-validator>
31326
+ - agent-permissions.json Validator: <https://agent-ready.dev/agent-permissions-validator>
31327
+ - UCP Validator: <https://agent-ready.dev/ucp-validator>
31328
+ - x402 Checker: <https://agent-ready.dev/x402-checker>
31329
+ - API & integrations: <https://agent-ready.dev/docs/api>
31330
+ - MCP server install guide: <https://agent-ready.dev/mcp>
31331
+
31332
+ ## Specs
31333
+
31334
+ - Vercel Agent Readability Spec: <https://vercel.com/kb/guide/agent-readability-spec>
31335
+ - llmstxt.org: <https://llmstxt.org>
31336
+ - Model Context Protocol: <https://modelcontextprotocol.io>
31337
+ - A2A Protocol: <https://a2a-protocol.org>
31338
+ - Wildcard agents.json: <https://github.com/wild-card-ai/agents-json>
31339
+ `;
31340
+ var SPECS_MD = `# Specs Agent Ready validates against
31341
+
31342
+ Agent Ready's 60 checks map to the specifications below. Each entry links to the canonical document and notes the check IDs that implement it.
31343
+
31344
+ ## Vercel Agent Readability Spec
31345
+
31346
+ Canonical: <https://vercel.com/kb/guide/agent-readability-spec>
31347
+
31348
+ Maintained on the Vercel Knowledge Base. Drives the S- (site, 15 checks), P- (page, 23 checks), and most C- (protocol) check series.
31349
+
31350
+ ## llmstxt.org
31351
+
31352
+ Canonical: <https://llmstxt.org>
31353
+
31354
+ 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.
31355
+
31356
+ ## Model Context Protocol \u2014 Server Cards (SEP-1649)
31357
+
31358
+ Canonical: <https://modelcontextprotocol.io>
31359
+ SEP: <https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1649> (ratified 2025-11-25)
31360
+
31361
+ 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)).
31362
+
31363
+ ## A2A Protocol \u2014 Agent Cards
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).
31400
+ `;
31401
+
31402
+ // src/resources.ts
31403
+ function registerResources(server) {
31404
+ server.registerResource(
31405
+ "methodology",
31406
+ "agent-ready://methodology",
31407
+ {
31408
+ title: "Scoring methodology",
31409
+ description: "How Agent Ready computes the 0\u2013100 readability score and the llms.txt sub-score. Covers the 60 checks across four categories, rating bands, weighting, and JS-rendering handling.",
31410
+ mimeType: "text/markdown"
31411
+ },
31412
+ async () => ({
31413
+ contents: [
31414
+ {
31415
+ uri: "agent-ready://methodology",
31416
+ mimeType: "text/markdown",
31417
+ text: METHODOLOGY_MD
31418
+ }
31419
+ ]
31420
+ })
31421
+ );
31422
+ server.registerResource(
31423
+ "checks",
31424
+ "agent-ready://checks",
31425
+ {
31426
+ title: "Check registry",
31427
+ description: "Reference table of all 60 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
+ mimeType: "text/markdown"
31429
+ },
31430
+ async () => ({
31431
+ contents: [
31432
+ {
31433
+ uri: "agent-ready://checks",
31434
+ mimeType: "text/markdown",
31435
+ text: CHECKS_MD
31436
+ }
31437
+ ]
31438
+ })
31439
+ );
31440
+ server.registerResource(
31441
+ "llms-txt",
31442
+ "agent-ready://llms.txt",
31443
+ {
31444
+ title: "Agent Ready's own llms.txt",
31445
+ 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.",
31446
+ mimeType: "text/markdown"
31447
+ },
31448
+ async () => ({
31449
+ contents: [
31450
+ {
31451
+ uri: "agent-ready://llms.txt",
31452
+ mimeType: "text/markdown",
31453
+ text: LLMS_TXT
31454
+ }
31455
+ ]
31456
+ })
31457
+ );
31458
+ server.registerResource(
31459
+ "specs",
31460
+ "agent-ready://specs",
31461
+ {
31462
+ 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 Payment Required, and NLWeb.",
31464
+ mimeType: "text/markdown"
31465
+ },
31466
+ async () => ({
31467
+ contents: [
31468
+ {
31469
+ uri: "agent-ready://specs",
31470
+ mimeType: "text/markdown",
31471
+ text: SPECS_MD
31472
+ }
31473
+ ]
31474
+ })
31475
+ );
31476
+ }
31477
+
31136
31478
  // src/tools/scanSite.ts
31137
31479
  var ToolError = class extends Error {
31138
31480
  constructor(code, message) {
@@ -31222,6 +31564,19 @@ async function getScanById(config2, input) {
31222
31564
  }
31223
31565
  }
31224
31566
 
31567
+ // src/tools/ask.ts
31568
+ async function askQuery(config2, input) {
31569
+ try {
31570
+ const envelope = await postAsk(config2, input);
31571
+ return { content: [{ type: "text", text: JSON.stringify(envelope) }] };
31572
+ } catch (err) {
31573
+ if (err instanceof ApiError) {
31574
+ throw new ToolError(err.code, err.message);
31575
+ }
31576
+ throw err;
31577
+ }
31578
+ }
31579
+
31225
31580
  // src/types.ts
31226
31581
  var scanSiteInputShape = {
31227
31582
  url: external_exports.string().url().max(2e3).describe("Fully-qualified URL to scan, including scheme (https://...)."),
@@ -31234,11 +31589,18 @@ var getScanInputShape = {
31234
31589
  "Scan id returned by a previous scan_site call (10-character nanoid)."
31235
31590
  )
31236
31591
  };
31592
+ var askInputShape = {
31593
+ q: external_exports.string().min(1).max(2e3).describe(
31594
+ "Natural-language question about Agent Ready's scoring methodology, its check registry, or the specs it validates."
31595
+ ),
31596
+ itemType: external_exports.enum(["methodology", "checks", "specs", "llms-txt", "check", "any"]).optional().describe("Optional filter narrowing the search to one corpus type."),
31597
+ mode: external_exports.enum(["list", "summarize"]).optional().describe("'summarize' adds an extractive summary over the top results.")
31598
+ };
31237
31599
 
31238
31600
  // src/server.ts
31239
31601
  var SERVER_INFO = {
31240
31602
  name: "agent-ready",
31241
- version: "0.1.2"
31603
+ version: "0.3.0"
31242
31604
  };
31243
31605
  function createMcpServer(config2) {
31244
31606
  const server = new McpServer(SERVER_INFO);
@@ -31280,7 +31642,24 @@ function createMcpServer(config2) {
31280
31642
  }
31281
31643
  }
31282
31644
  );
31645
+ server.registerTool(
31646
+ "ask",
31647
+ {
31648
+ title: "Ask Agent Ready in natural language",
31649
+ 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
+ inputSchema: askInputShape,
31651
+ annotations: READ_ONLY_OPEN_WORLD
31652
+ },
31653
+ async (args) => {
31654
+ try {
31655
+ return await askQuery(config2, args);
31656
+ } catch (err) {
31657
+ return toolErrorToContent(err);
31658
+ }
31659
+ }
31660
+ );
31283
31661
  registerPrompts(server);
31662
+ registerResources(server);
31284
31663
  return server;
31285
31664
  }
31286
31665
  function toolErrorToContent(err) {
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "agent-ready-mcp",
3
- "version": "0.1.2",
3
+ "version": "0.3.0",
4
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.",
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",
7
7
  "author": "Agent Ready",
8
8
  "repository": {
@@ -67,7 +67,7 @@ When grouping or filtering, use the check-id prefix:
67
67
  - **S1–S15** — site-wide checks (run once per scan): llms.txt, robots.txt, sitemap.xml, sitemap.md, AGENTS.md, HTTPS, OpenAPI
68
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
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
70
+ - **C1–C12** — agent-protocol checks (run when the relevant endpoint exists): MCP server cards, A2A agent cards, agents.json, agent-permissions.json, UCP, x402, NLWeb (`/ask`)
71
71
 
72
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
73