mcpField
G
gsearch

gsearch

本地服务
github.com/RayenMlayeh搜索与检索82 天前更新

关于 gsearch

gsearch 是供 AI Agent 使用的可自托管 MCP 服务,将 Google 搜索结果以带类型的 JSON 返回,包含解析后的真实网址、AI Overview 和 People also ask。它通过真实 Firefox 浏览器访问页面,并支持配置代理。

主要功能

  1. 01以带类型的 JSON 返回 Google 结果
  2. 02解析结果的真实目标网址
  3. 03提供 AI Overview 和相关问题
  4. 04页面读取与状态查询工具
  5. 05支持代理及流量上限

适用场景

  1. 01为 Agent 获取 Google 搜索结果
  2. 02读取公开网页及其中的链接
  3. 03检查代理用量与拦截状态

MCP 相关

向 MCP 客户端提供 google_search、fetch_page 和 google_search_status。搜索结果含带类型的 JSON;遭拦截时会返回带重试信息的错误。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"rayenmlayeh-gsearch": {
"command": "uvx",
"args": [
"gsearch-agent"
],
"env": {
"GSEARCH_PROXY": "<GSEARCH_PROXY>",
"GSEARCH_DATA_LIMIT_MB": "<GSEARCH_DATA_LIMIT_MB>"
}
}
}
}
启动命令uvx gsearch-agent
需要配置的环境变量
GSEARCH_PROXY密钥Optional proxies in any format (host:port:user:pass, user:pass@host:port, socks5://...), or a file listing them. Unset: your own IP, at most 20 searches an hour.
GSEARCH_DATA_LIMIT_MBOptional hard limit on proxy data, in MB, counted across restarts.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypigsearch-agent0.1.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

gsearch:面向 AI Agent 的 Google 搜索。通过 MCP 获取真实结果,并以整洁的 JSON 格式返回。

测试 PyPI Python 3.12+ MIT 许可证 MCP 服务

快速开始 · 对比情况 · 你能获得什么 · 工作原理 · 代理 · 性能 · 常见问题

为你的 AI Agent 提供真实的 Google 搜索。无需 API 密钥。可自托管。通过 MCP 使用。

你的 Agent 调用 google_search,即可获得 Google 实际的搜索结果页,并以类型化 JSON 格式返回:每个链接都会解析为真实 URL,还包含 Google 的答案框(体育赛事结果、头条新闻、视频)、AI 概览、“其他人还问了”问题和相关搜索。真正的 Firefox (Camoufox) 会原样运行 Google 页面,使用你自己的 IP,或通过你已有的任意代理访问。

**原因:**普通 HTTP 请求会遇到 JavaScript 屏障;在我们的测试中,自动化 Chrome 两次尝试都遇到了 CAPTCHA;而 Google 官方的 Custom Search API 将于 2027 年 1 月 1 日关闭。其他搜索 MCP 服务要么不使用 Google 的索引(Brave、Tavily、Exa、DuckDuckGo),要么按查询次数收费(SerpApi、Bright Data)。

通过 MCP 实时调用 google_search:python 3.14 发布说明,1.5 秒内返回 9 条结果,每个链接都解析为真实 URL,并附有“其他人还问了”问题

在家庭 IP 上通过预热会话进行的真实实时调用,根据录制的结果渲染;图中等待时间为实测时间。MP4

🚀 快速开始

uv tool install gsearch-agent                         # or: pipx install gsearch-agent
gsearch setup                                         # downloads the browser once (~1 GB), prints your MCP config
claude mcp add gsearch --scope user -- gsearch-mcp    # or any MCP client, below

然后直接提出请求:“在 Google 上搜索 asyncio 是什么,并给我前三个链接”、“人们还会问哪些关于 asyncio 的问题?”、“查找过去一年 python.org 上的 asyncio 页面。”、“搜索 asyncio 文档并总结第一个结果。”

不使用代理时,gsearch 会使用你自己的 IP,每小时最多搜索 20 次。需要更多搜索时,可添加任意格式的代理:

claude mcp add gsearch --scope user -e GSEARCH_PROXY="gate.example.com:7000:user-sid-{sid}:password" -e GSEARCH_DATA_LIMIT_MB=1000 -- gsearch-mcp
Claude Desktop、Cursor 和其他 MCP 客户端

gsearch setup 会打印此配置块,并填入 gsearch-mcp 的完整路径。如果客户端找不到该命令,请使用完整路径。

{
  "mcpServers": {
    "gsearch": {
      "command": "gsearch-mcp",
      "env": { "GSEARCH_PROXY": "optional, any format", "GSEARCH_DATA_LIMIT_MB": "1000" }
    }
  }
}

Claude Desktop:claude_desktop_config.json。Cursor:~/.cursor/mcp.json,或项目中的 .cursor/mcp.json。

**无需安装,使用 uv:**设置 "command": "uvx", "args": ["gsearch-agent"],并先通过 uvx --from gsearch-agent gsearch setup 获取浏览器。

**将设置放入文件:**把设置写入 .env(参见 .env.example),并将 GSEARCH_ENV_FILE 设置为该文件的绝对路径。

说明

自动访问 Google 搜索可能违反 Google 的服务条款。运行实时搜索前,请阅读 合法与负责任的使用。

🆚 对比

gsearch 与付费 SERP API、其他搜索索引、免费搜索引擎 MCP 服务和 Playwright Chromium Google MCP 服务的对比

文字版对比
gsearchSerpApi、Bright DataBrave、Tavily、ExaDuckDuckGo、SearXNG MCPPlaywright + Chromium Google MCP
Google 自有搜索结果✅✅❌ 使用自有索引❌ / 取决于实例✅
API 密钥或账号无需必需必需无需无需
费用免费(+ 你的代理,可选)按查询计费按用量计费的套餐免费免费
在你的设备上运行✅❌ 托管❌ 托管✅✅
AI Overview、People also ask✅✅(SerpApi)❌❌视情况而定
将 Google 的重定向链接解析为真实 URL✅✅不适用不适用视情况而定
将拦截报告为错误并提供重试时间✅不适用不适用视情况而定视情况而定
服务条款风险由你承担是(法律)由服务提供商承担否低是

“视情况而定”:我们未测试这些项目。我们唯一的 Chromium 测量记录是 F-0001:在提供 gsearch 服务的 IP 上,Playwright Chrome 有 2 次中的 2 次遇到了 CAPTCHA。 运行实时搜索前请阅读法律。

结果:家庭 IP 上 24 次搜索均成功提供服务,0 次 CAPTCHA;热会话中每次搜索耗时 1.2 秒;干净代理 IP 上每次搜索耗用 0.6 MB;每个链接均解析为真实 URL

测量于 2026 年 10 月: F-0014、 F-0006、 F-0011、 F-0012、 F-0001; 干净代理 IP 上耗时 14 秒、用量 0.6 MB:F-0015。 被标记的代理池速度较慢:参见性能。

✨ 为什么选择 gsearch

同一 IP:普通 HTTP 获得 0 条结果,自动化 Chrome 2 次中的 2 次遇到 CAPTCHA,gsearch 24 次中的 24 次成功提供服务

Google 官方搜索 API 不再接受新客户,并将于 2027 年 1 月 1 日关闭 (F-0005)。gsearch 专为 AI Agent 打造:

  • 🦊 真正的浏览器,而非爬虫。 Camoufox 是经过强化的 Firefox,会原样运行 Google 页面,使用真实设备指纹,并让地区设置与 IP 相匹配。
  • 🔗 真实 URL。 Google 会将结果链接隐藏在 /goto 重定向之后。gsearch 会将每个链接解析为其指向的页面 URL,但不会加载该页面。
  • 🤖 专为 Agent 打造。 一个 MCP 服务:搜索、页面读取和状态查询,返回类型化 JSON。拦截会以清晰的错误返回,并附带 retry_after_s,绝不会返回空结果;同时,每个字符串都会标记为不可信的网页内容。
  • 🌍 支持任意代理和格式。 轮换住宅代理、静态 VPS 或数据中心代理列表,支持 HTTP、HTTPS 或 SOCKS5,以及任何常见布局。每个字节都会计数,并设有严格的数据用量上限。
  • 🎯 无需调优。 只需两个设置。其他设置均固定为测试中效果最佳的值。
  • 📊 数据如实呈现。 README 中的每项说法都附有测量方法的详细说明链接。

📦 Agent 能获取的内容

Google 搜索结果页的各个部分及其对应的 JSON 字段

保存的结果页中的实际输出(离线演示模式下,url 保持为 null;实时搜索会填入该字段):

gsearch 搜索输出

遇到拦截时,返回的绝不会是空列表,而是会说明发生了什么以及需要等待多久的错误:

以结构化错误形式返回的 CAPTCHA

各字段说明
字段内容
organic[].url每条结果的实际目标地址;在同一会话中解析 Google 的 /goto 重定向得出。
organic[].title、snippet、date、domain、display_url结果中显示的文本。link 保留 Google 提供的原始链接。
organic[].sitelinks、source_meta结果的子链接,以及 Google 在论坛和视频结果中显示的 URL 替代内容(2 years ago)。
ai_overviewGoogle 显示 AI Overview 时,其中的文本及其来源。
people_also_ask、related_searches页面上的问题和相关查询。
ads市场提供文字广告时显示的广告。
pagination当前页和下一页。使用 page 获取更多结果。
meta.untrusted_content始终为 true:所有字符串都是来自第三方网站的文本(参见 提示词注入)。

错误代码:captcha、soft_block、hard_block、consent_wall、js_gate、rate_limited、 parse_drift、network、proxy、backend_unavailable、invalid_request。完整的 JSON Schema 见 serp.schema.json。

🔍 工作原理

一次搜索:Agent 发起请求,使用新 IP 和真实 Firefox,返回干净的 JSON,并关闭所有内容

  • 像真人一样操作。 使用可见窗口,因为通过代理 IP 访问时,无头会话更容易受到质疑 (F-0015)。查询会输入到地址栏中。 WebRTC 已关闭,因此你的 IP 不会绕过代理泄露。
  • 绝不伪造。 gsearch 不会生成或篡改 Google 的令牌:浏览器会原样运行页面。
  • 低成本解析链接。 在相同 IP 上使用相同 Cookie 解析链接,TLS 指纹与浏览器匹配 (F-0011, F-0013)。
  • 可在服务端运行。 在没有屏幕的 Linux 机器上,浏览器会自动使用虚拟显示器 (sudo apt install xvfb)。

🌍 代理

轮换住宅代理、静态代理或 VPS 代理,也可不使用代理;支持任意格式

# rotating residential: {sid}, or your provider's sid-…, session-…, sessid-… part, gives a new IP per search
GSEARCH_PROXY=gate.example.com:7000:user-country-us-sid-{sid}:password

# static proxies (VPS, datacenter, ISP): one or many, separated by commas, spaces or new lines
GSEARCH_PROXY=socks5://user:[email protected]:1080, http://203.0.113.11:3128

# or a file with one proxy per line
GSEARCH_PROXY=/path/to/proxies.txt
  • 轮换代理: 每次搜索使用新的 IP 和新的浏览器,最多同时执行 3 次。被拦截的 IP 会被替换,每次搜索最多使用 4 个 IP。会检查登录信息中的 country-xx 或 cc-xx,并丢弃位于其他地区的出口 IP。
  • 静态代理: 每个 IP 保留一个预热会话,多个 IP 轮流使用。每个 IP 都有独立额度(每小时 20 次搜索, 每天 150 次),遇到 CAPTCHA 后会休息到午夜,因此十个 IP 每小时最多可进行约 200 次搜索。
  • 流量: 所有流量都会经过本地中继进行统计;达到设定上限后,GSEARCH_DATA_LIMIT_MB 会停止 所有操作,即使重启后也会继续生效。

提示

请查看代理提供商的可接受使用政策。许多提供商禁止在服务条款不允许自动访问的网站上使用其网络,也禁止破解 CAPTCHA。

📊 性能

代理质量决定速度和成本。 许多住宅 IP 已被 Google 标记。每个被标记的 IP 都会在尝试下一个 IP 之前消耗一次浏览器启动资源(约 0.7–1 MB 和 20 s)。

使用高质量轮换代理时的预期值在低质量代理池上的实测值(F-0015)
Google 可用的新 IP~85% 或更高(估计值)1/3 到 1/5
每次搜索耗时~15–20 s(干净 IP 上实测为 14 s)40–75 s
每次搜索的代理流量~0.6–1 MB(干净 IP 上实测为 0.6 MB)4.7–6.3 MB
每小时搜索次数(3 个浏览器)~500–600~72
1,000 次搜索~0.6–1 GB,不到 2 小时~5–6.5 GB,约 14 小时

不使用代理时,在你自己的 IP 上,已预热的会话每次搜索耗时 ~1.2 s,测试中所有链接均已解析,且未遇到 CAPTCHA(F-0014);为保护你的 IP,每小时最多搜索 20 次。静态代理尚未经过基准测试。

在数据限额内测量你自己的代理:

python tools/benchmark.py -n 10

🛠 参考

设置(共 5 项;大多数人只需要前两项)
设置作用
GSEARCH_PROXY采用上文任意格式的代理,或列出代理的文件。未设置:使用你自己的 IP。
GSEARCH_DATA_LIMIT_MB代理流量累计达到此 MB 数时停止,统计会跨重启保留。未设置:不限量。
GSEARCH_ENV_FILE.env 文件的绝对路径。MCP 客户端配置中需要此项。设置后,该文件必须存在。
GSEARCH_FIXTURES_DIR使用保存的页面而非 Google 提供答案(用于演示和测试)。
GSEARCH_STATE_DIR存放流量预算、数据计量信息和保存的拦截页面的位置。默认值:%LOCALAPPDATA%\gsearch 或 ~/.local/share/gsearch。

其他所有设置均固定为测试中效果最好的配置:每次搜索使用轮换代理更换 IP、显示浏览器、通过地址栏搜索、使用真实设备指纹、每次搜索尝试 4 次、始终解析 URL,以及为重复查询缓存 10 分钟。

MCP 工具、CLI 和 Python
MCP 工具参数返回内容
google_searchquery,以及可选的 page(1–50)、lang(en、fr 等)、country(us 等)、time_range(h、d、w、m、y)、site(域名)上述 JSON 及简短的文本摘要;若遭到拦截,则返回错误结果。
fetch_pageurl(公开的 http/https 页面)页面的标题、可读文本(最多 30,000 个字符)以及主要内容中的链接。通过你的代理访问,并计入数据限额。拒绝访问本机和专用网络。
google_search_status无限额内已使用的代理流量、已使用和遭拦截的 IP,以及缓存。不会联系 Google。
gsearch search "query" [--page N] [--lang xx] [--country xx] [--time-range h|d|w|m|y] [--site domain]
gsearch search "query" --fixtures fixtures/gecko     answer from saved pages (offline, from a clone of this repo)
gsearch fetch URL                                    readable text and links of a web page
gsearch parse page.html                              parse any saved Google results page
gsearch schema                                       print the JSON Schema
gsearch identity check                               home-IP browser's fingerprint matches its IP (no Google traffic)
gsearch setup                                        download the browser once and print the MCP config

退出代码:0 表示有结果,2 表示用法或设置错误,3 表示遭到拦截或其他错误,4 表示 Google 更改了页面布局。

import asyncio
from gsearch_core.client import SearchClient
from gsearch_core.config import fetcher_from_env
from gsearch_parse.models import SearchRequest

async def main() -> None:
    fetcher, _live = fetcher_from_env()      # reads the settings and .env
    result = await SearchClient(fetcher).search(SearchRequest(query="what is asyncio in python"))
    print(result.model_dump_json(indent=2))  # SearchResponse or SearchError
    await fetcher.aclose()

asyncio.run(main())

要像 Agent 一样在自己的代码中通过 MCP 调用,请参阅 examples/mcp_client.py。

故障排除
你看到的情况含义处理方法
大多数搜索都出现 captcha你的代理 IP 被 Google 标记了。尝试其他代理池或国家/地区。使用 tools/benchmark.py 测试。
出现 captcha,需等待数小时,且未使用代理你的 IP 遭到质询,将封锁至午夜。等待,或添加代理。
rate_limited所有 IP 的每小时或每日限额均已用完(自己的 IP 或静态代理)。等待 retry_after_s 指定的时间,或添加代理。
proxy: no usable exit in 4 draws连续 4 个 IP 不可用或所属国家/地区错误。检查登录信息中的国家/地区部分,以及代理提供商。
proxy: proxy data limit reachedGSEARCH_DATA_LIMIT_MB 限额已用完。提高限额,或删除状态文件夹中的 proxy_bytes.json,从零开始计量。
parse_driftGoogle 更改了页面布局。更新 gsearch,或参阅贡献指南。
GSEARCH_ENV_FILE=… does not exist设置文件路径错误。使用绝对路径。gsearch 会拒绝启动,而不会改用你自己的 IP。
浏览器窗口打开使用代理时这是预期行为:可见会话较少遭到质询。如果服务器没有屏幕,请安装 Xvfb;浏览器会在虚拟显示器上运行。

浏览器遭到拦截或发生错误时,页面会连同截图一起保存到状态文件夹的 evidence/ 中,错误的 evidence_ref 会指向该文件。

## ❓ 常见问题

我需要代理吗? 不需要。没有代理时,gsearch 会使用你自己的 IP 和一个预热会话(每次搜索约 1.2 s),并限制为每小时 20 次、每天 150 次搜索,以保持你的 IP 状态良好。需要更高用量时,请使用代理。

应该买哪种代理? 选择支持粘性会话(用户名中包含会话 ID)的轮换住宅代理。质量比价格更重要:购买更多流量前,先用小套餐运行 tools/benchmark.py。

一次搜索会使用多少代理流量? 在干净的 IP 上约为 0.6 MB。被标记的 IP 会耗费更多流量,因为每个 IP 都会导致一次无效的浏览器启动。设置 GSEARCH_DATA_LIMIT_MB,就能避免超支。

它能解决 CAPTCHA 吗? 不能。被封锁的 IP 会被丢弃,并尝试使用一个新的 IP。gsearch 不附带 CAPTCHA 求解器,也绝不会伪造 Google 的令牌。

它能在服务器上运行吗? 可以。在没有屏幕的 Linux 上,安装 Xvfb 后,浏览器会在虚拟显示器中运行。

哪些 Agent 可以使用它? 任何 MCP 客户端都可以:Claude Code、Claude Desktop、Cursor 等。你也可以使用 CLI 或从 Python 调用它。

📜 法律与负责任的使用

  • Google 的服务条款限制对 Google 搜索的自动访问。 无论本项目的许可证如何规定,使用此工具访问 Google 都可能违反这些条款。
  • 诉讼风险真实存在,且当前仍然有效。 在 Google v. SerpApi 案(加州北区,立案日期为 2025-12-19)中,Google 主张,通过自动化方式解决其 SearchGuard JavaScript 挑战属于规避 DMCA §1201。gsearch 会在真实浏览器中运行该挑战,不会伪造或修改令牌,但诉状也将自动化浏览器列为目标。请参阅 docs/DESIGN.md(D-004)。
  • 本项目不附带、不集成也不推荐任何 CAPTCHA 求解器。 CAPTCHA 会重置身份,并作为错误报告。
  • 在运行实际搜索前,请针对你的司法管辖区和使用场景寻求法律建议。 解析器(gsearch_parse)只会读取你已有的 HTML。
  • 默认启用限制,且无法通过 CLI 或 MCP 绕过。 请勿使用代理对 Google 发起高频请求。
  • 不得收集个人数据。 请勿对个人进行画像、抓取人物搜索结果或大规模收集个人数据。缓存应设为较短的有效期,也不要重新发布原始结果。
  • 遇到封锁时,请暂停请求。 CAPTCHA 和速率限制会作为错误返回,并包含 retry_after_s。gsearch 绝不会试图绕过挑战。
提示词注入

结果中的每个标题、摘要、URL 和问题都是来自开放网络的不可信第三方文本,其中可能包含针对你的 Agent 的指令。工具描述中对此有明确说明,每个响应都会携带 meta.untrusted_content: true 和 MCP untrusted_content 标志,文本摘要末尾也会附带警告。请始终将结果严格视为数据。

🤝 参与贡献

测试绝不会联系 Google:解析器使用保存的页面进行测试,浏览器则使用本地的模拟 Google 进行测试。欢迎提交拉取请求:选择一个 适合新手的议题,查看 路线图,并从 CONTRIBUTING.md 和 docs/DESIGN.md 开始。

如果 gsearch 帮你节省了时间,点个 ⭐ 就能让更多人发现它。

许可证

MIT。Camoufox(MPL-2.0)作为依赖从 PyPI 安装,不会被 vendored。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。