Google Search Console MCP Server

Ready-made SEO analysis of your Google Search Console data, plus image-search audits and indexing requests

By Suganthan Mohanadasan (individual) TypeScript Local · stdio Data and analyticsCRM and sales

62 popularity score ★ 183 ↓ 2.4k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs GSC_AUTH_MODE, GSC_OAUTH_SECRETS_FILE, GSC_SITE_URL. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add google-search-console -e GSC_AUTH_MODE=<GSC_AUTH_MODE> -e GSC_OAUTH_SECRETS_FILE=<GSC_OAUTH_SECRETS_FILE> -e GSC_SITE_URL=<GSC_SITE_URL> -- npx -y suganthan-gsc-mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "google-search-console": {
      "command": "npx",
      "args": [
        "-y",
        "suganthan-gsc-mcp"
      ],
      "env": {
        "GSC_AUTH_MODE": "<GSC_AUTH_MODE>",
        "GSC_OAUTH_SECRETS_FILE": "<GSC_OAUTH_SECRETS_FILE>",
        "GSC_SITE_URL": "<GSC_SITE_URL>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "google-search-console": {
      "command": "npx",
      "args": [
        "-y",
        "suganthan-gsc-mcp"
      ],
      "env": {
        "GSC_AUTH_MODE": "<GSC_AUTH_MODE>",
        "GSC_OAUTH_SECRETS_FILE": "<GSC_OAUTH_SECRETS_FILE>",
        "GSC_SITE_URL": "<GSC_SITE_URL>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "google-search-console": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "suganthan-gsc-mcp"
      ],
      "env": {
        "GSC_AUTH_MODE": "<GSC_AUTH_MODE>",
        "GSC_OAUTH_SECRETS_FILE": "<GSC_OAUTH_SECRETS_FILE>",
        "GSC_SITE_URL": "<GSC_SITE_URL>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.google-search-console]
command = "npx"
args = ["-y", "suganthan-gsc-mcp"]

[mcp_servers.google-search-console.env]
GSC_AUTH_MODE = "<GSC_AUTH_MODE>"
GSC_OAUTH_SECRETS_FILE = "<GSC_OAUTH_SECRETS_FILE>"
GSC_SITE_URL = "<GSC_SITE_URL>"
Gemini CLITerminal
gemini mcp add --scope user -e GSC_AUTH_MODE=<GSC_AUTH_MODE> -e GSC_OAUTH_SECRETS_FILE=<GSC_OAUTH_SECRETS_FILE> -e GSC_SITE_URL=<GSC_SITE_URL> google-search-console npx -- -y suganthan-gsc-mcp
Local (from source)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs GSC_AUTH_MODE, GSC_OAUTH_SECRETS_FILE, GSC_SITE_URL. Replace each <NAME> with your value.

FirstTerminal
git clone https://github.com/Suganthan-Mohanadasan/Suganthans-GSC-MCP.git
cd Suganthans-GSC-MCP
npm install
npm run build
Claude CodeTerminal
claude mcp add google-search-console -e GSC_AUTH_MODE=<GSC_AUTH_MODE> -e GSC_OAUTH_SECRETS_FILE=<GSC_OAUTH_SECRETS_FILE> -e GSC_SITE_URL=<GSC_SITE_URL> -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "google-search-console": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
      ],
      "env": {
        "GSC_AUTH_MODE": "<GSC_AUTH_MODE>",
        "GSC_OAUTH_SECRETS_FILE": "<GSC_OAUTH_SECRETS_FILE>",
        "GSC_SITE_URL": "<GSC_SITE_URL>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "google-search-console": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
      ],
      "env": {
        "GSC_AUTH_MODE": "<GSC_AUTH_MODE>",
        "GSC_OAUTH_SECRETS_FILE": "<GSC_OAUTH_SECRETS_FILE>",
        "GSC_SITE_URL": "<GSC_SITE_URL>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "google-search-console": {
      "type": "stdio",
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
      ],
      "env": {
        "GSC_AUTH_MODE": "<GSC_AUTH_MODE>",
        "GSC_OAUTH_SECRETS_FILE": "<GSC_OAUTH_SECRETS_FILE>",
        "GSC_SITE_URL": "<GSC_SITE_URL>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.google-search-console]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"]

[mcp_servers.google-search-console.env]
GSC_AUTH_MODE = "<GSC_AUTH_MODE>"
GSC_OAUTH_SECRETS_FILE = "<GSC_OAUTH_SECRETS_FILE>"
GSC_SITE_URL = "<GSC_SITE_URL>"
Gemini CLITerminal
gemini mcp add --scope user -e GSC_AUTH_MODE=<GSC_AUTH_MODE> -e GSC_OAUTH_SECRETS_FILE=<GSC_OAUTH_SECRETS_FILE> -e GSC_SITE_URL=<GSC_SITE_URL> google-search-console node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js'

Settings 8

GSC_AUTH_MODE Required: Set to oauth for Google sign-in; if left unset the server uses service_account mode, which needs GSC_KEY_FILE.
GSC_OAUTH_SECRETS_FILE Required: Path to your Desktop-app OAuth client JSON (or set GSC_OAUTH_CLIENT_ID and GSC_OAUTH_CLIENT_SECRET instead).
GSC_SITE_URL Required: Default property, e.g. sc-domain:example.com or https://example.com/.
GSC_SCOPES Optional: readonly or full (defaults to full); full is needed for the submit tools.
GSC_KEY_FILE Optional: Path to a service-account JSON key; used instead of OAuth when GSC_AUTH_MODE is service_account.
GSC_OAUTH_CLIENT_ID Optional: OAuth client ID, an alternative to the secrets file.
GSC_OAUTH_CLIENT_SECRET Optional: OAuth client secret, paired with GSC_OAUTH_CLIENT_ID.
GSC_SITE_URLS Optional: Comma-separated list of properties for multi_site_dashboard.

What it does

This is a local stdio server built by SEO consultant Suganthan Mohanadasan. It connects to the Google Search Console API using your own Google credentials. Most of its tools run a finished analysis rather than handing back raw API rows. They find keywords sitting just below page one, pages whose click-through rate trails what their position would predict, pages losing traffic (with a guess at whether the cause is ranking, CTR or demand), cannibalising pages, slowly decaying content and topic gaps. Each answer comes with provenance metadata, and a verify_claim tool queries the data again to check a number before it is presented.

Version 2.3 added an image-search suite that queries the Search Analytics API with type=image. Version 2.4 added a classifier that picks out queries which look like follow-ups typed into Google's AI Mode. Version 2.5 added image_page_audit, which downloads pages from your own site and checks alt text, file names, image size and weight, lazy loading, schema and embedded EXIF/IPTC/XMP data. Indexing tools submit URLs to Google's Indexing API and manage sitemaps. generate_report writes a markdown report to disk.

The npm package description still says 28 tools, but the v2.5.1 source (src/index.ts) registers 29. Setup can be done by hand or with a `npx -y suganthan-gsc-mcp setup` wizard that writes the Claude Desktop and Claude Code configs. A .mcpb bundle for Claude Desktop is on the releases page.

What it needs

RuntimeNode.js 18+

Node.js 18 or newer (package engines) with npx. You need a Google Cloud project with the Search Console API enabled, plus either a Desktop-app OAuth client JSON or a service-account key that has been added as a user on the property. You also need a Search Console property you can access. The submit tools additionally need the Web Search Indexing API enabled, owner-level access on the property and the full scope.

Limits

It works only through the Search Console API, so it is subject to the API's row limits; for bulk-export data its author points to a separate BigQuery server. advanced_search_analytics returns 100 rows by default, up to 500. image_page_audit fetches up to 5 pages per call. submit_batch takes up to 200 URLs, which matches Google's default daily Indexing API quota. Google says the Indexing API is meant only for JobPosting and BroadcastEvent pages; the README says it handles other pages in practice. Credentials are checked when a tool is first called, not at launch, so a missing setting appears as a tool error. The .mcpb bundles released before v2.5.1 could not start.

Who it suits

A good fit for SEO practitioners and site owners who already use Search Console and want ready-made diagnoses (quick wins, decay, cannibalisation, image search) in Claude Desktop or Claude Code. Everything runs on your own machine and talks to Google directly. Not published by Google, so the Google Cloud setup is yours to do. Keep GSC_SCOPES=readonly if you only want analysis. Large sites that run into API row limits may prefer the author's BigQuery MCP Server, which reads the Search Console bulk export instead.

Tools 29

site_snapshot
Totals for clicks, impressions, CTR and position, compared with the previous period
quick_wins
Queries ranking 4-15 with many impressions, ordered by opportunity
ctr_opportunities
Pages whose CTR is below what their position would predict
traffic_drops
Pages that lost traffic, labelled as ranking loss, CTR collapse or demand decline
content_gaps
Queries with impressions where the site ranks beyond position 20
cannibalization_check
Queries where several of your pages compete
content_decay
Pages declining across three consecutive 30-day periods
topic_cluster_performance
Combined metrics for pages matching a URL path pattern
ctr_vs_benchmark
Your CTR by position compared with benchmark curves
inspect_url
Index status, last crawl, canonical and robots issues for one URL
verify_claim
Queries the data again to check a numeric claim
advanced_search_analytics
Custom Search Analytics query with dimensions, filters, search type and an optional site_url
check_alerts
Severity-rated drops in position, CTR and clicks, plus pages that disappeared, over the last 7 days by default
content_recommendations
Prioritised list of pages to update, create or merge
generate_report
Writes a markdown performance report to a file
multi_site_dashboard
Health summary across several properties
submit_url
Sends one URL update or deletion notice to the Indexing API
submit_batch
Sends up to 200 URL notices to the Indexing API
submit_sitemap
Submits or resubmits a sitemap, /sitemap.xml by default
list_sitemaps
Submitted sitemaps with status, errors and indexed counts
image_keyword_overview
Top image-search queries for the site
image_search_quick_wins
Image queries ranking 4-15, scored against an image-search CTR baseline
compare_web_vs_image
The same queries compared across web and image search
image_pages_overview
Pages ranked by image-search performance
image_keyword_trends
Changes in impressions and position for image queries between periods
image_impressions_no_clicks
Query-page pairs with image impressions but almost no clicks
image_content_decay
Pages losing image-search clicks over three 30-day periods
genai_conversation_queries
Sorts queries that look like AI Mode follow-ups into seven buckets, with a monthly timeline
image_page_audit
Downloads up to 5 of your pages and audits every image's markup, size, schema and metadata

Similar servers