GSC, GA4, Bing Webmaster and Microsoft Clarity in one MCP server, with built-in SEO analyst tools
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
The complete open-source SEO data stack for AI agents. Google Search Console, Google Analytics 4, Bing Webmaster Tools, Microsoft Clarity, Google AdSense, Google Keyword Planner and Open PageRank in a single MCP server β with built-in analyst tools (cannibalization check, low-hanging fruit, content gap, weekly report), not just raw API wrappers.
Self-hosted, free, MIT. Works with Claude Desktop, Claude Code, Cursor, and any MCP client.
Add to your MCP client config (Claude Desktop claude_desktop_config.json, Cursor mcp.json, or claude mcp add):
Every env var is optional β set only the sources you want. That's it: restart your client and ask "what are my top queries this week?".
To run the latest development version straight from GitHub, use "args": ["--from", "git+https://github.com/Raffaele86/seo-stack-mcp", "seo-stack-mcp"] instead.
| Source | What you need | Where to get it |
|---|---|---|
| GSC + GA4 | Service account JSON (recommended) β GOOGLE_APPLICATION_CREDENTIALS | Google Cloud Console β create service account β enable Search Console API + Analytics Data API β add the SA email as a user in GSC / GA4 |
| GSC + GA4 (alt) | OAuth desktop client JSON β SEO_STACK_OAUTH_CLIENT | First run opens a browser for consent; refresh token cached in ~/.config/seo-stack-mcp/ |
| Bing | BING_WEBMASTER_API_KEY | Bing Webmaster Tools β Settings β API access |
| Clarity | CLARITY_API_TOKEN | Microsoft Clarity β project β Settings β Data Export API |
| AdSense | Google credentials above + ADSENSE_ACCOUNT_ID (accounts/pub-XXXX...) | AdSense β Account β Settings β Account information. Enable the AdSense Management API in Google Cloud. If you use OAuth and enable AdSense later, delete the cached token in ~/.config/seo-stack-mcp/ to re-consent with the new scope |
| Keyword Planner | GOOGLE_ADS_DEVELOPER_TOKEN, GOOGLE_ADS_CLIENT_ID, GOOGLE_ADS_CLIENT_SECRET, GOOGLE_ADS_REFRESH_TOKEN, GOOGLE_ADS_CUSTOMER_ID (+ GOOGLE_ADS_LOGIN_CUSTOMER_ID under an MCC) | Google Ads API Center β developer token (Basic access is enough; API calls are free). Also needs the google-ads extra: uvx --with google-ads seo-stack-mcp or pip install seo-stack-mcp[ads] |
| Open PageRank | OPENPAGERANK_API_KEY | Open PageRank β free API key, 10,000 calls/hour |
Optional defaults: GSC_SITE_URL, BING_SITE_URL (so you don't repeat the site on every question), ADSENSE_CURRENCY (default USD), GOOGLE_ADS_LOCATION_ID / GOOGLE_ADS_LANGUAGE_ID (Keyword Planner geo/language defaults, default US / English).
| Tool | Description |
|---|---|
gsc_bulk_inspect_urls | Inspect multiple URLs in batch via the URL Inspection API. Max 50 URLs per call. |
gsc_bulk_request_indexing | Request indexing for multiple URLs via the Google Indexing API. Max 50 URLs. |
gsc_cannibalization_check | Find queries where multiple pages compete (keyword cannibalization). Shows queries with 2+ ranking pages. |
gsc_compare_periods | Compare two periods: shows deltas of clicks, impressions, CTR and position per item. |
gsc_content_gap_analysis | Content gap analysis: queries where the competitor ranks but you don't (or you are far behind). |
gsc_country_performance | Performance by country: clicks, impressions, CTR and average position. Default: last 28 days. |
gsc_daily_stats | Aggregated daily site statistics: clicks, impressions, CTR and average position per day. |
gsc_declining_queries | Queries losing clicks/positions: compares last N days vs the equivalent previous period. |
gsc_delete_sitemap | Remove a sitemap from Google Search Console. Requires write scope on the credentials. |
gsc_device_performance | Compare performance across MOBILE vs DESKTOP vs TABLET. Default: last 28 days. |
gsc_indexing_status_summary | Indexing status summary for multiple URLs: how many indexed, not indexed, and errored. |
gsc_inspect_url | Inspect a URL via the Google Search Console URL Inspection API. |
gsc_keyword_opportunities | Queries with high impressions but low CTR in position 5-20: optimization opportunities. |
gsc_list_sitemaps | List all sitemaps of a site in Google Search Console. |
gsc_list_sites | List all Google Search Console properties available to the configured credentials. |
gsc_low_hanging_fruit | Queries in position 3-10 with high impression volume: small optimizations can push them into the top 3. |
gsc_page_trend | Daily trend for a specific page over the last N days (default 90). |
gsc_pages_for_query | Which pages rank for a specific query? Shows all pages with performance data. |
gsc_queries_for_page | Which queries drive traffic to a specific page? Shows all keywords with performance data. |
gsc_query_trend | Daily trend for a specific query over the last N days (default 90). |
gsc_request_indexing | Request indexing of a URL via the Google Indexing API. |
gsc_rising_queries | Rising queries: compares last N days vs the equivalent previous period. |
gsc_search_analytics | Query Search Analytics: clicks, impressions, CTR and position for the requested dimensions. |
gsc_search_analytics_filtered | Search Analytics with advanced filters. Filters: query_contains, query_regex, page_contains, page_regex, country (e.g. 'ita'), device (MOBILE/DESKTOP/TABLET). |
gsc_search_appearance | Performance by SERP result type (rich snippet, video, FAQ, etc.). Default: last 28 days. |
gsc_submit_sitemap | Submit a sitemap to Google Search Console. Requires write scope on the credentials. |
gsc_top_pages | Top pages by clicks or impressions. order_by: clicks, impressions, ctr, position. Default: last 28 days. |
gsc_top_queries | Top queries by clicks or impressions. order_by: clicks, impressions, ctr, position. Default: last 28 days. |
gsc_weekly_report | Automatic weekly report: last 7 days vs previous 7 days metrics with deltas and top queries/pages. |
| Tool | Description |
|---|---|
ga4_compare_periods | Compare two periods with percentage delta on key metrics. |
ga4_conversion_paths | User paths: acquisition source β landing page with sessions and users. |
ga4_events | Top GA4 events with count and number of users. |
ga4_landing_pages | Entry pages (landing pages) with sessions, users and bounce rate. |
ga4_overview | Site overview: users, sessions, pageviews, bounce rate, average session duration. |
ga4_page_performance | Detailed performance of a single page with device and source breakdown. |
ga4_realtime | Realtime report: pages currently being viewed and active users. |
ga4_top_pages | Top pages by traffic with full metrics (pageviews, users, duration, bounce rate). |
ga4_traffic_sources | Traffic breakdown by source/medium (e.g. google/organic, direct/none). |
ga4_user_demographics | User demographics breakdown: country, device, browser, language. |
| Tool | Description |
|---|---|
bing_crawl_issues | URLs with crawl problems (4xx/5xx errors, redirects, etc.). |
bing_crawl_stats | Bing crawl statistics: crawled pages, errors, redirects, etc. |
bing_keyword | Bing impression volume for an exact query (impressions + broad). |
bing_keyword_stats | Historical statistics for a keyword on Bing: impressions and trend. |
bing_link_counts | Pages with the highest number of backlinks according to Bing. |
bing_pages_for_query | Pages that rank for a specific query on Bing. |
bing_queries_for_page | Search queries that drive traffic to a specific page. |
bing_query_page_detail | Detailed statistics for a specific query + page combination. |
bing_query_traffic | Daily traffic trend for a specific query on Bing. |
bing_related_keywords | Keywords related to a search term on Bing, with impression data. |
bing_sitemaps | List all sitemaps/feeds submitted to Bing. |
bing_sites | List all sites verified in the Bing Webmaster Tools account. |
bing_submission_quota | Check the URL submission quota for Bing. |
bing_submit_sitemap | Submit a new sitemap/feed to Bing. |
bing_submit_url | Submit a URL to Bing for indexing. |
bing_submit_urls_batch | Submit a batch of URLs to Bing for indexing (max 500). |
bing_top_pages | Top pages on Bing with clicks, impressions and average position. |
bing_top_queries | Top Bing search queries with clicks, impressions and average position. |
bing_traffic_stats | Daily Bing traffic statistics: clicks and impressions over time. |
bing_url_info | Indexing status of a specific URL on Bing. |
bing_url_links | Inbound backlinks to a specific URL according to Bing. |
bing_url_traffic | Traffic data for a specific URL on Bing. |
| Tool | Description |
|---|---|
clarity_breakdown | Free-form raw breakdown (1-3 dimensions). Power-user β costs 1 quota unit if not already cached. |
clarity_dead_clicks | Top URLs with dead clicks (clicks on non-interactive elements β a UX problem signal). |
clarity_engagement | Engagement Time + Scroll Depth per URL (or another dimension). |
clarity_excessive_scroll | Top URLs with excessive scrolling (users hunting for info they can't easily find). |
clarity_popular_pages | Top URLs by visits over the last days (Popular Pages metric, dimension=URL). |
clarity_quickback_clicks | Top URLs with quickback clicks (user goes back immediately β page not relevant). |
clarity_quota_status | Daily quota status (local counter, does not call the API). |
clarity_rage_clicks | Top URLs with rage clicks (fast repeated clicks β user frustration). |
clarity_script_errors | Top URLs with JS errors + error clicks (technical problems on the page). |
clarity_traffic | Traffic breakdown from Microsoft Clarity (sessions, bot %, pages per session). |
| Tool | Description |
|---|---|
adsense_alerts | Active alerts on the AdSense account (severity, type, message). |
adsense_by_ad_unit | Performance per ad unit: earnings, impressions, clicks, CTR, eCPM. |
adsense_by_country | Revenue breakdown by country, sorted by earnings. |
adsense_by_platform | Revenue breakdown by device platform (Desktop, Mobile, Tablet). |
adsense_compare_periods | Compare two periods with percentage deltas on key metrics. |
adsense_earnings_by_date | Daily earnings with total, average and trend. |
adsense_earnings_overview | Earnings overview: estimated earnings, page views, impressions, clicks, RPM, CTR. |
adsense_payments | Recent payments on the AdSense account. |
adsense_sites | Sites linked to the AdSense account (domain, state, auto-ads). |
adsense_top_pages | Top URL channels by revenue (requires URL channels configured in AdSense). |
| Tool | Description |
|---|---|
kp_historical_metrics | Real historical Keyword Planner metrics for a list of known keywords. |
kp_keyword_ideas | Keyword ideas with real metrics: volume, competition, top-of-page bids, 12-month volumes. |
kp_status | Source status: library, credential completeness (masked) and live connection test. |
kp_suggest_geo_target | Resolve a location name to its geo target constant ID. |
| Tool | Description |
|---|---|
pagerank_score | Domain authority score (0-10) for up to 100 domains per call, with a local 30-day cache. |
Both are good and this project doesn't pretend otherwise. Google's official analytics-mcp covers GA4 only; mcp-gsc covers GSC only. If you live in one data source, use them. This project is for people who work across the whole free SEO stack and want the cross-source workflow (GSC + GA4 + Bing + Clarity) plus opinionated analysis tools in one place.
local-leads-mcp β the prospecting counterpart: find local businesses with no website via OpenStreetMap and verify them, no API keys needed.
MIT.
Built and maintained by Raffaele Nocera β freelance web & SEO. Available for consulting.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/seo-stack-mcp)<a href="https://allmcps.com/mcp/seo-stack-mcp"><img src="https://allmcps.com/api/badge/seo-stack-mcp?style=directory" alt="Seo Stack Mcp on AllMCPs" /></a>