Skip to main content
Glama

Check AI readiness

check_ai_readiness
Read-only

Live scan of one website's AI search visibility (GEO/AEO, SEO for AI assistants): can ChatGPT, Claude and Perplexity crawl, read and cite it? Fetches the domain's /robots.txt, /llms.txt, /sitemap.xml and homepage, then returns a 0-100 score, grade, per-crawler allow/block status and prioritized fixes, each naming the AIReady tool that writes the fix. Use whenever a user names a site and asks about SEO, AI search or being found or cited by AI. Do NOT use for general advice on which bots to allow (use crawler_policy_guide) or to write new rules (use robots_txt_for_ai).

Input Schema

NameRequiredDescriptionDefault
domainYesPublic domain or URL to scan, e.g. example.com or https://example.com/page (path is ignored; no IPs, ports or localhost).

Output Schema

NameRequiredDescriptionDefault
gradeYesLetter grade: A >= 85, B >= 70, C >= 50, otherwise D.
notesNoCaveats about this scan, e.g. www. fallback used or requests refused by the site.
scoreYesWeighted readiness score 0-100 (pass = full weight, warn = half).
checksYesIndividual checks with pass/warn/fail status and weight.
domainYesNormalized host name that was scanned, e.g. example.com.
fetchedYesHTTP status and byte size of each fetched file (status 0 = network error).
findingsYesNon-passing checks as fixes; fail = high priority, warn = medium.
generatedYesReady-made fix snippets derived from the scan results.
disclaimerYesInformational disclaimer: crawler behaviour can change, verify against provider docs.
crawler_accessYesAccess verdict for each known AI crawler under the site's robots.txt.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedInput schema / properties / domain / description
      Previous value: -"Domain or URL, e.g. example.com"New value: +"Public domain or URL to scan, e.g. example.com or https://example.com/page (path is ignored; no IPs, ports or localhost)."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "checks": {
      +      "description": "Individual checks with pass/warn/fail status and weight.",
      +      "items": {
      +        "properties": {
      +          "detail": {
      +            "type": "string"
      +          },
      +          "id": {
      +            "enum": [
      +              "search_bots_allowed",
      +              "llms_txt",
      +              "sitemap",
      +              "structured_data",
      +              "meta",
      +              "content_signals",
      +              "https"
      +            ],
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "status": {
      +            "enum": [
      +              "pass",
      +              "warn",
      +              "fail"
      +            ],
      +            "type": "string"
      +          },
      +          "weight": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "status",
      +          "weight",
      +          "detail"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "crawler_access": {
      +      "description": "Access verdict for each known AI crawler under the site's robots.txt.",
      +      "items": {
      +        "properties": {
      +          "access": {
      +            "enum": [
      +              "allowed",
      +              "blocked",
      +              "no-rule"
      +            ],
      +            "type": "string"
      +          },
      +          "advice": {
      +            "type": "string"
      +          },
      +          "bot": {
      +            "type": "string"
      +          },
      +          "owner": {
      +            "type": "string"
      +          },
      +          "purpose": {
      +            "type": "string"
      +          },
      +          "visibility_critical": {
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "bot",
      +          "owner",
      +          "purpose",
      +          "visibility_critical",
      +          "access",
      +          "advice"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "disclaimer": {
      +      "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.",
      +      "type": "string"
      +    },
      +    "domain": {
      +      "description": "Normalized host name that was scanned, e.g. example.com.",
      +      "type": "string"
      +    },
      +    "fetched": {
      +      "description": "HTTP status and byte size of each fetched file (status 0 = network error).",
      +      "properties": {
      +        "homepage": {
      +          "description": "Homepage fetch result.",
      +          "properties": {
      +            "bytes": {
      +              "type": "number"
      +            },
      +            "status": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "bytes"
      +          ],
      +          "type": "object"
      +        },
      +        "llms": {
      +          "description": "llms.txt fetch result.",
      +          "properties": {
      +            "bytes": {
      +              "type": "number"
      +            },
      +            "status": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "bytes"
      +          ],
      +          "type": "object"
      +        },
      +        "robots": {
      +          "description": "robots.txt fetch result.",
      +          "properties": {
      +            "bytes": {
      +              "type": "number"
      +            },
      +            "status": {
      +              "type": "number"
      +            },
      +            "truncated": {
      +              "type": "boolean"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "bytes",
      +            "truncated"
      +          ],
      +          "type": "object"
      +        },
      +        "sitemap": {
      +          "description": "sitemap.xml fetch result.",
      +          "properties": {
      +            "bytes": {
      +              "type": "number"
      +            },
      +            "status": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "bytes"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "robots",
      +        "llms",
      +        "sitemap",
      +        "homepage"
      +      ],
      +      "type": "object"
      +    },
      +    "findings": {
      +      "description": "Non-passing checks as fixes; fail = high priority, warn = medium.",
      +      "items": {
      +        "properties": {
      +          "check": {
      +            "type": "string"
      +          },
      +          "detail": {
      +            "type": "string"
      +          },
      +          "fix_with": {
      +            "description": "AIReady tool that generates the fix, when one applies.",
      +            "enum": [
      +              "robots_txt_for_ai",
      +              "llms_txt_draft",
      +              "schema_jsonld_sample"
      +            ],
      +            "type": "string"
      +          },
      +          "priority": {
      +            "enum": [
      +              "high",
      +              "medium"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "check",
      +          "priority",
      +          "detail"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "generated": {
      +      "description": "Ready-made fix snippets derived from the scan results.",
      +      "properties": {
      +        "llms_txt_hint": {
      +          "description": "Pointer to llms_txt_draft and the publish URL.",
      +          "type": "string"
      +        },
      +        "robots_snippet_to_unblock_search_bots": {
      +          "description": "robots.txt lines allowing blocked visibility-critical bots, or null if none are blocked.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "robots_snippet_to_unblock_search_bots",
      +        "llms_txt_hint"
      +      ],
      +      "type": "object"
      +    },
      +    "grade": {
      +      "description": "Letter grade: A >= 85, B >= 70, C >= 50, otherwise D.",
      +      "enum": [
      +        "A",
      +        "B",
      +        "C",
      +        "D"
      +      ],
      +      "type": "string"
      +    },
      +    "notes": {
      +      "description": "Caveats about this scan, e.g. www. fallback used or requests refused by the site.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "score": {
      +      "description": "Weighted readiness score 0-100 (pass = full weight, warn = half).",
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "domain",
      +    "score",
      +    "grade",
      +    "checks",
      +    "crawler_access",
      +    "findings",
      +    "generated",
      +    "fetched",
      +    "disclaimer"
      +  ],
      +  "type": "object"
      +}
  2. Changed3 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / domain / description
      Previous value: -"Public domain or URL to scan, e.g. example.com or https://example.com/page (path is ignored; no IPs, ports or localhost)."New value: +"Domain or URL, e.g. example.com"
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "checks": {
      -      "description": "Individual checks with pass/warn/fail status and weight.",
      -      "items": {
      -        "properties": {
      -          "detail": {
      -            "type": "string"
      -          },
      -          "id": {
      -            "enum": [
      -              "search_bots_allowed",
      -              "llms_txt",
      -              "sitemap",
      -              "structured_data",
      -              "meta",
      -              "content_signals",
      -              "https"
      -            ],
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "status": {
      -            "enum": [
      -              "pass",
      -              "warn",
      -              "fail"
      -            ],
      -            "type": "string"
      -          },
      -          "weight": {
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "name",
      -          "status",
      -          "weight",
      -          "detail"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "crawler_access": {
      -      "description": "Access verdict for each known AI crawler under the site's robots.txt.",
      -      "items": {
      -        "properties": {
      -          "access": {
      -            "enum": [
      -              "allowed",
      -              "blocked",
      -              "no-rule"
      -            ],
      -            "type": "string"
      -          },
      -          "advice": {
      -            "type": "string"
      -          },
      -          "bot": {
      -            "type": "string"
      -          },
      -          "owner": {
      -            "type": "string"
      -          },
      -          "purpose": {
      -            "type": "string"
      -          },
      -          "visibility_critical": {
      -            "type": "boolean"
      -          }
      -        },
      -        "required": [
      -          "bot",
      -          "owner",
      -          "purpose",
      -          "visibility_critical",
      -          "access",
      -          "advice"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "disclaimer": {
      -      "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.",
      -      "type": "string"
      -    },
      -    "domain": {
      -      "description": "Normalized host name that was scanned, e.g. example.com.",
      -      "type": "string"
      -    },
      -    "fetched": {
      -      "description": "HTTP status and byte size of each fetched file (status 0 = network error).",
      -      "properties": {
      -        "homepage": {
      -          "description": "Homepage fetch result.",
      -          "properties": {
      -            "bytes": {
      -              "type": "number"
      -            },
      -            "status": {
      -              "type": "number"
      -            }
      -          },
      -          "required": [
      -            "status",
      -            "bytes"
      -          ],
      -          "type": "object"
      -        },
      -        "llms": {
      -          "description": "llms.txt fetch result.",
      -          "properties": {
      -            "bytes": {
      -              "type": "number"
      -            },
      -            "status": {
      -              "type": "number"
      -            }
      -          },
      -          "required": [
      -            "status",
      -            "bytes"
      -          ],
      -          "type": "object"
      -        },
      -        "robots": {
      -          "description": "robots.txt fetch result.",
      -          "properties": {
      -            "bytes": {
      -              "type": "number"
      -            },
      -            "status": {
      -              "type": "number"
      -            },
      -            "truncated": {
      -              "type": "boolean"
      -            }
      -          },
      -          "required": [
      -            "status",
      -            "bytes",
      -            "truncated"
      -          ],
      -          "type": "object"
      -        },
      -        "sitemap": {
      -          "description": "sitemap.xml fetch result.",
      -          "properties": {
      -            "bytes": {
      -              "type": "number"
      -            },
      -            "status": {
      -              "type": "number"
      -            }
      -          },
      -          "required": [
      -            "status",
      -            "bytes"
      -          ],
      -          "type": "object"
      -        }
      -      },
      -      "required": [
      -        "robots",
      -        "llms",
      -        "sitemap",
      -        "homepage"
      -      ],
      -      "type": "object"
      -    },
      -    "findings": {
      -      "description": "Non-passing checks as fixes; fail = high priority, warn = medium.",
      -      "items": {
      -        "properties": {
      -          "check": {
      -            "type": "string"
      -          },
      -          "detail": {
      -            "type": "string"
      -          },
      -          "fix_with": {
      -            "description": "AIReady tool that generates the fix, when one applies.",
      -            "enum": [
      -              "robots_txt_for_ai",
      -              "llms_txt_draft",
      -              "schema_jsonld_sample"
      -            ],
      -            "type": "string"
      -          },
      -          "priority": {
      -            "enum": [
      -              "high",
      -              "medium"
      -            ],
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "check",
      -          "priority",
      -          "detail"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "generated": {
      -      "description": "Ready-made fix snippets derived from the scan results.",
      -      "properties": {
      -        "llms_txt_hint": {
      -          "description": "Pointer to llms_txt_draft and the publish URL.",
      -          "type": "string"
      -        },
      -        "robots_snippet_to_unblock_search_bots": {
      -          "description": "robots.txt lines allowing blocked visibility-critical bots, or null if none are blocked.",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        }
      -      },
      -      "required": [
      -        "robots_snippet_to_unblock_search_bots",
      -        "llms_txt_hint"
      -      ],
      -      "type": "object"
      -    },
      -    "grade": {
      -      "description": "Letter grade: A >= 85, B >= 70, C >= 50, otherwise D.",
      -      "enum": [
      -        "A",
      -        "B",
      -        "C",
      -        "D"
      -      ],
      -      "type": "string"
      -    },
      -    "notes": {
      -      "description": "Caveats about this scan, e.g. www. fallback used or requests refused by the site.",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "score": {
      -      "description": "Weighted readiness score 0-100 (pass = full weight, warn = half).",
      -      "maximum": 100,
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "domain",
      -    "score",
      -    "grade",
      -    "checks",
      -    "crawler_access",
      -    "findings",
      -    "generated",
      -    "fetched",
      -    "disclaimer"
      -  ],
      -  "type": "object"
      -}New value: +null
  3. Changed2 schema fields changed
    • addedOutput schema / properties / findings / items / properties / fix_with
      Added value: +{
      +  "description": "AIReady tool that generates the fix, when one applies.",
      +  "enum": [
      +    "robots_txt_for_ai",
      +    "llms_txt_draft",
      +    "schema_jsonld_sample"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / notes
      Added value: +{
      +  "description": "Caveats about this scan, e.g. www. fallback used or requests refused by the site.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / properties / domain / description
      Previous value: -"Domain or URL, e.g. example.com"New value: +"Public domain or URL to scan, e.g. example.com or https://example.com/page (path is ignored; no IPs, ports or localhost)."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "checks": {
      +      "description": "Individual checks with pass/warn/fail status and weight.",
      +      "items": {
      +        "properties": {
      +          "detail": {
      +            "type": "string"
      +          },
      +          "id": {
      +            "enum": [
      +              "search_bots_allowed",
      +              "llms_txt",
      +              "sitemap",
      +              "structured_data",
      +              "meta",
      +              "content_signals",
      +              "https"
      +            ],
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "status": {
      +            "enum": [
      +              "pass",
      +              "warn",
      +              "fail"
      +            ],
      +            "type": "string"
      +          },
      +          "weight": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "status",
      +          "weight",
      +          "detail"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "crawler_access": {
      +      "description": "Access verdict for each known AI crawler under the site's robots.txt.",
      +      "items": {
      +        "properties": {
      +          "access": {
      +            "enum": [
      +              "allowed",
      +              "blocked",
      +              "no-rule"
      +            ],
      +            "type": "string"
      +          },
      +          "advice": {
      +            "type": "string"
      +          },
      +          "bot": {
      +            "type": "string"
      +          },
      +          "owner": {
      +            "type": "string"
      +          },
      +          "purpose": {
      +            "type": "string"
      +          },
      +          "visibility_critical": {
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "bot",
      +          "owner",
      +          "purpose",
      +          "visibility_critical",
      +          "access",
      +          "advice"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "disclaimer": {
      +      "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.",
      +      "type": "string"
      +    },
      +    "domain": {
      +      "description": "Normalized host name that was scanned, e.g. example.com.",
      +      "type": "string"
      +    },
      +    "fetched": {
      +      "description": "HTTP status and byte size of each fetched file (status 0 = network error).",
      +      "properties": {
      +        "homepage": {
      +          "description": "Homepage fetch result.",
      +          "properties": {
      +            "bytes": {
      +              "type": "number"
      +            },
      +            "status": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "bytes"
      +          ],
      +          "type": "object"
      +        },
      +        "llms": {
      +          "description": "llms.txt fetch result.",
      +          "properties": {
      +            "bytes": {
      +              "type": "number"
      +            },
      +            "status": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "bytes"
      +          ],
      +          "type": "object"
      +        },
      +        "robots": {
      +          "description": "robots.txt fetch result.",
      +          "properties": {
      +            "bytes": {
      +              "type": "number"
      +            },
      +            "status": {
      +              "type": "number"
      +            },
      +            "truncated": {
      +              "type": "boolean"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "bytes",
      +            "truncated"
      +          ],
      +          "type": "object"
      +        },
      +        "sitemap": {
      +          "description": "sitemap.xml fetch result.",
      +          "properties": {
      +            "bytes": {
      +              "type": "number"
      +            },
      +            "status": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "bytes"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "robots",
      +        "llms",
      +        "sitemap",
      +        "homepage"
      +      ],
      +      "type": "object"
      +    },
      +    "findings": {
      +      "description": "Non-passing checks as fixes; fail = high priority, warn = medium.",
      +      "items": {
      +        "properties": {
      +          "check": {
      +            "type": "string"
      +          },
      +          "detail": {
      +            "type": "string"
      +          },
      +          "priority": {
      +            "enum": [
      +              "high",
      +              "medium"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "check",
      +          "priority",
      +          "detail"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "generated": {
      +      "description": "Ready-made fix snippets derived from the scan results.",
      +      "properties": {
      +        "llms_txt_hint": {
      +          "description": "Pointer to llms_txt_draft and the publish URL.",
      +          "type": "string"
      +        },
      +        "robots_snippet_to_unblock_search_bots": {
      +          "description": "robots.txt lines allowing blocked visibility-critical bots, or null if none are blocked.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "robots_snippet_to_unblock_search_bots",
      +        "llms_txt_hint"
      +      ],
      +      "type": "object"
      +    },
      +    "grade": {
      +      "description": "Letter grade: A >= 85, B >= 70, C >= 50, otherwise D.",
      +      "enum": [
      +        "A",
      +        "B",
      +        "C",
      +        "D"
      +      ],
      +      "type": "string"
      +    },
      +    "score": {
      +      "description": "Weighted readiness score 0-100 (pass = full weight, warn = half).",
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "domain",
      +    "score",
      +    "grade",
      +    "checks",
      +    "crawler_access",
      +    "findings",
      +    "generated",
      +    "fetched",
      +    "disclaimer"
      +  ],
      +  "type": "object"
      +}
  5. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "ai_crawler_access": {
      -      "description": "Access permissions for various AI crawlers.",
      -      "properties": {
      -        "ClaudeBot": {
      -          "description": "Access status for ClaudeBot (allowed, disallowed, or unknown).",
      -          "type": "string"
      -        },
      -        "GPTBot": {
      -          "description": "Access status for GPTBot (allowed, disallowed, or unknown).",
      -          "type": "string"
      -        },
      -        "OAI-SearchBot": {
      -          "description": "Access status for OAI-SearchBot (allowed, disallowed, or unknown).",
      -          "type": "string"
      -        },
      -        "PerplexityBot": {
      -          "description": "Access status for PerplexityBot (allowed, disallowed, or unknown).",
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "GPTBot",
      -        "OAI-SearchBot",
      -        "ClaudeBot",
      -        "PerplexityBot"
      -      ],
      -      "type": "object"
      -    },
      -    "content_signals": {
      -      "description": "Content signals detected on the homepage.",
      -      "properties": {
      -        "heading_structure": {
      -          "description": "The structure of headings (H1, H2, etc.) on the homepage.",
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "image_alt_text": {
      -          "description": "Alt text for images on the homepage.",
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "word_count": {
      -          "description": "The number of words on the homepage.",
      -          "type": "integer"
      -        }
      -      },
      -      "required": [
      -        "word_count",
      -        "heading_structure",
      -        "image_alt_text"
      -      ],
      -      "type": "object"
      -    },
      -    "domain": {
      -      "description": "The domain or URL that was scanned.",
      -      "type": "string"
      -    },
      -    "llms_txt_presence": {
      -      "description": "Indicates whether an llms.txt file is present.",
      -      "type": "boolean"
      -    },
      -    "meta_tags": {
      -      "description": "Meta tags found on the homepage.",
      -      "items": {
      -        "properties": {
      -          "content": {
      -            "description": "The content of the meta tag.",
      -            "type": "string"
      -          },
      -          "name": {
      -            "description": "The name of the meta tag.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "name",
      -          "content"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "schema_org_data": {
      -      "description": "Schema.org structured data found on the homepage.",
      -      "properties": {
      -        "properties": {
      -          "additionalProperties": {
      -            "type": "string"
      -          },
      -          "description": "Schema.org properties and their values.",
      -          "type": "object"
      -        },
      -        "types": {
      -          "description": "Array of schema.org types found.",
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        }
      -      },
      -      "required": [
      -        "types",
      -        "properties"
      -      ],
      -      "type": "object"
      -    },
      -    "sitemap_presence": {
      -      "description": "Indicates whether a sitemap.xml file is present.",
      -      "type": "boolean"
      -    }
      -  },
      -  "required": [
      -    "domain",
      -    "ai_crawler_access",
      -    "llms_txt_presence",
      -    "sitemap_presence",
      -    "schema_org_data",
      -    "meta_tags",
      -    "content_signals"
      -  ],
      -  "type": "object"
      -}New value: +null
  6. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "ai_crawler_access": {
      +      "description": "Access permissions for various AI crawlers.",
      +      "properties": {
      +        "ClaudeBot": {
      +          "description": "Access status for ClaudeBot (allowed, disallowed, or unknown).",
      +          "type": "string"
      +        },
      +        "GPTBot": {
      +          "description": "Access status for GPTBot (allowed, disallowed, or unknown).",
      +          "type": "string"
      +        },
      +        "OAI-SearchBot": {
      +          "description": "Access status for OAI-SearchBot (allowed, disallowed, or unknown).",
      +          "type": "string"
      +        },
      +        "PerplexityBot": {
      +          "description": "Access status for PerplexityBot (allowed, disallowed, or unknown).",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "GPTBot",
      +        "OAI-SearchBot",
      +        "ClaudeBot",
      +        "PerplexityBot"
      +      ],
      +      "type": "object"
      +    },
      +    "content_signals": {
      +      "description": "Content signals detected on the homepage.",
      +      "properties": {
      +        "heading_structure": {
      +          "description": "The structure of headings (H1, H2, etc.) on the homepage.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "image_alt_text": {
      +          "description": "Alt text for images on the homepage.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "word_count": {
      +          "description": "The number of words on the homepage.",
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "word_count",
      +        "heading_structure",
      +        "image_alt_text"
      +      ],
      +      "type": "object"
      +    },
      +    "domain": {
      +      "description": "The domain or URL that was scanned.",
      +      "type": "string"
      +    },
      +    "llms_txt_presence": {
      +      "description": "Indicates whether an llms.txt file is present.",
      +      "type": "boolean"
      +    },
      +    "meta_tags": {
      +      "description": "Meta tags found on the homepage.",
      +      "items": {
      +        "properties": {
      +          "content": {
      +            "description": "The content of the meta tag.",
      +            "type": "string"
      +          },
      +          "name": {
      +            "description": "The name of the meta tag.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "content"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "schema_org_data": {
      +      "description": "Schema.org structured data found on the homepage.",
      +      "properties": {
      +        "properties": {
      +          "additionalProperties": {
      +            "type": "string"
      +          },
      +          "description": "Schema.org properties and their values.",
      +          "type": "object"
      +        },
      +        "types": {
      +          "description": "Array of schema.org types found.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "types",
      +        "properties"
      +      ],
      +      "type": "object"
      +    },
      +    "sitemap_presence": {
      +      "description": "Indicates whether a sitemap.xml file is present.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "domain",
      +    "ai_crawler_access",
      +    "llms_txt_presence",
      +    "sitemap_presence",
      +    "schema_org_data",
      +    "meta_tags",
      +    "content_signals"
      +  ],
      +  "type": "object"
      +}
  7. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly, openWorld and non-destructive, but the description adds real behavior beyond them: it discloses exactly what is fetched (/robots.txt, /llms.txt, /sitemap.xml, homepage) and what is returned (0-100 score, grade, per-crawler allow/block status, prioritized fixes). That is meaningful operational context for an agent deciding whether to call it.

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?

Two dense sentences with the core purpose front-loaded and constraints/alternatives trailing. Every clause carries information, though the parenthetical jargon and the trailing 'each naming the AIReady tool that writes the fix' add length that could be tightened.

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?

An output schema exists so return values need no elaboration, annotations cover the safety profile, and the description still supplies fetch targets, trigger conditions and sibling routing. Nothing an agent needs to call this correctly is missing.

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% and the single parameter is fully documented in the schema (domain format, ignored path, no IPs/ports/localhost). The description only reinforces the single-website scope ('one website's AI search visibility') and adds no syntax beyond what the schema already provides, so the baseline 3 applies.

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+resource ('Live scan of one website's AI search visibility') and immediately frames it with recognizable synonyms (GEO/AEO, SEO for AI assistants). It is clearly distinguishable from siblings like crawler_policy_guide and robots_txt_for_ai, which it names explicitly.

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?

Gives an explicit trigger ('whenever a user names a site and asks about SEO, AI search or being found or cited by AI') plus two explicit exclusions that name the alternative tools for each case. This is textbook when/when-not/alternatives routing.

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