← Docs

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.