First run (15 minutes)
Five steps, ~15 minutes for one agent. Each step shows the copy-paste block for Cursor, Claude Code, and ChatGPT, then the expected output you should see.
1. Connect the MCP server
Add https://mcp.aeogeo.site to your agent client. The same endpoint works
free and keyed; tool listing is filtered by API key. The 15-minute path through
steps 3–4 expects the API key from your provision email (after Pro checkout);
a keyless scan still works for step 2.
Cursor — add to .cursor/mcp.json:
{
"mcpServers": {
"aeogeo": {
"url": "https://mcp.aeogeo.site"
}
}
} Claude Code — run the CLI command (or add the JSON to claude_desktop_config.json):
claude mcp add aeogeo --transport http https://mcp.aeogeo.site
# or, in claude_desktop_config.json:
{
"mcpServers": {
"aeogeo": {
"type": "http",
"url": "https://mcp.aeogeo.site"
}
}
} ChatGPT — paste into your custom GPT's instructions (or equivalent MCP config):
You have a deterministic AEO/GEO rulebook server at
https://mcp.aeogeo.site (MCP). Tools:
- scan_url(url): run this on the user's own domain first.
- list_categories(), fetch_sample_rules(category?), get_hook_snippet(client).
With an API key (Authorization: Bearer): lint_html/lint_text/audit_schema,
fetch_rules(category), search_rules(query), get_changelog(since_version?).
Never guess at rules — fetch them. The server never generates content. Expected output: refresh the tool list. Free callers see scan_url, list_categories, fetch_sample_rules, get_hook_snippet. Keyed callers additionally see lint_html, lint_text, audit_schema, fetch_rules, search_rules, get_changelog.
2. Scan your own domain
Run scan_url on your own live page:
scan_url https://example.com
(use your own public domain, not example.com) Expected output (free, keyless):
{
"overall": { "grade": "C", "failed": 2, "total": 12 },
"findings": [
{
"check_id": "chk-blf-001",
"group": "answerability",
"level": 2,
"message": "First 2 sentences do not contain a direct answer pattern.",
"fix": "Lead with '<entity> is/does <answer>' in sentence 1-2."
}
]
}
Free output shows per-group grades plus failed fundamentals (levels L0–L3) with
an executable fix. It does not include rule IDs, evidence, or severity —
those stay behind a key.
3. Read a rule with its source
Keyed callers fetch the exact rule text, which surfaces the evidence source URL at the top:
fetch_rules category: answerability Expected output (keyed):
{
"source": "https://aeogeo.site/research",
"id": "aeo-001",
"rule": "Open with a direct answer to the buyer question.",
"why": "Answer engines weight early passages.",
"remediation": "Rewrite the opening sentences as a direct answer.",
"evidence": [{ "source": "https://aeogeo.site/research", "type": "study" }]
}
Every rule opens with its source URL, then the rule text, rationale, and
an executable remediation. Free callers get teaser samples without evidence.
4. Apply one fix and re-scan
Take the first fix from step 2, apply it to the page, deploy it, then run
scan_url again (keyed scans always fetch fresh):
scan_url https://example.com
(use your own public domain, not example.com) Expected output: the failed finding is gone from findings:
{
"overall": { "grade": "A", "failed": 0, "total": 12 },
"findings": []
}
The removal is visible: a check you fixed no longer appears in findings
and the overall grade improves.
5. Keep the hook or remove it
Run get_hook_snippet to install the AGENTS.md / Cursor / Claude skill hook.
The snippet ends with a "To remove:" block so removal is reversible.
When you want out, follow /docs/mcp/remove — uninstall per client and revoke the key.
If a step stops working, every error includes an executable fix. Under 15 minutes
is the target; the useful outcome is a clean re-scan of your own domain.