← Docs

This First run (15 minutes) doc explains how free scans finish 26 checks in under 10 seconds (ruleset v20).

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. One URL, three jobs: baseline a live page, lint a draft before publish, install the habit. The same endpoint works free and keyed; tool listing is filtered by API key. The blocks below send Authorization: Bearer with AEOGEO_API_KEY, the ag_live_ key from the checkout email. Header notes are on /docs/mcp. Drop the headers line for a keyless scan in step 2.

Cursor — add to .cursor/mcp.json:

{
  "mcpServers": {
    "aeogeo": {
      "url": "https://mcp.aeogeo.site",
      "headers": {
        "Authorization": "Bearer ${env:AEOGEO_API_KEY}"
      }
    }
  }
}

Claude Code — run the CLI command (or add the JSON to claude_desktop_config.json):

claude mcp add --transport http aeogeo https://mcp.aeogeo.site \
  --header "Authorization: Bearer $AEOGEO_API_KEY"

# or, in claude_desktop_config.json:
{
  "mcpServers": {
    "aeogeo": {
      "type": "http",
      "url": "https://mcp.aeogeo.site",
      "headers": {
        "Authorization": "Bearer ${AEOGEO_API_KEY}"
      }
    }
  }
}

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, set_retention_webhook, get_insights, scan_site, get_site_scan.

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://developers.google.com/search/docs/appearance/featured-snippets",
  "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": [{
    "type": "first_party_docs",
    "url": "https://developers.google.com/search/docs/appearance/featured-snippets",
    "publisher": "Google"
  }]
}

Every rule opens with the URL of its first evidence item as source, then the rule text, rationale, and an executable remediation when the rule has one. 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.

Updated