Skip to main content
Glama

agent-ready-mcp

MCP server for Agent Ready — scan any URL for AI agent 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). 71 checks across four spec families — 39 site and page checks (15 site-wide + 24 per-page), 10 against llmstxt.org, and 22 against agent-protocol manifests — each with per-check fix guidance, plus a separate accessibility sub-score from 23 WCAG 2.2 / layout-stability checks.

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).

Features

  • scan_site — fresh agent-readability scan on any URL. Works without a key on the anonymous free tier (3 scans/30 days per IP, 25-page depth, synchronous); with a Pro key it scans up to 250 pages, polling the hosted API up to 60s.

  • get_scan — fetch a previously-run scan by id (Pro key required — scan history is account-scoped).

  • ask — natural-language (NLWeb) search over Agent Ready's own methodology, checks, and specs. Public, no API key required; returns Schema.org-typed results.

  • validate_structured_data — validate a page's (or a pasted) JSON-LD against Agent Ready's structured-data checks. Public, no API key required; paste mode needs no network, so an agent can check JSON-LD it just authored.

  • Three discovery promptsscan, interpret_scan, remediation_plan. End-to-end workflows from URL → score → fix-it plan.

  • SKILL.md — Claude Skill descriptor included under skills/agent-ready/ for activation routing.

Related MCP server: mcp-seo-audit

Setup

No key is required to start: scan_site, ask, and validate_structured_data all work anonymously out of the box (scan_site on the free anonymous quota — 3 scans per 30 days per IP at 25-page depth). An Agent Ready Pro API key unlocks 50 scans/month, 250-page depth, scan history (get_scan), and weekly monitoring — sign up at agent-ready.dev and issue a key from the dashboard. The env block in the configs below is optional; omit it to run keyless.

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "agent-ready": {
      "command": "npx",
      "args": ["-y", "agent-ready-mcp@latest"],
      "env": {
        "AGENT_READY_API_KEY": "ar_live_..."
      }
    }
  }
}

Claude Code

claude mcp add agent-ready \
  -e AGENT_READY_API_KEY=ar_live_... \
  -- npx -y agent-ready-mcp@latest

Cursor / VS Code / Windsurf

.cursor/mcp.json, .vscode/mcp.json, or ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "agent-ready": {
      "command": "npx",
      "args": ["-y", "agent-ready-mcp@latest"],
      "env": {
        "AGENT_READY_API_KEY": "ar_live_..."
      }
    }
  }
}

Environment variables

Variable

Required

Default

Purpose

AGENT_READY_API_KEY

No

Pro Bearer token from the Agent Ready dashboard. Without it, scan_site uses the anonymous free tier and get_scan is unavailable.

AGENT_READY_API_URL

No

https://agent-ready.dev

Override for self-hosted or staging deployments.

AGENT_READY_SCAN_TIMEOUT_MS

No

60000

How long scan_site polls before returning a running placeholder.

AGENT_READY_GET_TIMEOUT_MS

No

5000

Timeout for get_scan and per-poll fetches.

Tools

Tool

Inputs

Returns

scan_site

url (string, required), pageLimit (number, optional, max 2000 — capped by your plan; fixed at 25 keyless)

Scan object: Vercel score 0–100, llms.txt sub-score 0–100, per-check findings with howToFix strings. Keyless runs use the anonymous free tier (3 scans/30 days per IP) and return synchronously; with a Pro key, returns { id, status: "running" } placeholder if the scan exceeds the poll deadline.

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. Pro key required.

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.

validate_structured_data

exactly one of url (string) or jsonld (string)

D-series structured-data result: mode, url, per-check findings, and a summary verdict. Public — no API key required. Validates schema lint + agent-coherence the first-party validators don't.

Prompts

Prompt

Args

What it does

scan

url

Fresh scan + high-level summary (score, rating, top 3–5 failures, next step).

interpret_scan

id

Plain-English explanation of a previous scan's findings, grouped by category.

remediation_plan

id, optional focus ("seo" or "agents")

Prioritised fix-it doc with Now/Next/Later buckets and per-fix check ids.

Example workflow

You: Use agent-ready to scan https://my-saas.com
Claude: [calls scan_site] Your site scored 78/100 (Good) on the Vercel Agent
        Readability Spec. The top 3 fixes: …
You: Can you build me a remediation plan?
Claude: [calls remediation_plan with the scan id] Here's the prioritised list…

Skill (Anthropic Claude Skills)

A SKILL.md lives at skills/agent-ready/SKILL.md inside the package. To use it in Claude Desktop / Claude Code, copy the skills/agent-ready/ directory into ~/.claude/skills/.

The skill describes when to activate (URL + readability-audit intent), which tool to pick, how to surface scan results without dumping raw JSON, and when to defer to other tools (general SEO, performance profiling, code editing).

How it works

This package is a thin stdio→HTTPS wrapper:

MCP client (stdio) ↔ agent-ready-mcp ↔ HTTPS ↔ agent-ready.dev/api/v1/scans

All scan execution, persistence, and Pro-tier quota enforcement happen on the hosted server. The npm package only translates between MCP JSON-RPC over stdio and the REST API.

If you'd rather use the hosted MCP server directly (Streamable HTTP transport, no local install), point your MCP client at https://agent-ready.dev/api/v1/mcp with Authorization: Bearer ar_live_....

Methodology

The 71 checks, their weights, and the score formula are documented at 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).

Development

npm install
npm run build       # → dist/mcp-server.mjs
npm test
npm run typecheck

Releasing

See RELEASE.md. It is the source of truth for version surfaces, local checks, tag pushing, the GitHub Actions release workflow, and the manual post-release steps.

License

MIT — see LICENSE.

Available Tools

4 tools
askAsk Agent Ready in natural languageA
Read-onlyIdempotent
Inspect

Natural-language search (NLWeb /ask) over Agent Ready's own content — scoring methodology, the check registry, the specs it validates, and the content library (explainers, comparisons, how-to guides, glossary). 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesNatural-language question about Agent Ready's scoring methodology, its check registry, the specs it validates, or its content library (explainers, comparisons, how-to guides, glossary).
modeNo'summarize' adds an extractive summary over the top results.
itemTypeNoOptional filter narrowing the search to one corpus type ('page' = explainers/guides/glossary).

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeNo
siteNo
_metaNo
errorNo
queryNo
resultsNo
summaryNo
query_idNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive. Description adds return type (Schema.org-typed objects) and effects of mode and itemType, going beyond annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, efficiently front-loaded with purpose. No redundant information; each sentence adds unique value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity (3 parameters, one required, has output schema), description covers inputs, outputs, security, and optional behaviors. Sufficient for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so baseline 3. Description adds context: frames 'q' as natural-language question over specific content, explains 'mode' adds summary, and 'itemType' filters corpus type – meaningful value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it is a natural-language search over Agent Ready's content, listing specific domains. Verb 'search' and resource are explicit, distinguishing it from sibling tools like scan_site and validate_structured_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions it is public with no API key required, and describes optional parameters. Implicitly suggests use for questions about Agent Ready's content, but does not explicitly contrast with siblings or state when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_scanGet a previous scan by idA
Read-onlyIdempotent
Inspect

Fetches a completed or in-progress scan by its id. Requires a Pro API key — scan history is account-scoped. (Anonymous scan_site calls return their result inline, so keyless use never needs this tool.)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesScan id returned by a previous scan_site call (10-character nanoid).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlNo
statusYes
messageNo
pollUrlNo
rootUrlNo
saveUrlNo
createdAtNo
shareTokenNo
siteChecksNo
completedAtNo
pageResultsNo
vercelScoreNo
llmstxtScoreNo
pagesScannedNo
vercelRatingNo
llmstxtChecksNo
pagesDiscoveredNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses behavioral details beyond annotations: fetches both completed and in-progress scans, requires Pro API key, and is account-scoped. No contradiction with annotations (readOnlyHint, etc.)

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first sentence states primary purpose, second adds key usage context. Every sentence adds value with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool (single parameter, output schema exists, annotations rich), the description fully covers purpose, usage context, and differentiation from siblings. Complete for effective tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already describes the id parameter in detail (returned by scan_site, 10-character nanoid). The description adds no new parameter information, so baseline score 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'fetches' and the resource 'scan by its id'. It distinguishes from sibling scan_site by noting that anonymous scan_site returns results inline, so this tool is for retrieving previous scans.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (Pro API key, account-scoped scan history) and when not to use (anonymous calls should use scan_site). Provides clear context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_siteScan a site for AI agent readabilityA
Read-onlyIdempotent
Inspect

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. Works without an API key on the anonymous free tier (3 scans/30 days per IP, 25-page depth, synchronous). With a Pro AGENT_READY_API_KEY it scans deeper (up to 250 pages) and 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesFully-qualified URL to scan, including scheme (https://...).
pageLimitNoOptional maximum number of pages to crawl from the root URL. Capped by your plan (Free 25, Pro 250, Team 2000).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlNo
statusYes
messageNo
pollUrlNo
rootUrlNo
saveUrlNo
createdAtNo
shareTokenNo
siteChecksNo
completedAtNo
pageResultsNo
vercelScoreNo
llmstxtScoreNo
pagesScannedNo
vercelRatingNo
llmstxtChecksNo
pagesDiscoveredNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly, openWorld, idempotent, non-destructive. The description adds significant behavioral context: anonymous free tier limits (3 scans/30 days, 25-page depth), synchronous execution with timeout, and fallback to async polling. No contradiction with annotations; description enriches them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first sentence states purpose and output structure; second sentence covers tiers, limits, and polling fallback. Every clause earns its place; no redundancy. Front-loaded with key action and results.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's medium complexity, the description covers purpose, input (URL), output (structured scores), tier behavior, and polling mechanism. Output schema exists, so return values need not be detailed. All necessary information for correct selection and invocation is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds plan-specific caps for pageLimit (Free 25, Pro 250, Team 2000), which is not in the schema. This helps the agent choose appropriate values, justifying a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'runs the agent-ready.dev scanner' and the resource 'a URL', and specifies the structured results (Vercel score, llmstxt.org score, per-check findings). It implicitly distinguishes from sibling 'get_scan' by mentioning polling, so an agent knows this initiates the scan while get_scan retrieves results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (to scan a site) and provides tier-specific behavior (free with limits, Pro deeper). It explicitly instructs to poll with 'get_scan' if the deadline elapses. However, it does not explicitly state when not to use it (e.g., for already-scanned sites), but that is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_structured_dataValidate JSON-LD structured dataA
Read-onlyIdempotent
Inspect

Validates a page's (or a pasted) JSON-LD against Agent Ready's structured-data checks (schema lint + agent-coherence: freshness honesty, canonical/.md coherence, entity-name consistency, extraction signal) and returns a verdict with per-check fix guidance. Provide exactly one of url (fetch + validate) or jsonld (validate a string the agent just authored — no network needed). Public, no API key required. The one structured-data check the first-party validators (validator.schema.org, Rich Results Test) don't do.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL of a page to fetch and validate its JSON-LD. Provide either url OR jsonld, not both.
jsonldNoA raw JSON-LD string to validate directly (paste mode) — e.g. structured data an agent just authored. Provide either jsonld OR url, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
modeYes
checksYes
summaryYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint true, destructiveHint false, and idempotentHint true. The description adds valuable context: it is public, requires no API key, and lists the specific checks performed (freshness, honesty, coherence, etc.), which goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences) and front-loaded with the main action. Every sentence earns its place: the first explains what the tool does and the checks, the second clarifies the parameters and unique value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description need not explain return values. It covers the tool's purpose, input modes, behavioral traits, and unique differentiation, making it complete for an agent to decide and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds meaning to each parameter: 'url' is for fetching and validating, 'jsonld' is for validating a string with no network. This adds value beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a verb (validates), a resource (JSON-LD structured data), and a clear scope (Agent Ready's specific checks: schema lint + agent-coherence). It distinguishes itself from first-party validators, making the purpose unique and unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the two usage modes (url or jsonld) and the constraint 'provide exactly one'. It also notes that no API key is required and it's public. While it does not explicitly compare to sibling tools, the siblings appear unrelated, so no further guidance is necessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 3 tool updatesv0.7.0
    • Addedask
    • Changedget_scan1 field changed
      • addedOutput schema / properties / saveUrl
        Added value: +{
        +  "type": "string"
        +}
    • Addedscan_site
  2. 2 tool updatesv0.6.1
    • Removedask
    • Removedscan_site
  3. 4 tool updatesv0.5.0
    • Addedask
    • Changedget_scan1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "completedAt": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "createdAt": {
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "llmstxtChecks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "checkId": {
        +            "type": "string"
        +          },
        +          "details": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "howToFix": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "enum": [
        +              "pass",
        +              "fail",
        +              "warn",
        +              "error"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "checkId",
        +          "name",
        +          "status",
        +          "message",
        +          "howToFix"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "llmstxtScore": {
        +      "type": "number"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "pageResults": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "checks": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "checkId": {
        +                  "type": "string"
        +                },
        +                "details": {
        +                  "additionalProperties": {},
        +                  "propertyNames": {
        +                    "type": "string"
        +                  },
        +                  "type": "object"
        +                },
        +                "howToFix": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "message": {
        +                  "type": "string"
        +                },
        +                "name": {
        +                  "type": "string"
        +                },
        +                "status": {
        +                  "enum": [
        +                    "pass",
        +                    "fail",
        +                    "warn",
        +                    "error"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "checkId",
        +                "name",
        +                "status",
        +                "message",
        +                "howToFix"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "url",
        +          "checks"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pagesDiscovered": {
        +      "type": "number"
        +    },
        +    "pagesScanned": {
        +      "type": "number"
        +    },
        +    "pollUrl": {
        +      "type": "string"
        +    },
        +    "rootUrl": {
        +      "type": "string"
        +    },
        +    "shareToken": {
        +      "type": "string"
        +    },
        +    "siteChecks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "checkId": {
        +            "type": "string"
        +          },
        +          "details": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "howToFix": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "enum": [
        +              "pass",
        +              "fail",
        +              "warn",
        +              "error"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "checkId",
        +          "name",
        +          "status",
        +          "message",
        +          "howToFix"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "status": {
        +      "enum": [
        +        "running",
        +        "completed",
        +        "failed"
        +      ],
        +      "type": "string"
        +    },
        +    "url": {
        +      "type": "string"
        +    },
        +    "vercelRating": {
        +      "type": "string"
        +    },
        +    "vercelScore": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedscan_site1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "completedAt": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "createdAt": {
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "llmstxtChecks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "checkId": {
        +            "type": "string"
        +          },
        +          "details": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "howToFix": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "enum": [
        +              "pass",
        +              "fail",
        +              "warn",
        +              "error"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "checkId",
        +          "name",
        +          "status",
        +          "message",
        +          "howToFix"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "llmstxtScore": {
        +      "type": "number"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "pageResults": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "checks": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "checkId": {
        +                  "type": "string"
        +                },
        +                "details": {
        +                  "additionalProperties": {},
        +                  "propertyNames": {
        +                    "type": "string"
        +                  },
        +                  "type": "object"
        +                },
        +                "howToFix": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "message": {
        +                  "type": "string"
        +                },
        +                "name": {
        +                  "type": "string"
        +                },
        +                "status": {
        +                  "enum": [
        +                    "pass",
        +                    "fail",
        +                    "warn",
        +                    "error"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "checkId",
        +                "name",
        +                "status",
        +                "message",
        +                "howToFix"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "url",
        +          "checks"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pagesDiscovered": {
        +      "type": "number"
        +    },
        +    "pagesScanned": {
        +      "type": "number"
        +    },
        +    "pollUrl": {
        +      "type": "string"
        +    },
        +    "rootUrl": {
        +      "type": "string"
        +    },
        +    "shareToken": {
        +      "type": "string"
        +    },
        +    "siteChecks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "checkId": {
        +            "type": "string"
        +          },
        +          "details": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "howToFix": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "message": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "enum": [
        +              "pass",
        +              "fail",
        +              "warn",
        +              "error"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "checkId",
        +          "name",
        +          "status",
        +          "message",
        +          "howToFix"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "status": {
        +      "enum": [
        +        "running",
        +        "completed",
        +        "failed"
        +      ],
        +      "type": "string"
        +    },
        +    "url": {
        +      "type": "string"
        +    },
        +    "vercelRating": {
        +      "type": "string"
        +    },
        +    "vercelScore": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Addedvalidate_structured_data
  4. 2 tool updatesv0.2.0
    • First observedget_scan
    • First observedscan_site

TDQS

A4.7/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: scanning a site, retrieving scan results, searching documentation, and validating structured data. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern. 'ask' is a concise verb, but fits as it is a direct action.

Tool Count5/5

Four tools are well-scoped for Agent Ready's domain: scanning, result retrieval, knowledge base search, and validation. Not too few or too many.

Completeness5/5

The tool surface covers the core workflows: scan execution, result polling, documentation lookup, and structured data validation. No obvious gaps for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    GEO (Generative Engine Optimisation). This tool shows you exactly how AI search engines see your content - claim density, writing quality, E-E-A-T signals, extractability. Research-backed metrics that correlate with 40% higher AI citation rates.
    2
    82
    21
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    SEO audit and Google Search Console MCP server with 23 tools. Search analytics, URL inspection, Indexing API, Core Web Vitals (CrUX), striking distance keywords, keyword cannibalization detection, branded query analysis, and automated site audits.
    30
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mlava/agent-ready-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server