Grounded AEO logo

MCP SERVER: HOSTING, TOOLS & LIMITS

The Grounded AEO
MCP server.

Connect it to any MCP-capable assistant and it will audit a website for AI citation, hand back the exact fixes, verify they landed, and produce the v=AEO1 record to publish.

Remote & hosted · nothing to install · free · no API key · rate-limited per caller

001/THE ENDPOINT
https://groundedaeo.com/api/mcp

Transport is streamable HTTP, and the server is stateless: every request is self-contained, so there are no sessions to manage. It is hosted on groundedaeo.com itself; there is no separate package to install and nothing runs on your machine.

Note: /mcp (this page) is documentation. The machine endpoint your client connects to is /api/mcp.

002/HOW TO CONNECT

Most clients take a config block like this:

{
  "mcpServers": {
    "grounded-aeo": {
      "type": "http",
      "url": "https://groundedaeo.com/api/mcp"
    }
  }
}

It is also listed in the official MCP registry as com.groundedaeo/grounded-aeo, and on Smithery (one-click install) and mcp.so.

003/WHAT IT CAN DO
run_auditWRITE

Crawls a domain, scores its AI-readability 0–10, lists the gaps, and returns the fix material: ready-to-paste <head> markup and a step-by-step plan (llms.txt, schema, AI-crawler access). Run it again after applying fixes to confirm the score moved.

generate_free_recordWRITE

Produces a free, self-declared v=AEO1 DNS TXT record and .well-known/aeo.json for you to publish on your own domain.

check_aeo_recordREAD

Checks any domain (cataloged or not) for a v=AEO1 record and verifies its Ed25519 signature against the live catalog.

get_company_factsREAD

Returns the published, owner-attested facts for a cataloged domain, with verification state: the data to ground an answer on.

get_factREAD

Returns a single verified fact by domain and key.

get_llms_txtREAD

Returns the auto-generated llms.txt for a cataloged company.

search_catalogREAD

Searches the catalog by name or domain; up to 10 matches with tier and verification state.

get_competitive_snapshotREAD

For a claimed domain: the latest ranking-footprint snapshot, the AI-prompt vs Google demand table for its watched keywords, and each tracked competitor with their own latest snapshot. Footprint is not traffic, and a null means nothing has been collected, never zero.

propose_briefsREAD

For a claimed domain: up to 6 ranked content briefs built from its own demand and citation data: the question to answer, the format, the outline, and the only claims that may be made, which are the owner's published verified facts, verbatim. Deterministic and read-only; an empty list means not enough has been collected yet.

get_engine_visibilityREAD

For a claimed domain: per AI engine, whether its crawler is allowed by robots.txt to read the site at all, and how many tracked questions that engine cited the domain on. An engine with no crawl measurement reads as not measured (never as an assumed allow), and an engine with no citation checks reads as untested, never as zero.

get_citationsREAD

For a claimed domain: the latest citation check per question × engine: the question, the engine, whether it cited the domain, the URL it cited, and the day checked. The engines’ answers are stored verbatim as the evidence behind each verdict, but stay first-party: they are served to the owner in their dashboard and report, not over this public endpoint.

get_cited_domainsREAD

For a claimed domain: who the answers cited instead: the domains that appeared in those stored answers, ranked by how many cited them, with the engines that did. An appearance is a citation by an answer we asked for; it is not an endorsement and not a quality ranking.

get_keyword_gapREAD

For a claimed domain: phrases a tracked competitor holds a position for in our stored captures where this domain holds none, or sits at least 20 places further back. Computed from captures already on disk; nothing is fetched. The stored lists are a sample of each footprint, so absence here is absence from that sample, never from public search, and the response carries that sentence.

check_serpREAD

Live Google results for any keyword: who ranks in the top 10, the People Also Ask questions, and which blocks (AI Overview, local pack) occupy the page: the slots that exist to be won. No account needed; 10/hour per caller.

Write actions are rate-limited per caller: 5 audits/hour, 10 free records/hour.

004/WHAT IT CAN'T DO

Worth stating plainly, because a tool that overstates itself is worse than one that does less.

It cannot change your site or your DNS.

It returns code and records for you to publish. It never touches your hosting, your repo, or your DNS provider, by design.

It cannot issue a signed or verified record.

generate_free_record produces a self-declared record only: unsigned, unverified. Signed records at listed/verified/grounded require proven domain control and are a paid product.

It cannot tell you a fact is true.

Verification asserts provenance, authenticity, and corroboration depth as of a date, never that a fact is true in the world or stays true afterwards.

It cannot return facts for domains that have not opted in.

Only claimed, consented domains are exposed. Everything else reports as not enrolled and leaks nothing.

It cannot make an AI engine cite you.

It makes you machine-readable and verifiable. No one can promise a citation, and anyone who does is selling something.

It cannot hand out a report link, or your private analytics.

A report link is a bearer credential, so this unauthenticated server never mints one; the owner issues it from the dashboard. Search Console data, your watched-keyword and question configuration, report schedules, and the engines’ verbatim answers stay behind the login too.

It has no memory of you.

The server is stateless and unauthenticated: no accounts, no history, no per-user state. Rate limits are per caller IP.

005/QUESTIONS

Where is the MCP server hosted?

On groundedaeo.com itself, at https://groundedaeo.com/api/mcp. It is a remote server using streamable HTTP transport, running stateless: every request is self-contained, there are no sessions. Because it is remote and hosted, there is nothing to install and no package to run locally.

Does it cost anything or need an API key?

No. There is no account, no API key and no signup. Write actions are rate-limited per caller IP (5 audits/hour, 10 free records/hour), the same limits as the public web forms. The tools that read paid-for data for a claimed domain (get_competitive_snapshot, propose_briefs, get_engine_visibility, get_citations, get_cited_domains and get_keyword_gap) share one allowance of 30/hour between them, so renaming the call does not buy a fresh budget. check_serp, which fetches live SERP data, is limited to 10/hour.

Can it give me a link to the full report?

No, and that is deliberate rather than missing. A /report/<token> link is a bearer credential: whoever holds it reads the whole report with no further sign-in. This server is unauthenticated, and the claimed-domain gate proves that a domain opted in to being read, never that the caller is its owner. Report links are issued by the owner from the dashboard. The read tools above return the underlying numbers instead.

Does it expose my Search Console data or my verbatim AI answers?

No. Google Search Console figures, your watched-keyword and tracked-question configuration, report schedules, and the verbatim answers each engine gave never cross this endpoint; they are account-private and stay in the signed-in dashboard. The public tools return verdicts, counts and cited URLs, which is what an agent needs to reason.

Can it change my website or my DNS for me?

No, and this is deliberate. The server returns code and records for you (or your AI assistant) to publish. It never touches your hosting, your repository or your DNS provider. Nothing it does can modify your infrastructure.

Can it issue a verified or signed record?

No. generate_free_record produces a self-declared record only: unsigned, no verification. Signed records at the listed, verified and grounded tiers are issued after domain control is proven, and are a paid product.

Will it return facts about any business?

No. Only domains whose owner has claimed them and consented are exposed. Anything else reports as not enrolled and leaks nothing. Owner consent is the whole premise of the standard.

Does a verified record mean the facts are true?

No. Verification asserts provenance, authenticity and corroboration depth as of a stated date, not that a fact is true in the world, or that it stays true afterwards. The full public methodology, including what a tier does NOT assert, is at aeorecord.org/methodology.

Building on it, or need a tool the server doesn't expose yet? Tell us: support@aeorecord.org. See also the one-call verification API.

The records this server produces follow v=AEO1, an open standard with a public verification methodology and an IETF Internet-Draft, draft-miller-aeo, a published, citable working document, not an endorsed standard. Records can be verified independently with the open-source aeo-record npm package, with no dependency on this server.