AIReady MCP
AIReady provides MCP tools to scan and fix a website's AI discoverability. It checks AI crawler access via robots.txt, verifies llms.txt and sitemap presence, audits schema.org structured data, and generates fixes like AI-specific robots.txt rules, starter llms.txt files, and JSON-LD snippets to help AI assistants find, read, and cite the site.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://ai-ready.magicteams.ai/mcpWhat its tools do
5 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Scan a website's AI search visibility and crawler access
- Generate robots.txt rules for AI crawlers
- Draft a starter llms.txt file
- Generate schema.org JSON-LD snippets
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- ai-ready 1.2.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 5 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- 3 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
5 advertised
check_ai_readiness — Check AI readiness
Live scan of one website's AI search visibility (GEO/AEO, SEO for AI assistants): can ChatGPT, Claude and Perplexity crawl, read and cite it? Fetches the domain's /robots.txt, /llms.txt, /sitemap.xml and homepage, then returns a 0-100 score, grade, per-crawler allow/block status and prioritized fixes, each naming the AIReady tool that writes the fix. Use whenever a user names a site and asks about SEO, AI search or being found or cited by AI. Do NOT use for general advice on which bots to allow (use crawler_policy_guide) or to write new rules (use robots_txt_for_ai).
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "Public domain or URL to scan, e.g. example.com or https://example.com/page (path is ignored; no IPs, ports or localhost)."
}
}
}{
"type": "object",
"required": [
"domain",
"score",
"grade",
"checks",
"crawler_access",
"findings",
"generated",
"fetched",
"disclaimer"
],
"properties": {
"grade": {
"enum": [
"A",
"B",
"C",
"D"
],
"type": "string",
"description": "Letter grade: A >= 85, B >= 70, C >= 50, otherwise D."
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Caveats about this scan, e.g. www. fallback used or requests refused by the site."
},
"score": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Weighted readiness score 0-100 (pass = full weight, warn = half)."
},
"checks": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"status",
"weight",
"detail"
],
"properties": {
"id": {
"enum": [
"search_bots_allowed",
"llms_txt",
"sitemap",
"structured_data",
"meta",
"content_signals",
"https"
],
"type": "string"
},
"name": {
"type": "string"
},
"detail": {
"type": "string"
},
"status": {
"enum": [
"pass",
"warn",
"fail"
],
"type": "string"
},
"weight": {
"type": "number"
}
}
},
"description": "Individual checks with pass/warn/fail status and weight."
},
"domain": {
"type": "string",
"description": "Normalized host name that was scanned, e.g. example.com."
},
"fetched": {
"type": "object",
"required": [
"robots",
"llms",
"sitemap",
"homepage"
],
"properties": {
"llms": {
"type": "object",
"required": [
"status",
"bytes"
],
"properties": {
"bytes": {
"type": "number"
},
"status": {
"type": "number"
}
},
"description": "llms.txt fetch result."
},
"robots": {
"type": "object",
"required": [
"status",
"bytes",
"truncated"
],
"properties": {
"bytes": {
"type": "number"
},
"status": {
"type": "number"
},
"truncated": {
"type": "boolean"
}
},
"description": "robots.txt fetch result."
},
"sitemap": {
"type": "object",
"required": [
"status",
"bytes"
],
"properties": {
"bytes": {
"type": "number"
},
"status": {
"type": "number"
}
},
"description": "sitemap.xml fetch result."
},
"homepage": {
"type": "object",
"required": [
"status",
"bytes"
],
"properties": {
"bytes": {
"type": "number"
},
"status": {
"type": "number"
}
},
"description": "Homepage fetch result."
}
},
"description": "HTTP status and byte size of each fetched file (status 0 = network error)."
},
"findings": {
"type": "array",
"items": {
"type": "object",
"required": [
"check",
"priority",
"detail"
],
"properties": {
"check": {
"type": "string"
},
"detail": {
"type": "string"
},
"fix_with": {
"enum": [
"robots_txt_for_ai",
"llms_txt_draft",
"schema_jsonld_sample"
],
"type": "string",
"description": "AIReady tool that generates the fix, when one applies."
},
"priority": {
"enum": [
"high",
"medium"
],
"type": "string"
}
}
},
"description": "Non-passing checks as fixes; fail = high priority, warn = medium."
},
"generated": {
"type": "object",
"required": [
"robots_snippet_to_unblock_search_bots",
"llms_txt_hint"
],
"properties": {
"llms_txt_hint": {
"type": "string",
"description": "Pointer to llms_txt_draft and the publish URL."
},
"robots_snippet_to_unblock_search_bots": {
"type": [
"string",
"null"
],
"description": "robots.txt lines allowing blocked visibility-critical bots, or null if none are blocked."
}
},
"description": "Ready-made fix snippets derived from the scan results."
},
"disclaimer": {
"type": "string",
"description": "Informational disclaimer: crawler behaviour can change, verify against provider docs."
},
"crawler_access": {
"type": "array",
"items": {
"type": "object",
"required": [
"bot",
"owner",
"purpose",
"visibility_critical",
"access",
"advice"
],
"properties": {
"bot": {
"type": "string"
},
"owner": {
"type": "string"
},
"access": {
"enum": [
"allowed",
"blocked",
"no-rule"
],
"type": "string"
},
"advice": {
"type": "string"
},
"purpose": {
"type": "string"
},
"visibility_critical": {
"type": "boolean"
}
}
},
"description": "Access verdict for each known AI crawler under the site's robots.txt."
}
}
}{
"title": "Check AI readiness",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}crawler_policy_guide — Crawler policy guide
Static reference of 15 known AI crawlers and control tokens (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended...): owner, purpose, whether each drives AI citations or training, plus rules of thumb. Use to decide which bots to allow or block. No site is fetched. Do NOT use to audit a real site (use check_ai_readiness) or to produce rules (use robots_txt_for_ai).
{
"type": "object",
"required": [],
"properties": {}
}{
"type": "object",
"required": [
"crawlers",
"by_purpose",
"rules_of_thumb",
"disclaimer"
],
"properties": {
"crawlers": {
"type": "array",
"items": {
"type": "object",
"required": [
"bot",
"owner",
"purpose",
"ua",
"visibility_critical",
"advice"
],
"properties": {
"ua": {
"type": "string"
},
"bot": {
"type": "string"
},
"owner": {
"type": "string"
},
"advice": {
"type": "string"
},
"purpose": {
"type": "string"
},
"visibility_critical": {
"type": "boolean"
}
}
},
"description": "Reference row per known AI crawler or control token."
},
"by_purpose": {
"type": "object",
"required": [
"want_ai_visibility",
"training_controls"
],
"properties": {
"training_controls": {
"type": "array",
"items": {
"type": "string"
},
"description": "Bots whose purpose includes model training."
},
"want_ai_visibility": {
"type": "array",
"items": {
"type": "string"
},
"description": "Bots to keep allowed for AI search/citations."
}
},
"description": "Bot names grouped by why you would allow or block them."
},
"disclaimer": {
"type": "string",
"description": "Informational disclaimer: crawler behaviour can change, verify against provider docs."
},
"rules_of_thumb": {
"type": "array",
"items": {
"type": "string"
},
"description": "Short guidance on allowing/blocking AI crawlers."
}
}
}{
"title": "Crawler policy guide",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}robots_txt_for_ai — Generate robots.txt for AI
Generate robots.txt User-agent rules for all known AI crawlers from a chosen policy (max_visibility, search_only, block_training, block_all_ai), with optional Content-Signal and Sitemap lines, to paste into an existing robots.txt. Use when writing AI crawler rules. Do NOT use to check a live site's current rules (use check_ai_readiness) or for bot background (use crawler_policy_guide).
{
"type": "object",
"required": [
"policy"
],
"properties": {
"policy": {
"enum": [
"max_visibility",
"search_only",
"block_training",
"block_all_ai"
],
"type": "string",
"description": "AI policy preset: max_visibility = allow every AI bot; search_only or block_training = allow search/answer bots, block training crawlers (same output); block_all_ai = disallow every known AI bot."
},
"sitemap_url": {
"type": "string",
"description": "Optional absolute sitemap URL appended as a Sitemap: line, e.g. https://example.com/sitemap.xml."
},
"content_signals": {
"type": "boolean",
"description": "Append a Content-Signal line (search / ai-input / ai-train) matching the policy. Default true; pass false to omit."
}
}
}{
"type": "object",
"required": [
"policy",
"robots_txt",
"notes",
"disclaimer"
],
"properties": {
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Guidance on merging and interpreting the rules."
},
"policy": {
"enum": [
"max_visibility",
"search_only",
"block_training",
"block_all_ai"
],
"type": "string",
"description": "The policy preset the rules were generated for."
},
"disclaimer": {
"type": "string",
"description": "Informational disclaimer: crawler behaviour can change, verify against provider docs."
},
"robots_txt": {
"type": "string",
"description": "Generated robots.txt text block, newline-terminated."
}
}
}{
"title": "Generate robots.txt for AI",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}llms_txt_draft — Draft llms.txt
Draft a starter llms.txt (Markdown: # name, > one-line summary, key page links, contact) from business details, to publish at the site root so AI agents get a curated summary. Use when a site has no llms.txt. Do NOT use for crawler access rules (use robots_txt_for_ai) or schema.org markup (use schema_jsonld_sample).
{
"type": "object",
"required": [
"business_name",
"description"
],
"properties": {
"key_pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Absolute page URL, e.g. https://example.com/services."
},
"note": {
"type": "string",
"description": "Optional short note shown after the link, e.g. Pricing and areas served."
},
"title": {
"type": "string",
"description": "Link text, e.g. Services."
}
}
},
"description": "Optional important pages listed under '## Key pages'. Each needs title and url."
},
"description": {
"type": "string",
"description": "One sentence on what you offer and for whom, used as the '> ' summary, e.g. 24/7 emergency plumbers serving Austin, TX."
},
"business_name": {
"type": "string",
"description": "Business or site name used as the '# ' title, e.g. Reddy Plumbing."
},
"contact_email": {
"type": "string",
"description": "Optional contact email listed under '## Contact', e.g. hello@example.com."
}
}
}{
"type": "object",
"required": [
"llms_txt",
"publish_at",
"tips",
"disclaimer"
],
"properties": {
"tips": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tips for keeping llms.txt useful."
},
"llms_txt": {
"type": "string",
"description": "Generated llms.txt Markdown content."
},
"disclaimer": {
"type": "string",
"description": "Informational disclaimer: crawler behaviour can change, verify against provider docs."
},
"publish_at": {
"type": "string",
"description": "Where to publish the file (site root, text/plain)."
}
}
}{
"title": "Draft llms.txt",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}schema_jsonld_sample — Generate JSON-LD sample
Generate a schema.org JSON-LD snippet (Organization, LocalBusiness, Product with Offer, or FAQPage) from your details, with placement tips, so search engines and AI assistants can identify the entity. Use when adding structured data to a page. Do NOT use to check whether a site already has structured data (use check_ai_readiness) or for llms.txt (use llms_txt_draft).
{
"type": "object",
"required": [
"type",
"name",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL including https://, e.g. https://example.com (required; not emitted for faq)."
},
"name": {
"type": "string",
"description": "Entity name, e.g. Reddy Plumbing (required; not emitted for faq)."
},
"type": {
"enum": [
"organization",
"local_business",
"product",
"faq"
],
"type": "string",
"description": "Entity type: organization, local_business (adds telephone/address), product (adds price Offer) or faq (requires questions)."
},
"price": {
"type": "string",
"description": "Optional price for product; a 3-letter currency code in it sets priceCurrency (default USD), e.g. '49.00 USD'."
},
"address": {
"type": "string",
"description": "Optional street address for local_business, e.g. 100 Main St, Austin, TX 78701."
},
"questions": {
"type": "array",
"items": {
"type": "object",
"required": [
"question",
"answer"
],
"properties": {
"answer": {
"type": "string",
"description": "Answer text."
},
"question": {
"type": "string",
"description": "Question text."
}
}
},
"description": "Question/answer pairs for faq (at least one required when type is faq)."
},
"telephone": {
"type": "string",
"description": "Optional phone for local_business, ideally E.164, e.g. +1-512-555-0100."
},
"description": {
"type": "string",
"description": "Optional one-sentence description (organization, local_business, product)."
}
}
}{
"type": "object",
"required": [
"jsonld",
"placement",
"tips",
"disclaimer"
],
"properties": {
"tips": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tips for accurate structured data."
},
"jsonld": {
"type": "string",
"description": "Pretty-printed JSON-LD object as a string, ready to embed."
},
"placement": {
"type": "string",
"description": "Where to paste the snippet in the page."
},
"disclaimer": {
"type": "string",
"description": "Informational disclaimer: crawler behaviour can change, verify against provider docs."
}
}
}{
"title": "Generate JSON-LD sample",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
3 advertised
audit_site — Audit my site for AI search
Scan a website for AI crawler access, llms.txt, sitemap and structured data, then write the fixes.
- domain
- Your website, e.g. example.com (required)
ai_crawler_rules — Write robots.txt rules for AI bots
Decide which AI crawlers to allow or block, then generate the robots.txt rules.
- goal
- Optional: what you want, e.g. be cited by AI but not used for training
write_llms_txt — Write my llms.txt
Draft an llms.txt file so AI assistants get a clear summary of your site.
- website
- Your website or business name (required)
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 291 ms
- 95th percentile latency
- 291 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 291 ms · metadata changed · 5 tool(s), 3 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http aiready-mcp-magicteams https://ai-ready.magicteams.ai/mcpCodex
codex mcp add aiready-mcp-magicteams --url https://ai-ready.magicteams.ai/mcpCursor
{
"mcpServers": {
"aiready-mcp-magicteams": {
"url": "https://ai-ready.magicteams.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"aiready-mcp-magicteams": {
"type": "streamableHttp",
"url": "https://ai-ready.magicteams.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"aiready-mcp-magicteams": {
"type": "http",
"url": "https://ai-ready.magicteams.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http aiready-mcp-magicteams https://ai-ready.magicteams.ai/mcpClaude Desktop
https://ai-ready.magicteams.ai/mcpWindsurf
{
"mcpServers": {
"aiready-mcp-magicteams": {
"serverUrl": "https://ai-ready.magicteams.ai/mcp"
}
}
}Let your agent find its tools
Find servers like AIReady MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.