[AI Agent 智能体] 给大家分享一个,我用 Python 重写的一个完全免费的 5 引擎搜索 MCP

[AI Agent 智能体] 给大家分享一个,我用 Python 重写的一个完全免费的 5 引擎搜索 MCP
[AI Agent 智能体] 给大家分享一个,我用 Python 重写的一个完全免费的 5 引擎搜索 MCP

[开源] 各位大佬好,分享一个我最近折腾的项目。

起因是我在用 mrkrsl/web-search-mcp( TypeScript ,⭐ 910 )的时候,发现几个不太够用的地方:没有 Google 和百度、CAPTCHA 直接挂掉、页面提取绑死在搜索流程里……改着改着发现改动量太大了,索性用 Python 从头重写了一遍。

GitHub: https://github.com/duanshiwen/seach-mcp-craft-agent

和原版的核心区别

原版 (TypeScript) 改进版 (Python) 语言 TypeScript + JavaScript Python 3.10+ 搜索引擎 Bing / Brave / DuckDuckGo Google / Bing / 百度 / DuckDuckGo / Yahoo CAPTCHA ❌ 无处理 ✅ 自动检测 + 弹窗等待手动验证 浏览器管理 共享实例 全局队列锁 + per-engine 独立 profile 网页提取 绑在搜索流程里 独立 web_fetch 工具,auto/http/js 三种模式 百度✅ 浏览器 + HTTP 双保险 目标用户 本地 LLM ( LM Studio / LibreChat ) 所有 MCP 客户端

为什么用 Python 重写?

原版的引擎层、浏览器生命周期、CAPTCHA 处理等核心模块都绑在 JS 生态里。我的改动涉及这些底层,与其在原版上打补丁,不如用 Python 重写——httpx + selectolax 替代 Axios ,代码更简洁,后续加新引擎也方便。

两个核心改进

1. CAPTCHA 自动检测 + 手动验证

原版遇到 CAPTCHA 直接挂。我的版本用可见浏览器模式搜索,触发 CAPTCHA 时:

  • 自动检测到验证码页面
  • 用户在同一个浏览器窗口手动完成验证
  • 程序每 2 秒轮询,验证通过后自动提取结果并关闭窗口
  • 默认等待 300 秒超时,超时返回空结果并建议换引擎

每个引擎用独立的浏览器 profile ,不会污染你的日常 Chrome 。

2. 独立的 web_fetch 网页内容提取

原版的页面提取是绑在搜索流程里的,我把拆成了独立工具:

{
  "url": "https://example.com/article",
  "render_mode": "auto",
  "extract_mode": "markdown"
}
  • auto 模式先走轻量 HTTP ,检测到 JS-only 页面自动 fallback 到 Playwright
  • 自动去除广告、导航栏等干扰,提取正文
  • 超时上限 12 分钟,SPA 页面也能搞定

搜索完直接用 web_fetch 抓全文,不用再接别的工具。

为什么不用 SerpAPI / Brave Search API ?

这是做这个项目之前我自己纠结过的问题,说说我的判断:

SerpAPI:免费版每月 100 次搜索,付费版 $50/月起。对个人开发者做个 demo 够了,但跑 Agent 工作流每天可能就要几百次搜索,一个月下来成本不低。

Brave Search API:$5/1000 次请求,每月送 $5 额度(≈ 1000 次免费)。价格比 SerpAPI 友好很多,但问题是——它只能搜 Brave 的索引,结果质量和 Google 差距明显,尤其是中文内容。

Google Custom Search API:免费 100 次/天,超出 $5/1000 次。看似便宜,但 100 次/天对 Agent 来说杯水车薪,而且返回的结果不如直接浏览器搜索丰富。

我的选择:直接用浏览器搜索。

  • 结果最全最实时,和你手动打开浏览器搜的一样
  • 完全免费,没有调用限制
  • 支持 5 个引擎,不是只搜一个索引

代价是需要 Playwright 和真实浏览器,比 API 调用重一些。但对 Agent 工作流来说,搜索质量比速度更重要——你宁可多等 3 秒拿到准确结果,也不要秒回一个过时的摘要。

安装

git clone https://github.com/duanshiwen/seach-mcp-craft-agent.git
cd seach-mcp-craft-agent
uv sync  # 或 pip install -e .
playwright install chromium

MCP 客户端配置:

{
  "mcpServers": {
    "search-engine-mcp": {
      "command": "python",
      "args": ["-m", "src.server"],
      "cwd": "/path/to/seach-mcp-craft-agent"
    }
  }
}

使用示例

{
  "query": "Rust async best practices",
  "engine": "google",
  "max_results": 5
}

引擎选择建议:

  • 快速查询 → DuckDuckGo (轻量 HTTP ,1-3s )
  • 要最全结果 → Google (浏览器模式,3-10s )
  • 中文内容 → Bing 或百度

项目结构

src/
├── server.py            # MCP 服务主入口
├── engines/
│   ├── base.py          # HTTP 引擎基类
│   ├── browser_base.py  # 浏览器引擎基类( CAPTCHA 、队列锁、profile 隔离)
│   ├── google.py
│   ├── bing.py          # 浏览器 + HTTP fallback
│   ├── baidu.py         # 浏览器 + HTTP fallback
│   ├── duckduckgo.py
│   └── yahoo.py
├── fetcher.py           # web_fetch 实现
└── types.py / utils.py

加新引擎只需要继承对应基类、实现几个方法就行,README 里有详细说明。

碎碎念

做这个项目过程中的几个观察:

  1. JS 渲染是 2026 年搜索工具的门槛了。Google 的搜索结果甚至需要 JS 执行完才会出现,纯 HTTP 方案基本不可用
  2. 免费方案反而比付费 API 好用。直接浏览器搜结果最全最实时,API 受限太多
  3. 失败兜底比成功路径更重要。CAPTCHA 、超时、页面变化都是常态,双路渲染+队列管理这些"不性感"的设计才是稳定性的基石
  4. 感谢原作者 mrkrsl 的优秀工作

欢迎各位大佬试用提 PR ,有问题直接回复聊~

来源: v2ex查看原文