Site Check
Public website health scan, AI-crawler and structured-data readiness, and a local presence score.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"site-check": {
"url": "https://mcp.modernmustardseed.com/site-check"
}
}
}Remote endpoints
https://mcp.modernmustardseed.com/site-checkstreamable-httpWhat it can do
Tool inventory
Tools (4)
🟢scan_website(url, sections, detail)
Run a measured health check of a public website homepage: speed (server response, page weight, scripts, image formats), security (HTTPS, certificate expiry, security headers), domain registration expiry, email authentication (MX, SPF, DMARC), search basics (title, description, headings, indexability, sitemap), AI search readiness (structured data, AI crawler rules, llms.txt) and contact paths (tap to call, forms, analytics). Every result is measured, not judged by a model, and each warn or fail comes with a fix and an effort level. Returns a 0 to 100 website score, the top fixes, and how the page appears in a search result. Results are cached for 24 hours. Use detail "full" to include passing checks.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 3,
"maxLength": 2048,
"description": "The website to scan, such as example.com or https://www.example.com/. Only public http and https sites on ports 80 and 443."
},
"sections": {
"description": "Limit the report to these sections. Default: all seven.",
"minItems": 1,
"maxItems": 7,
"type": "array",
"items": {
"type": "string",
"enum": [
"speed",
"security",
"domain",
"email",
"search",
"ai",
"conversion"
]
}
},
"detail": {
"default": "summary",
"description": "\"summary\" (default) lists only warn and fail checks; \"full\" lists every check.",
"type": "string",
"enum": [
"summary",
"full"
]
}
},
"required": [
"url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢check_ai_search_readiness(url)
Check whether AI assistants and answer engines can read and quote a public website: which AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended and others) its robots.txt allows or blocks, whether it publishes llms.txt, which structured data types it declares, how its title and description read, and the search and AI checks with fixes. Shares the 24 hour cache with scan_website.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 3,
"maxLength": 2048,
"description": "The website to check, such as example.com. Only public http and https sites."
}
},
"required": [
"url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢score_local_presence(business_name, website, rating, review_count, listing_seen, ...)
Score a local business on three pillars, website (45 percent), Google reviews (30 percent) and Google Business Profile (25 percent), and return an overall 0 to 100 score, a letter grade, each pillar with its verdict, and the top fixes. The website pillar comes from a live scan when a website is given. Review and profile facts (rating, review count, phone, address, hours) are supplied by the caller from the user or from a public listing; this tool does not look them up. A pillar with no facts is marked unknown and left out of the overall score rather than scored as zero.
Input Schema
{
"type": "object",
"properties": {
"business_name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"website": {
"description": "The business website, if it has one. It is scanned live.",
"type": "string",
"minLength": 3,
"maxLength": 2048
},
"rating": {
"description": "Google star rating, 1.0 to 5.0.",
"type": "number",
"minimum": 1,
"maximum": 5
},
"review_count": {
"description": "Number of Google reviews.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"listing_seen": {
"description": "True when the Google Business Profile was actually looked at. Defaults to true when a rating, review count or Google Maps URL is given.",
"type": "boolean"
},
"details_read": {
"description": "True only when the full listing was read, including its hours and website link. Missing hours or a missing website are only scored when this is true.",
"type": "boolean"
},
"phone": {
"description": "Phone number shown on the listing.",
"type": "string",
"maxLength": 40
},
"address": {
"description": "Street address shown on the listing.",
"type": "string",
"maxLength": 300
},
"city": {
"type": "string",
"maxLength": 100
},
"state": {
"type": "string",
"maxLength": 50
},
"hours": {
"description": "Published hours by day, for example {\"Monday\": \"8 AM to 5 PM\"}.",
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 20
},
"additionalProperties": {
"type": "string",
"maxLength": 80
}
},
"open_24_7": {
"description": "True when the listing says open 24 hours.",
"type": "boolean"
},
"emergency_service": {
"description": "True when the listing says it takes emergency or after-hours work.",
"type": "boolean"
},
"trade": {
"description": "The trade in snake case, for example plumbing, hvac, roofing, electrical, dental, restaurant.",
"type": "string",
"maxLength": 60
},
"source_urls": {
"description": "Where the listing facts came from, such as the Google Maps URL.",
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"maxLength": 2048,
"format": "uri"
}
}
},
"required": [
"business_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢explain_check(check_id)
Explain one Site Check check by its id (as returned by scan_website): what it measures, the pass and fail thresholds, why it matters, how to fix it, and the typical effort. Static reference, no network access.
Input Schema
{
"type": "object",
"properties": {
"check_id": {
"type": "string",
"enum": [
"ttfb",
"html-weight",
"scripts",
"image-format",
"lazy",
"https",
"http-redirect",
"cert",
"headers",
"mixed",
"copyright",
"domain-expiry",
"domain-age",
"mx",
"spf",
"dmarc",
"title",
"description",
"h1",
"viewport",
"indexable",
"canonical",
"sitemap",
"alt",
"lang",
"og",
"favicon",
"schema",
"schema-depth",
"ai-bots",
"llms",
"faq",
"words",
"tap-to-call",
"capture",
"analytics",
"social",
"reviews-on-site",
"after-hours"
],
"description": "The check id, for example dmarc, ai-bots, llms or tap-to-call."
}
},
"required": [
"check_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence