Koskamo

aeogeo MCP

An MCP server that provides deterministic AEO/GEO technical checks, source-cited rulebook queries, and draft linting capabilities for AI agents. It allows agents to scan public URLs for grades and fixes, lint HTML/markdown drafts before publication, and retrieve current search optimization rules with evidence and confidence scores.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

aeogeo MCP logo, by aeogeoVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by aeogeo
You need:Scans, sample rules and hook snippets work without a keycurrent rules, insights and the changelog need a Pro keyPro key (send it as a Bearer header, or add https://mcp.aeogeo.site/mcp to a client that signs you in)Checkout emails an ag_live_ key once
MCP endpoint (Streamable HTTP)
https://mcp.aeogeo.site
Vendor documentation

What its tools do

6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

6 of 6 have a description · 0 of 6 declare behavior hints · 5 of 5 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to aeogeo.site ·
  • Passed Endpoint is on the registry namespace domain ·
  • Warning Advertises resources/templates/list but does not implement it
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Scan public URLs for technical SEO grades and fixes
  • Lint HTML or markdown drafts before publishing
  • Fetch current AEO/GEO rules with source citations
  • Check changelog for rule updates and retirements

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
aeogeo-mcp 0.1.0
MCP protocol negotiated in check
2025-11-25
Tools
6 advertised
Resources
3 advertised
Resource templates
Not advertised
Prompts
4 advertised
Server-advertised capabilities
{
  "tools": {},
  "prompts": {},
  "resources": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

The scanner runs deterministic AI-search hygiene checks plus an evidence-graded rulebook. A grade or a pass is not a citation. Shipped today: 30 automated checks on L0–L3 and 167 rules in the rulebook (ruleset v26). This server never generates content: draft with your own BYOK LLM, then lint, scan, and fetch rules here. A scanner grade covers only applicable automated checks; semantic truth, source existence, factual scrutiny, author credibility, and contextual applicability are the host agent's responsibility (judge: agent). Audit protocol (required): A scan is step 1 of an audit, not the audit. Before you report on a page: (1) fetch the rules behind every failed check and every judge: agent check with fetch_rules or search_rules; (2) read the page's actual copy and judge it yourself against those rules (claims supported, sources real, answers the query, fits the page genre, false positives); (3) report engine defects, agent semantic findings and evidence confidence separately. Say plainly if you skipped the semantic pass. Route by task: for research questions, query search_rules, fetch_rules, get_insights, or get_changelog without running a scan; for page audits or edits, retrieve focused current rules alongside applicable checks even when checks pass. Free tools work keyless; detailed tools require an API key. Rules with confidence "hypothesis" are published but not yet confirmed by independent evidence: tell the user, and test before relying on one. Each full rule carries causality: "not_established" means no experimental source shows the advice causes the outcome, whatever the rule wording says, so present it as an association.

Tools

6 advertised

plan_audit
Advertised by the server during the last successful anonymous check.

Start here for any audit or research task. Give your goal, the target and your limits; get back an ordered list of aeogeo tool calls with the quota each costs, which steps are semantic (judge: agent), what was deferred to fit your budget, your tier's daily limits, and the semantic-review rubric for the page type. Deterministic: no inference, no fetch, same input gives the same plan. The semantic review and report steps are never dropped to fit a budget. Use when: You are about to audit a page, a draft or a site, or answer a research question, and want the right calls for your goal, effort and remaining quota. Avoid when: You already know the single tool you need, such as scan_url on one URL. Do not claim: A plan is not a finding. Nothing was scanned or evaluated. Verify: Run the steps in order; the semantic review step is yours to do.

plan_audit input schema
{
  "type": "object",
  "required": [
    "goal"
  ],
  "properties": {
    "goal": {
      "enum": [
        "fix_errors",
        "pre_publish",
        "citation_readiness",
        "site_audit",
        "research"
      ],
      "type": "string",
      "description": "fix_errors: engine defects first, cheapest path. pre_publish: lint a draft, then scan after deploy. citation_readiness: adds evidence and changelog lookups. site_audit: whole site, sampled semantic review. research: rulebook questions, no scan."
    },
    "budget": {
      "type": "object",
      "properties": {
        "calls": {
          "type": "integer",
          "minimum": 0
        },
        "pages": {
          "type": "integer",
          "minimum": 0
        },
        "rules": {
          "type": "integer",
          "minimum": 0
        }
      },
      "description": "Optional limits. calls: tool calls you will spend. rules: rules you can still draw today. pages: site-scan pages left today.",
      "additionalProperties": false
    },
    "effort": {
      "enum": [
        "quick",
        "standard",
        "thorough"
      ],
      "type": "string",
      "description": "quick (default): fewest calls. standard: two rule lookups. thorough: three, plus insights."
    },
    "page_count": {
      "type": "integer",
      "minimum": 1,
      "description": "Pages on the site, when known; sizes the scan_site step."
    },
    "target_kind": {
      "enum": [
        "url",
        "site",
        "html",
        "text",
        "jsonld",
        "none"
      ],
      "type": "string",
      "description": "What is being audited: a live url, a whole site, draft html, draft text, a json-ld block, or none (research)."
    },
    "content_type": {
      "enum": [
        "blog",
        "landing",
        "product",
        "faq",
        "docs",
        "general"
      ],
      "type": "string",
      "description": "Content type used to select applicable checks."
    }
  },
  "additionalProperties": false
}
scan_url
Advertised by the server during the last successful anonymous check.

Run this on your own domain first: run the AI-search hygiene checks on a public URL. A grade is not a citation and does not measure AI mentions. Free callers get per-group grades plus every failed fundamental (readiness levels L0-L3) with how to fix it; Pro/Team callers also get rule IDs, severity and evidence for every check, plus a work list. Do the highest weight first. propose is always true: draft the change, a person applies it. Free results may be cached for up to an hour; keyed scans always fetch the page fresh. Batched callers pass detail=failures to drop passing checks. A page whose robots.txt disallows it for aeogeo-scanner is not fetched (blocked_url). A scan is step 1 of an audit, not the audit. Before you report on a page: (1) fetch the rules behind every failed check and every judge: agent check with fetch_rules or search_rules; (2) read the page's actual copy and judge it yourself against those rules (claims supported, sources real, answers the query, fits the page genre, false positives); (3) report engine defects, agent semantic findings and evidence confidence separately. Say plainly if you skipped the semantic pass. Use when: The page is already public and you want the bytes a crawler receives. Avoid when: The draft is only local. Use lint_html for HTML, lint_text for markdown, or audit_schema for JSON-LD. content_type is an argument on those tools and on scan_url, not a separate tool. Do not claim: A grade or a pass is not a citation. The check says the page matches the rulebook. Verify: Deploy the edit, then call scan_url again. A keyed scan fetches fresh. judge: engine — trust the pass/fail from the deterministic check (access, rendering, and mechanical structure). judge: agent — your agent re-reads the rule text and decides; the label comes from the deterministic judgeForCheck mapping, not an LLM on our side.

scan_url input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Absolute public http(s) URL to scan."
    },
    "detail": {
      "enum": [
        "full",
        "failures"
      ],
      "type": "string",
      "description": "Keyed callers only; a free scan already lists failures alone and ignores it. full (default): every check. failures: only failed and skipped checks plus the page and group grades, grade_basis and the do-not-claim guidance — use it for batched calls or when a full response would be truncated."
    },
    "content_type": {
      "enum": [
        "blog",
        "landing",
        "product",
        "faq",
        "docs",
        "general"
      ],
      "type": "string",
      "description": "Optional. What the page is, for pages that declare no schema.org @type or og:type. Without it the scanner infers the type and, when it cannot, skips the type-specific checks with a reason."
    }
  },
  "additionalProperties": false
}
list_categories
Advertised by the server during the last successful anonymous check.

List the rulebook categories with the number of active rules in each. Use when: You need a category name before reading rules. Avoid when: You are grading a page. Use scan_url or a lint tool. Do not claim: A category count is not a coverage score for any site. Verify: Pass a name from this list to fetch_sample_rules, or to fetch_rules when you have a key.

list_categories input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
fetch_sample_rules
Advertised by the server during the last successful anonymous check.

Fetch a stable teaser sample of up to 20 public rules (no evidence or remediation). Optionally filter by category. Use when: You have no API key and need to see what a public rule looks like. Avoid when: You have a key and need the full rule. Use fetch_rules or search_rules. Do not claim: A teaser has no remediation. It is not enough to apply the rule. Verify: This is a read. Nothing on the page changes until you edit and scan or lint.

fetch_sample_rules input schema
{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "description": "Optional category name from list_categories."
    }
  },
  "additionalProperties": false
}
get_hook_snippet
Advertised by the server during the last successful anonymous check.

Return a ready-to-paste snippet that hooks this rulebook into your agent: AGENTS.md instructions, Cursor rules, or a Claude Code skill. Use when: You are onboarding a repo and need the install text for that client. Avoid when: The snippet is already installed and you are checking a page. Do not claim: Installing the snippet does not scan the site. Verify: Call tools/list. A free snippet names only free tools; a keyed snippet names the lint chain.

get_hook_snippet input schema
{
  "type": "object",
  "required": [
    "client"
  ],
  "properties": {
    "client": {
      "enum": [
        "agents_md",
        "cursor",
        "claude"
      ],
      "type": "string",
      "description": "Target client: agents_md, cursor, or claude."
    }
  },
  "additionalProperties": false
}
export_report
Advertised by the server during the last successful anonymous check.

Create a private, shareable static report link for 1-2 public URLs. The report is rendered from the same scan output as scan_url — free callers get the aggregate report, Pro/Team callers get the detailed one — and the link works in any browser without an API key. Compare mode puts two URLs side by side; keyed reports add a per-rule delta. Use when: You want a link to paste into Slack, docs, email, or a pull request so a person (or link-preview bot) can read the scan without the API key. Avoid when: You need the raw scan result right now. Use scan_url and keep the JSON in context. Do not claim: A report is a snapshot of one scan — not a citation and not a live measurement. Verify: Open the returned https://aeogeo.site/r/<id> URL, or append ?format=md or ?format=json for other export formats. expires_at says when the link stops working.

export_report input schema
{
  "type": "object",
  "required": [
    "urls"
  ],
  "properties": {
    "mode": {
      "enum": [
        "single",
        "compare"
      ],
      "type": "string",
      "description": "single (default for one URL) or compare (two URLs, side by side)."
    },
    "urls": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "Absolute public http(s) URL to report on."
      },
      "maxItems": 2,
      "minItems": 1,
      "description": "One URL for a single report, or two URLs for compare mode."
    },
    "expires_in_days": {
      "type": "integer",
      "maximum": 90,
      "minimum": 1,
      "description": "How long the link works, in days. Default: 30 for a Pro/Team report (it shows paid detail to anyone with the link), 90 for a free one. The owner can revoke a Pro/Team link earlier at https://mcp.aeogeo.site/account."
    }
  },
  "additionalProperties": false
}

Prompts

4 advertised

audit_page — Audit a page (scan + semantic review)

Advertised by the server during the last successful anonymous check.

Full audit of one public URL: deterministic scan, then rules and your own semantic review.

url
Public page URL. (required)
priority
What matters most: errors (engine defects first), citations (evidence and recent changes), or speed (fewest calls). Default: errors.
budget_calls
Most tool calls you will spend. Omit for no cap beyond your plan's daily quota.
audit_site — Audit a whole site

Advertised by the server during the last successful anonymous check.

Scan every page from a sitemap, then review a sampled page per template.

sitemap
Public sitemap URL. (required)
priority
What matters most: errors (engine defects first), citations (evidence and recent changes), or speed (fewest calls). Default: errors.
budget_calls
Most tool calls you will spend. Omit for no cap beyond your plan's daily quota.
pre_publish — Check a draft before publishing

Advertised by the server during the last successful anonymous check.

Lint your draft HTML, fix, then verify the live page after deploy.

content_type
blog, landing, product, faq, docs or general.
budget_calls
Most tool calls you will spend. Omit for no cap beyond your plan's daily quota.
research_topic — Research an AEO/GEO question

Advertised by the server during the last successful anonymous check.

Answer from the rulebook, insights and changelog, with each rule's confidence. No scan.

question
The question to research. (required)
budget_calls
Most tool calls you will spend. Omit for no cap beyond your plan's daily quota.

Resources

3 advertised

audit-runbook — Audit runbook

Advertised by the server during the last successful anonymous check.

Scan, fetch rules, review semantics, report.

audit-runbook URI
aeogeo://playbook/audit

MIME type: text/markdown

semantic-rubric — Semantic review rubric

Advertised by the server during the last successful anonymous check.

What the host agent must judge that no script can.

semantic-rubric URI
aeogeo://playbook/semantic-rubric

MIME type: text/markdown

plan-limits — Plan limits

Advertised by the server during the last successful anonymous check.

Daily calls, rules and site-scan pages per plan.

plan-limits URI
aeogeo://playbook/limits

MIME type: text/markdown

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (4 of 4 answered).

  1. 2026-11-07: 1 of 1 checks answered
  2. 2026-11-09: 2 of 2 checks answered
  3. 2026-11-10: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1902 ms
95th percentile latency
1902 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1902 ms · metadata changed · 6 tool(s), 3 resource(s), 4 prompt(s); warnings: Advertises resources/templates/list but does not implement it

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http aeogeo-mcp https://mcp.aeogeo.site

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add aeogeo-mcp --url https://mcp.aeogeo.site

Cursor

Merge this server into .cursor/mcp.json in your project, then enable aeogeo-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "aeogeo-mcp": {
      "url": "https://mcp.aeogeo.site"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "aeogeo-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.aeogeo.site",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start aeogeo-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "aeogeo-mcp": {
      "type": "http",
      "url": "https://mcp.aeogeo.site"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http aeogeo-mcp https://mcp.aeogeo.site

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.aeogeo.site

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "aeogeo-mcp": {
      "serverUrl": "https://mcp.aeogeo.site"
    }
  }
}

Let your agent find its tools

Find servers like aeogeo MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run aeogeo MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing