Back to Browse

Google Search Console MCP Server

Developer ToolsUse Caution4.4MCP RegistryLocal
Free

Server data from the Official MCP Registry

MCP server for the Google Search Console API: search analytics, sitemaps, URL inspection, sites.

About

MCP server for the Google Search Console API: search analytics, sitemaps, URL inspection, sites.

Security Report

4.4
Use Caution4.4High Risk

This is a Google Search Console MCP server that authenticates via OAuth (env vars or a 0600 credentials file) and uses network access that matches its purpose. The main concerns are an unresolved merge-conflict block in the README, which is a code-quality issue, and an opt-out anonymous telemetry channel that sends scrubbed error excerpts to a third-party endpoint. The raw API tool can issue write or delete requests, but it is restricted to relative paths on the Google API origin and is marked for client confirmation. Supply chain analysis found 6 known vulnerabilities in dependencies (0 critical, 4 high severity). Package verification found 1 issue.

5 files analyzed · 11 issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

HTTP Network Access

Connects to external APIs or services over the internet.

File System Read

Reads files on your machine. Normal for tools that analyze or process local data.

File System Write

Writes or modifies files on your machine. Check that this is expected for the tool.

env_vars

Check that this permission is expected for this type of plugin.

What You'll Need

Set these up before or after installing:

Google OAuth2 client id (refresh-token flow).Optional

Environment variable: GOOGLE_SEARCH_CONSOLE_CLIENT_ID

Google OAuth2 client secret (refresh-token flow). Treat it as a secret.Required

Environment variable: GOOGLE_SEARCH_CONSOLE_CLIENT_SECRET

Google OAuth2 refresh token, exchanged for access tokens automatically. Treat it as a secret.Required

Environment variable: GOOGLE_SEARCH_CONSOLE_REFRESH_TOKEN

Static OAuth2 access token (~1h lifetime) — alternative to the refresh-token trio, mostly for testing.Required

Environment variable: GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN

Fixed port for the loopback listener of the in-chat login (127.0.0.1 + PKCE). Set it when the client runs over SSH port forwarding; otherwise a free port is picked per login.Optional

Environment variable: GOOGLE_SEARCH_CONSOLE_OAUTH_PORT

API root override.Optional

Environment variable: GOOGLE_SEARCH_CONSOLE_API_BASE

Per-request timeout in milliseconds.Optional

Environment variable: GOOGLE_SEARCH_CONSOLE_TIMEOUT_MS

Retries on transient errors (429 always; 5xx/network for reads).Optional

Environment variable: GOOGLE_SEARCH_CONSOLE_MAX_RETRIES

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-a1-x-tech-mcp-google-search-console": {
      "env": {
        "GOOGLE_SEARCH_CONSOLE_API_BASE": "your-google-search-console-api-base-here",
        "GOOGLE_SEARCH_CONSOLE_CLIENT_ID": "your-google-search-console-client-id-here",
        "GOOGLE_SEARCH_CONSOLE_OAUTH_PORT": "your-google-search-console-oauth-port-here",
        "GOOGLE_SEARCH_CONSOLE_TIMEOUT_MS": "your-google-search-console-timeout-ms-here",
        "GOOGLE_SEARCH_CONSOLE_MAX_RETRIES": "your-google-search-console-max-retries-here",
        "GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN": "your-google-search-console-access-token-here",
        "GOOGLE_SEARCH_CONSOLE_CLIENT_SECRET": "your-google-search-console-client-secret-here",
        "GOOGLE_SEARCH_CONSOLE_REFRESH_TOKEN": "your-google-search-console-refresh-token-here"
      },
      "args": [
        "-y",
        "mcp-google-search-console"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

Google Search Console MCP

English | Русский

npm Glama CI License: MIT

A1 Google Search Console MCP connects an AI app to Google Search Console. Investigate search performance, check whether a URL is indexed, inspect sitemaps and deliberately submit or remove a sitemap when needed.

It works with the properties your Google account can access. The important detail is that it uses the exact Search Console property value — a domain property and a URL-prefix property are different objects.

  • 18 tools. Seven tools read properties, search data, sitemaps and index status; two add a property or submit a sitemap; three can remove data or call an arbitrary API method.
  • Connects from the conversation. Say "connect Google Search Console": the server walks you through the OAuth client, catches Google's redirect on 127.0.0.1 with PKCE and keeps the tokens itself — no config files, no restart.
  • Exact property IDs. https://example.com/, https://www.example.com/ and sc-domain:example.com are distinct. list_sites shows the value to use.
  • Search data with context. Query clicks, impressions, CTR and position by date, page, query, country, device or search appearance.
  • Indexing, not publishing. URL inspection explains Google’s current status; it does not force a page into the index.

Start with a read-only question:

Show the top 20 search queries for my property over the last 28 days, with clicks and CTR.

Connect the server · Explore use cases · Open technical documentation


See it work in a minute

You: Is https://example.com/pricing indexed? If not, why?

Assistant: Inspects the URL and shows the index verdict, coverage, crawl information and canonical URLs. Nothing changes.

You: Check my submitted sitemaps and prepare a resubmission for the one with errors.

Assistant: Shows the sitemap, its warnings and errors, then asks for confirmation before submitting it again.

You: Confirm.

Assistant: Resubmits the selected sitemap. It does not change page content or guarantee indexing.

Contents

Quick start

You need Node.js 20+ and a Google account. Credentials are not required at install time — the server connects from the conversation.

  1. Add the server to your AI app.
  2. Say "connect Google Search Console": the assistant walks you through creating the OAuth client and approving access without editing config files.
  3. Start with the read-only question above.

<<<<<<< Updated upstream In the app: open Settings → MCP servers, select Add server, choose STDIO, enter the command npx -y mcp-google-search-console@latest and environment variables GOOGLE_SEARCH_CONSOLE_CLIENT_ID, GOOGLE_SEARCH_CONSOLE_CLIENT_SECRET, GOOGLE_SEARCH_CONSOLE_REFRESH_TOKEN, then select Save and Restart. ||||||| Stash base In the app: open Settings → Plugins → MCP servers, choose Add server, then add npx -y mcp-google-search-console@latest with GOOGLE_SEARCH_CONSOLE_CLIENT_ID, GOOGLE_SEARCH_CONSOLE_CLIENT_SECRET and GOOGLE_SEARCH_CONSOLE_REFRESH_TOKEN.

In the app: open Settings → Plugins → MCP servers, choose Add server, then add npx -y mcp-google-search-console@latest.

Stashed changes

codex mcp add google-search-console \
  -- npx -y mcp-google-search-console@latest
codex mcp list

Codex MCP documentation

claude mcp add \
  --transport stdio --scope user google-search-console \
  -- npx -y mcp-google-search-console@latest
claude mcp list

Claude Code MCP documentation

The current official path is Settings → Extensions. For a custom desktop extension, open Advanced settings → Extension Developer → Install Extension…, select a .mcpb file and follow the prompts.

This repository currently publishes an npm stdio package and does not contain a .mcpb bundle. For Claude Desktop builds that still support local configuration, use the following JSON stdio configuration as a fallback:

{"mcpServers":{"google-search-console":{"command":"npx","args":["-y","mcp-google-search-console@latest"]}}}

In those builds, save it to ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows.

Claude Desktop MCP documentation

Add to ~/.cursor/mcp.json on macOS/Linux or %USERPROFILE%\.cursor\mcp.json on Windows:

{"mcpServers":{"google-search-console":{"type":"stdio","command":"npx","args":["-y","mcp-google-search-console@latest"]}}}

Cursor MCP documentation

Run MCP: Open User Configuration and add:

{"servers":{"google-search-console":{"type":"stdio","command":"npx","args":["-y","mcp-google-search-console@latest"]}}}

Check it with MCP: List Servers. VS Code MCP documentation

What you can ask it to do

Find search opportunities

  • Which queries and pages brought the most clicks this month?
  • Which pages lost clicks compared with the previous period?
  • Show queries containing mcp where average position is below 10.

Check index status and sitemaps

  • Is this URL indexed? Show coverage, crawl and canonical information.
  • Which submitted sitemaps have errors or warnings?
  • Resubmit this sitemap after showing its current status.

Manage properties carefully

  • List the Search Console properties I can access.
  • Add this exact property value; I will verify ownership separately.
  • Remove this property from my account after confirmation.

How Search Console properties work

A URL-prefix property must include its protocol and trailing slash, for example https://example.com/. A domain property is written as sc-domain:example.com. A near-match causes 403 or 404, so use the exact value returned by list_sites.

add_site only registers a property. Verification remains in the Search Console UI or Site Verification API. Search data uses Pacific Time; end_date is inclusive and final analytics data typically lags by two to three days. data_state: "all" can include fresher, still-changing rows.

What can change

OperationWhat happensConfirmation boundary
List properties, analytics, sitemaps and URL statusReads Search Console dataNo change
Add a propertyAdds a property entry; does not verify itChanges account access
Submit or resubmit a sitemapRequests processing of a sitemapChanges Search Console state
Delete a propertyUnlinks the property from the account; Google data is not deletedDestructive
Delete a sitemapRemoves a submitted sitemapDestructive
Raw API requestMay call a write or delete endpointPotentially destructive

The AI client controls confirmation prompts. The server marks reads, writes and destructive calls so the client can distinguish an inspection from a real change.

Getting access

Google Search Console requires OAuth 2.0; an API key is not enough. There are two ways in, and the first one needs no configuration files.

Connect from the chat (recommended)

Say "connect Google Search Console" and the assistant runs the flow with you:

  1. setup_instructions prints the checklist: create or select a Google Cloud project, enable Google Search Console API, configure the consent screen and create a Desktop app OAuth client.
  2. Download that client's JSON ("Download JSON") and give the assistant its path — set_client stores it owner-only. The secret never goes through the conversation.
  3. start_login returns a Google consent link. Open it on this machine and approve; the code comes back to a one-shot listener on 127.0.0.1 (PKCE), never through the chat.
  4. finish_login exchanges the code and saves the tokens to ~/.config/mcp-google-search-console/credentials.json (mode 0600) and verifies them with a real Google Search Console API call — so an API that is still switched off is caught right there.

The tokens are re-read on every call, so the connection works immediately — no restart of the AI app. auth_status shows what is connected, logout revokes and deletes it.

Environment variables (CI, unattended installs)

  1. Create or select a Google Cloud project and enable Google Search Console API.
  2. Configure the OAuth consent screen and create a Desktop app OAuth client.
  3. Use the OAuth 2.0 Playground with Use your own OAuth credentials to authorize the Google account that can access the properties and obtain a refresh token.
  4. Use https://www.googleapis.com/auth/webmasters to include sitemaps and property changes. Use https://www.googleapis.com/auth/webmasters.readonly only if you intentionally need read-only access.

Testing-mode refresh tokens can expire after seven days. Publish the OAuth app, or use an Internal Workspace app, for long-lived access. Treat the client secret and refresh token as passwords.

Configuration

Every variable is optional — with none of them the server connects from the chat.

VariableRequiredDescription
GOOGLE_SEARCH_CONSOLE_CLIENT_IDNo*OAuth client ID.
GOOGLE_SEARCH_CONSOLE_CLIENT_SECRETNo*OAuth client secret.
GOOGLE_SEARCH_CONSOLE_REFRESH_TOKENNo*OAuth refresh token.
GOOGLE_SEARCH_CONSOLE_ACCESS_TOKENNo*Short-lived alternative to the OAuth trio.
GOOGLE_SEARCH_CONSOLE_OAUTH_PORTNoFixed loopback port for the in-chat login; useful over SSH port forwarding.
GOOGLE_SEARCH_CONSOLE_API_BASENoAPI base URL override.
GOOGLE_SEARCH_CONSOLE_TIMEOUT_MSNoPer-request timeout; default 60000 ms.
GOOGLE_SEARCH_CONSOLE_MAX_RETRIESNoTemporary-error retries; default 3.

* Provide either the OAuth trio or an access token.

Data, limits and background work

  • Privacy. The local server calls Google and sends anonymous telemetry with an installation ID, versions and tool names — never OAuth tokens, property data, tool arguments or prompts. For each tool call it also sends the outcome and, on failure, an excerpt of the error text with e-mails, addresses, tokens, numbers of 4+ digits and quoted text replaced by #; a value from your request can appear in it if the error text contains it. Set ASKADS_TELEMETRY=0 to opt out.
  • API limits. URL inspection allows 2,000 inspections per property per day and 600 per minute. Analytics returns at most 25,000 rows per request; long-tail anonymized queries are never returned. Use pagination and do not inspect whole sites URL by URL.
  • No background monitoring. The server works only while called. If your AI app supports scheduled tasks, it can periodically check a sitemap or an important URL.

Technical documentation

Support

Found a bug or need a scenario? Create an issue or write in Telegram.

Reviews

No reviews yet

Be the first to review this server!