Tag Pilot Search Console

io.github.tagpilot由 GitHub 账号 tagpilot 发布v0.1.0更新于 Nov 3, 2026

Free, read-only Google Search Console: performance, opportunities, URL inspection. No GCP setup.

发布方自己的服务:QuickBooks Connector by Meridian

概览

AI 生成的概览

只读的 Google Search Console MCP 服务器,让助手查询你网站的点击、展示、CTR、排名、站点地图和索引状态。

可以做什么
  • 列出 Search Console 资源及其权限级别,列出或查看已提交的站点地图
  • 按日期、查询词、页面、国家、设备或搜索外观查询 Search Analytics,支持筛选和分页
  • 按查询词或页面比较两个周期,给出变化量和资源总计
  • 找出 SEO 机会,例如首页低 CTR 行和接近首页的排名
  • 检查单个 URL 的索引版本:判定结果、覆盖状态、最近抓取、规范网址、富媒体结果
  • 连接本机并查看连接状态
适用场景
适合想直接向助手询问自然搜索表现、又不想搭建 Google Cloud 项目的场景:哪些查询词流失了点击、环比有何变化、哪些页面接近首页,或某个 URL 是否已被索引。
运行要求
通过 npx 以 stdio 在本机运行,需要 Node.js 18 或更高版本(Claude Desktop 扩展版无需 Node.js)。无需 Google Cloud 项目或 API 密钥:首次请求会启动浏览器登录免费 Tag Pilot 账户并授权只读的 Google Search Console 访问。TAGPILOT_API_KEY 仅供无头或 CI 环境选用。需要访问 Google 与 Tag Pilot 的网络。
安装前请注意
只读:仅申请 webmasters.readonly 权限,任何工具都不会修改 Search Console。Search Console 数据由本机直接发往 Google,Tag Pilot 仅中转 OAuth 令牌交换且不存储 Google 令牌;凭据保存在本地配置目录。授权即允许只读访问你的 Search Console 资源,之后可撤销该设备。受 Google 配额限制,例如 URL 检查每天 2,000 次。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Tag Pilot Search Console,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Tag Pilot Search Console MCP

A free, read-only Model Context Protocol server for Google Search Console. Ask Claude, Cursor or any MCP client about your organic search: clicks, impressions, CTR and positions by query or page, what changed between two periods, SEO opportunities, Google's index status for a URL, and your sitemaps.

No Google Cloud setup, no API key to copy. You don't need a GCP project, OAuth client, service account or gcloud. Add the server, ask a question, and approve once in your browser.

bash
claude mcp add search-console -- npx -y @tagpilot/search-console-mcp

Get started

  1. Install in your AI client (below). No configuration needed.
  2. Ask something, e.g. "Which queries lost the most clicks this month?" The first time, a browser window opens (or your AI shows a link and a code like ABCD-1234):
    • sign in to your free Tag Pilot account, or create one;
    • check that the code matches and approve this computer;
    • sign in with the Google account that can see your Search Console properties and allow read-only Search Console access.
  3. Ask again. You're connected; the computer shows up under Connected devices on the Search Console MCP page.

Already use the Tag Pilot GA4 MCP? This is a separate server with its own connection (and its own Google consent), so you can install either or both.

Install

[Add to Cursor] [Install in VS Code]

ClientHow
Claude DesktopDownload the extension and open it (no Node.js needed)
Claude Codeclaude mcp add search-console -- npx -y @tagpilot/search-console-mcp
CursorAdd to Cursor, or the mcp.json below
VS CodeInstall in VS Code
Windsurf, Zed, …command npx, args ["-y", "@tagpilot/search-console-mcp"] (stdio)
Gemini CLIclone the repo, then gemini extensions install ./ga4-mcp/packages/search-console-mcp

Everything except the Claude Desktop extension runs the npm package with npx, so it needs Node.js 18 or newer. In the MCP Registry it's io.github.tagpilot/search-console-mcp.

Claude Desktop config file (claude_desktop_config.json), Cursor (~/.cursor/mcp.json) and similar clients:

json
{  "mcpServers": {    "search-console": {      "command": "npx",      "args": ["-y", "@tagpilot/search-console-mcp"]    }  }}

Headless and CI: where nobody can approve in a browser, create a gsc:mcp key on the Search Console MCP page and set TAGPILOT_API_KEY=tpk_… in the server's environment. The device connect is then skipped and only the Google sign-in link is shown.

How connecting works, and what Tag Pilot sees

The same flow as the GA4 MCP (RFC 8628-style device connect, like gh auth login): it works from any browser on any device, also over SSH, in containers or WSL, because nothing listens on your machine.

  • Your Search Console data goes from your machine straight to Google (www.googleapis.com/webmasters/v3, searchconsole.googleapis.com). It never passes through Tag Pilot.
  • Tag Pilot only brokers the token exchange. It adds Tag Pilot's Google OAuth client credentials to Google's token endpoint and returns Google's answer. It stores no Google tokens and never logs them; it holds the one-time sign-in code for at most 10 minutes, and that code is useless without the PKCE verifier that stays on your machine.
  • Read-only. The only Google scope requested is webmasters.readonly. None of the tools can change anything in Search Console (no sitemap submits, no deletes).
  • Your credentials stay on your machine, in ~/.config/tagpilot/search-console-mcp/device.json (readable only by you).
  • Disconnecting: revoke the device on the Search Console MCP page, run npx -y @tagpilot/search-console-mcp logout, and remove the app's access at myaccount.google.com/permissions.

Tools

All tools are read-only. site_url is the property exactly as list_sites shows it: sc-domain:example.com for a domain property, or a URL prefix with its trailing slash (https://www.example.com/).

ToolWhat it does
list_sitesProperties you can read (domain and URL-prefix) with your permission level. Start here.
search_analyticsClicks, impressions, CTR and position by date, hour, query, page, country, device, searchAppearance; filters; search type (web, image, video, news, Discover, Google News); data state; aggregation; paging (up to 25,000 rows per call).
compare_periodsPeriod-over-period by query or page: both periods, deltas, new/lost rows, and property totals. Default: last 28 days vs the 28 days before.
find_opportunitiesTag Pilot analysis. low_ctr: page-one rows with many impressions but under half a typical CTR for their position. striking_distance: rows at average positions ~5–20 with enough impressions.
inspect_urlURL Inspection: Google's indexed version of one URL (verdict, coverage, last crawl, robots.txt, canonical chosen by Google vs declared, sitemaps, rich results).
list_sitemaps / get_sitemapSubmitted sitemaps: type, last submitted/downloaded, errors, warnings, submitted URL counts.
connectConnects this computer: returns a link and a code for you to approve in the browser (your AI shows them; clients that support MCP URL elicitation offer to open the link). Say "connect my Search Console" to start it explicitly.
connection_statusConnected (with the device name), waiting for approval (link and code again), not connected, or what went wrong. Waits up to 25 s for an open sign-in to finish.

Things to know about Search Console data

  • Lag: data is typically available after 2–3 days. The default date range is the 28 days ending 3 days ago. data_state: "all" adds fresher, still-changing data; the result says from which date data is incomplete.
  • Dates are Pacific Time (Search Console's day boundary). Relative dates ("yesterday", "7daysAgo") are computed in Pacific Time too.
  • Anonymised queries: queries too rare to show (privacy) are left out of rows grouped or filtered by query, so per-query rows add up to less than the totals by date, country or device. compare_periods reports property totals separately for that reason.
  • Row limits: a call returns up to 25,000 rows (use start_row to page), and Google exposes at most 50,000 rows per day per search type, sorted by clicks.
  • Aggregation: grouping or filtering by page counts each URL separately (byPage), so totals differ from property-level totals.
  • Discover and Google News don't support aggregation_type: "byProperty".
  • Quotas (Google's): Search Analytics allows 1,200 queries per minute per site and per user, plus a load quota that long, query-and-page-level requests use up faster. URL Inspection allows 2,000 inspections per day and 600 per minute per property, so inspect_url is for a handful of important URLs, not whole sitemaps.

find_opportunities uses a rough benchmark CTR curve (position 1 ≈ 28%, 3 ≈ 10%, 10 ≈ 2%) to rank rows. It's a rule of thumb for prioritising, not Google data or a forecast.

Troubleshooting

"Not connected yet" (a link and a code like ABCD-1234): your AI shows them. Open the link in any browser (it doesn't have to be on this machine), sign in to Tag Pilot, check that the code matches, approve, and allow Search Console access, then tell your AI you're done: it retries your question (or calls connection_status). The server keeps checking in the background, so nothing needs restarting. The code is valid for 10 minutes; after that, ask again (or say "connect Search Console") for a new one. To connect from a terminal instead (e.g. over SSH), run npx -y @tagpilot/search-console-mcp login: it shows the link, the code in a box and a countdown, and waits until you approve.

"The signed-in Google account has no access to the Search Console property …": use list_sites and pass site_url exactly as listed (sc-domain: for domain properties, trailing slash for URL prefixes). To use another Google account, run npx -y @tagpilot/search-console-mcp logout and connect again.

"This computer was disconnected from Tag Pilot": the device was revoked; ask again to reconnect. "Your Google sign-in expired or was revoked": ask again and approve again.

Quota errors: wait a few minutes (Search Analytics) or until tomorrow (URL Inspection).

Check the setup: npx -y @tagpilot/search-console-mcp status. Logs go to stderr.

Configuration

Nothing is required. All variables are optional:

Variable
TAGPILOT_API_KEYA gsc:mcp key for headless/CI setups. Skips the device connect.
TAGPILOT_API_URLTag Pilot API base URL. Default https://api.tagpilot.io.
SEARCH_CONSOLE_MCP_NO_BROWSER1 to only print/return the link instead of opening a browser.
SEARCH_CONSOLE_MCP_BROWSERBrowser to open (macOS app name, or a command on Linux/Windows).
SEARCH_CONSOLE_MCP_AUTH_WAIT_SECONDSHow long a tool call waits for the connect before returning the link. Default 45.
SEARCH_CONSOLE_MCP_CONFIG_DIRCredential directory. Default ~/.config/tagpilot/search-console-mcp.

Commands: npx -y @tagpilot/search-console-mcp [serve|login|logout|status|--help|--version].

Development

See the repo README. SEARCH_CONSOLE_MCP_WEBMASTERS_API_URL and SEARCH_CONSOLE_MCP_INSPECTION_API_URL point the Google calls at a mock (used by npm run e2e).

License

Apache License 2.0. Copyright 2026 Tag Concierge sp. z o.o. The license does not cover the Tag Pilot name or logo (see NOTICE).

来源:packages/search-console-mcp/README.md,提交 4ceb8f8

工具

9

list_sites

List Search Console properties

Lists every Search Console property the signed-in Google account can see: domain properties ("sc-domain:example.com", covering all subdomains and protocols) and URL-prefix properties ("https://www.example.com/"), with the permission level (owner, full, restricted, unverified). Start here: other tools need site_url exactly as listed.

无需输入参数。

list_sitemaps

List sitemaps

Sitemaps submitted for a property (or listed in a sitemap index): type, last submitted/downloaded, pending, errors, warnings and submitted URL counts per content type. Google no longer reports indexed counts per sitemap; use inspect_url for single URLs.

输入参数site_url必填sitemap_index

get_sitemap

Get one sitemap

Details of one submitted sitemap (same fields as list_sitemaps).

输入参数site_url必填sitemap_url必填

search_analytics

Search performance (Search Analytics)

Clicks, impressions, CTR (0–1) and average position from Google Search, grouped by date, query, page, country, device or search appearance, with filters and paging. Defaults: last 28 days of final data, web search, 100 rows sorted by clicks. Search Console data typically lags 2–3 days; the default range ends 3 days ago (Pacific Time). Pass data_state "all" to include fresher, still-changing data. Grouping or filtering by query omits anonymised (rare) queries, so query rows add up to less than the totals by date, country or device. Google exposes at most 50,000 rows per day per search type.

输入参数filtersend_datesite_url必填row_limitstart_rowdata_statedimensionsstart_datesearch_typeaggregation_type

compare_periods

Compare two periods

Period-over-period change by query or page: clicks, impressions, CTR and position for both periods with deltas, plus property totals (which include anonymised queries). Default: the last 28 days of final data vs the 28 days before. Biggest movers first. Search Console data typically lags 2–3 days; the default range ends 3 days ago (Pacific Time). Pass data_state "all" to include fresher, still-changing data. Grouping or filtering by query omits anonymised (rare) queries, so query rows add up to less than the totals by date, country or device. Uses 4 Search Analytics queries.

输入参数topsortfiltersend_datesite_url必填dimensionstart_datesearch_typerows_per_periodcompare_end_datecompare_start_date

find_opportunities

Find SEO opportunities

Tag Pilot SEO check over one period, by query (default) or page. low_ctr: rows on page one (avg position ≤ 10) with plenty of impressions but a CTR under half of a typical CTR for that position, so the title/snippet likely underperforms. striking_distance: rows ranking around positions 5–20 (configurable) with enough impressions, where a small ranking gain pays off. "Typical CTR" is a rough industry benchmark curve, not Google data. Search Console data typically lags 2–3 days; the default range ends 3 days ago (Pacific Time). Pass data_state "all" to include fresher, still-changing data. Grouping or filtering by query omits anonymised (rare) queries, so query rows add up to less than the totals by date, country or device.

输入参数topfiltersend_datesite_url必填dimensionstart_datesearch_typemax_positionmin_positionrows_to_scanmin_impressions

inspect_url

Inspect a URL (index status)

URL Inspection: Google's indexed version of one URL in the property: indexing verdict and coverage state, last crawl, robots.txt and fetch state, Google-selected vs declared canonical, sitemaps and referring URLs, rich results. It is not a live test. Quota: 2,000 inspections per day and 600 per minute per property, so inspect a handful of important URLs, not whole sitemaps.

输入参数url必填site_url必填language_code

connect

Connect Search Console MCP

Connects this computer to Tag Pilot Search Console MCP (free Tag Pilot account + read-only Google Search Console access). Call it when the user asks to connect, or when another tool says the computer is not connected. It returns a link and a code: show both to the user as given (a clickable link), ask them to open it, approve and allow Google access, and tell you when done; then call connection_status. Never ask the user to run terminal commands. If already connected, it says so.

无需输入参数。

connection_status

Search Console MCP connection status

Whether this computer is connected to Tag Pilot Search Console MCP: "connected" (with the device name), "waiting" (a sign-in link is open; shows the link and code again), "not_connected" (call connect) or "error" (with the next step). While a sign-in is open it waits up to 25 seconds for the approval before answering, so call it after the user says they approved, not in a fast loop.

输入参数wait

版本历史

1
  1. v0.1.0最新Oct 29, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Pilot 集成