Skip to main content
Glama

Server Details

Scan and fix your site's AI discoverability: crawler access, llms.txt, JSON-LD. Free.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 21 days
Last Tested
Transport
Streamable HTTP ยท MCP 2025-11-25
URL
Server Listing
Sahadeva

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

Five tools map cleanly onto the workflow: diagnose, consult policy, and generate the three fix artifacts. Nothing feels padded or missing at this scope.

Completeness4/5

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 tools
check_ai_readinessCheck AI readinessA
Read-only
Inspect

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

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

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

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.

crawler_policy_guideCrawler policy guideA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
crawlersYesReference row per known AI crawler or control token.
by_purposeYesBot names grouped by why you would allow or block them.
disclaimerYesInformational disclaimer: crawler behaviour can change, verify against provider docs.
rules_of_thumbYesShort guidance on allowing/blocking AI crawlers.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.txtA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
key_pagesNoOptional important pages listed under '## Key pages'. Each needs title and url.
descriptionYesOne sentence on what you offer and for whom, used as the '> ' summary, e.g. 24/7 emergency plumbers serving Austin, TX.
business_nameYesBusiness or site name used as the '# ' title, e.g. Reddy Plumbing.
contact_emailNoOptional contact email listed under '## Contact', e.g. hello@example.com.

Output Schema

NameRequiredDescription
tipsYesTips for keeping llms.txt useful.
llms_txtYesGenerated llms.txt Markdown content.
disclaimerYesInformational disclaimer: crawler behaviour can change, verify against provider docs.
publish_atYesWhere to publish the file (site root, text/plain).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 AIA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
policyYesAI 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_urlNoOptional absolute sitemap URL appended as a Sitemap: line, e.g. https://example.com/sitemap.xml.
content_signalsNoAppend a Content-Signal line (search / ai-input / ai-train) matching the policy. Default true; pass false to omit.

Output Schema

NameRequiredDescription
notesYesGuidance on merging and interpreting the rules.
policyYesThe policy preset the rules were generated for.
disclaimerYesInformational disclaimer: crawler behaviour can change, verify against provider docs.
robots_txtYesGenerated robots.txt text block, newline-terminated.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 sampleA
Read-onlyIdempotent
Inspect

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

NameRequiredDescriptionDefault
urlYesCanonical page URL including https://, e.g. https://example.com (required; not emitted for faq).
nameYesEntity name, e.g. Reddy Plumbing (required; not emitted for faq).
typeYesEntity type: organization, local_business (adds telephone/address), product (adds price Offer) or faq (requires questions).
priceNoOptional price for product; a 3-letter currency code in it sets priceCurrency (default USD), e.g. '49.00 USD'.
addressNoOptional street address for local_business, e.g. 100 Main St, Austin, TX 78701.
questionsNoQuestion/answer pairs for faq (at least one required when type is faq).
telephoneNoOptional phone for local_business, ideally E.164, e.g. +1-512-555-0100.
descriptionNoOptional one-sentence description (organization, local_business, product).

Output Schema

NameRequiredDescription
tipsYesTips for accurate structured data.
jsonldYesPretty-printed JSON-LD object as a string, ready to embed.
placementYesWhere to paste the snippet in the page.
disclaimerYesInformational disclaimer: crawler behaviour can change, verify against provider docs.

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 19 tool updates
    • Removedadd_competitors
    • Removedadd_prompts
    • Removedask_ai_engine
    • Changedcheck_ai_readiness3 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"
        +}
    • Changedcrawler_policy_guide2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput 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"
        +}
    • Removedcreate_project
    • Removedget_action_plan
    • Removedget_citations
    • Removedget_run_status
    • Removedget_usage
    • Removedget_visibility_report
    • Removedlist_projects
    • Removedlist_prompts
    • Changedllms_txt_draft10 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / business_name / description
        Previous value: -"Business or site name"New value: +"Business or site name used as the '# ' title, e.g. Reddy Plumbing."
      • changedInput schema / properties / contact_email / description
        Previous value: -"Contact email"New value: +"Optional contact email listed under '## Contact', e.g. hello@example.com."
      • changedInput schema / properties / description / description
        Previous 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."
      • changedInput schema / properties / key_pages / description
        Previous value: -"Key pages"New value: +"Optional important pages listed under '## Key pages'. Each needs title and url."
      • removedInput schema / properties / key_pages / items / additionalProperties
        Removed value: -false
      • changedInput schema / properties / key_pages / items / properties / note / description
        Previous value: -"What the page covers"New value: +"Optional short note shown after the link, e.g. Pricing and areas served."
      • changedInput schema / properties / key_pages / items / properties / title / description
        Previous value: -"Page title"New value: +"Link text, e.g. Services."
      • changedInput schema / properties / key_pages / items / properties / url / description
        Previous value: -"Page URL"New value: +"Absolute page URL, e.g. https://example.com/services."
      • changedOutput 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"
        +}
    • Changedrobots_txt_for_ai5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / content_signals / description
        Previous 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."
      • changedInput schema / properties / policy / description
        Previous 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."
      • changedInput schema / properties / sitemap_url / description
        Previous value: -"Optional sitemap URL"New value: +"Optional absolute sitemap URL appended as a Sitemap: line, e.g. https://example.com/sitemap.xml."
      • changedOutput 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"
        +}
    • Removedrun_visibility_check
    • Removedscan_project_site
    • Changedschema_jsonld_sample13 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / address / description
        Previous value: -"Address (local_business)"New value: +"Optional street address for local_business, e.g. 100 Main St, Austin, TX 78701."
      • changedInput schema / properties / description / description
        Previous value: -"Short description"New value: +"Optional one-sentence description (organization, local_business, product)."
      • changedInput schema / properties / name / description
        Previous value: -"Entity name"New value: +"Entity name, e.g. Reddy Plumbing (required; not emitted for faq)."
      • changedInput schema / properties / price / description
        Previous 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'."
      • changedInput schema / properties / questions / description
        Previous value: -"FAQ items (faq)"New value: +"Question/answer pairs for faq (at least one required when type is faq)."
      • removedInput schema / properties / questions / items / additionalProperties
        Removed value: -false
      • changedInput schema / properties / questions / items / properties / answer / description
        Previous value: -"Answer"New value: +"Answer text."
      • changedInput schema / properties / questions / items / properties / question / description
        Previous value: -"Question"New value: +"Question text."
      • changedInput schema / properties / telephone / description
        Previous value: -"Phone (local_business)"New value: +"Optional phone for local_business, ideally E.164, e.g. +1-512-555-0100."
      • changedInput schema / properties / type / description
        Previous value: -"Schema type"New value: +"Entity type: organization, local_business (adds telephone/address), product (adds price Offer) or faq (requires questions)."
      • changedInput schema / properties / url / description
        Previous value: -"Site URL"New value: +"Canonical page URL including https://, e.g. https://example.com (required; not emitted for faq)."
      • changedOutput 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"
        +}
    • Removedsuggest_prompts
  2. 19 tool updates
    • Addedadd_competitors
    • Addedadd_prompts
    • Addedask_ai_engine
    • Changedcheck_ai_readiness3 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
    • Changedcrawler_policy_guide2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput 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
    • Addedcreate_project
    • Addedget_action_plan
    • Addedget_citations
    • Addedget_run_status
    • Addedget_usage
    • Addedget_visibility_report
    • Addedlist_projects
    • Addedlist_prompts
    • Changedllms_txt_draft10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / business_name / description
        Previous value: -"Business or site name used as the '# ' title, e.g. Reddy Plumbing."New value: +"Business or site name"
      • changedInput schema / properties / contact_email / description
        Previous value: -"Optional contact email listed under '## Contact', e.g. hello@example.com."New value: +"Contact email"
      • changedInput schema / properties / description / description
        Previous 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"
      • changedInput schema / properties / key_pages / description
        Previous value: -"Optional important pages listed under '## Key pages'. Each needs title and url."New value: +"Key pages"
      • addedInput schema / properties / key_pages / items / additionalProperties
        Added value: +false
      • changedInput schema / properties / key_pages / items / properties / note / description
        Previous value: -"Optional short note shown after the link, e.g. Pricing and areas served."New value: +"What the page covers"
      • changedInput schema / properties / key_pages / items / properties / title / description
        Previous value: -"Link text, e.g. Services."New value: +"Page title"
      • changedInput schema / properties / key_pages / items / properties / url / description
        Previous value: -"Absolute page URL, e.g. https://example.com/services."New value: +"Page URL"
      • changedOutput 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
    • Changedrobots_txt_for_ai5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / content_signals / description
        Previous 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)"
      • changedInput schema / properties / policy / description
        Previous 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"
      • changedInput schema / properties / sitemap_url / description
        Previous value: -"Optional absolute sitemap URL appended as a Sitemap: line, e.g. https://example.com/sitemap.xml."New value: +"Optional sitemap URL"
      • changedOutput 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
    • Addedrun_visibility_check
    • Addedscan_project_site
    • Changedschema_jsonld_sample13 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / address / description
        Previous value: -"Optional street address for local_business, e.g. 100 Main St, Austin, TX 78701."New value: +"Address (local_business)"
      • changedInput schema / properties / description / description
        Previous value: -"Optional one-sentence description (organization, local_business, product)."New value: +"Short description"
      • changedInput schema / properties / name / description
        Previous value: -"Entity name, e.g. Reddy Plumbing (required; not emitted for faq)."New value: +"Entity name"
      • changedInput schema / properties / price / description
        Previous 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)"
      • changedInput schema / properties / questions / description
        Previous value: -"Question/answer pairs for faq (at least one required when type is faq)."New value: +"FAQ items (faq)"
      • addedInput schema / properties / questions / items / additionalProperties
        Added value: +false
      • changedInput schema / properties / questions / items / properties / answer / description
        Previous value: -"Answer text."New value: +"Answer"
      • changedInput schema / properties / questions / items / properties / question / description
        Previous value: -"Question text."New value: +"Question"
      • changedInput schema / properties / telephone / description
        Previous value: -"Optional phone for local_business, ideally E.164, e.g. +1-512-555-0100."New value: +"Phone (local_business)"
      • changedInput schema / properties / type / description
        Previous value: -"Entity type: organization, local_business (adds telephone/address), product (adds price Offer) or faq (requires questions)."New value: +"Schema type"
      • changedInput schema / properties / url / description
        Previous value: -"Canonical page URL including https://, e.g. https://example.com (required; not emitted for faq)."New value: +"Site URL"
      • changedOutput 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
    • Addedsuggest_prompts
  3. 1 tool update
    • Changedcheck_ai_readiness2 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. 5 tool updates
    • Changedcheck_ai_readiness2 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"
        +}
    • Changedcrawler_policy_guide1 field changed
      • changedOutput 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"
        +}
    • Changedllms_txt_draft8 fields changed
      • changedInput schema / properties / business_name / description
        Previous value: -"The name of your business"New value: +"Business or site name used as the '# ' title, e.g. Reddy Plumbing."
      • changedInput schema / properties / contact_email / description
        Previous value: -"Your business's contact email address"New value: +"Optional contact email listed under '## Contact', e.g. hello@example.com."
      • changedInput schema / properties / description / description
        Previous 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."
      • changedInput schema / properties / key_pages / description
        Previous 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."
      • addedInput schema / properties / key_pages / items / properties / note / description
        Added value: +"Optional short note shown after the link, e.g. Pricing and areas served."
      • addedInput schema / properties / key_pages / items / properties / title / description
        Added value: +"Link text, e.g. Services."
      • addedInput schema / properties / key_pages / items / properties / url / description
        Added value: +"Absolute page URL, e.g. https://example.com/services."
      • changedOutput 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"
        +}
    • Changedrobots_txt_for_ai4 fields changed
      • changedInput schema / properties / content_signals / description
        Previous 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."
      • changedInput schema / properties / policy / description
        Previous 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."
      • changedInput schema / properties / sitemap_url / description
        Previous 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."
      • changedOutput 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"
        +}
    • Changedschema_jsonld_sample11 fields changed
      • changedInput schema / properties / address / description
        Previous value: -"The address for this request."New value: +"Optional street address for local_business, e.g. 100 Main St, Austin, TX 78701."
      • changedInput schema / properties / description / description
        Previous value: -"The description for this request."New value: +"Optional one-sentence description (organization, local_business, product)."
      • changedInput schema / properties / name / description
        Previous value: -"The name for this request."New value: +"Entity name, e.g. Reddy Plumbing (required; not emitted for faq)."
      • changedInput schema / properties / price / description
        Previous 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'."
      • changedInput schema / properties / questions / description
        Previous value: -"List of questions values."New value: +"Question/answer pairs for faq (at least one required when type is faq)."
      • addedInput schema / properties / questions / items / properties / answer / description
        Added value: +"Answer text."
      • addedInput schema / properties / questions / items / properties / question / description
        Added value: +"Question text."
      • changedInput schema / properties / telephone / description
        Previous value: -"The telephone phone number."New value: +"Optional phone for local_business, ideally E.164, e.g. +1-512-555-0100."
      • changedInput schema / properties / type / description
        Previous value: -"The type for this request."New value: +"Entity type: organization, local_business (adds telephone/address), product (adds price Offer) or faq (requires questions)."
      • changedInput schema / properties / url / description
        Previous value: -"Full url URL including https://."New value: +"Canonical page URL including https://, e.g. https://example.com (required; not emitted for faq)."
      • changedOutput 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. 5 tool updates
    • Changedcheck_ai_readiness1 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
    • Changedcrawler_policy_guide1 field changed
      • changedOutput 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
    • Changedllms_txt_draft1 field changed
      • changedOutput 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
    • Changedrobots_txt_for_ai1 field changed
      • changedOutput 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
    • Changedschema_jsonld_sample1 field changed
      • changedOutput 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
  6. 3 tool updates
    • Changedllms_txt_draft4 fields changed
      • addedInput schema / properties / business_name / description
        Added value: +"The name of your business"
      • addedInput schema / properties / contact_email / description
        Added value: +"Your business's contact email address"
      • addedInput schema / properties / description / description
        Added value: +"A brief description of your business"
      • addedInput schema / properties / key_pages / description
        Added value: +"Array of strings; URLs of key pages on your website"
    • Changedrobots_txt_for_ai3 fields changed
      • addedInput schema / properties / content_signals / description
        Added value: +"True if content signals should be included, False otherwise"
      • addedInput schema / properties / policy / description
        Added value: +"AI policy rules as a string, e.g. 'Disallow: /private/'"
      • addedInput schema / properties / sitemap_url / description
        Added value: +"URL of the sitemap, e.g. 'https://example.com/sitemap.xml'"
    • Changedschema_jsonld_sample8 fields changed
      • addedInput schema / properties / address / description
        Added value: +"The address for this request."
      • addedInput schema / properties / description / description
        Added value: +"The description for this request."
      • addedInput schema / properties / name / description
        Added value: +"The name for this request."
      • addedInput schema / properties / price / description
        Added value: +"The price for this request."
      • addedInput schema / properties / questions / description
        Added value: +"List of questions values."
      • addedInput schema / properties / telephone / description
        Added value: +"The telephone phone number."
      • addedInput schema / properties / type / description
        Added value: +"The type for this request."
      • addedInput schema / properties / url / description
        Added value: +"Full url URL including https://."
  7. 5 tool updates
    • Changedcheck_ai_readiness1 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"
        +}
    • Changedcrawler_policy_guide1 field changed
      • changedOutput 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"
        +}
    • Changedllms_txt_draft1 field changed
      • changedOutput 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"
        +}
    • Changedrobots_txt_for_ai1 field changed
      • changedOutput 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"
        +}
    • Changedschema_jsonld_sample1 field changed
      • changedOutput 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"
        +}
  8. 5 tool updates
    • First observedcheck_ai_readiness
    • First observedcrawler_policy_guide
    • First observedllms_txt_draft
    • First observedrobots_txt_for_ai
    • First observedschema_jsonld_sample

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Evaluates any website's AI visibility with 15 checks across crawlability, structure, content, and connectivity, and provides actionable fixes.
    1 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    3
    36 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources