Free AI-readiness audit: can ChatGPT, Claude and Perplexity read and cite a site? Fix snippets.
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.
Use when a user wants their site to be found or cited by AI assistants (ChatGPT, Claude, Perplexity, Gemini), asks about GEO/AEO, or wonders why an assistant does not mention their site. Fetches up to 5 URLs of the public site (page, robots.txt, sitemap, llms.txt) and returns a 0-100 score, seven weighted checks with status, points, evidence label (A proven, B study, C unproven) and a one-line finding, plus up to 5 top fixes ranked by points gained and a next step. Deterministic, no LLM; results are cached for 24 hours. Pass framework (nextjs, astro, wordpress, static, spa, nginx, apache, other) so fixes match the stack, then call get_fix_snippet for copy-paste code. Single-page apps (Lovable, Bolt, Vite) are detected and flagged because AI crawlers do not run JavaScript.
Public http(s) URL or bare domain of the page to audit, for example https://example.com
The site's stack, so fixes match. Omit to auto-detect.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http ai-readiness https://nodpick.com/mcp
Use when a user wants their site to be found or cited by AI assistants (ChatGPT, Claude, Perplexity, Gemini), asks about GEO/AEO, or wonders why an assistant does not mention their site. Fetches up to 5 URLs of the public site (page, robots.txt, sitemap, llms.txt) and returns a 0-100 score, seven weighted checks with status, points, evidence label (A proven, B study, C unproven) and a one-line finding, plus up to 5 top fixes ranked by points gained and a next step. Deterministic, no LLM; results are cached for 24 hours. Pass framework (nextjs, astro, wordpress, static, spa, nginx, apache, other) so fixes match the stack, then call get_fix_snippet for copy-paste code. Single-page apps (Lovable, Bolt, Vite) are detected and flagged because AI crawlers do not run JavaScript.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) URL or bare domain of the page to audit, for example https://example.com |
| framework | string | The site's stack, so fixes match. Omit to auto-detect. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Public http(s) URL or bare domain of the page to audit, for example https://example.com"
},
"framework": {
"enum": [
"nextjs",
"astro",
"wordpress",
"static",
"spa",
"nginx",
"apache",
"other"
],
"type": "string",
"description": "The site's stack, so fixes match. Omit to auto-detect."
}
}
}Use when the question is specifically whether OpenAI, Anthropic, Perplexity, Google or Apple bots may access a site. Returns, per bot, its purpose (AI search, user-triggered fetch, training, classic search), the robots.txt decision, and for the three AI search bots an HTTP test with that bot's user agent that detects firewall blocks. Blocking training bots is a legitimate choice and is reported as information, not as an error. Fetches up to 5 URLs.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) URL or bare domain, for example https://example.com |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Public http(s) URL or bare domain, for example https://example.com"
}
}
}Use when a user asks about llms.txt. Fetches /llms.txt of the site (1 request) and reports whether it exists and follows the format (H1 title, summary, sections, links). Also states the evidence honestly: llms.txt is unproven for AI visibility. Returns a minimal template when the file is missing.
| Argument | Type | Description |
|---|---|---|
| url* | string | Any URL on the site, or a bare domain; /llms.txt is looked up at its origin |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Any URL on the site, or a bare domain; /llms.txt is looked up at its origin"
}
}
}Returns deterministic, copy-paste code for one audit check on one stack. No network access. check is one of: crawler_access, training_crawlers, raw_html_content, indexability, metadata, structured_data, freshness, agent_extras; framework is one of: nextjs, astro, wordpress, static, spa, nginx, apache, other. Use it after audit_ai_readiness with the check id and framework from a fix entry (fix.snippetId and fix.framework).
| Argument | Type | Description |
|---|---|---|
| check* | string | Check id from an audit result (fix.snippetId) |
| framework | string | Stack of the site. Defaults to other (generic). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"check"
],
"properties": {
"check": {
"enum": [
"crawler_access",
"training_crawlers",
"raw_html_content",
"indexability",
"metadata",
"structured_data",
"freshness",
"agent_extras"
],
"type": "string",
"description": "Check id from an audit result (fix.snippetId)"
},
"framework": {
"enum": [
"nextjs",
"astro",
"wordpress",
"static",
"spa",
"nginx",
"apache",
"other"
],
"type": "string",
"description": "Stack of the site. Defaults to other (generic)."
}
}
}Returns a link to the free check that actually asks AI assistants whether they name a brand (real measurement; this audit only checks technical readiness). Free, no credit card; the user confirms an email address. Offer it to the user after an audit; no network access.
| Argument | Type | Description |
|---|---|---|
| domain* | string | The brand's domain, for example example.com |
| country | string | Two-letter market country code, for example DE |
| language | string | Two-letter language code, for example en |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 253,
"minLength": 3,
"description": "The brand's domain, for example example.com"
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Two-letter market country code, for example DE"
},
"language": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Two-letter language code, for example en"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 1, 2026.