aeo-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@aeo-mcpCheck if GPTBot is allowed on example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
aeo-mcp
An MCP server that gives AI agents — Claude, Claude Code, Cursor, anything speaking the Model Context Protocol — tools to inspect a website's visibility to AI answer engines. Crawler permissions, llms.txt, structured data, on-page signals, and a full 29-check AI-readiness audit (powered by answer-audit), each one tool call away. Read-only, no API keys, no telemetry.

Real session: Claude Desktop discovers The Verge allows GPTBot (OpenAI licensing deal) while blocking ClaudeBot, PerplexityBot, Google-Extended, and CCBot — one tool call.
Install
Claude Code
claude mcp add aeo -- npx -y aeo-mcpClaude Desktop (claude_desktop_config.json)
{ "mcpServers": { "aeo": { "command": "npx", "args": ["-y", "aeo-mcp"] } } }Cursor (.cursor/mcp.json)
{ "mcpServers": { "aeo": { "command": "npx", "args": ["-y", "aeo-mcp"] } } }Related MCP server: mcp-geo
Tools
Tool | When the agent uses it | Input | Returns |
| "How visible is this site to ChatGPT/Perplexity?" — full AEO health check |
| 0-100 score, grade, category breakdown, failed/warned checks with fixes |
| "Is GPTBot blocked?" — robots.txt policy per AI bot |
| Per-bot allow/block verdicts with the matching rule, plus sitemaps |
| "Does this site have llms.txt? Is it valid?" |
| Title, summary, sections with links, structural issues, raw excerpt |
| "What schema markup does this page have?" |
| JSON-LD types, key fields per node, parse errors |
| "Why do engines misread this page?" |
| Title, meta description, h1, canonical, lang, text ratio, heading outline, client-side-rendering flag |
Bots checked by check_ai_crawlers: GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot, Bingbot.
Try these prompts
"Audit glowlab.com and summarize the top 3 AEO fixes."
"Compare the AI crawler policies of nike.com and adidas.com — who is more open to being cited?"
"Check if my site has a valid llms.txt, and if not, draft one from my page signals."
Security
The server fetches model-supplied URLs, so it ships with an SSRF guard: http/https only, DNS resolution checked against private and special ranges (loopback, RFC1918, link-local, unique-local, IPv4-mapped forms), re-validation on every redirect hop, 10 s timeout, 2 MB body cap, max 5 redirects. Violations return a clean tool error, never an exception. All tools are read-only and no LLM calls happen inside the server.
Development
npm install
npm run build # required before npm test (the protocol test runs dist/)
npm testTests include a scripted stdio round-trip (initialize → tools/list → tools/call) against the built server. To inspect interactively:
npx @modelcontextprotocol/inspector node dist/index.jsLicense
MIT © Arthur Carlson
Available Tools
5 toolsaudit_urlA
Run a full AI-readiness (AEO) audit of a website: 29 checks across AI crawler access, structured data, content extractability, and answerability, returning a 0-100 score with prioritized fixes. Use when asked how visible a site is to ChatGPT, Perplexity, Gemini, or Claude, or for an overall AEO/AI-SEO health check.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Website URL to audit, e.g. https://example.com |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the audit scope (29 checks, score, fixes) but does not mention side effects, permissions, or whether it is read-only. Given the nature (audit), it is reasonably transparent but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines function and output, second gives usage guidance. No fluff, front-loaded with key information. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter and no output schema, the description provides sufficient context: categories, score range, and output type (prioritized fixes). It is complete enough for an agent to understand what the tool returns and when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (one parameter 'url' fully described in schema). The description adds no additional semantic context for the parameter beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a full AI-readiness (AEO) audit with 29 checks across specific categories, returns a 0-100 score and prioritized fixes. It distinguishes itself from sibling tools by covering multiple dimensions (crawler access, structured data, etc.) versus individual checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use: when asked about visibility to AI chatbots or for overall AEO/AI-SEO health. It does not include when-not-to-use or compare directly with siblings, but the context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ai_crawlersA
Check whether AI crawlers like GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot, and Bingbot are allowed to read a website, based on its robots.txt. Use when asked about AI visibility, AEO, crawler permissions, or why a site does not appear in ChatGPT or Perplexity.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Website URL, e.g. https://example.com (robots.txt is derived from it) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool checks based on robots.txt and lists specific crawlers, but does not disclose behavior for missing robots.txt, error handling, or output format. Adequate but missing details for a standalone description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action and list of crawlers, followed by use cases. No redundant words. Earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has low complexity (1 param, no output schema). The description lists crawlers and use cases but does not hint at the return format (e.g., allowed/blocked per crawler). Adequate for an agent, but not fully complete without output guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for the single parameter (url) with a clear description. The tool description adds that robots.txt is derived from the URL, which matches the schema. No additional semantics needed beyond schema, so baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks if specific AI crawlers are allowed via robots.txt, and provides explicit use cases (AI visibility, AEO, crawler permissions, not appearing in ChatGPT). It distinguishes from sibling tools like audit_url or inspect_llms_txt by focusing on AI crawlers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use when asked about AI visibility, AEO, crawler permissions, or why a site does not appear in ChatGPT or Perplexity.' It implies context but does not explicitly state when not to use it or mention alternatives like audit_url for broader robots.txt checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_page_signalsA
Extract the on-page signals AI engines parse: title, meta description, h1, canonical, lang, text-to-HTML ratio, heading outline, and whether the page looks client-side rendered (invisible to most AI crawlers). Use to diagnose why engines misread or skip a page.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL to extract signals from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the tool extracts specific signals and detects client-side rendering, implying read-only behavior with no destructive effects. Lacks details on auth or rate limits but sufficient for a simple extraction tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first lists extracted signals, second provides usage goal. No wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has one simple parameter, no output schema. Description lists all extracted signals and provides usage context, making it complete for an agent to understand inputs, outputs, and purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter 'url' described as 'Page URL to extract signals from'. The description repeats the same without adding new meaning; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'extract' and resource 'on-page signals', and lists specific signals (title, meta description, etc.), distinguishing it from siblings like 'extract_structured_data' which handles different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use to diagnose why engines misread or skip a page', providing clear when-to-use context. It does not mention alternatives or when not to use, but the diagnostic purpose is well-stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_structured_dataA
Extract and summarize a page's JSON-LD structured data (schema.org): which types exist (Product, Article, FAQPage, Organization), their key fields, and any parse errors. Use when asked whether a page has the schema markup AI answer engines rely on for citations.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL to extract structured data from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool extracts and summarizes JSON-LD data and reports parse errors, but it does not explicitly state whether it modifies data (likely read-only), authorization needs, or behavior for pages without JSON-LD. Some behavioral context is present but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The first sentence front-loads the action and specifics, and the second sentence provides usage guidance. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers what it does and what it returns (types, fields, errors). It could mention error handling for invalid URLs, but overall it is fairly complete given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the single 'url' parameter is described in the schema). The description adds context that the extraction is for JSON-LD structured data but does not significantly augment the parameter's meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (extract and summarize), the resource (page's JSON-LD structured data), and specifics (types, key fields, parse errors). It also distinguishes from sibling tools like audit_url or extract_page_signals by focusing solely on JSON-LD schema markup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides a use case: 'Use when asked whether a page has the schema markup AI answer engines rely on for citations.' While it doesn't mention when not to use or alternatives, the context is clear enough for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_llms_txtA
Fetch and validate a website's llms.txt file (the Markdown file that tells AI engines what the site is about and which pages matter). Returns its title, summary, sections, links, and any structural issues. Use when asked whether a site has llms.txt or how to improve it.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Website URL, e.g. https://example.com (llms.txt is derived from it) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states it will fetch and validate the file and return various attributes, but it does not disclose behavior details like HTTP request method, error handling for missing files, or potential side effects. The description provides moderate transparency beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two sentences, each serving a distinct purpose: the first explains what the tool does and returns, the second gives usage guidance. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no output schema), the description adequately covers the purpose, return values, and usage. A minor gap is that it does not explicitly mention behavior when the llms.txt file is missing, but 'structural issues' likely covers that. Overall, it is complete enough for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter 'url', including a description. The tool description adds only a parenthetical note that llms.txt is derived from the URL, which does not significantly augment the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Fetch and validate') and the specific resource (llms.txt file). It also lists return contents (title, summary, sections, links, structural issues). This distinguishes it from sibling tools like audit_url or check_ai_crawlers, which target different aspects of a site.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use when asked whether a site has llms.txt or how to improve it,' providing clear context. It does not mention when not to use it or alternatives, but given the focused purpose, it is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v1.0.1- First observed
audit_url - First observed
check_ai_crawlers - First observed
extract_page_signals - First observed
extract_structured_data - First observed
inspect_llms_txt
TDQS
Each tool targets a distinct aspect of AI readiness: overall audit, crawler permissions, llms.txt, structured data, and page signals. No overlap in purpose.
All tool names follow a consistent verb_noun pattern with underscores, e.g., audit_url, check_ai_crawlers, inspect_llms_txt, extract_structured_data, extract_page_signals.
Five tools is well-scoped for the focused domain of AI-readiness auditing. Each tool covers a key area without being overwhelming or too sparse.
The set covers core AI-readiness checks (crawlers, llms.txt, structured data, on-page signals) and a comprehensive audit. Minor gaps like content quality or answerability simulation are likely integrated into the audit tool.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- RampifyOAuthdev.rampify
SEO MCP server: crawl your site, find AI-visibility gaps, and ship the fix from your coding agent.
Checks llms.txt, AI crawler access in robots.txt, and sitemap - with a 0-100 AI readiness score.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Agent-readiness scanner (0-5 score), robots.txt + llms.txt generators, managed agent enablement.
Related MCP Servers
FlicenseNot gradedqualityDmaintenanceMCP server for website auditing and AI visibility measurement using the COVEN v2.0.1 methodology, offering tools to scan, score, and optimize sites for agent traffic.-- AlicenseNot gradedqualityBmaintenanceMCP server exposing Generative Engine Optimization tools to any AI agent, enabling checking of llms.txt, auditing robots.txt for AI crawlers, and validating JSON-LD schema.MIT
- AlicenseNot gradedqualityCmaintenanceOpen-source MCP server that audits websites for AI search readiness, providing deterministic scoring (0-100) and prioritized fix lists for metrics like JSON-LD, llms.txt, heading hierarchy, and AI crawler access.1MIT
- AlicenseAqualityBmaintenanceEnables inspection of any website's AI-search readiness, checking AI crawler blocks, llms.txt, schema markup, and indexing directives from MCP clients like Claude.469MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/arthurcarlsonn/aeo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server