关于 gsearch
gsearch 是供 AI Agent 使用的可自托管 MCP 服务,将 Google 搜索结果以带类型的 JSON 返回,包含解析后的真实网址、AI Overview 和 People also ask。它通过真实 Firefox 浏览器访问页面,并支持配置代理。
主要功能
- 01以带类型的 JSON 返回 Google 结果
- 02解析结果的真实目标网址
- 03提供 AI Overview 和相关问题
- 04页面读取与状态查询工具
- 05支持代理及流量上限
适用场景
- 01为 Agent 获取 Google 搜索结果
- 02读取公开网页及其中的链接
- 03检查代理用量与拦截状态
MCP 相关
向 MCP 客户端提供 google_search、fetch_page 和 google_search_status。搜索结果含带类型的 JSON;遭拦截时会返回带重试信息的错误。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx gsearch-agentGSEARCH_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+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
快速开始 · 对比情况 · 你能获得什么 · 工作原理 · 代理 · 性能 · 常见问题
为你的 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)。

在家庭 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 | SerpApi、Bright Data | Brave、Tavily、Exa | DuckDuckGo、SearXNG MCP | Playwright + Chromium Google MCP | |
|---|---|---|---|---|---|
| Google 自有搜索结果 | ✅ | ✅ | ❌ 使用自有索引 | ❌ / 取决于实例 | ✅ |
| API 密钥或账号 | 无需 | 必需 | 必需 | 无需 | 无需 |
| 费用 | 免费(+ 你的代理,可选) | 按查询计费 | 按用量计费的套餐 | 免费 | 免费 |
| 在你的设备上运行 | ✅ | ❌ 托管 | ❌ 托管 | ✅ | ✅ |
| AI Overview、People also ask | ✅ | ✅(SerpApi) | ❌ | ❌ | 视情况而定 |
| 将 Google 的重定向链接解析为真实 URL | ✅ | ✅ | 不适用 | 不适用 | 视情况而定 |
| 将拦截报告为错误并提供重试时间 | ✅ | 不适用 | 不适用 | 视情况而定 | 视情况而定 |
| 服务条款风险由你承担 | 是(法律) | 由服务提供商承担 | 否 | 低 | 是 |
“视情况而定”:我们未测试这些项目。我们唯一的 Chromium 测量记录是 F-0001:在提供 gsearch 服务的 IP 上,Playwright Chrome 有 2 次中的 2 次遇到了 CAPTCHA。 运行实时搜索前请阅读法律。
测量于 2026 年 10 月: F-0014、 F-0006、 F-0011、 F-0012、 F-0001; 干净代理 IP 上耗时 14 秒、用量 0.6 MB:F-0015。 被标记的代理池速度较慢:参见性能。
✨ 为什么选择 gsearch
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 能获取的内容
保存的结果页中的实际输出(离线演示模式下,url 保持为 null;实时搜索会填入该字段):
遇到拦截时,返回的绝不会是空列表,而是会说明发生了什么以及需要等待多久的错误:
各字段说明
| 字段 | 内容 |
|---|---|
organic[].url | 每条结果的实际目标地址;在同一会话中解析 Google 的 /goto 重定向得出。 |
organic[].title、snippet、date、domain、display_url | 结果中显示的文本。link 保留 Google 提供的原始链接。 |
organic[].sitelinks、source_meta | 结果的子链接,以及 Google 在论坛和视频结果中显示的 URL 替代内容(2 years ago)。 |
ai_overview | Google 显示 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。
🔍 工作原理
- 像真人一样操作。 使用可见窗口,因为通过代理 IP 访问时,无头会话更容易受到质疑 (F-0015)。查询会输入到地址栏中。 WebRTC 已关闭,因此你的 IP 不会绕过代理泄露。
- 绝不伪造。 gsearch 不会生成或篡改 Google 的令牌:浏览器会原样运行页面。
- 低成本解析链接。 在相同 IP 上使用相同 Cookie 解析链接,TLS 指纹与浏览器匹配 (F-0011, F-0013)。
- 可在服务端运行。 在没有屏幕的 Linux 机器上,浏览器会自动使用虚拟显示器
(
sudo apt install xvfb)。
🌍 代理
# 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_search | query,以及可选的 page(1–50)、lang(en、fr 等)、country(us 等)、time_range(h、d、w、m、y)、site(域名) | 上述 JSON 及简短的文本摘要;若遭到拦截,则返回错误结果。 |
fetch_page | url(公开的 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 reached | GSEARCH_DATA_LIMIT_MB 限额已用完。 | 提高限额,或删除状态文件夹中的 proxy_bytes.json,从零开始计量。 |
parse_drift | Google 更改了页面布局。 | 更新 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。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。