AI Search Kit
Server Details
Audits AI-crawler access, structured data and llms.txt on a site, and drafts the fixes.
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
Each tool has a distinct verb+target: page-level crawlability audit, cross-source NAP consistency, llms.txt generation, JSON-LD generation, and JSON-LD validation. The main potential confusion is between audit_ai_readiness and validate_structured_data (both cite spec rules for JSON-LD) and between audit_ai_readiness and check_entity_consistency (both touch on NAP appearing in markup vs visible page), but descriptions clearly separate live-page auditing from local validation and multi-source comparison.
All five names follow a clean verb_noun pattern (audit_, check_, generate_, generate_, validate_) with consistent snake_case and descriptive objects. No mixing of conventions or vague verbs.
Five tools is well-scoped for an AI-search-readiness kit, and each covers a distinct capability (audit, compare, generate llms.txt, generate schema, validate schema) with no redundant entries. Nothing feels padded or missing at the count level.
The set covers a solid lifecycle for structured data and AI-crawler readiness: audit, generate, validate, and cross-source consistency. Minor gaps remain, such as no tool to generate or fix robots.txt directives and no Organization/non-LocalBusiness schema generator, though agents can work around these with the existing tools.
Available Tools
5 toolsaudit_ai_readinessAudit AI search readinessARead-onlyIdempotentInspect
Audit one public web page for what AI answer engines and their crawlers rely on. Reads the page plus its site's robots.txt, llms.txt and sitemap, then reports: for each AI crawler and control token (OAI-SearchBot, ChatGPT-User, GPTBot, Claude-SearchBot, Claude-User, ClaudeBot, PerplexityBot, Perplexity-User, Googlebot, Google-Extended, Applebot, Applebot-Extended) whether robots.txt allows it on this page under RFC 9309 matching; noindex and nosnippet directives; JSON-LD validity against the schema.org vocabulary and Google's LocalBusiness rules; whether the name, phone and address in the markup also appear on the visible page; llms.txt format; canonical tag; and sitemap. Every finding cites the public spec or vendor document behind it, with the date it was read. Results are cached for 10 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The page to audit, such as example.com or https://example.com/locations/denver. Public http and https only. | |
| detail | No | "summary" (default) lists only findings that warn, fail or inform; "full" includes passing findings with their sources. | summary |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world behavior, so the bar is lower, yet the description adds real value: it discloses the read-only inputs (page, robots.txt, llms.txt, sitemap), that findings cite public specs with read dates, and a 10-minute caching window. It stops short of describing output shape or failure modes on unreachable pages.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, and the long enumeration of checks is dense but largely earns its place by telling the agent what the report contains. It is a single sprawling sentence-list with some items that could be compressed, keeping it just below ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return value, and it does so by enumerating the findings it reports and noting the 10-minute cache. It is nearly complete for a complex audit tool, with only the concrete response format left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both url and the detail enum are already fully documented with examples and defaults. The description adds no additional meaning about the parameters (e.g., how detail interacts with caching), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Audit one public web page') and enumerates precisely what it inspects, so an agent knows exactly what the tool produces. It does not, however, distinguish itself from siblings like validate_structured_data and check_entity_consistency, whose checks it clearly subsumes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the scoped framing ('one public web page') and the composite nature of the audit, but there is no explicit when-to-use, when-not-to-use, or routing to the sibling tools. An agent must infer that this is the broad audit rather than a targeted check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_entity_consistencyCheck entity consistencyARead-onlyIdempotentInspect
Compare a business's name, phone, street, city, region and postal code across up to 8 sources, such as its website, Google Business Profile, Facebook page and directory listings. For each source give a url to read (JSON-LD first, then tap-to-call links and page text) and/or the facts shown on it; supplied facts win, and are needed for sites that block automated readers. Formats are normalized ("123 North Main Street, Suite 4" matches "123 N Main St Ste 4", "(406) 555-0100" matches "+1 406-555-0100"), then each field is reported as consistent, variant or mismatch, with the exact fixes. Give business to compare against a canonical record instead of the majority.
| Name | Required | Description | Default |
|---|---|---|---|
| business | No | The canonical name, phone and address every source should match. | |
| profiles | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/openWorld annotations: discloses the read strategy (JSON-LD first, then tap-to-call links and page text), that supplied facts win and are required for sites blocking automated readers, and the normalization rules with concrete examples. It also describes the per-field verdict model (consistent/variant/mismatch) and that fixes are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the comparison action and keeps to one dense paragraph where each sentence adds a distinct behavior (sources, input strategy, normalization, output, override). It is a little packed and some ideas are compressed into comma-chained clauses, but little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-object tool with no output schema, the description covers input strategy, normalization, verdict vocabulary and that exact fixes are returned, which is enough to call it correctly. Minor gaps remain around ordering, limits (the 8-source cap is only implied by 'up to 8'), and how conflicting supplied facts are reported.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so the description must compensate, and it does: it clarifies that each profile may carry a url, supplied facts, or both, that supplied facts override scraped values, and what the optional business object does (canonical override instead of majority). Format normalization examples further clarify acceptable input shapes, though the individual address field mappings are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: compare name, phone, street, city, region and postal code across up to 8 named source types. It is clearly distinguishable from siblings like validate_structured_data or generate_local_business_schema, which handle single-page validation or generation rather than cross-source comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the mechanics ('For each source give a url... and/or the facts shown on it') and it does give one conditional: supply business to compare against a canonical record instead of the majority. However, it never states when to prefer this tool over the sibling audit/validate tools, so the agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_llms_txtGenerate llms.txtARead-onlyIdempotentInspect
Write an llms.txt file in the llmstxt.org format: an H1 with the site name, a blockquote summary, optional details, H2 sections of "- title: note" links, and an Optional section for secondary pages. Give url to build it from the live site (home page, sitemap, and up to 30 pages' own titles and meta descriptions, honoring the site's robots.txt and skipping noindex pages), or give site_name and sections to build it from your own facts; supplied fields override what is read from the site. The result is checked against the format before it is returned. Nothing is published.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | A public site to read, such as example.com. | |
| details | No | Optional markdown notes between the summary and the link sections. Headings are not allowed there. | |
| summary | No | One or two sentences for the blockquote. | |
| sections | No | H2 file lists, each with links. | |
| max_pages | No | How many pages to read from the site, 1 to 30. Default 20. | |
| site_name | No | The H1. Required when url is not given. | |
| optional_links | No | Secondary links for the Optional section. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, openWorld and non-destructive, and the description still adds real behavioral facts: robots.txt is honored, noindex pages are skipped, at most 30 pages are read, output is format-checked before return, and 'Nothing is published.' The 'up to 30 pages' phrasing is slightly loose against max_pages default 20, but it is not a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what gets produced (the file format) before the input modes, and every clause carries information. It is a dense paragraph rather than a broken-out structure, which costs a little scannability but wastes no sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description implies the result is a validated llms.txt ready to be returned or used, which is enough for correct invocation. It stops short of describing the actual return payload shape, the one remaining detail an agent might want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning the schema cannot convey: url and site_name/sections are alternative construction modes, and 'supplied fields override what is read from the site' defines precedence among them. That precedence rule is absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact ('Write an llms.txt file in the llmstxt.org format') and spells out the exact structure it produces. This is unambiguously distinct from siblings like validate_structured_data or audit_ai_readiness, which consume rather than generate artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly explains the two input modes: 'give url to build it from the live site' versus 'give site_name and sections to build it from your own facts,' plus the override rule when both are supplied. It gives strong in-tool routing guidance but never contrasts itself with the sibling tools, so the agent gets no external when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_local_business_schemaGenerate LocalBusiness schemaARead-onlyIdempotentInspect
Turn a local business's facts into schema.org JSON-LD. Chooses the most specific LocalBusiness subtype from business_type (for example "roofing company" becomes RoofingContractor) or takes schema_type as given, writes only properties schema.org defines for that type, formats hours, phone and 24 hour or closed days the way Google documents, then validates the output against the schema.org vocabulary. Returns the JSON-LD, a ready-to-paste script tag, the type chosen with alternatives, and cited notes on anything left out. No network access; nothing is published.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The business website or location page. | |
| logo | No | Logo image URL. | |
| name | Yes | Business name as shown on the storefront, website and Google profile. | |
| No | |||
| hours | No | Regular opening hours. Days not listed read as closed. | |
| images | No | ||
| same_as | No | Official profile URLs that identify the business: Google Business Profile, Facebook, LinkedIn, Yelp, Wikidata. | |
| founders | No | ||
| latitude | No | ||
| menu_url | No | Food businesses only. | |
| services | No | Services offered, written as Offer items. | |
| longitude | No | ||
| open_24_7 | No | True when the business is open 24 hours every day. Overrides hours. | |
| telephone | No | Primary customer phone number. North American numbers are written as +1-AAA-BBB-CCCC. | |
| area_served | No | Places served: plain names, or objects with a type (City, State, AdministrativeArea, Country, Place) and an optional Wikidata or Wikipedia URL in same_as. | |
| description | No | ||
| postal_code | No | ||
| price_range | No | Such as "$$" or "$100-$300". Under 100 characters. | |
| schema_type | No | An exact schema.org LocalBusiness subtype, or up to three, such as "Plumber". Overrides business_type. | |
| business_type | No | Plain words for what the business is, such as "plumber", "dental office" or "coffee shop". | |
| founding_date | No | YYYY-MM-DD. | |
| address_region | No | State, province or region, such as "MT". | |
| serves_cuisine | No | Food businesses only. | |
| street_address | No | ||
| address_country | No | Two-letter ISO country code, such as "US". | |
| address_locality | No | City or town. | |
| payment_accepted | No | ||
| seasonal_closures | No | Closed periods, dates as YYYY-MM-DD. | |
| currencies_accepted | No | ISO 4217 codes such as USD. | |
| hide_street_address | No | True for a service-area business that does not serve customers at its address. | |
| accepts_reservations | No | Food businesses only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld=false, idempotent and non-destructive, so the safety profile is covered. The description adds real value beyond that: it names the full return payload (JSON-LD, script tag, chosen type with alternatives, cited notes) and explicitly says 'No network access; nothing is published,' which reinforces the openWorld=false hint with concrete context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the core verb+resource and ending with the non-side-effect guarantee. Every clause earns its place, though the single run-on flow could be broken into shorter segments for faster scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description correctly fills that gap by enumerating what is returned. For a 31-parameter, no-annotation-gaps generation tool it covers purpose, processing and side effects well; only the undocumented parameter subset and error/edge-case behavior remain unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 31 params at 71% schema coverage, the description adds meaning beyond the schema by explaining precedence (business_type is resolved to a specific subtype unless schema_type is given) and how hours, phone and 24-hour/closed days are normalized the way Google documents. It does not cover the remaining ~29% of undocumented parameters (e.g. hide_street_address, accepts_reservations), so it falls short of full compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific transformation (local business facts -> schema.org JSON-LD) with the exact subtype-selection and formatting behaviors it performs. An agent can tell this apart from the read-only audit/validate siblings because the description makes clear this generates and self-validates JSON-LD rather than checking existing markup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the business_type vs schema_type branch and the self-validation step, so the context is inferable. However, it never states when to reach for this tool versus validate_structured_data or check_entity_consistency, and offers no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_structured_dataValidate structured dataARead-onlyIdempotentInspect
Validate pasted JSON-LD against the schema.org vocabulary (every type, property, domain, range and enumeration value) and Google's documented rules for LocalBusiness and Organization markup: required name and address, recommended properties, hh:mm:ss hours, 5 decimal coordinates, priceRange length, self-serving reviews, sameAs. Accepts one block, several blocks, or the script tags around them. Each issue cites its source. No network access.
| Name | Required | Description | Default |
|---|---|---|---|
| json_ld | Yes | JSON-LD text. Script tags are stripped; several script blocks are each validated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld=false; the description reinforces the safety profile with 'No network access' and adds genuinely new behavioral context: validation is deterministic against cited sources ('Each issue cites its source'). It stops short of describing issue severity or output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence with the purpose front-loaded, followed by a rule inventory. The long enumeration of checks is justified because it defines the tool's scope, though it could be trimmed slightly without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, no-output-schema tool, the description enumerates the validation rule set, states accepted input forms, and hints at the return ('each issue cites its source'). Nothing essential is missing, though the issue object's structure is left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's description already explains script-tag stripping and multi-block handling, so the description's matching sentence is largely redundant. Baseline 3 for a fully documented single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Validate pasted JSON-LD against the schema.org vocabulary and Google's rules') with the validation scope spelled out. It is clearly distinct from siblings like generate_local_business_schema or check_entity_consistency, which produce or compare markup rather than validate it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Input-format guidance is present ('Accepts one block, several blocks, or the script tags around them'), which tells the agent what to pass. However, there is no explicit when-to-use statement or routing against siblings (e.g., validate before/after generate_local_business_schema), so usage is only implied.
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.
5 tool updates
- First observed
audit_ai_readiness - First observed
check_entity_consistency - First observed
generate_llms_txt - First observed
generate_local_business_schema - First observed
validate_structured_data
Publisher details
- Operator
- Modern Mustard Seed ยท Publisher source
- Operator website
- https://modernmustardseed.com ยท Publisher source
- Vendor relationship
- First-party
- Documentation
- https://mcp.modernmustardseed.com/docs/ai-search-kit ยท Publisher source
- Trust center
- Not available
- Restrictions
- Not applicable
Related MCP Connectors
Audit any website for AI visibility: graded report, findings with fixes, AI crawler access check.
One-call audit: robots.txt AI-bot rules, llms.txt, JSON-LD, meta tags, sitemap. Score plus fixes.
Gets a website ready for AI assistants: robots.txt fixed, llms.txt drafted, citable gaps listed.
Scan and fix your site's AI discoverability: crawler access, llms.txt, JSON-LD. Free.
Related MCP Servers
- AlicenseAqualityBmaintenanceAudit a site for AI readiness: AI-crawler access, schema, FAQ and content structure. Generates the fixes.6137 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables auditing websites for AI/LLM readiness and generating fixes such as robots.txt rules, llms.txt, JSON-LD schema, and meta tags, plus checking brand and domain citations through natural language.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables users to audit websites and online stores for generative and answer-engine readiness, generate deployable llms.txt and llms-full.txt files, JSON-LD schema, and AI crawler rules, analyze robots access for AI bots, and extract clean page content for LLM use.MIT
- AlicenseNot gradedqualityBmaintenanceRuns AI visibility (GEO/AEO) audits on websites, checking AI crawler access, schema markup, llms.txt, and content signals, with optional full PDF report.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.