The OpenAEO MCP server: audit your site for AI search without leaving your editor
OpenAEO ships a free, MIT-licensed MCP server in the openaeo-audit npm package. Add it to Claude Code, Cursor, or any MCP client, and your coding agent can audit a live domain against 5 retrieval gates and 8 headline checks, then generate the fixes as real files: robots.txt, llms.txt, JSON-LD and answer-ready copy. It writes them into your project the way any other change arrives, as a diff you read before you commit. There is no API key, no account and no telemetry. If your site is on a hosted platform and you have no codebase at all, one of the eight local tools returns click-by-click steps for your platform's admin instead. The paid plans exist for the part that recurs, weekly citation testing across assistants, which cannot run on your laptop. The audit and the fixes are free forever.
The eight local tools
aeo_auditFetches a live domain as an AI crawler and scores it: 5 retrieval gates, 8 headline checks, a band and a ranked fix list.
aeo_fix_filesGenerates robots.txt, llms.txt and JSON-LD for the site, ready to write into your static root.
aeo_fix_htmlTakes a page's HTML and adds the missing head elements. It only adds; it never rewrites your page content.
aeo_check_htmlScores a page you already have in hand, so the agent can verify its own fix before you deploy it.
aeo_packetProduces an ordered engineering packet: tickets with the failing check, the change, and an acceptance command.
aeo_fix_my_siteFor sites with no codebase. Detects Squarespace, Wix, Webflow, WordPress, Shopify, Framer, Ghost or Carrd and returns click-by-click steps for that admin.
aeo_read_logReads a server access log and reports what the crawlers actually got: which arrived, what status, which paths, and whether each request really came from the operator it claimed. Parsed on your machine; the log never leaves it.
aeo_verify_crawlerChecks one address against the ranges the operator publishes. Verified, impostor, or unverifiable, and never impostor without positive evidence.
The seven hosted tools
These need a key on Solo and above, for one reason: they read things that cannot exist on your laptop. Your own site can tell you whether it is legible. It cannot tell you whether an assistant named you last Tuesday, whether that changed since March, or how your authenticity rate compares to everyone else's, because none of that is on your disk. Set OPENAEO_API_KEY and the same agent reaches them.
aeo_citationsAsks the assistants the questions your buyers ask and reports who gets named. This is the measurement the whole product exists for.
aeo_historyYour scores over time. A single audit is a snapshot; this is the line, and the line is what tells you a fix worked.
aeo_driftWhat changed on your site since the last run, and which check it moved. Catches the deploy that quietly removed your schema.
aeo_alertsThe open findings worth acting on, already deduplicated against what you were told last week. The agent can read them without opening the dashboard.
aeo_competitorsShare of voice against the sites that get named when you do not. Requires asking about them too, which is not your data.
aeo_crawler_intelWhat AI crawlers are doing across every site in the corpus, not just yours. One site cannot see a pattern; the corpus can.
aeo_authenticityWhere your genuine-traffic rate sits against the median. Built from readings other people contributed, so it cannot be computed alone.
aeo_read_log sits on the line between the two lists. It parses your log locally, as it always has, and the log never leaves your machine. With a key it also sends two integers, the share of requests that were genuine and how many there were, and returns where that puts you against everyone else. Nothing about which paths were hit, or by whom.
It will not invent your facts
Structured data rewards specifics: prices, review counts, founding years, refund windows. Those are exactly the values a language model will happily fabricate to fill a template, and a fabricated price in your JSON-LD is worse than no JSON-LD, because it is a claim you did not make and cannot honour.
So the generated files carry [bracketed] placeholders wherever a real number belongs, and the server's instructions tell the agent never to fill one in on its own. It asks you, or it leaves the bracket for you to fill. The audit also treats an unresolved placeholder in live copy as something that caps your score, so shipping the brackets by accident is itself a finding. A tool that sells legibility should not be the thing that puts an invented number on your site.
A typical run
- Ask your agent to audit your domain. It reports the score, the band, and which checks failed.
- It generates robots.txt and llms.txt and writes them into your public or static root.
- It runs the head fixer on your key pages and writes the results back.
- It re-checks each page locally, and re-audits the live domain after you deploy to confirm the score moved.
A failing retrieval gate caps the whole score, so the agent is told to clear those first. Blocked crawlers, JavaScript-only rendering and a robots.txt disallow are worth more than any amount of schema tuning underneath them.
Step four is the one most tools skip. A report is a list of things you now have to do; aeo_check_html lets the agent score its own edit and know whether it worked before it opens the pull request.
Questions
Is there an MCP server that audits my site for AI search?+
How do I add the OpenAEO MCP server to Claude Code?+
How do I add it to Cursor or another MCP client?+
Does the agent change my files without asking?+
What if my site is on Squarespace or Shopify and I have no codebase?+
Is the MCP server free, and how does it relate to the paid plans?+
MIT licensed · openaeo-audit on npm · no telemetry, no account, no API key