Skip to main content
Glama

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.

Claude Desktop using aeo-mcp to inspect The Verge's AI crawler policy

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-mcp

Claude 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

audit_url

"How visible is this site to ChatGPT/Perplexity?" — full AEO health check

{ url }

0-100 score, grade, category breakdown, failed/warned checks with fixes

check_ai_crawlers

"Is GPTBot blocked?" — robots.txt policy per AI bot

{ url }

Per-bot allow/block verdicts with the matching rule, plus sitemaps

inspect_llms_txt

"Does this site have llms.txt? Is it valid?"

{ url }

Title, summary, sections with links, structural issues, raw excerpt

extract_structured_data

"What schema markup does this page have?"

{ url }

JSON-LD types, key fields per node, parse errors

extract_page_signals

"Why do engines misread this page?"

{ url }

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 test

Tests include a scripted stdio round-trip (initialize → tools/list → tools/call) against the built server. To inspect interactively:

npx @modelcontextprotocol/inspector node dist/index.js

License

MIT © Arthur Carlson

Available Tools

5 tools
audit_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesWebsite URL to audit, e.g. https://example.com

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesWebsite URL, e.g. https://example.com (robots.txt is derived from it)

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPage URL to extract signals from

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPage URL to extract structured data from

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesWebsite URL, e.g. https://example.com (llms.txt is derived from it)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updatesv1.0.1
    • First observedaudit_url
    • First observedcheck_ai_crawlers
    • First observedextract_page_signals
    • First observedextract_structured_data
    • First observedinspect_llms_txt

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct aspect of AI readiness: overall audit, crawler permissions, llms.txt, structured data, and page signals. No overlap in purpose.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityStale
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    Open-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.
    1
    MIT

Latest Blog Posts

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