Google Search Console MCP

io.github.A1-x-Tech由 GitHub 帳號 A1-x-Tech 發布v1.3.2更新於 Nov 7, 2026

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

概覽

AI 產生的概覽

面向 Google Search Console API 的本機 MCP 伺服器:查詢搜尋成效、檢查收錄狀態,並管理資源與網站地圖。

可以做什麼
  • 列出、查詢、新增與移除已連結 Google 帳號下的 Search Console 資源
  • 執行 Search Analytics 查詢,依日期、頁面、查詢字詞、國家、裝置或搜尋外觀取得點擊、曝光、點擊率與平均排名,並提供熱門查詢捷徑工具
  • 列出並檢視已提交的網站地圖,提交或重新提交,以及移除提交
  • 檢查某個網址的收錄狀態、涵蓋範圍、檢索與標準網址資訊
  • 查看連線狀態、在對話中完成引導式 OAuth 登入,以及登出
  • 向型別化工具未涵蓋的任意 Search Console API 路徑送出原始請求
適用情境
適合讓助理分析自然搜尋成效、確認特定網址是否已被 Google 收錄,或檢視並重新提交你 Google 帳號在 Search Console 中既有資源的網站地圖。
執行需求
透過 npx 在本機執行,需要 Node.js 20+,以及可存取 Search Console 資源的 Google 帳號。必須使用 Google OAuth 2.0,API 金鑰不足。可在對話中完成登入(需啟用 Search Console API 的 Google Cloud 專案與 Desktop 應用程式 OAuth 用戶端 JSON),或設定 GOOGLE_SEARCH_CONSOLE_CLIENT_ID、GOOGLE_SEARCH_CONSOLE_CLIENT_SECRET 與 GOOGLE_SEARCH_CONSOLE_REFRESH_TOKEN,或使用短期有效的 GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN。需要連線至 Google 的網路。
安裝前請注意
用戶端密鑰與更新權杖等同密碼,不要貼進對話或寫入共享設定。寫入操作有限但真實:add_site 會改變帳號存取權,submit_sitemap 會改變 Search Console 狀態,delete_site 與 delete_sitemap 屬破壞性操作,執行前應先確認。raw_request 可呼叫寫入或刪除端點。伺服器會送出含安裝 ID、版本、工具名稱與錯誤摘錄的匿名遙測(敏感值已遮蔽),可用 ASKADS_TELEMETRY=0 關閉。測試模式下的更新權杖約七天後失效。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Google Search Console MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[A1] 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.
Codex

<<<<<<< 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

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

Codex MCP documentation

Claude Code
bash
claude mcp add \  --transport stdio --scope user google-search-console \  -- npx -y mcp-google-search-console@latestclaude mcp list

Claude Code MCP documentation

Claude Desktop

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:

json
{"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

Cursor

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

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

Cursor MCP documentation

VS Code

Run MCP: Open User Configuration and add:

json
{"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.


[Две Моны дают пять]

You made it to the end!

來源:README.md,提交 cd6f519

工具

18

auth_status

Google connection status

Shows whether this server is connected to Google: token presence and source (env variables or a stored in-chat login), expiry, the Google account email, granted vs missing OAuth scopes, where the credentials file lives and where the OAuth client comes from. Makes no network calls and never returns the token itself. Call it first when other tools report the server is not connected.

無需輸入參數。

setup_instructions

Setup instructions

Step-by-step checklist for connecting this server to Google: creating a Google Cloud project and a Desktop-app OAuth client, publishing the consent screen (mandatory — Testing-mode refresh tokens die after 7 days), downloading the client JSON and handing its PATH to set_client. Works without any credentials; the checklist shortens to 'enable the API + log in' when an OAuth client is already configured (one client serves the whole mcp-google-* line). Never asks the user to paste secrets into the chat.

無需輸入參數。

set_client

Save the OAuth client

Saves the OAuth client credentials from the JSON file downloaded from Google Cloud Console ('Download JSON' on a Desktop-app client). Pass the file PATH — the secret must never be pasted into the chat. The client is stored once in the shared ~/.config/mcp-google-auth/client.json (owner-only) and reused by every mcp-google-* server; tokens stay per-server. After this, call start_login.

輸入參數path必填

start_login

Start the Google login

First step of connecting from the chat, without editing config files or restarting the client. Returns authorizeUrl — show it to the user as a clickable link and ask them to open it in the browser ON THIS MACHINE, pick the Google account and approve access. A one-shot listener on 127.0.0.1 catches Google's redirect; the code is exchanged locally and never passes through the chat. Does not open the browser itself. The attempt lives 10 minutes; when the browser shows the success page, call finish_login.

無需輸入參數。

finish_login

Finish the Google login

Second step: waits up to 20 s for the browser consent to finish, saves the tokens to an owner-only file and verifies the login with a read-only identity call, returning the account email and the granted scopes. After success every tool works immediately — no client restart. If the user granted only part of the requested permissions, the login is still saved and missingScopes lists what will not work. Logging in under a different Google account replaces the previous login (its refresh token is revoked best-effort) and the response carries previousAccountEmail so the change never goes unnoticed.

無需輸入參數。

logout

Disconnect from Google

Revokes the stored token at Google (oauth2.googleapis.com/revoke) and deletes the local credentials file. Tokens supplied via env variables are NOT touched — remove them from the MCP client config manually; envTokenStillSet in the response says whether any are still in effect.

無需輸入參數。

list_sites

List Search Console properties

Lists every Search Console property the authenticated account can access. Returns { siteEntry: [{ siteUrl, permissionLevel }] } where siteUrl is either a URL-prefix property ("https://example.com/") or a domain property ("sc-domain:example.com"), and permissionLevel is siteOwner, siteFullUser, siteRestrictedUser or siteUnverifiedUser. Call this FIRST: every other tool needs the siteUrl exactly as returned here — a near-match (missing trailing slash, wrong scheme, www vs non-www) is a different property and returns 403/404.

無需輸入參數。

get_site

Get one property

Returns one property's entry: { siteUrl, permissionLevel }. A 404 means the value does not match any registered property — check the exact format (trailing slash, scheme, sc-domain: prefix) against list_sites output.

輸入參數site_url必填

add_site

Add a property

Adds a property to the account's Search Console set. The property starts UNVERIFIED (permissionLevel siteUnverifiedUser) and most data calls will return 403 until it is verified — verification happens through the Search Console UI or the separate Site Verification API, not through this API. Success is an empty API response (surfaced as { ok: true, added }). Requires the full webmasters OAuth scope (the readonly scope cannot mutate).

輸入參數site_url必填

delete_site

Remove a property

Removes (unlinks) a property from the account's Search Console set. No data is deleted and other owners keep their access — this only removes the property from THIS account's list; it can be re-added later. Success is an empty API response (surfaced as { ok: true, removed }). Requires the full webmasters OAuth scope.

輸入參數site_url必填

list_sitemaps

List sitemaps

Lists the sitemaps submitted for a property (or, with sitemap_index, the children of a sitemap index file). Returns { sitemap: [WmxSitemap] } with per-sitemap path, lastSubmitted, lastDownloaded, isPending, isSitemapsIndex, type (sitemap/rssFeed/atomFeed/patternSitemap/urlList/notSitemap), warnings and errors counts, and contents[] with per-content-type submitted counts. The contents[].indexed field is deprecated and returns nothing useful — never present it as indexed pages.

輸入參數site_url必填sitemap_index

get_sitemap

Get one sitemap

Returns one submitted sitemap's details (the same WmxSitemap shape as list_sitemaps): errors/warnings counts, isPending, lastSubmitted/lastDownloaded, and per-content-type submitted counts. Useful to check processing status after submit_sitemap.

輸入參數feedpath必填site_url必填

submit_sitemap

Submit a sitemap

Submits (or resubmits) a sitemap for the property. The feedpath must be the sitemap's full URL on the property. Success is an EMPTY API response (surfaced as { ok: true, submitted }); processing is asynchronous — check errors/warnings later with get_sitemap. Requires the full webmasters OAuth scope (readonly is not enough).

輸入參數feedpath必填site_url必填

delete_sitemap

Delete a sitemap

Removes a sitemap from Search Console. This does not delete the file from the site, and Google may still discover it via robots.txt — it only removes the submission. Success is an empty API response (surfaced as { ok: true, deleted }). Requires the full webmasters OAuth scope.

輸入參數feedpath必填site_url必填

search_analytics

Search Analytics (performance) query

Runs a Search Analytics (performance) query for a property: clicks, impressions, CTR and average position from Google Search, grouped by the requested dimensions. Each returned row has keys[] (one value per requested dimension, in the same order) plus clicks, impressions, ctr (a FRACTION 0..1, not a percent) and position; rows are sorted by clicks descending. With no dimensions you get one totals row for the range. Dates are calendar dates in Pacific Time and end_date is INCLUSIVE; final data lags ~2-3 days behind (use data_state "all" for fresh, still-changing rows). Pagination: there is no page token — repeat with start_row increased by row_limit until a response comes back with no rows. When grouping by query/page some anonymized long-tail data is never returned, so summed rows will not match a dimensionless totals query. Quota: 1,200 queries/minute per site and per user.

輸入參數filtersend_date必填site_url必填row_limitstart_rowdata_statedimensionsstart_date必填search_typeaggregation_type

get_top_queries

Top search queries

Convenience wrapper over search_analytics for the most common ask: the top search queries for a property, sorted by clicks descending (the API's default order). Each row has keys[0] = the query string plus clicks, impressions, ctr (a FRACTION 0..1) and position. Dates are calendar dates in Pacific Time, end_date inclusive; final data lags ~2-3 days. Anonymized long-tail queries are never returned. Same endpoint and quota as search_analytics — use search_analytics directly for other dimensions, pagination, fresh data or regex filters.

輸入參數limitdevicecountryend_date必填site_url必填start_date必填page_filter

inspect_url

Inspect a URL's index status

Inspects a URL's status in the Google index (URL Inspection API). Returns { inspectionResult } with: inspectionResultLink (the Search Console UI page for this inspection); indexStatusResult — verdict (PASS/PARTIAL/FAIL/NEUTRAL), human-readable coverageState (e.g. "Submitted and indexed"), robotsTxtState (ALLOWED/DISALLOWED), indexingState, lastCrawlTime, pageFetchState (SUCCESSFUL/SOFT_404/NOT_FOUND/SERVER_ERROR/...), googleCanonical vs userCanonical, sitemap[], referringUrls[], crawledAs (DESKTOP/MOBILE); plus ampResult and richResultsResult (with per-item issues and severities) when applicable. Only the status of the version already in the Google index is returned — this is NOT a live test. mobileUsabilityResult may still appear in responses but the product is retired — ignore it. QUOTA WARNING: only 2,000 inspections per property per DAY (and 600/minute) — throttle any batch inspection and expect 429/403 rateLimitExceeded beyond that.

輸入參數site_url必填language_codeinspection_url必填

raw_request

Raw Search Console API call

Escape hatch to call any Google Search Console API path directly, for requests the typed tools don't cover. Two surfaces share the host: "webmasters/v3/..." (sites, sitemaps, searchAnalytics) and "v1/..." (urlInspection). siteUrl and feedpath are PATH SEGMENTS and must be URL-encoded (encodeURIComponent), e.g. "webmasters/v3/sites/sc-domain%3Aexample.com/sitemaps". The path may carry a query string. The Bearer token is added automatically; the method defaults to GET. Note: sites.add and sitemaps.submit are PUT with no body and return an empty response on success.

輸入參數bodypath必填method

版本歷史

5
  1. v1.3.2最新Nov 5, 2026
  2. v1.3.1Oct 31, 2026
  3. v1.3.0Oct 31, 2026
  4. v1.2.0Sep 21, 2026
  5. v1.1.0Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分