search-console-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CRUX_API_KEY | No | Google API key enabling core_web_vitals via the Chrome UX Report API. | |
| PAGESPEED_API_KEY | No | Google API key for pagespeed_audit. Falls back to CRUX_API_KEY. | |
| SEARCH_CONSOLE_MCP_DATA_DIR | No | Directory for the database, log file and cached Google crawler IP ranges. Defaults to %LOCALAPPDATA%\search-console-mcp on Windows or ~/.local/share/search-console-mcp on macOS/Linux. | |
| SEARCH_CONSOLE_MCP_EXPORT_DIR | No | Directory for CSV exports and saved reports. Defaults to ~/Documents/search-console-mcp-exports. | |
| GOOGLE_APPLICATION_CREDENTIALS | No | Path to OAuth user credentials or a service-account key. Defaults to gcloud's default application credentials path. | |
| SEARCH_CONSOLE_MCP_QUOTA_PROJECT | No | Google Cloud project to bill API quota to. | |
| SEARCH_CONSOLE_MCP_INSPECT_DAILY_LIMIT | No | Cap on URL inspections per property per day. | 2000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Google Search Console tools (local; official Google APIs, live site checks and your own server logs). Accuracy rules: report numbers exactly as returned; never attribute a change to a cause (algorithm update, competitor, seasonality) unless the returned data shows it; say what the data can't tell. Use verify_metric before presenting a key number.
Properties: pass 'sc-domain:example.com', a URL-prefix property, or just 'example.com'.
Dates are Pacific Time. Comparisons end on the latest complete day; fresher partial days are excluded unless dates are given.
Page indexing (no Google API): queue_from_sitemaps / queue_from_performance / queue_urls -> run_inspections or inspection_job (2,000 per property per day) -> indexing_report / list_inspected_urls / indexing_changes; diagnose_url explains one URL.
Crawl stats (no Google API): import_access_logs (server logs) -> crawl_stats.
Not available through any API: Request indexing, Removals, Links, Manual actions, Security issues, Achievements, Settings, Google's own robots.txt history. Core Web Vitals: core_web_vitals (CrUX) and pagespeed_audit. HTTPS: check_https.
Read-only: nothing here can change Search Console (no sitemap submit/delete, no Request indexing, no property changes).
Large tables: export_csv=true writes a CSV to Documents/search-console-mcp-exports.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| server_statusB | Server health: credentials, local database, inspection queues, background jobs, robots.txt watches, today's inspection quota use. |
| list_propertiesA | All Search Console properties this Google account can access, with permission level. |
| property_overviewA | One-call overview: web + Discover performance vs previous period, sitemaps health, local indexing summary, robots.txt status. |
| performance_queryB | Search performance (clicks, impressions, CTR, position) for any dimension combination, search type, date range and filters. |
| performance_overviewB | Totals vs the previous equal-length period, daily series, top queries and pages. Use search_type='discover' for Discover. |
| compare_periodsB | Winners and losers between two periods (default: previous equal-length period), with new and lost queries/pages. |
| find_opportunitiesB | Quick wins: striking-distance query/page pairs, top positions with low CTR (vs this site's own CTR by position), and content gaps (demand, but ranking below 20). |
| find_cannibalizationA | Queries where 2+ of your URLs split impressions. URL variants (www/non-www, http/https, slash, parameters) are reported separately from genuinely competing pages. |
| traffic_dropsA | Pages/queries that lost clicks vs the previous period, each diagnosed: ranking loss, CTR drop, demand drop or disappeared, with the click loss split exactly into fewer impressions vs lower CTR. |
| content_decayB | Pages (or queries) whose clicks fell in every one of N consecutive periods: slow decay, not a one-off dip. |
| check_alertsB | Severity-rated alerts: site-wide click drop, query position drops (incl. falling off page one), CTR collapses at the same position, page click losses, pages that vanished. |
| section_performanceA | Performance per site section (URL folder or custom prefixes) with share of clicks and change vs the previous period. Domain properties are split per host. |
| query_segmentsC | Queries split into branded vs non-branded, questions (EN/NL/SV/PT/FR/DE), query length, results page, and chat-style fragments. |
| multi_site_dashboardB | Health check across many properties at once: clicks, impressions, CTR, position vs previous period, flagged dropping/growing. |
| weekly_reportB | Full report in one call (performance, alerts, drops, quick wins, content gaps, decay, cannibalisation, sitemaps, indexing, robots.txt), saved as a Markdown file. |
| verify_metricB | Re-query Google to confirm a number before presenting it (e.g. 'this page got 500 clicks'). |
| list_sitemapsC | Sitemaps submitted for the property: last submitted/downloaded, pending, errors, warnings, submitted URL counts by type. |
| get_sitemapB | Details of one submitted sitemap. |
| inspect_urlC | Live URL Inspection result from Google (index status, coverage reason, canonicals, last crawl, robots, sitemaps, referring URLs, rich results). Stored locally. |
| diagnose_urlA | Why is this URL (not) indexed? Combines Google's inspection with a live fetch: redirect chain, status, noindex, canonicals, robots.txt rule, thin content. |
| queue_urlsB | Add URLs to this property's local inspection queue. |
| queue_from_sitemapsA | Download sitemaps (indexes, .gz) and queue every page URL for inspection, remembering which sitemap each URL came from. |
| queue_from_performanceB | Queue every page that got impressions in Search (useful to inspect the pages Google actually shows). |
| run_inspectionsA | Inspect URLs now: the queue (never-inspected first, then stale), an explicit list, or your top pages. Respects the 2,000/day and 600/minute per-property quotas. |
| inspection_jobC | Background inspection while Claude Desktop is open: works through the queue within the daily quota and resumes after restarts. |
| indexing_reportB | Page-indexing report from local inspections: indexed vs not, every reason with source, samples, checks and fixes; canonicals, fetch/robots states, crawl age, rich results. |
| list_inspected_urlsB | URL-level drill-down of stored inspections with filtering, sorting, paging and CSV export. |
| indexing_changesC | URLs whose coverage reason changed between their last two inspections (dropped out of the index, newly indexed, ...), plus per-day inspection trend. |
| indexing_fix_guideA | What each Page indexing reason means, whether it's a Website or Google-systems issue, what to check and how to fix it. |
| robots_txt_checkA | Fetch robots.txt like Googlebot: status and Google's interpretation, size vs the 500 KiB limit, groups, Googlebot rules, sitemaps, syntax warnings, and a diff if it changed since the last check. Saved to history. |
| robots_txt_check_propertyA | Check robots.txt on every host that had Search traffic in the property (all subdomains of a Domain property). |
| robots_txt_historyB | Every stored robots.txt check for a host (date, status, size, hash, response time) and each distinct version with first/last seen. |
| robots_txt_diffA | Unified diff between two stored robots.txt checks (ids from robots_txt_history). |
| robots_txt_testA | Is this URL allowed for this crawler? Returns the deciding rule and line, using Google's matching rules. |
| robots_txt_watchB | Keep checking robots.txt for a host in the background (while Claude Desktop is open) to build version history. |
| check_redirectsA | Trace redirect chains in bulk: every hop, final status, chains, loops, temporary redirects, https->http; validates migration redirect maps. |
| check_httpsB | HTTPS health (Search Console's HTTPS report has no API): certificate validity/expiry/names, http->https redirect, HSTS, mixed content. |
| check_dnsC | DNS records (A, AAAA, CNAME, MX, NS, TXT, CAA) plus Google site-verification tokens found in DNS TXT and on the home page. |
| image_auditB | Image SEO audit of pages: alt text, file names, width/height, lazy loading near the top, formats, file size, broken images, og:image and structured-data images. |
| pagespeed_auditB | PageSpeed Insights: Lighthouse scores, lab metrics, top opportunities by savings, failing SEO/other audits, and real-user field data. Uses PAGESPEED_API_KEY or CRUX_API_KEY if set. |
| property_notesC | Context saved with a property for future chats: brand terms, migration dates, decisions, site changes. |
| import_access_logsA | Import Apache/Nginx/Varnish access logs to rebuild Crawl stats. Runs in the background; already-imported files are skipped. |
| crawl_statsB | Crawl stats from your logs: requests, download size, response time per day; breakdowns by response, file type, Googlebot type, purpose and host; robots.txt fetches; example URLs. |
| core_web_vitalsA | Core Web Vitals field data (LCP, INP, CLS, FCP, TTFB at p75) from the Chrome UX Report, the data behind Search Console's CWV report. Needs CRUX_API_KEY. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 44 tools
Most tools occupy distinct slots: performance_query vs performance_overview vs compare_periods are clearly layered, and the robots_txt_* family separates check/history/diff/test/watch cleanly. A few clusters blur together — property_overview vs weekly_report vs multi_site_dashboard, and inspect_url vs diagnose_url vs run_inspections vs inspection_job — but the descriptions do enough to steer selection.
Everything is snake_case with recognizable domain prefixes (robots_txt_*, queue_from_*, check_*, list_*, find_*) and no camelCase or style mixing. However, only about half the names follow the verb_noun pattern; many are bare nouns (server_status, content_decay, traffic_drops, cron_stats, image_audit), which weakens predictability.
44 tools is a large surface for one server, and several are convenience wrappers over combinations of other tools (weekly_report, multi_site_dashboard, property_overview, verify_metric). While the domain genuinely spans performance, indexing, robots.txt, technical SEO and logs, the count pushes well past a comfortably scannable set.
Coverage is unusually thorough: performance analytics, indexing inspections, sitemaps, robots.txt lifecycle, redirects/DNS/HTTPS, CWV, log-based crawl stats, and persistent property notes. The notable gap is write operations on sitemaps (list/get only, no submit/delete) and no way to manage properties beyond reading them.