# AI Search Kit

> Audits AI-crawler access, structured data and llms.txt on a site, and drafts the fixes.

- name: com.modernmustardseed/ai-search-kit
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 96/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.modernmustardseed%2Fai-search-kit
- tools: https://api.protogrid.dev/v1/servers/com.modernmustardseed%2Fai-search-kit/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "ai-search-kit": {
      "type": "http",
      "url": "https://mcp.modernmustardseed.com/ai-search-kit"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-9d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 96/100 (strong)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 5 of 5 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,942 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 5, about 2,942 tokens to load them all
- tool set hash: 903809c875895ea90404497df6a93429
- badge: [![protogrid quality](https://protogrid.dev/badge/com.modernmustardseed/ai-search-kit.svg)](https://protogrid.dev/servers/com.modernmustardseed/ai-search-kit)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.modernmustardseed.com/ai-search-kit (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (5)

- `audit_ai_readiness`: 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.
- `check_entity_consistency`: 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.
- `generate_llms_txt`: 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](url): 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.
- `generate_local_business_schema`: 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.
- `validate_structured_data`: 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.
