Skip to main content
Glama

Get AgentReady Results

agentready_scan
Read-only

Runs the AgentReady scan on one site and returns the raw result, with no view. It fetches the site's public pages and runs 21 checks across five weighted categories (Discovery & Access, Readable for Agents, Structured Data, Actions & MCP, Trust & Safety), returning a 0-100 agent-readiness score, the per-category breakdown of every check, and the top fixes ranked by the points each would recover. When bot protection blocks too many checks the result carries limited: true and the headline score is not meaningful, though the per-check breakdown still is. When the scan does not run it returns ok: false with an errorType of invalid, unreachable, timeout or ratelimited. agent_ready runs this same scan and presents it as a visual report, so this tool fits the cases a view does not: the result is wanted as data, or several sites are being compared at once. The AgentReady view also calls this tool to run its own scan. Read-only: it fetches only public pages of the site named in the call and changes nothing on it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesThe site to scan. A bare hostname like stripe.com works.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYes
scoreYesAgent-readiness score, 0-100.
limitedYesTrue when bot protection blocked so much that the headline score is not meaningful; the per-check breakdown still is.
cleanUrlYesHostname and path scanned, e.g. stripe.com.
topFixesYesFixes ranked by the points each would recover.
scannedAtYesWhen the scan finished, Unix milliseconds.
categoriesYesThe five weighted categories and their 21 checks.
protectionYesBot protection on the homepage, or null when there is none.
scannedUrlYesThe absolute URL that was fetched.
projectedScoreYesThe score the site would reach with the top fixes applied.
unverifiedCountYesChecks that could not be verified, e.g. behind bot protection.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "categories": {
      +      "description": "The five weighted categories and their 21 checks.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "checks": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "categoryId": {
      +                  "$ref": "#/properties/categories/items/properties/id"
      +                },
      +                "id": {
      +                  "type": "string"
      +                },
      +                "note": {
      +                  "description": "Short evidence, e.g. \"1,204 URLs\" or \"404 · missing\".",
      +                  "type": "string"
      +                },
      +                "state": {
      +                  "description": "pass, partial (counts as half) or fail; unknown means it could not be verified and is left out of the score.",
      +                  "enum": [
      +                    "pass",
      +                    "partial",
      +                    "fail",
      +                    "unknown"
      +                  ],
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "categoryId",
      +                "state",
      +                "note"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "id": {
      +            "enum": [
      +              "discovery",
      +              "readable",
      +              "structured",
      +              "actions",
      +              "trust"
      +            ],
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "num": {
      +            "description": "Display number, e.g. \"01\".",
      +            "type": "string"
      +          },
      +          "passCount": {
      +            "type": "number"
      +          },
      +          "score": {
      +            "description": "Category score, 0-100.",
      +            "type": "number"
      +          },
      +          "total": {
      +            "type": "number"
      +          },
      +          "unknownCount": {
      +            "description": "Checks that could not be verified, excluded from score.",
      +            "type": "number"
      +          },
      +          "weight": {
      +            "description": "Percent of the overall score; the five sum to 100.",
      +            "type": "number"
      +          },
      +          "why": {
      +            "description": "Why the category matters to AI agents.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "num",
      +          "name",
      +          "weight",
      +          "why",
      +          "score",
      +          "passCount",
      +          "total",
      +          "unknownCount",
      +          "checks"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "cleanUrl": {
      +      "description": "Hostname and path scanned, e.g. stripe.com.",
      +      "type": "string"
      +    },
      +    "limited": {
      +      "description": "True when bot protection blocked so much that the headline score is not meaningful; the per-check breakdown still is.",
      +      "type": "boolean"
      +    },
      +    "ok": {
      +      "const": true,
      +      "type": "boolean"
      +    },
      +    "projectedScore": {
      +      "description": "The score the site would reach with the top fixes applied.",
      +      "type": "number"
      +    },
      +    "protection": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "vendor": {
      +              "description": "Bot protection detected, e.g. \"Cloudflare\".",
      +              "type": "string"
      +            },
      +            "via": {
      +              "description": "The signal it was detected by.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "vendor",
      +            "via"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Bot protection on the homepage, or null when there is none."
      +    },
      +    "scannedAt": {
      +      "description": "When the scan finished, Unix milliseconds.",
      +      "type": "number"
      +    },
      +    "scannedUrl": {
      +      "description": "The absolute URL that was fetched.",
      +      "type": "string"
      +    },
      +    "score": {
      +      "description": "Agent-readiness score, 0-100.",
      +      "type": "number"
      +    },
      +    "topFixes": {
      +      "description": "Fixes ranked by the points each would recover.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "body": {
      +            "type": "string"
      +          },
      +          "checkId": {
      +            "type": "string"
      +          },
      +          "impact": {
      +            "description": "Points the overall score would gain if this check passed.",
      +            "type": "number"
      +          },
      +          "rank": {
      +            "type": "number"
      +          },
      +          "tag": {
      +            "description": "Category and weight, e.g. \"ACTIONS & MCP · 30%\".",
      +            "type": "string"
      +          },
      +          "title": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "checkId",
      +          "rank",
      +          "title",
      +          "body",
      +          "tag",
      +          "impact"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "unverifiedCount": {
      +      "description": "Checks that could not be verified, e.g. behind bot protection.",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "ok",
      +    "cleanUrl",
      +    "scannedUrl",
      +    "score",
      +    "projectedScore",
      +    "categories",
      +    "topFixes",
      +    "unverifiedCount",
      +    "limited",
      +    "protection",
      +    "scannedAt"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint and destructiveHint annotations, the description discloses failure modes (limited: true when bot protection blocks, ok: false with errorType values), the side-effect-free nature ('fetches only public pages and changes nothing'), and the meaning of the score when limited. This fully informs the agent of behavioral expectations without contradicting annotations.

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

Conciseness4/5

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

The description is long but every sentence earns its place: it covers purpose, categories, return structure, edge cases, and usage comparison. It is front-loaded with the core action and progressively adds detail, though the length could be trimmed slightly without losing meaning.

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?

Despite the existence of an output schema, the description comprehensively explains the return structure (score, per-category breakdown, top fixes), the limited flag semantics, and errorType values. Combined with the usage guidance and parameter hint, nothing an agent needs to call and interpret the tool correctly is missing.

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 schema already describes the url parameter. The description adds a practical hint ('A bare hostname like stripe.com works') and clarifies that the tool scans a single site, which aids correct invocation. This exceeds the baseline of 3 because it gives input-format guidance not present in the 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?

The description opens with a specific verb and resource ('Runs the AgentReady scan on one site and returns the raw result, with no view'), which clearly distinguishes it from the sibling agent_ready that presents a visual report. It also enumerates the 21 checks across five categories, making the scope unambiguous.

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?

The description explicitly states when to use this tool instead of agent_ready: 'this tool fits the cases a view does not: the result is wanted as data, or several sites are being compared at once.' It also notes that the AgentReady view calls this tool internally, clarifying the orchestration relationship.

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.

Resources