Skip to main content
Glama

Scan a site for AI agent readability

scan_site
Read-onlyIdempotent

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; for larger scans the tool returns a scan id and asks you to poll with get_scan.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesFull URL of the site to scan, e.g. https://example.com. Must be a public http(s) address.
pageLimitNoMaximum number of pages to crawl. Defaults to your tier's per-scan page limit when omitted.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesThe scan id.
statusYesScan status: running, completed, or failed.
pollUrlNoPoll URL while the scan is still running.
rootUrlNoThe scanned site URL.
shareUrlNoPath to the shareable report (/scan/<id>).
vercelScoreNoScore against the Vercel Agent Readability Spec (0–100); null while running.
llmstxtScoreNollms.txt score (0–100).
pagesScannedNoNumber of pages scanned.
vercelRatingNoRating band for the Vercel score.
pagesDiscoveredNoNumber of pages discovered.
protocolResultsNoAgent-protocol checks (C-series) that ran — only for endpoints the site actually exposes.
accessibilityScoreNoAccessibility / layout-stability sub-score (0–100) over the homepage WCAG checks; null when none ran. Separate from the Vercel score.
accessibilityChecksNoAccessibility / layout-stability checks (A-series) run over the homepage.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed1 schema field changed
    • changedOutput schema / properties / vercelScore / description
      Previous value: -"Vercel agent-readability score (0–100); null while running."New value: +"Score against the Vercel Agent Readability Spec (0–100); null while running."
  2. Changed3 schema fields changed
    • addedOutput schema / properties / accessibilityChecks
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "checkId": {
      +            "type": "string"
      +          },
      +          "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"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Accessibility / layout-stability checks (A-series) run over the homepage."
      +}
    • addedOutput schema / properties / accessibilityScore
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Accessibility / layout-stability sub-score (0–100) over the homepage WCAG checks; null when none ran. Separate from the Vercel score."
      +}
    • addedOutput schema / properties / protocolResults
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "checkId": {
      +            "type": "string"
      +          },
      +          "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"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Agent-protocol checks (C-series) that ran — only for endpoints the site actually exposes."
      +}
  3. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark the tool readOnly, idempotent, openWorld, and non-destructive. The description adds valuable behavioral context beyond that: latency up to ~60s and deferred results via a scan id and polling. It doesn't mention potential rate limits or costs from repeated scans, but doesn't contradict 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?

Two sentences front-load the core action and outputs, then add the latency and polling behavior. No filler or repetition of schema content.

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?

Output schema covers structured results, so the description need not re-explain return values. The description supplies the remaining operational context—timeouts and delegation to get_scan—while the schema covers parameters; an agent has enough to call and follow up correctly.

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 description coverage is 100%, so url and pageLimit are already documented with formats, constraints, and defaults. The description doesn't add new parameter meaning beyond the schema, matching the baseline for well-covered schemas.

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?

States a specific verb ('Runs the agent-ready.dev scanner') and resource ('against a URL') plus the exact outputs: Vercel score, llmstxt.org score, and per-check findings with remediation hints. It also distinguishes itself from the sibling get_scan by describing the async polling flow for larger scans.

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?

Gives clear usage context: scans can take up to ~60s and, for larger scans, the tool instructs the agent to poll with get_scan, which is an explicit alternative. It doesn't discuss the ask sibling or say when scan_site is not appropriate, but the main decision point is covered.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: ask searches content, scan_site initiates scans, and get_scan retrieves scan results. There is no overlap or ambiguity between them.

Naming Consistency4/5

Tool names mostly follow a verb-based pattern (ask, scan_site, get_scan), with slight variation in that 'ask' lacks an explicit object while the others are verb_noun. Overall consistent enough to be predictable.

Tool Count5/5

Three tools is well-scoped for a focused scanner/content-search server. Each tool serves a necessary function without bloat or redundancy.

Completeness4/5

The scan lifecycle (initiate and fetch) is covered, and content search is provided. Minor gaps like listing past scans or canceling scans exist, but these are workaroundable.