SuperAPI AI 工具集

google-search-console-mcp

google-search-console-mcp 是一个面向 Google Search Console 的 MCP 服务器,让 Claude Code、Claude Desktop、Codex 等 MCP 客户端能够读取并配置 Google Search Console 数据。它支持创建资源并验证所有权、提交和刷新站点地图、查询 URL 的索引状态,以及拉取完整的 Performance 报告。所有不可逆操作都会先交由人工确认,写入工具也可以完全关闭。它覆盖 Search Console v1、Site Verification 和 Indexing 三个 API,并提供 21 个工具,也可只加载 essential 精简的五个工具以提高模型选择准确率。数据字段标注为不可信,凭据不会泄露到输出中。使用需要 Node.js 22 或更新版本,以及 Google 凭据,并开启相应 API。

访问官网

工具介绍

google-search-console-mcp 是一个基于 Model Context Protocol(MCP)的服务器,用于接入 Google Search Console——这个服务告诉你 Google 如何看待你的网站,而该服务器既能读取它,也能对其进行配置。MCP 客户端如 Claude Code、Claude Desktop 或 Codex 可以通过它创建资源并证明所有权、提交和刷新站点地图、查询任意 URL 的索引状态,以及查询完整的 Performance 报告。不可逆操作会先交由人工确认,写入工具可以完全关闭。

主要能力与特点:

  • 工具数量:最多提供 21 个工具。通过 GSC_ALLOW_TOOLS=essential 可注册一个精选的五工具集,模型从五个工具中挑选正确工具的可靠性远高于从 21 个中挑选。essential 包含 list_sites、get_site、list_sitemaps、query_search_analytics 和 inspect_url,覆盖查看资源所需的一切,且不包含任何修改操作。如果 GSC_ALLOW_TOOLS 中某一项不匹配任何工具,服务器会停止并列出真实名称。

  • 真正能创建可用资源:获取一个资源需要按固定顺序完成四步——获取验证令牌、将其放入 DNS 或页面、验证所有权、添加资源——而 Google 的 API 并不强制这个顺序。如果先调用 sites.add 会成功,但会留下一个出现在所有列表中、但访问任何数据都返回 403 的资源,看起来像权限错误,实则不是。setup_site 会报告缺少哪一步,并给出要粘贴的确切 DNS 记录。只暴露 sites.add 的服务器只能添加别人已经手工验证过的资源。

  • 覆盖三个 API,而不是一个:Search Console v1 有十个方法,但不包含所有权。Site Verification 是一个独立服务,有自己的 scope、自己的主机,以及对同一站点命名的不兼容方式——sc-domain:example.com 在那里是 {type: INET_DOMAIN, identifier: example.com},直接传入属性拼写会被接受,并验证一个字面叫 sc-domain:example.com 的域。Indexing API 是第三个。三者都被覆盖,它们之间的转换在 src/site-identity.ts 中。

  • 数字正确:搜索分析以表格形式返回,带总计,其中 CTR 从总计计算,而不是对各行求平均;平均排名按展示次数加权。如果不加权,一千个排名第 80 的罕见查询会把一个真实平均值为 12 的资源拉高到九十多。结果还会明确说明,使用查询维度时各行不会合计到资源总计——Google 为匿名性会隐藏罕见查询,通常占所有展示次数的三分之一或更多,而打印一个不带此说明的总计,人们会引用这个数字。

  • 了解这些 API 的锐利之处:https://example.com/ 末尾的斜杠是必需的,缺少它会导致 403;同一站点的域资源和 URL 前缀资源是不同资源,数据也不同,因此裸主机名会被拒绝而不是猜测;天数按太平洋时间计算,所以在 UTC 中计算的 last7days 会请求 Google 没有数据的一天;hour 维度在没有 dataState: HOURLY_ALL 时会静默返回空;Google 会完全省略空数组,因此新凭据的资源列表会以 {} 到达;Indexing API 对任何拥有的 URL 都返回 200,但只对 JobPosting 和 BroadcastEvent 页面采取行动。

使用方式:

  • 需要 Node.js 22 或更新版本(或容器镜像)。
  • 需要一个 Google 凭据——服务账号密钥、OAuth2 刷新令牌,或应用默认凭据。
  • 需要在 Google Cloud 项目中启用打算使用的 API:Search Console API,以及单独的 Site Verification API 和 Indexing API。
  • 服务器启动时不需要凭据即可列出其工具;之后每次调用都会失败并给出设置说明,而不是 Google 错误。这是有意为之,以便注册中心和沙箱检查器可以内省它。
  • 凭据按顺序尝试——显式优先于环境。不完整的 OAuth 三元组是启动错误,而不是回退到应用默认凭据的理由,因为后者会悄悄以机器登录的账号运行服务器。
  • 服务账号是推荐的:它只能看到你明确将其添加到的资源,撤销它不会影响任何人的 Google 账号。在 Search Console 的设置 → 用户和权限中添加其 client_email,或通过 verify_site 赋予其所有权。注意 Indexing API 需要 owner,而不是 full user。
  • OAuth2 刷新令牌以同意者身份行事,能看到其能看到的一切。其 scope 在同意时固定,之后无法扩大。

通过 mcp-hub 使用:

无法生成本地进程的客户端——ChatGPT connectors、Claude on the web、Cursor、LibreChat——可通过 mcp-hub 访问 google-search-console-mcp:一个容器通过 Streamable HTTP 服务许多 stdio MCP 服务器,背后是单密码的 OAuth 2.1 登录,以及为无法进行 OAuth 的客户端提供的长期令牌。其 /hub 端点将所有服务器置于六个元工具之后,因此一个连接器即可访问所有服务器,而不会在模型上下文中出现 N×工具 schema,并且它同时支持两个协议修订。

其他技术细节:

  • site_url 在设置了 GSC_SITE_URL 时,对于每个接受它的工具都是可选的。
  • 每个工具都声明 outputSchema,并在文本块旁以 structuredContent 回答,因此客户端无需解析散文即可使用结果。query_search_analytics 在文本块中保留渲染的表格,并将行本身放入结构化部分。
  • 每个报告 Google 数据的工具都携带 untrusted: true 和 source: "search-console" 字段。搜索查询是公众在 Google 中输入的字符串,页面标题来自被爬取的站点。六个工具没有这个标记,因为它们的答案是服务器被赋予的属性及其确立的事实:add_site、delete_site、submit_sitemap、submit_sitemaps、delete_sitemap 和 unverify_site。
  • 有四个操作会询问人工:delete_site、delete_sitemap、unverify_site 和 update_site_owners 会在客户端支持时通过 MCP elicitation 弹出真实对话框,模型无法代其回答。在客户端不支持时,它们拒绝第一次调用并返回绑定到这些确切参数的短期令牌,并明确说明,而不是暗示有人批准了。无论哪种方式,批准都绑定到资源,为某一个资源发放的批准不能重放到另一个资源。update_site_owners 在此列表中,因为它接受的列表是之后的完整所有者列表——一次格式良好的调用会移除其他所有人,而这里没有任何东西能恢复他们。ELICITATION=false 会故意走回退路径;它永远不会移除防护。
  • 来自 API 的一切都标记为不可信。
  • 允许列表没有豁免:GSC_ALLOWED_SITES 在工具命名资源的地方强制执行,并单独在两种不命名资源的形式上执行:Indexing API 工具按 Search Console 界定资源的方式将页面 URL 与列表匹配,验证工具在行动前将其不透明资源 id 解析为资源。两个列表都会过滤到允许列表,并说明它们扣留了多少条目。
  • 只读深入到工具层之下:GSC_READ_ONLY=true 不会注册写入工具,并请求 webmasters.readonly 而不是 webmasters,因此即使工具尝试写入也不可能。
  • 凭据从不出现在输出中:它们在启动后从环境中删除,从不发送到重定向目标,被拒绝的值会被描述而不是回显,包括误将密钥粘贴到 GSC_ALLOW_TOOLS、GSC_SITE_URL 或 ELICITATION 中,也包括访问令牌本身,它在成为标头之前会被检查。
  • Google 发送的内容被约束为一种形状:在读取响应体之前决定响应的状态,结果承诺的每个字段都在边界处检查——不是对象的行会被丢弃,空的 site 块不算 site,空的 200 是空记录——文本在输出时去除控制字符。结果在两个通道中都有预算,调用方字符串有上限,批量调用在两分钟后停止并说明进行到何处。

故意不暴露的功能: urlTestingTools.mobileFriendlyTest 仍在 Google 的发现文档中,但背后的服务已于 2023 年 12 月关闭。为它提供工具只会返回错误,因此没有这样的工具。

限制:

  • 需要 Node.js 22 或更新版本(或容器镜像)。
  • 需要 Google 凭据,并在 Google Cloud 项目中启用相应 API。
  • 部分操作不可逆,需要人工确认,且批准绑定到具体资源,不能跨资源重放。
  • 使用查询维度时,各行不会合计到资源总计,Google 会隐藏罕见查询;不带说明的总计可能被误解。
  • Indexing API 对任何拥有的 URL 返回 200,但只对 JobPosting 和 BroadcastEvent 页面采取行动。
  • mobileFriendlyTest 不提供,因为服务已关闭。
  • 所有来自 API 的数据都标记为不可信,因为搜索查询、页面标题和爬取诊断来自外部输入。