Public website health scan, AI-crawler and structured-data readiness, and a local presence score.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
The website to check, such as example.com. Only public http and https sites.
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.
| Argument | Type | Description |
|---|---|---|
| url* | string | The website to check, such as example.com. Only public http and https sites. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 3,
"description": "The website to check, such as example.com. Only public http and https sites."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| check_id* | string | The check id, for example dmarc, ai-bots, llms or tap-to-call. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"check_id"
],
"properties": {
"check_id": {
"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"
],
"type": "string",
"description": "The check id, for example dmarc, ai-bots, llms or tap-to-call."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| url* | string | The website to scan, such as example.com or https://www.example.com/. Only public http and https sites on ports 80 and 443. |
| detail | string | "summary" (default) lists only warn and fail checks; "full" lists every check. |
| sections | array | Limit the report to these sections. Default: all seven. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 3,
"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."
},
"detail": {
"enum": [
"summary",
"full"
],
"type": "string",
"default": "summary",
"description": "\"summary\" (default) lists only warn and fail checks; \"full\" lists every check."
},
"sections": {
"type": "array",
"items": {
"enum": [
"speed",
"security",
"domain",
"email",
"search",
"ai",
"conversion"
],
"type": "string"
},
"maxItems": 7,
"minItems": 1,
"description": "Limit the report to these sections. Default: all seven."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| city | string | |
| hours | object | Published hours by day, for example {"Monday": "8 AM to 5 PM"}. |
| phone | string | Phone number shown on the listing. |
| state | string | |
| trade | string | The trade in snake case, for example plumbing, hvac, roofing, electrical, dental, restaurant. |
| rating | number | Google star rating, 1.0 to 5.0. |
| address | string | Street address shown on the listing. |
| website |
| string |
| The business website, if it has one. It is scanned live. |
| open_24_7 | boolean | True when the listing says open 24 hours. |
| source_urls | array | Where the listing facts came from, such as the Google Maps URL. |
| details_read | boolean | 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. |
| listing_seen | boolean | True when the Google Business Profile was actually looked at. Defaults to true when a rating, review count or Google Maps URL is given. |
| review_count | integer | Number of Google reviews. |
| business_name* | string |
| emergency_service | boolean | True when the listing says it takes emergency or after-hours work. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"business_name"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"hours": {
"type": "object",
"description": "Published hours by day, for example {\"Monday\": \"8 AM to 5 PM\"}.",
"propertyNames": {
"type": "string",
"maxLength": 20
},
"additionalProperties": {
"type": "string",
"maxLength": 80
}
},
"phone": {
"type": "string",
"maxLength": 40,
"description": "Phone number shown on the listing."
},
"state": {
"type": "string",
"maxLength": 50
},
"trade": {
"type": "string",
"maxLength": 60,
"description": "The trade in snake case, for example plumbing, hvac, roofing, electrical, dental, restaurant."
},
"rating": {
"type": "number",
"maximum": 5,
"minimum": 1,
"description": "Google star rating, 1.0 to 5.0."
},
"address": {
"type": "string",
"maxLength": 300,
"description": "Street address shown on the listing."
},
"website": {
"type": "string",
"maxLength": 2048,
"minLength": 3,
"description": "The business website, if it has one. It is scanned live."
},
"open_24_7": {
"type": "boolean",
"description": "True when the listing says open 24 hours."
},
"source_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"maxItems": 10,
"description": "Where the listing facts came from, such as the Google Maps URL."
},
"details_read": {
"type": "boolean",
"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."
},
"listing_seen": {
"type": "boolean",
"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."
},
"review_count": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Number of Google reviews."
},
"business_name": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"emergency_service": {
"type": "boolean",
"description": "True when the listing says it takes emergency or after-hours work."
}
}
}