AIReady
Server Details
Scan and fix your site's AI discoverability: crawler access, llms.txt, JSON-LD. Free.
- Status
- Healthy
- Uptime
- 100.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
- Server Listing
- Sahadeva
TDQS
Scored across 5 tools
Each tool occupies a distinct slot: live audit, static crawler reference, and three separate artifact generators (llms.txt, robots.txt, JSON-LD). Descriptions explicitly cross-reference siblings with 'Do NOT use X, use Y' guidance, eliminating overlap.
All names are snake_case and domain-descriptive, but the verb style is mixed: check_ai_readiness uses an action verb while the others are artifact-noun phrases (crawler_policy_guide, llms_txt_draft, robots_txt_for_ai, schema_jsonld_sample). Still predictable and readable.
Five tools map cleanly onto the workflow: diagnose, consult policy, and generate the three fix artifacts. Nothing feels padded or missing at this scope.
The audit-plus-fix loop is largely covered, including the pointer from each fix back to the generating tool. Minor gaps: no way to verify a published llms.txt/robots.txt change, and llms_txt_draft only produces a starter rather than a full spec.
Available Tools
5 toolscheck_ai_readinessCheck AI readinessARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Public domain or URL to scan, e.g. example.com or https://example.com/page (path is ignored; no IPs, ports or localhost). |
Output Schema
| Name | Required | Description |
|---|---|---|
| grade | Yes | Letter grade: A >= 85, B >= 70, C >= 50, otherwise D. |
| notes | No | Caveats about this scan, e.g. www. fallback used or requests refused by the site. |
| score | Yes | Weighted readiness score 0-100 (pass = full weight, warn = half). |
| checks | Yes | Individual checks with pass/warn/fail status and weight. |
| domain | Yes | Normalized host name that was scanned, e.g. example.com. |
| fetched | Yes | HTTP status and byte size of each fetched file (status 0 = network error). |
| findings | Yes | Non-passing checks as fixes; fail = high priority, warn = medium. |
| generated | Yes | Ready-made fix snippets derived from the scan results. |
| disclaimer | Yes | Informational disclaimer: crawler behaviour can change, verify against provider docs. |
| crawler_access | Yes | Access verdict for each known AI crawler under the site's robots.txt. |
TDQS
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.
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.
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.
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.
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.
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.
crawler_policy_guideCrawler policy guideARead-onlyIdempotentInspect
Static reference of 13 known AI crawlers and control tokens (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended...): owner, purpose, whether each drives AI citations or training, plus rules of thumb. Use to decide which bots to allow or block. No site is fetched. Do NOT use to audit a real site (use check_ai_readiness) or to produce rules (use robots_txt_for_ai).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| crawlers | Yes | Reference row per known AI crawler or control token. |
| by_purpose | Yes | Bot names grouped by why you would allow or block them. |
| disclaimer | Yes | Informational disclaimer: crawler behaviour can change, verify against provider docs. |
| rules_of_thumb | Yes | Short guidance on allowing/blocking AI crawlers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description still adds real value by clarifying 'No site is fetched' and that the content is static, which prevents an agent from expecting live network results. It does not describe return shape, but an output schema exists to cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the reference contains, follows with the intended use, and ends with the exclusions and alternatives. Every clause carries routing or content information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A zero-parameter static reference with an output schema needs only to say what it contains and when to reach for it, and the description does both, including explicit routing to alternatives. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline this dimension scores 4. The description correctly implies a no-input reference lookup and adds no misleading parameter expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource type (static reference of 13 known AI crawlers and control tokens) with named examples, and explicitly separates itself from sibling tools by naming check_ai_readiness and robots_txt_for_ai. An agent can distinguish it from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the use case ('Use to decide which bots to allow or block') plus two explicit exclusions with the exact alternative tool for each. Nothing is left to inference about when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
llms_txt_draftDraft llms.txtARead-onlyIdempotentInspect
Draft a starter llms.txt (Markdown: # name, > one-line summary, key page links, contact) from business details, to publish at the site root so AI agents get a curated summary. Use when a site has no llms.txt. Do NOT use for crawler access rules (use robots_txt_for_ai) or schema.org markup (use schema_jsonld_sample).
| Name | Required | Description | Default |
|---|---|---|---|
| key_pages | No | Optional important pages listed under '## Key pages'. Each needs title and url. | |
| description | Yes | One sentence on what you offer and for whom, used as the '> ' summary, e.g. 24/7 emergency plumbers serving Austin, TX. | |
| business_name | Yes | Business or site name used as the '# ' title, e.g. Reddy Plumbing. | |
| contact_email | No | Optional contact email listed under '## Contact', e.g. hello@example.com. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tips | Yes | Tips for keeping llms.txt useful. |
| llms_txt | Yes | Generated llms.txt Markdown content. |
| disclaimer | Yes | Informational disclaimer: crawler behaviour can change, verify against provider docs. |
| publish_at | Yes | Where to publish the file (site root, text/plain). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive, closed-world), so the bar is lower. The description adds real value by disclosing the nature of the output artifact and its intended deployment location (site root) so AI agents pick up a curated summary. It does not mention any auth or rate-limit behavior, but neither is relevant for a pure generation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all earning their place: purpose and output shape first, then the use condition, then the exclusions. The format enumeration is front-loaded rather than buried, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need no explanation, and the schema fully documents parameters. Combined with complete usage routing and an accurate safety profile from annotations, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including nested key_pages with title/url/note) are already documented in the schema. The description only gestures at inputs with "from business details" and adds no syntax or format guidance beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (draft a starter llms.txt) and even enumerates the artifact's structure (# name, > summary, key page links, contact). It also names the sibling tools it is not (robots_txt_for_ai, schema_jsonld_sample), so an agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit positive condition ("Use when a site has no llms.txt") plus two explicit exclusions with the correct alternative named for each. This is textbook when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robots_txt_for_aiGenerate robots.txt for AIARead-onlyIdempotentInspect
Generate robots.txt User-agent rules for all known AI crawlers from a chosen policy (max_visibility, search_only, block_training, block_all_ai), with optional Content-Signal and Sitemap lines, to paste into an existing robots.txt. Use when writing AI crawler rules. Do NOT use to check a live site's current rules (use check_ai_readiness) or for bot background (use crawler_policy_guide).
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | AI policy preset: max_visibility = allow every AI bot; search_only or block_training = allow search/answer bots, block training crawlers (same output); block_all_ai = disallow every known AI bot. | |
| sitemap_url | No | Optional absolute sitemap URL appended as a Sitemap: line, e.g. https://example.com/sitemap.xml. | |
| content_signals | No | Append a Content-Signal line (search / ai-input / ai-train) matching the policy. Default true; pass false to omit. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | Guidance on merging and interpreting the rules. |
| policy | Yes | The policy preset the rules were generated for. |
| disclaimer | Yes | Informational disclaimer: crawler behaviour can change, verify against provider docs. |
| robots_txt | Yes | Generated robots.txt text block, newline-terminated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond them: the output is a snippet to paste into an existing robots.txt rather than something applied to a site. It does not note that search_only and block_training return identical output (that detail lives only in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose/scope first, then when-to-use, then exclusions with alternatives. Nothing is repeated from the schema and every clause carries routing or output information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need no explanation, and annotations carry the safety profile. For a single-required-param generator, the description supplies everything an agent needs: what is produced, where it is meant to be used, and which sibling to pick instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents policy semantics, sitemap_url format, and the content_signals default. The description names the four presets and mentions the optional Content-Signal and Sitemap lines but adds no syntax or format detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact ('Generate robots.txt User-agent rules for all known AI crawlers') plus the four policy presets, so the agent knows exactly what comes back: a rule snippet. It is clearly distinguishable from siblings like llms_txt_draft and schema_jsonld_sample, which produce different artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('Use when writing AI crawler rules') and two explicit when-not-to-use cases with named alternatives (check_ai_readiness for live site checks, crawler_policy_guide for bot background). Routing is unambiguous with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema_jsonld_sampleGenerate JSON-LD sampleARead-onlyIdempotentInspect
Generate a schema.org JSON-LD snippet (Organization, LocalBusiness, Product with Offer, or FAQPage) from your details, with placement tips, so search engines and AI assistants can identify the entity. Use when adding structured data to a page. Do NOT use to check whether a site already has structured data (use check_ai_readiness) or for llms.txt (use llms_txt_draft).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Canonical page URL including https://, e.g. https://example.com (required; not emitted for faq). | |
| name | Yes | Entity name, e.g. Reddy Plumbing (required; not emitted for faq). | |
| type | Yes | Entity type: organization, local_business (adds telephone/address), product (adds price Offer) or faq (requires questions). | |
| price | No | Optional price for product; a 3-letter currency code in it sets priceCurrency (default USD), e.g. '49.00 USD'. | |
| address | No | Optional street address for local_business, e.g. 100 Main St, Austin, TX 78701. | |
| questions | No | Question/answer pairs for faq (at least one required when type is faq). | |
| telephone | No | Optional phone for local_business, ideally E.164, e.g. +1-512-555-0100. | |
| description | No | Optional one-sentence description (organization, local_business, product). |
Output Schema
| Name | Required | Description |
|---|---|---|
| tips | Yes | Tips for accurate structured data. |
| jsonld | Yes | Pretty-printed JSON-LD object as a string, ready to embed. |
| placement | Yes | Where to paste the snippet in the page. |
| disclaimer | Yes | Informational disclaimer: crawler behaviour can change, verify against provider docs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, covering the safety and determinism profile. The description adds that output includes placement tips and the intended audience (search engines and AI assistants), but most type-specific behavior it mentions (local_business adds telephone/address, product adds Offer, faq requires questions) duplicates the schema's enum description. No additional auth, rate-limit, or failure-mode context is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first front-loads the action and supported variants; the second carries all when-to-use and when-not-to-use routing. There is no filler, and the exclusions are placed after the positive guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only generator whose annotations cover the safety profile and whose output schema covers return structure, the description supplies purpose, supported variants, usage conditions, exclusions, and sibling routing. The extra output element ('placement tips') is noted, and no essential calling context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 100%, the baseline is 3. The description names the supported entity types but adds no syntax or format detail beyond what the enum's own description and the other parameter descriptions already state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Generate) and resource (schema.org JSON-LD snippet), enumerates the supported entity types, and explicitly names the sibling tools it is not. An agent can distinguish it from check_ai_readiness and llms_txt_draft without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use condition ('Use when adding structured data to a page') and two explicit when-not-to-use cases routed to named alternatives ('Do NOT use to check whether a site already has structured data (use check_ai_readiness)' and 'for llms.txt (use llms_txt_draft)'). Nothing is left to inference.
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.
19 tool updates
- Removed
add_competitors - Removed
add_prompts - Removed
ask_ai_engine - Changed
check_ai_readiness3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / domain / descriptionPrevious 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)." - changed
Output 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" +}
- Changed
crawler_policy_guide2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "by_purpose": { + "description": "Bot names grouped by why you would allow or block them.", + "properties": { + "training_controls": { + "description": "Bots whose purpose includes model training.", + "items": { + "type": "string" + }, + "type": "array" + }, + "want_ai_visibility": { + "description": "Bots to keep allowed for AI search/citations.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "want_ai_visibility", + "training_controls" + ], + "type": "object" + }, + "crawlers": { + "description": "Reference row per known AI crawler or control token.", + "items": { + "properties": { + "advice": { + "type": "string" + }, + "bot": { + "type": "string" + }, + "owner": { + "type": "string" + }, + "purpose": { + "type": "string" + }, + "ua": { + "type": "string" + }, + "visibility_critical": { + "type": "boolean" + } + }, + "required": [ + "bot", + "owner", + "purpose", + "ua", + "visibility_critical", + "advice" + ], + "type": "object" + }, + "type": "array" + }, + "disclaimer": { + "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", + "type": "string" + }, + "rules_of_thumb": { + "description": "Short guidance on allowing/blocking AI crawlers.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "crawlers", + "by_purpose", + "rules_of_thumb", + "disclaimer" + ], + "type": "object" +}
- Removed
create_project - Removed
get_action_plan - Removed
get_citations - Removed
get_run_status - Removed
get_usage - Removed
get_visibility_report - Removed
list_projects - Removed
list_prompts - Changed
llms_txt_draft10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / business_name / descriptionPrevious value: -"Business or site name"New value: +"Business or site name used as the '# ' title, e.g. Reddy Plumbing." - changed
Input schema / properties / contact_email / descriptionPrevious value: -"Contact email"New value: +"Optional contact email listed under '## Contact', e.g. hello@example.com." - changed
Input schema / properties / description / descriptionPrevious value: -"One sentence about what you offer"New value: +"One sentence on what you offer and for whom, used as the '> ' summary, e.g. 24/7 emergency plumbers serving Austin, TX." - changed
Input schema / properties / key_pages / descriptionPrevious value: -"Key pages"New value: +"Optional important pages listed under '## Key pages'. Each needs title and url." - removed
Input schema / properties / key_pages / items / additionalPropertiesRemoved value: -false - changed
Input schema / properties / key_pages / items / properties / note / descriptionPrevious value: -"What the page covers"New value: +"Optional short note shown after the link, e.g. Pricing and areas served." - changed
Input schema / properties / key_pages / items / properties / title / descriptionPrevious value: -"Page title"New value: +"Link text, e.g. Services." - changed
Input schema / properties / key_pages / items / properties / url / descriptionPrevious value: -"Page URL"New value: +"Absolute page URL, e.g. https://example.com/services." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "disclaimer": { + "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", + "type": "string" + }, + "llms_txt": { + "description": "Generated llms.txt Markdown content.", + "type": "string" + }, + "publish_at": { + "description": "Where to publish the file (site root, text/plain).", + "type": "string" + }, + "tips": { + "description": "Tips for keeping llms.txt useful.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "llms_txt", + "publish_at", + "tips", + "disclaimer" + ], + "type": "object" +}
- Changed
robots_txt_for_ai5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / content_signals / descriptionPrevious value: -"Add Content-Signal lines (default true)"New value: +"Append a Content-Signal line (search / ai-input / ai-train) matching the policy. Default true; pass false to omit." - changed
Input schema / properties / policy / descriptionPrevious value: -"AI crawler policy"New value: +"AI policy preset: max_visibility = allow every AI bot; search_only or block_training = allow search/answer bots, block training crawlers (same output); block_all_ai = disallow every known AI bot." - changed
Input schema / properties / sitemap_url / descriptionPrevious value: -"Optional sitemap URL"New value: +"Optional absolute sitemap URL appended as a Sitemap: line, e.g. https://example.com/sitemap.xml." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "disclaimer": { + "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", + "type": "string" + }, + "notes": { + "description": "Guidance on merging and interpreting the rules.", + "items": { + "type": "string" + }, + "type": "array" + }, + "policy": { + "description": "The policy preset the rules were generated for.", + "enum": [ + "max_visibility", + "search_only", + "block_training", + "block_all_ai" + ], + "type": "string" + }, + "robots_txt": { + "description": "Generated robots.txt text block, newline-terminated.", + "type": "string" + } + }, + "required": [ + "policy", + "robots_txt", + "notes", + "disclaimer" + ], + "type": "object" +}
- Removed
run_visibility_check - Removed
scan_project_site - Changed
schema_jsonld_sample13 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / address / descriptionPrevious value: -"Address (local_business)"New value: +"Optional street address for local_business, e.g. 100 Main St, Austin, TX 78701." - changed
Input schema / properties / description / descriptionPrevious value: -"Short description"New value: +"Optional one-sentence description (organization, local_business, product)." - changed
Input schema / properties / name / descriptionPrevious value: -"Entity name"New value: +"Entity name, e.g. Reddy Plumbing (required; not emitted for faq)." - changed
Input schema / properties / price / descriptionPrevious value: -"Price (product)"New value: +"Optional price for product; a 3-letter currency code in it sets priceCurrency (default USD), e.g. '49.00 USD'." - changed
Input schema / properties / questions / descriptionPrevious value: -"FAQ items (faq)"New value: +"Question/answer pairs for faq (at least one required when type is faq)." - removed
Input schema / properties / questions / items / additionalPropertiesRemoved value: -false - changed
Input schema / properties / questions / items / properties / answer / descriptionPrevious value: -"Answer"New value: +"Answer text." - changed
Input schema / properties / questions / items / properties / question / descriptionPrevious value: -"Question"New value: +"Question text." - changed
Input schema / properties / telephone / descriptionPrevious value: -"Phone (local_business)"New value: +"Optional phone for local_business, ideally E.164, e.g. +1-512-555-0100." - changed
Input schema / properties / type / descriptionPrevious value: -"Schema type"New value: +"Entity type: organization, local_business (adds telephone/address), product (adds price Offer) or faq (requires questions)." - changed
Input schema / properties / url / descriptionPrevious value: -"Site URL"New value: +"Canonical page URL including https://, e.g. https://example.com (required; not emitted for faq)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "disclaimer": { + "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", + "type": "string" + }, + "jsonld": { + "description": "Pretty-printed JSON-LD object as a string, ready to embed.", + "type": "string" + }, + "placement": { + "description": "Where to paste the snippet in the page.", + "type": "string" + }, + "tips": { + "description": "Tips for accurate structured data.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "jsonld", + "placement", + "tips", + "disclaimer" + ], + "type": "object" +}
- Removed
suggest_prompts
19 tool updates
- Added
add_competitors - Added
add_prompts - Added
ask_ai_engine - Changed
check_ai_readiness3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / domain / descriptionPrevious 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" - changed
Output 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
- Changed
crawler_policy_guide2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / (root)Previous value: -{ - "properties": { - "by_purpose": { - "description": "Bot names grouped by why you would allow or block them.", - "properties": { - "training_controls": { - "description": "Bots whose purpose includes model training.", - "items": { - "type": "string" - }, - "type": "array" - }, - "want_ai_visibility": { - "description": "Bots to keep allowed for AI search/citations.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "want_ai_visibility", - "training_controls" - ], - "type": "object" - }, - "crawlers": { - "description": "Reference row per known AI crawler or control token.", - "items": { - "properties": { - "advice": { - "type": "string" - }, - "bot": { - "type": "string" - }, - "owner": { - "type": "string" - }, - "purpose": { - "type": "string" - }, - "ua": { - "type": "string" - }, - "visibility_critical": { - "type": "boolean" - } - }, - "required": [ - "bot", - "owner", - "purpose", - "ua", - "visibility_critical", - "advice" - ], - "type": "object" - }, - "type": "array" - }, - "disclaimer": { - "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", - "type": "string" - }, - "rules_of_thumb": { - "description": "Short guidance on allowing/blocking AI crawlers.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "crawlers", - "by_purpose", - "rules_of_thumb", - "disclaimer" - ], - "type": "object" -}New value: +null
- Added
create_project - Added
get_action_plan - Added
get_citations - Added
get_run_status - Added
get_usage - Added
get_visibility_report - Added
list_projects - Added
list_prompts - Changed
llms_txt_draft10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / business_name / descriptionPrevious value: -"Business or site name used as the '# ' title, e.g. Reddy Plumbing."New value: +"Business or site name" - changed
Input schema / properties / contact_email / descriptionPrevious value: -"Optional contact email listed under '## Contact', e.g. hello@example.com."New value: +"Contact email" - changed
Input schema / properties / description / descriptionPrevious value: -"One sentence on what you offer and for whom, used as the '> ' summary, e.g. 24/7 emergency plumbers serving Austin, TX."New value: +"One sentence about what you offer" - changed
Input schema / properties / key_pages / descriptionPrevious value: -"Optional important pages listed under '## Key pages'. Each needs title and url."New value: +"Key pages" - added
Input schema / properties / key_pages / items / additionalPropertiesAdded value: +false - changed
Input schema / properties / key_pages / items / properties / note / descriptionPrevious value: -"Optional short note shown after the link, e.g. Pricing and areas served."New value: +"What the page covers" - changed
Input schema / properties / key_pages / items / properties / title / descriptionPrevious value: -"Link text, e.g. Services."New value: +"Page title" - changed
Input schema / properties / key_pages / items / properties / url / descriptionPrevious value: -"Absolute page URL, e.g. https://example.com/services."New value: +"Page URL" - changed
Output schema / (root)Previous value: -{ - "properties": { - "disclaimer": { - "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", - "type": "string" - }, - "llms_txt": { - "description": "Generated llms.txt Markdown content.", - "type": "string" - }, - "publish_at": { - "description": "Where to publish the file (site root, text/plain).", - "type": "string" - }, - "tips": { - "description": "Tips for keeping llms.txt useful.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "llms_txt", - "publish_at", - "tips", - "disclaimer" - ], - "type": "object" -}New value: +null
- Changed
robots_txt_for_ai5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / content_signals / descriptionPrevious value: -"Append a Content-Signal line (search / ai-input / ai-train) matching the policy. Default true; pass false to omit."New value: +"Add Content-Signal lines (default true)" - changed
Input schema / properties / policy / descriptionPrevious value: -"AI policy preset: max_visibility = allow every AI bot; search_only or block_training = allow search/answer bots, block training crawlers (same output); block_all_ai = disallow every known AI bot."New value: +"AI crawler policy" - changed
Input schema / properties / sitemap_url / descriptionPrevious value: -"Optional absolute sitemap URL appended as a Sitemap: line, e.g. https://example.com/sitemap.xml."New value: +"Optional sitemap URL" - changed
Output schema / (root)Previous value: -{ - "properties": { - "disclaimer": { - "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", - "type": "string" - }, - "notes": { - "description": "Guidance on merging and interpreting the rules.", - "items": { - "type": "string" - }, - "type": "array" - }, - "policy": { - "description": "The policy preset the rules were generated for.", - "enum": [ - "max_visibility", - "search_only", - "block_training", - "block_all_ai" - ], - "type": "string" - }, - "robots_txt": { - "description": "Generated robots.txt text block, newline-terminated.", - "type": "string" - } - }, - "required": [ - "policy", - "robots_txt", - "notes", - "disclaimer" - ], - "type": "object" -}New value: +null
- Added
run_visibility_check - Added
scan_project_site - Changed
schema_jsonld_sample13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / address / descriptionPrevious value: -"Optional street address for local_business, e.g. 100 Main St, Austin, TX 78701."New value: +"Address (local_business)" - changed
Input schema / properties / description / descriptionPrevious value: -"Optional one-sentence description (organization, local_business, product)."New value: +"Short description" - changed
Input schema / properties / name / descriptionPrevious value: -"Entity name, e.g. Reddy Plumbing (required; not emitted for faq)."New value: +"Entity name" - changed
Input schema / properties / price / descriptionPrevious value: -"Optional price for product; a 3-letter currency code in it sets priceCurrency (default USD), e.g. '49.00 USD'."New value: +"Price (product)" - changed
Input schema / properties / questions / descriptionPrevious value: -"Question/answer pairs for faq (at least one required when type is faq)."New value: +"FAQ items (faq)" - added
Input schema / properties / questions / items / additionalPropertiesAdded value: +false - changed
Input schema / properties / questions / items / properties / answer / descriptionPrevious value: -"Answer text."New value: +"Answer" - changed
Input schema / properties / questions / items / properties / question / descriptionPrevious value: -"Question text."New value: +"Question" - changed
Input schema / properties / telephone / descriptionPrevious value: -"Optional phone for local_business, ideally E.164, e.g. +1-512-555-0100."New value: +"Phone (local_business)" - changed
Input schema / properties / type / descriptionPrevious value: -"Entity type: organization, local_business (adds telephone/address), product (adds price Offer) or faq (requires questions)."New value: +"Schema type" - changed
Input schema / properties / url / descriptionPrevious value: -"Canonical page URL including https://, e.g. https://example.com (required; not emitted for faq)."New value: +"Site URL" - changed
Output schema / (root)Previous value: -{ - "properties": { - "disclaimer": { - "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", - "type": "string" - }, - "jsonld": { - "description": "Pretty-printed JSON-LD object as a string, ready to embed.", - "type": "string" - }, - "placement": { - "description": "Where to paste the snippet in the page.", - "type": "string" - }, - "tips": { - "description": "Tips for accurate structured data.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "jsonld", - "placement", - "tips", - "disclaimer" - ], - "type": "object" -}New value: +null
- Added
suggest_prompts
1 tool update
- Changed
check_ai_readiness2 fields changed- added
Output schema / properties / findings / items / properties / fix_withAdded value: +{ + "description": "AIReady tool that generates the fix, when one applies.", + "enum": [ + "robots_txt_for_ai", + "llms_txt_draft", + "schema_jsonld_sample" + ], + "type": "string" +} - added
Output schema / properties / notesAdded value: +{ + "description": "Caveats about this scan, e.g. www. fallback used or requests refused by the site.", + "items": { + "type": "string" + }, + "type": "array" +}
5 tool updates
- Changed
check_ai_readiness2 fields changed- changed
Input schema / properties / domain / descriptionPrevious 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)." - changed
Output 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" +}
- Changed
crawler_policy_guide1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "by_purpose": { + "description": "Bot names grouped by why you would allow or block them.", + "properties": { + "training_controls": { + "description": "Bots whose purpose includes model training.", + "items": { + "type": "string" + }, + "type": "array" + }, + "want_ai_visibility": { + "description": "Bots to keep allowed for AI search/citations.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "want_ai_visibility", + "training_controls" + ], + "type": "object" + }, + "crawlers": { + "description": "Reference row per known AI crawler or control token.", + "items": { + "properties": { + "advice": { + "type": "string" + }, + "bot": { + "type": "string" + }, + "owner": { + "type": "string" + }, + "purpose": { + "type": "string" + }, + "ua": { + "type": "string" + }, + "visibility_critical": { + "type": "boolean" + } + }, + "required": [ + "bot", + "owner", + "purpose", + "ua", + "visibility_critical", + "advice" + ], + "type": "object" + }, + "type": "array" + }, + "disclaimer": { + "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", + "type": "string" + }, + "rules_of_thumb": { + "description": "Short guidance on allowing/blocking AI crawlers.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "crawlers", + "by_purpose", + "rules_of_thumb", + "disclaimer" + ], + "type": "object" +}
- Changed
llms_txt_draft8 fields changed- changed
Input schema / properties / business_name / descriptionPrevious value: -"The name of your business"New value: +"Business or site name used as the '# ' title, e.g. Reddy Plumbing." - changed
Input schema / properties / contact_email / descriptionPrevious value: -"Your business's contact email address"New value: +"Optional contact email listed under '## Contact', e.g. hello@example.com." - changed
Input schema / properties / description / descriptionPrevious value: -"A brief description of your business"New value: +"One sentence on what you offer and for whom, used as the '> ' summary, e.g. 24/7 emergency plumbers serving Austin, TX." - changed
Input schema / properties / key_pages / descriptionPrevious value: -"Array of strings; URLs of key pages on your website"New value: +"Optional important pages listed under '## Key pages'. Each needs title and url." - added
Input schema / properties / key_pages / items / properties / note / descriptionAdded value: +"Optional short note shown after the link, e.g. Pricing and areas served." - added
Input schema / properties / key_pages / items / properties / title / descriptionAdded value: +"Link text, e.g. Services." - added
Input schema / properties / key_pages / items / properties / url / descriptionAdded value: +"Absolute page URL, e.g. https://example.com/services." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "disclaimer": { + "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", + "type": "string" + }, + "llms_txt": { + "description": "Generated llms.txt Markdown content.", + "type": "string" + }, + "publish_at": { + "description": "Where to publish the file (site root, text/plain).", + "type": "string" + }, + "tips": { + "description": "Tips for keeping llms.txt useful.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "llms_txt", + "publish_at", + "tips", + "disclaimer" + ], + "type": "object" +}
- Changed
robots_txt_for_ai4 fields changed- changed
Input schema / properties / content_signals / descriptionPrevious value: -"True if content signals should be included, False otherwise"New value: +"Append a Content-Signal line (search / ai-input / ai-train) matching the policy. Default true; pass false to omit." - changed
Input schema / properties / policy / descriptionPrevious value: -"AI policy rules as a string, e.g. 'Disallow: /private/'"New value: +"AI policy preset: max_visibility = allow every AI bot; search_only or block_training = allow search/answer bots, block training crawlers (same output); block_all_ai = disallow every known AI bot." - changed
Input schema / properties / sitemap_url / descriptionPrevious value: -"URL of the sitemap, e.g. 'https://example.com/sitemap.xml'"New value: +"Optional absolute sitemap URL appended as a Sitemap: line, e.g. https://example.com/sitemap.xml." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "disclaimer": { + "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", + "type": "string" + }, + "notes": { + "description": "Guidance on merging and interpreting the rules.", + "items": { + "type": "string" + }, + "type": "array" + }, + "policy": { + "description": "The policy preset the rules were generated for.", + "enum": [ + "max_visibility", + "search_only", + "block_training", + "block_all_ai" + ], + "type": "string" + }, + "robots_txt": { + "description": "Generated robots.txt text block, newline-terminated.", + "type": "string" + } + }, + "required": [ + "policy", + "robots_txt", + "notes", + "disclaimer" + ], + "type": "object" +}
- Changed
schema_jsonld_sample11 fields changed- changed
Input schema / properties / address / descriptionPrevious value: -"The address for this request."New value: +"Optional street address for local_business, e.g. 100 Main St, Austin, TX 78701." - changed
Input schema / properties / description / descriptionPrevious value: -"The description for this request."New value: +"Optional one-sentence description (organization, local_business, product)." - changed
Input schema / properties / name / descriptionPrevious value: -"The name for this request."New value: +"Entity name, e.g. Reddy Plumbing (required; not emitted for faq)." - changed
Input schema / properties / price / descriptionPrevious value: -"The price for this request."New value: +"Optional price for product; a 3-letter currency code in it sets priceCurrency (default USD), e.g. '49.00 USD'." - changed
Input schema / properties / questions / descriptionPrevious value: -"List of questions values."New value: +"Question/answer pairs for faq (at least one required when type is faq)." - added
Input schema / properties / questions / items / properties / answer / descriptionAdded value: +"Answer text." - added
Input schema / properties / questions / items / properties / question / descriptionAdded value: +"Question text." - changed
Input schema / properties / telephone / descriptionPrevious value: -"The telephone phone number."New value: +"Optional phone for local_business, ideally E.164, e.g. +1-512-555-0100." - changed
Input schema / properties / type / descriptionPrevious value: -"The type for this request."New value: +"Entity type: organization, local_business (adds telephone/address), product (adds price Offer) or faq (requires questions)." - changed
Input schema / properties / url / descriptionPrevious value: -"Full url URL including https://."New value: +"Canonical page URL including https://, e.g. https://example.com (required; not emitted for faq)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "disclaimer": { + "description": "Informational disclaimer: crawler behaviour can change, verify against provider docs.", + "type": "string" + }, + "jsonld": { + "description": "Pretty-printed JSON-LD object as a string, ready to embed.", + "type": "string" + }, + "placement": { + "description": "Where to paste the snippet in the page.", + "type": "string" + }, + "tips": { + "description": "Tips for accurate structured data.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "jsonld", + "placement", + "tips", + "disclaimer" + ], + "type": "object" +}
5 tool updates
- Changed
check_ai_readiness1 field changed- changed
Output 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
- Changed
crawler_policy_guide1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "crawlers": { - "description": "List of AI crawlers with their respective policies.", - "items": { - "properties": { - "allow": { - "description": "Rule of thumb for allowing the crawler.", - "type": "boolean" - }, - "block": { - "description": "Rule of thumb for blocking the crawler.", - "type": "boolean" - }, - "drives_ai_training": { - "description": "Indicates whether the crawler drives AI training.", - "type": "boolean" - }, - "drives_ai_visibility": { - "description": "Indicates whether the crawler drives AI visibility.", - "type": "boolean" - }, - "owner": { - "description": "The owner or organization responsible for the AI crawler.", - "type": "string" - }, - "purpose": { - "description": "The intended purpose of the AI crawler.", - "type": "string" - } - }, - "required": [ - "owner", - "purpose", - "drives_ai_visibility", - "drives_ai_training", - "allow", - "block" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "crawlers" - ], - "type": "object" -}New value: +null
- Changed
llms_txt_draft1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "llms_txt_content": { - "description": "The generated llms.txt content as a single string.", - "type": "string" - }, - "message": { - "description": "A message providing additional information about the status.", - "type": "string" - }, - "status": { - "description": "The status of the generation process, e.g., 'success' or 'error'.", - "type": "string" - } - }, - "required": [ - "llms_txt_content", - "status" - ], - "type": "object" -}New value: +null
- Changed
robots_txt_for_ai1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "content_signal_lines": { - "description": "Optional Content-Signal lines included in the robots.txt if requested.", - "items": { - "type": "string" - }, - "type": "array" - }, - "robots_txt_content": { - "description": "The generated robots.txt content based on the chosen AI policy.", - "type": "string" - }, - "sitemap_reference": { - "description": "The sitemap URL reference included in the robots.txt if provided.", - "type": "string" - } - }, - "required": [ - "robots_txt_content" - ], - "type": "object" -}New value: +null
- Changed
schema_jsonld_sample1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "jsonld": { - "description": "The generated JSON-LD snippet based on the provided input.", - "type": "string" - } - }, - "required": [ - "jsonld" - ], - "type": "object" -}New value: +null
3 tool updates
- Changed
llms_txt_draft4 fields changed- added
Input schema / properties / business_name / descriptionAdded value: +"The name of your business" - added
Input schema / properties / contact_email / descriptionAdded value: +"Your business's contact email address" - added
Input schema / properties / description / descriptionAdded value: +"A brief description of your business" - added
Input schema / properties / key_pages / descriptionAdded value: +"Array of strings; URLs of key pages on your website"
- Changed
robots_txt_for_ai3 fields changed- added
Input schema / properties / content_signals / descriptionAdded value: +"True if content signals should be included, False otherwise" - added
Input schema / properties / policy / descriptionAdded value: +"AI policy rules as a string, e.g. 'Disallow: /private/'" - added
Input schema / properties / sitemap_url / descriptionAdded value: +"URL of the sitemap, e.g. 'https://example.com/sitemap.xml'"
- Changed
schema_jsonld_sample8 fields changed- added
Input schema / properties / address / descriptionAdded value: +"The address for this request." - added
Input schema / properties / description / descriptionAdded value: +"The description for this request." - added
Input schema / properties / name / descriptionAdded value: +"The name for this request." - added
Input schema / properties / price / descriptionAdded value: +"The price for this request." - added
Input schema / properties / questions / descriptionAdded value: +"List of questions values." - added
Input schema / properties / telephone / descriptionAdded value: +"The telephone phone number." - added
Input schema / properties / type / descriptionAdded value: +"The type for this request." - added
Input schema / properties / url / descriptionAdded value: +"Full url URL including https://."
5 tool updates
- Changed
check_ai_readiness1 field changed- changed
Output 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" +}
- Changed
crawler_policy_guide1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "crawlers": { + "description": "List of AI crawlers with their respective policies.", + "items": { + "properties": { + "allow": { + "description": "Rule of thumb for allowing the crawler.", + "type": "boolean" + }, + "block": { + "description": "Rule of thumb for blocking the crawler.", + "type": "boolean" + }, + "drives_ai_training": { + "description": "Indicates whether the crawler drives AI training.", + "type": "boolean" + }, + "drives_ai_visibility": { + "description": "Indicates whether the crawler drives AI visibility.", + "type": "boolean" + }, + "owner": { + "description": "The owner or organization responsible for the AI crawler.", + "type": "string" + }, + "purpose": { + "description": "The intended purpose of the AI crawler.", + "type": "string" + } + }, + "required": [ + "owner", + "purpose", + "drives_ai_visibility", + "drives_ai_training", + "allow", + "block" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "crawlers" + ], + "type": "object" +}
- Changed
llms_txt_draft1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "llms_txt_content": { + "description": "The generated llms.txt content as a single string.", + "type": "string" + }, + "message": { + "description": "A message providing additional information about the status.", + "type": "string" + }, + "status": { + "description": "The status of the generation process, e.g., 'success' or 'error'.", + "type": "string" + } + }, + "required": [ + "llms_txt_content", + "status" + ], + "type": "object" +}
- Changed
robots_txt_for_ai1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "content_signal_lines": { + "description": "Optional Content-Signal lines included in the robots.txt if requested.", + "items": { + "type": "string" + }, + "type": "array" + }, + "robots_txt_content": { + "description": "The generated robots.txt content based on the chosen AI policy.", + "type": "string" + }, + "sitemap_reference": { + "description": "The sitemap URL reference included in the robots.txt if provided.", + "type": "string" + } + }, + "required": [ + "robots_txt_content" + ], + "type": "object" +}
- Changed
schema_jsonld_sample1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "jsonld": { + "description": "The generated JSON-LD snippet based on the provided input.", + "type": "string" + } + }, + "required": [ + "jsonld" + ], + "type": "object" +}
5 tool updates
- First observed
check_ai_readiness - First observed
crawler_policy_guide - First observed
llms_txt_draft - First observed
robots_txt_for_ai - First observed
schema_jsonld_sample
Related MCP Connectors
Free AI-readiness audit of any URL: AI crawler rules, JS-free text, JSON-LD, llms.txt. Tool catalog.
Scan any domain for AI readiness and generate llms.txt, robots.txt and schema. Free, read-only.
Free check whether a website is technically open to AI assistants (AI crawlers, llms.txt, JSON-LD).
Scan any website's AI readiness: AI search visibility and AI agent usability. Free, no auth.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEvaluates any website's AI visibility with 15 checks across crawlability, structure, content, and connectivity, and provides actionable fixes.1 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to audit and improve a site's visibility in AI search by checking robots.txt against 17 major AI crawlers, detecting llms.txt, and returning a 0-100 visibility score with per-crawler verdicts; it also lists known AI crawlers and their purposes.MIT
- AlicenseAqualityBmaintenanceEnables AI agents to check whether a public website is crawlable, understandable, and ready for AI search workflows through local-only audits of robots.txt, sitemaps, metadata, and llms.txt.336 npm1MIT

agentbuiltofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to run a free AI-readiness audit of any URL, checking AI crawler rules, JavaScript-free page text, JSON-LD, llms.txt, sitemap, meta description, FAQ schema, and returning a score with findings and fixes. Also exposes the same capability via an A2A agent endpoint.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.