SEO & GEO MCP Server
A TypeScript MCP server with 17 read-only tools to audit on-page SEO and GEO: whether ChatGPT, Claude or Perplexity can actually crawl and cite your page.
- Role
- Design & Development
- Year
- 2026
- Published
- July 19, 2026
seo-geo-mcp-server is a TypeScript MCP (Model Context Protocol) server that gives an AI agent —like Claude— 17 read-only tools to audit a page along two dimensions: classic SEO (meta tags, headings, structured data, images, links, robots.txt, sitemaps, hreflang, redirects) and GEO (Generative Engine Optimization): whether ChatGPT, Claude, Perplexity or Gemini can actually crawl, read and cite that page. No API keys — everything runs on public HTTP, DNS and robots.txt.
It is the sibling of the domain security MCP server and shares its architecture: a pure core with no MCP coupling, thin tool wrappers, and SSRF guards re-checked on every redirect hop.
Why GEO, not just SEO
The GEO side exists because two mechanisms decide whether an AI can cite you, and almost nobody checks them:
- Blocking training is not the same as blocking citation. Blocking
GPTBotstops training; blockingOAI-SearchBotremoves you from ChatGPT’s results. Plenty of sites that meant the first have done the second without realising. The server separates the two groups and says so. - Most AI crawlers do not execute JavaScript. Googlebot does;
GPTBot,ClaudeBot,PerplexityBotandCCBotlargely do not. A client-rendered page can rank perfectly well in Google and be invisible to every AI assistant. The server detects that case.
Features
- 17 tools with typed output: every tool declares an
inputSchemaandoutputSchema(Zod) and returnsstructuredContentvalidated by the SDK, alongside human-readable markdown. - Two flagship tools:
seo_auditscores seven weighted sections from a single page fetch and returns an A–F grade with prioritised fixes;geo_auditscores AI answer-engine readiness across seven signals. - Crawler registry verified against official documentation from OpenAI, Anthropic, Google, Perplexity, Apple, Meta, Amazon, Mistral and others. Each token records its provenance (first-party docs or community aggregator) and whether the vendor actually honours robots.txt.
- RFC 9309-compliant robots.txt matcher: case-insensitive tokens, group merging, longest-match with allow-wins-tie,
*wildcards and$anchors, plus Apple’s documented quirk (Applebot inherits Googlebot’s rules). - Honesty by design:
llms.txtis detected and validated but deliberately not scored, because it is an unadopted community proposal and Google has stated it does not use it. Blocks on bots documented to ignore robots.txt are reported as unenforceable rather than as clean blocks. - Two transports:
stdiofor local clients (Claude Desktop / Claude Code) and stateless Streamable HTTP for self-hosting behind a reverse proxy (Coolify/Traefik), with a Dockerfile included. - Tested: 32 deterministic unit tests covering the robots matcher, SPA detection and JSON-LD parsing, plus a smoke test that calls all 17 tools over the real protocol and validates each output against its schema.
Tech stack
- TypeScript, strict (
noUncheckedIndexedAccess,outputSchemaon all 17 tools) - @modelcontextprotocol/sdk with
registerTooland server-levelinstructions - Zod for input and output validation
- Cheerio for DOM parsing
- Express for the stateless HTTP transport
- Node.js (fetch with a per-hop SSRF guard, byte caps, public DNS resolution)
- Docker for self-hosted deployment
Repository
Goal
To fill a real gap: on-page SEO tools are web UIs an agent cannot operate, and GEO tooling is mostly paid rank-tracking dashboards. This server puts both within reach of an agent, key-free, and with an explicit position on which signals are backed by vendor documentation and which are not.