AI visibility tracker for ChatGPT, Claude, Perplexity, Gemini & Google AI Overviews. Open-source GEO (Generative Engine Optimization) and AEO (Answer Engine Optimization) tool. Self-host on Cloudflare Workers. MCP server for Claude.ai, Cursor, Codex CLI. The open alternative to Profound, Otterly & Ahrefs Brand Radar.
DigestSEO — AI Visibility MCP for SEO & GEO
mcp-geo is an open-source AI visibility tracker that measures how often your brand is cited by ChatGPT, Claude, Perplexity, Gemini, and Google AI Overviews. It's the GEO (Generative Engine Optimization) and AEO (Answer Engine Optimization) equivalent of Google Search Console — built as an MCP server so you can query your AI visibility data directly inside Claude.ai, Claude Desktop, Cursor, Codex CLI, or any MCP-compatible client.
Prefer zero setup? Try the hosted version at digestseo.com — managed Cloudflare infra, no API keys to manage, multi-brand, scheduled refresh, web UI. Waitlist now open. Join waitlist →
What's New
[0.1.0] — May 2026
- Initial public release.
- 5-engine support: ChatGPT (
gpt-4o-mini), Claude (claude-haiku-4-5), Perplexity (sonar), Gemini (gemini-2.5-flash-lite), and Google AI Overviews (via SerpAPI). - 6 MCP tools:
check_visibility,get_visibility_history,compare_competitors,get_citations,get_content_gaps,refresh_brand. - Engines are opt-in based on which API keys you provide — set only the credentials you have, the rest skip gracefully.
- Cloudflare Cron Trigger that auto-refreshes tracked brands every 6h, respecting per-brand
refresh_frequency(daily/weekly). - D1-backed storage for brands, prompts, runs, citations, and a shared prompt cache.
- One-shot setup script (
scripts/setup.sh) that creates KV namespaces, D1 database, and prompts for every secret.
What Can This Do?
- See which AI tools cite your brand and which don't — get a per-engine breakdown of who's citing you for buyer-intent queries.
- Track AI visibility weekly, automatically — the built-in Cron Trigger re-runs scans on the cadence you configure per brand.
- Compare your AI visibility to competitors — share-of-voice percentages, prompts you win, prompts they win.
- Find content gaps — Claude-Haiku-synthesized recommendations grounded in your actual losing prompts.
- Use it inside Claude.ai conversations — add the deployed Worker URL as a custom MCP connector and ask in natural language.
- Self-hosted on your own Cloudflare account — your API keys, your data, your cost ceiling. The free Workers + D1 tiers cover a single brand with daily refreshes.
Available Tools
| Tool | What it does | What you provide |
|---|---|---|
| check_visibility | Latest AI visibility snapshot across all configured engines for a tracked brand, with per-engine scores, winning prompts, and losing prompts. | brand_id, optional engines[] filter |
| get_visibility_history | Time-series history of overall and per-engine visibility, bucketed daily or weekly. | brand_id, optional days (default 30), optional granularity (daily/weekly) |
| compare_competitors | Share-of-voice comparison against competitor domains, with prompts you win and prompts they win. | brand_id, optional competitor_domains[], optional days |
| get_citations | The actual citation events — prompt, engine, response excerpt, citation type, brand URL when present. | brand_id, optional days, optional engine filter |
| get_content_gaps | Prioritized Claude-Haiku-generated content recommendations targeting your losing prompts. | brand_id, optional max_recommendations (1-10) |
| refresh_brand | Manually trigger a fresh scan across every engine whose API key is set. | brand_id, optional engines[] filter |
Getting Started
Step 1 — Get API keys
Engines are opt-in. Pick the ones you want; the rest skip silently.
- OpenAI — ChatGPT engine. ~€0.0004 per prompt with
gpt-4o-mini. Batch path roughly halves that. platform.openai.com - Anthropic — Claude engine, plus prompt generation and content-gap analysis (both call Claude Haiku). ~€0.0002 per prompt. Free trial credits are usually enough to evaluate. console.anthropic.com
- Google AI Studio (Gemini) — Gemini engine. ~€0.0001 per prompt. Free tier covers ~1500 requests/day — enough for a single brand on a daily cadence. aistudio.google.com
- Perplexity — Perplexity Sonar engine. ~€0.005-0.008 per prompt. Paid only. perplexity.ai/settings/api
- SerpAPI — Google AI Overviews engine. ~€0.005 (free tier) / ~€0.0015 (volume) per prompt. Free tier covers ~100 calls/month — enough for development. serpapi.com/dashboard
Solo evaluation runs comfortably under €1/month on Gemini + OpenAI alone.
Step 2 — Cloudflare setup
You need a free Cloudflare account. Then either:
- Guided (recommended):
./scripts/setup.sh— interactive, creates KV namespaces, D1 database, populateswrangler.jsonc, prompts for each secret, applies migrations. - Manual: see SETUP.md for every
wranglercommand spelled out.
Step 3 — Connect to your MCP client
After wrangler deploy finishes, you get a URL like
https://digestseo-mcp.YOUR-SUBDOMAIN.workers.dev.
Claude.ai (web)
Settings → Connectors → Add custom connector. Paste:
https://YOUR-WORKER-NAME.YOUR-SUBDOMAIN.workers.dev/mcp
Complete the OAuth handshake. The connector turns green when ready.
Claude Desktop
Edit your Claude Desktop config:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"digestseo": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://YOUR-WORKER-NAME.YOUR-SUBDOMAIN.workers.dev/mcp"
]
}
}
}
Restart Claude Desktop after editing.
Cursor
Edit ~/.cursor/mcp.json:
{
"mcpServers": {
"digestseo": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://YOUR-WORKER-NAME.YOUR-SUBDOMAIN.workers.dev/mcp"
]
}
}
}
Restart Cursor.
Codex CLI
Add to ~/.codex/config.toml:
[mcp_servers.digestseo]
command = "npx"
args = [
"-y",
"mcp-remote",
"https://YOUR-WORKER-NAME.YOUR-SUBDOMAIN.workers.dev/mcp",
]
Environment Variables Reference
| Variable | Required | Default | Description |
|---|---|---|---|
| OPENAI_API_KEY | opt-in | unset | Enables the ChatGPT engine. Without it, ChatGPT is skipped. |
| ANTHROPIC_API_KEY | opt-in | unset | Enables the Claude engine and the Claude-Haiku-powered prompt generator + content-gap analyzer. |
| GEMINI_API_KEY | opt-in | unset | Enables the Gemini engine. Free tier covers solo use. |
| PERPLEXITY_API_KEY | opt-in | unset | Enables the Perplexity Sonar engine. Paid only. |
| SERPAPI_API_KEY | opt-in | unset | Enables the Google AI Overviews engine (via SerpAPI). |
| SEED_SECRET | yes | unset | Shared secret that gates every /admin/* route. Pick a high-entropy string. |
| TURNSTILE_SITE_KEY | no | unset | Reserved for forks that add a public /check form. Unused by the OSS build. |
| TURNSTILE_SECRET_KEY | no | unset | Same — reserved for forks. |
All values are set via wrangler secret put VAR in production or .dev.vars locally. None are stored in wrangler.jsonc.
Sample Prompts
Once the connector is live in Claude.ai (or any MCP client), try:
| Tool | Example prompt |
|---|---|
| check_visibility | "How visible is brand_id acme on AI right now?" |
| get_visibility_history | "Show me the visibility trend for acme over the last 60 days, daily." |
| compare_competitors | "Compare acme against asana.com and monday.com over the last 14 days." |
| get_citations | "Show me real Perplexity citations for acme from the last week." |
| get_content_gaps | "What content should acme publish to close its visibility gap? Give me the top 5." |
| refresh_brand | "Refresh acme across every available engine right now." |
| refresh_brand | "Refresh acme but only for Gemini and Claude." |
Hosted Version
If you'd rather not run your own Cloudflare account, manage API keys, or pay individual engine bills, the hosted version of DigestSEO runs the same MCP server on managed infrastructure with multi-brand support, scheduled refresh, a web UI, and consolidated billing. Waitlist now open at digestseo.com.
Troubleshooting
- Worker deploys but tools return empty data — at least one engine API key is missing. Check
wrangler secret listand add the keys you intend to use. Engines without keys are silently skipped, which can leavecheck_visibilitywith no data. no engines availableerror in logs — no engine API keys are set at all. Set at least one ofOPENAI_API_KEY,ANTHROPIC_API_KEY,GEMINI_API_KEY,PERPLEXITY_API_KEY,SERPAPI_API_KEY.- D1 migration fails — make sure you've run
npx wrangler d1 migrations apply digestseo-db --remote(and also--localforwrangler dev). For ad-hoc fixes,npx wrangler d1 execute digestseo-db --remote --file=migrations/0001_initial.sql. - Custom MCP connector in Claude.ai not connecting — the URL must end in
/mcp. The OAuth handshake auto-completes in the OSS build (single dev user). If it loops, clear the connector and re-add it. Double-check the Worker is publicly reachable (curl https://YOUR-WORKER-NAME.YOUR-SUBDOMAIN.workers.dev/healthzshould returnok). - Cron not firing — check the Cloudflare dashboard at Workers & Pages → digestseo-mcp → Settings → Triggers. The "Cron Triggers" section should list
0 */6 * * *. If it's missing, runnpx wrangler deployagain — the trigger is registered on deploy. The handler also only dispatches engines for brands whoserefresh_frequencycadence has elapsed, so a freshly-seeded brand might not fire on the next 6h boundary. 401 unauthorizedfrom/admin/*—X-Seed-Secretheader is missing or doesn't match the deployedSEED_SECRET. Re-runnpx wrangler secret put SEED_SECRETand update your.env.test.
Contributing
Issues and PRs welcome. See CONTRIBUTING.md for the short version.
License
MIT.
Changelog
See CHANGELOG.md for the full version history.
[0.1.0] — May 2026
- Initial public release.
- 5-engine support: ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews.
- 6 MCP tools.
- Engines opt-in based on which API keys you provide.
- Cloudflare Cron Trigger for auto-refresh.
- One-shot
scripts/setup.shfor first-time deploy.