搜索控制台查询服务器

一个将Google搜索控制台数据作为工具暴露给MCP客户端的服务器,支持自然语言查询。

  • by garethcull
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 garethcull/search-console-mcp

使用说明

谷歌搜索控制台MCP服务器

一种模型上下文协议(MCP)服务器,将谷歌搜索控制台(GSC)数据作为MCP客户端可使用的工具公开,如OpenAI Responses API、Cursor或prototyp.ai MCP客户端。

此MCP服务器是作为Flask应用程序构建的,可部署到Google Cloud Run或您自己的基础设施。

MCP功能

此Google搜索控制台MCP服务器具有一个MCP工具: search_console_query

此MCP工具可帮助用户使用自然语言请求Google Search Console数据。

它是一个受保护的服务器,需要服务器操作员添加授权令牌才能访问该服务。此身份验证令牌(MCP_token)是一个需要设置的环境变量。

使用Google Gemini 2.5 Flash将自然语言请求转换为API请求有效载荷,然后用于从GSC API获取请求数据。

然后,响应数据以字符串形式反馈给请求用户或代理,详细说明:

  • 什么是GSC数据
  • 如何使用GSC数据
  • 请求的时间范围
  • 请求对象作为一组参数
  • 格式为表格的响应数据

此响应上下文的结构是使用FACT上下文工程框架开发的。

有关我如何为这个项目进行上下文工程的更多信息,请参阅以下博客文章: https://www.prototypr.ai/blog/context-engineering-for-ai-agents-a-developers-guide

MCP架构

此MCP服务器包含两个文件:

  1. app.py-主python文件,用于对mcp_helper.py的请求进行身份验证和委托
  2. mcp_helper.py-支持辅助函数以满足用户请求。

app.py

带有POST/mcp的Flask应用程序 通过返回204 No Content来处理JSON-RPC通知 mcp方法逻辑委托给mcp_helper

mcp_helper.py

handle_request路由初始化、工具/列表、工具/调用 handle_tool_call解码参数,分派给工具,并返回MCP形状的结果 get_search_console_data处理Gemini提示→ GSC API→ 格式化文本

端点和协议

JSON-RPC MCP(此服务器首选) POST/mcp 内容类型:应用程序/json 授权:承载MCP_TOKEN 方法 初始化→ 返回protocolVersion、serverInfo、功能 工具/列表→ 返回带有inputSchema的工具(camelCase) 工具/调用→ 返回带有内容数组的结果 通知/已初始化→ 不得返回JSON-RPC主体;回答204

环境变量

此MCP服务器需要设置环境变量才能正常工作。它们是:

  1. MCP_TOKEN:授权标头的共享密钥
  2. SEARCH_CONSOLE_KEY:GSC的Base64编码谷歌服务帐户JSON密钥
  3. GEMINI_API_KEY:GEMINI的API密钥(用于将自然语言翻译为GSC查询JSON)

注意:搜索控制台键需要编码为base64字符串。您需要这样做才能使mcp服务器工作。

本地设置

Python环境

创建并激活虚拟环境

python3-m视频 source.ven/bin/activate

安装依赖项

pip安装-r要求.txt 环境变量(示例) export MCP_TOKEN=“您的共享令牌” export GEMINI_API_KEY=“your-GEMINI-API-KEY” export SEARCH_CONSOLE_KEY=“你的服务密钥为base64”

在本地运行

导出FLASK_APP=APP.py 烧瓶运行--主机0.0.0.0--端口8080

快速JSON-RPC测试

使用Python请求来验证初始化、通知/初始化、工具/列表和工具/调用。替换基本URL和令牌。

import requests, json

BASE = "https://<your-cloud-run-host>/mcp"
AUTH = "Bearer <your-mcp-token>"

def rpc(method, params, id_):
    payload = {"jsonrpc":"2.0","id":id_, "method":method, "params":params}
    r = requests.post(BASE, headers={"Authorization": AUTH, "Content-Type":"application/json"}, data=json.dumps(payload))
    print(method, r.status_code)
    print(r.text[:600])
    return r

# 1) initialize
rpc("initialize", {}, "1")

# 2) tools/list
rpc("tools/list", {}, "2")

# 3) tools/call
rpc("tools/call", {
    "name":"search_console_query",
    "arguments":{"query":"Show me the top 10 queries by clicks over the past 30 days."}
}, "3")

OpenAI响应API工具配置

此MCP工具最初设计用于使用OpenAI Responses API。有关OpenAI的Responses API和MCP的更多详细信息,请查看本食谱: https://cookbook.openai.com/examples/mcp/mcp_tool_guide

在响应API请求中配置MCP工具。将server_url指向您的/mcp端点,并包含Authorization标头。

tools = [
  {
    "type": "mcp",
    "server_label": "search-console-mcp",
    "server_url": "https://<your-cloud-run-host>/mcp",
    "headers": { "Authorization": "Bearer <your-mcp-token>" },
    "require_approval": "never"
  }
]

添加新工具

  1. 在工具/列表中注册该工具(JSON-RPC使用inputSchema、camelCase)。
def handle_tools_list():
    return {
        "tools": [
            {
                "name": "search_console_query",
                "description": "",
                "annotations": {"read_only": False},
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "query": {"type": "string", "description": "Natural language query for GSC"}
                    },
                    "required": ["query"],
                    "additionalProperties": False
                }
            },
            {
                "name": "new_tool_goes_here",
                "description": "describe what this tool does",
                "annotations": {"read_only": False},
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "query": {"type":"string","description":"a user request"}                         
                    },
                    "required": ["query"],
                    "additionalProperties": False
                }
            }
        ]
    }

然后,您需要使用handle_tool_call函数调用它。

安全考虑

始终需要授权:承载MCP_TOKEN on/MCP 保持工具输出大小合理,完全UTF-8

部署到Google Cloud Run

我最初构建这个MCP服务器是为了部署在Google Cloud Run上。 Google Cloud Run是一个可以扩展且易于部署的无服务器环境。

我发现以下来源对于在Google Cloud中正确部署和运行此服务器非常有帮助。

由于Google Cloud Run是一项付费服务,您需要确保您的项目已设置并启用计费。

您还需要将环境变量添加到您的实例中。

以下是一篇文章的链接,该文章帮助我将此MCP服务器部署到Google Cloud Run: https://docs.cloud.google.com/run/docs/quickstarts/build-and-deploy/deploy-python-service

许可证

MIT。

贡献与支持

欢迎反馈、问题和PR。由于带宽限制,我无法提供此代码库的免费更新时间表。

如果您需要帮助定制此MCP服务器,我可以提供付费咨询和自由项目。欢迎在LinkedIn上与我联系: https://www.linkedin.com/in/garethcull/

感谢您查看此Google搜索控制台MCP服务器!我希望它能帮助你和你的团队。

快乐分析!