The official Model Context Protocol (MCP) server for SEOmonitor — connect Claude, ChatGPT, Gemini CLI, or any MCP-compatible client to your SEO data: rank tracking, AI visibility (AI Overviews & AI search), keyword research, organic traffic, and forecasts.
Hosted server: https://mcp.seomonitor.com (Streamable HTTP) — no install needed.
Setup guide: mcp.seomonitor.com
You need a SEOmonitor API key: in the app, go to Account → Edit profile → API key.
Settings → Connectors → Add custom connector, then use:
https://mcp.seomonitor.com/YOUR_API_KEY/mcp
POST https://mcp.seomonitor.com/mcp
Authorization: Bearer YOUR_API_KEY
Both forms hit the same server; use whichever your client supports. Rate limit: 60 requests/minute per API key (burst 30) — over-limit calls get HTTP 429 with Retry-After.
gemini extensions install https://github.com/BuntStudio/seomonitor-mcp-serverNo API key needed — the extension signs in with your SEOmonitor account on first use.
npx github:BuntStudio/seomonitor-mcp-servergit clone https://github.com/BuntStudio/seomonitor-mcp-server.git
cd seomonitor-mcp-server
npm install && npm run build && npm startRequirements: Node.js 18+, a valid SEOmonitor API key.
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"seomonitor": {
"command": "npx",
"args": ["github:BuntStudio/seomonitor-mcp-server"],
"env": { "SEOMONITOR_API_KEY": "your-seomonitor-api-key-here" }
}
}
}SEOMONITOR_API_KEY=your-api-key-here # required for stdio mode
# Optional
SEOMONITOR_HTTP_TIMEOUT_MS=180000 # default 180s, must be >120s
LOG_LEVEL=info
MCP_TRANSPORT=stdio # stdio (default) or http
MCP_HTTP_PORT=3000 # http transport only
MCP_RATE_LIMIT_RPM=60 # http transport: requests/min per key
MCP_RATE_LIMIT_BURST=30
MCP_ENABLE_WRITE_TOOLS=false # keep false: public surface is read-onlyEvery tool is read-only — the server retrieves data from your SEOmonitor account and never modifies it. All tools carry MCP annotations (readOnlyHint: true) and are prefixed with seomonitor_ to avoid collisions.
seomonitor_get_tracked_campaignsseomonitor_list_companies
seomonitor_get_keyword_dataseomonitor_get_daily_keyword_ranksseomonitor_get_keyword_groupsseomonitor_get_group_data
seomonitor_get_keywords_competitionseomonitor_get_serp_feature_presenceseomonitor_get_top_resultsseomonitor_get_keyword_ai_overviewseomonitor_get_ranking_pagesseomonitor_get_daily_group_visibilityseomonitor_get_keyword_import_status
seomonitor_get_daily_keyword_ranks_ai_overviewseomonitor_get_keywords_competition_ai_overviewseomonitor_get_daily_group_visibility_ai_overview_mentionsseomonitor_get_daily_group_visibility_ai_overview_citations
seomonitor_get_keyword_ai_search_dataseomonitor_get_keywords_competition_ai_searchseomonitor_get_daily_ai_search_keyword_ranksseomonitor_get_daily_group_ai_search_brand_mentionsseomonitor_get_daily_group_ai_search_site_citations
seomonitor_get_share_of_voiceseomonitor_get_daily_share_of_clicksseomonitor_get_serp_visibility
seomonitor_get_daily_traffic_dataseomonitor_get_traffic_by_keywords
seomonitor_get_related_keywordsseomonitor_get_topic_overviewseomonitor_get_domain_overviewseomonitor_get_domain_ranking_keywordsseomonitor_get_research_keyword_dataseomonitor_get_research_ranking_data
seomonitor_get_forecast_scenariosseomonitor_get_forecast_scenario_dataseomonitor_get_forecast_objective_dataseomonitor_get_forecast_keywords
seomonitor_get_keyword_vault_dataseomonitor_get_keyword_vault_overviewseomonitor_get_vault_lists
seomonitor_get_article_contentseomonitor_get_generation_statusseomonitor_get_topic_recommendations
seomonitor_get_top_keywordsseomonitor_find_keywordsseomonitor_get_top_ai_search_keywordsseomonitor_get_campaign_widgetsseomonitor_get_ai_search_engine_performanceseomonitor_get_top_cited_landing_pages
Two write tools (
seomonitor_generate_articles,seomonitor_add_keywords) exist in the codebase but are disabled by default (MCP_ENABLE_WRITE_TOOLS). The public hosted server does not expose them.
- API key — passed as a Bearer token or in the connector URL. The key is the API token from your SEOmonitor profile; regenerating it there invalidates the old one.
- The hosted server is stateless: it forwards each request to the SEOmonitor API with your key and does not store your data.
- Privacy policy: SEOmonitor Privacy Policy
- Support: GitHub Issues or [email protected]
- "Which of my campaigns lost the most visibility this month, and which keyword groups drove it?"
- "How often is my brand mentioned in AI Overviews for my tracked keywords vs. my main competitor?"
- "Find keyword opportunities around 'crm software' in the US with high search volume where I rank below position 10."
- "Show my daily ranks for the 'pricing' keyword group over the last 30 days, desktop vs mobile."
- "What does my current forecast scenario say about traffic by December?"
npm run dev # Dev with auto-reload
npm run build # Build TypeScript
npm start # Start built server (stdio)
node dist/index.js --transport http --port 3000 # Streamable HTTPsrc/
├── index.ts # CLI entry
├── server.ts # MCP server
├── rate-limiter.ts # Per-key token bucket (http transport)
├── clients/seomonitor-client.ts
├── transports/ # stdio + Streamable HTTP
└── mcp-tools/ # Tool implementations (auto-discovered)
- Define the schema (with
title+annotations) in a*-tools.tsfile - Implement the execution method
- Export — tools are auto-discovered
- Client doesn't load tools: check the URL/API key; for stdio, rebuild
dist/and restart the client. - 401 errors: the API key is missing or was regenerated — copy the current one from your profile.
- 429 errors: you're over 60 requests/minute for your key; back off per the
Retry-Afterheader. - Debug logging:
npm start -- --log-level debug