
基于MCP协议实现的搜索服务,支持多种搜索引擎,并与Claude Desktop和Cursor无缝集成。
使用Python开发,支持异步处理和高并发请求,目前支持三种搜索引擎选项:
Brave Search:专业的海外搜索接口服务提供商
Metaso Search:Metaso AI搜索的反向实现接口,非官方接口
Bocha Search:国内市场份额最高的搜索API产品
更多关于MCP的知识,请参考AI百科全书(一篇文章了解什么是MCP(大型模型上下文)?它有什么用途?如何使用?)
作者:凌风(微信:fengin)
网址:https://aibook.ren(AI百科全书)

<mark>运行时只能有一个搜索引擎生效</mark>为了方便大家选择在线配置,我进行了如下粗略对比:
| 搜索引擎 | 国内/国际 | 是否需要魔法 | 是否自带摘要 | 质量 | 免费 | 官方 | 速度 | 注册门槛 |
|---|---|---|---|---|---|---|---|---|
| Brave | 国际 | 是 | 否 | 高 | 是(有限制) | 是 | 中等 | 很高 |
| Metaso | 国内 | 否 | 是 | 中等 | 是 | 否 | 较慢(AI摘要) | 低 |
| Bocha | 国内 | 否 | 否 | 高 | 否 | 是 | 极快 | 低 |
# 安装Playwright框架
pip install playwright>=1.35.0
# 安装浏览器驱动,仅安装chromium
playwright install chromium
git clone https://github.com/fengin/search-server.git
打开项目根目录,修改代码 'server.py' 并选择启用类型:
# 搜索引擎配置
SEARCH_ENGINE = os.getenv("SEARCH_ENGINE", "bocha")
值对应于brave、meta so、bocha,也可以通过环境变量SEARCH-ENGINE进行配置
以下三个模块目录中都有对应的config.py文件:
src\search\proxy\brave
src\search\proxy\metaso
src\search\proxy\bocha
根据您的选择,修改相应的config.py文件配置
# 检查API密钥
BRAVE_API_KEY = os.getenv("BRAVE_API_KEY")
if not BRAVE_API_KEY:
BRAVE_API_KEY = "你申请的 brave_api_key"
如果在Claude Desktop中使用,可以通过配置环境变量传递参数,但cursor目前不支持环境变量,只能在此文件中修改
API KEY申请地址:Brave Search - API
<mark>申请门槛相对较高</mark>要求:
# 认证信息
METASO_UID = os.getenv("METASO_UID")
METASO_SID = os.getenv("METASO_SID")
if not METASO_UID or not METASO_SID:
METASO_UID = "你获取的 metaso_uid"
METASO_SID = "你获取的 metaso_sid"
同样,可以在MCP Servers中通过配置环境变量在Claude Desktop中使用;
UID和SID的获取方法:
进入Secret Tower AI搜索并登录账户(<mark>建议登录账户,否则可能会遇到奇怪的限制</mark>),然后F12打开开发者工具,前往Application>Cookies找到uid和sid的值。

多账号访问
<mark>注意:目前怀疑Secret Tower对IP地址的总搜索次数有限制,建议添加IP轮换</mark>
您可以提供多个账号的UID ID,并用逗号分隔,修改相关使用代码,我会从每次服务请求中选择一个,以后再考虑。
BOCHA_API_KEY = os.getenv("BOCHA_API_KEY", "")
if not BOCHA_API_KEY:
BOCHA_API_KEY="你申请的 bocha_api_key"
注册申请地址:https://open.bochaai.com/
调用按次数计费,价格不菲,但搜索质量确实很好。这里有一些免费试用码,如有需要,请联系我微信;

其中,“D: \ code \ search server”指的是您拉取下来的源代码目录
查找配置文件
方法1
# widnows
C:\Users\{用户}\AppData\Roaming\Claude\claude_desktop_config.json
# mac/linux 应该在用户家目录下找
方法2
打开Claude Desktop应用查看: Claude Desktop—> 菜单—> 设置—> 开发者—> 编辑配置
编辑并添加以下MCP服务器:
{
"mcpServers": {
"search": {
"command": "uv",
"args": [
"--directory",
"D:\\code\\search-server",
"run",
"search"
],
"env": {
"BRAVE_API_KEY": "你申请的API KEY"
}
}
}
}
环境变量取决于您的需求。如果代码有变动,则无需配置它们
<mark>cursor会弹出一个黑窗口,不要关闭,不要关闭</mark>这是已经启动的MCP Server进程,目前无法解决不弹出的问题。
配置Claude Desktop后,需要重启应用程序才能生效。
配置cursor后,很多人遇到配置MCP Servers后状态仍显示红点,工具未找到的情况,使用时不会调用是因为配置不正确。
最常见的场景是:
环境未准备好,包括所需的软件和版本要求,请参阅环境部分以获取详细信息
准备的环境不正确。例如,Windows有cmd终端、PowerShell终端,甚至可能安装了Gitbash终端。您可以打开cmd终端(cursor通常是这个)检查环境并直接运行UV --directory D: \ code \ search server run search
配置路径/命令不正确。您可以打开终端并运行命令查看:UV --directory D: \ code \ search server run search
关闭黑窗口并重新启动cursor以重新打开
cursor版本过旧
运行时出现以下错误,原因是Chromium未安装。解决方案见环境准备第1.1章
错误:搜索执行错误:BrowserType.launch persistent context:Executable doesn't exist atC:\Users\fengi\AppDatalLocal\ms-playwright\chromium headless shell-1155\chrome-winlheadless shell.exe
<mark>只需在您的Claude Desktop或cursor中正常工作,当需要时它会自动调用搜索接口来检索内容</mark>例如,如果您在网上组织2025年的技术发展方向作为软件内容,它会调用搜索工具来获取网络信息:
需要注意的是,在cursor中必须开启composer的代理模式才能有效工作;调用工具时也需要点击执行;
search/
├── __init__.py
├── server.py # MCP服务器实现
└── proxy/ # 搜索引擎代理
├── brave/ # Brave搜索模块
│ ├── __init__.py
│ ├── client.py # 核心客户端实现
│ ├── config.py # 配置和速率限制
│ └── exceptions.py # 异常定义
├── metaso/ # Metaso搜索模块
│ ├── __init__.
│ ├── client.py # 核心客户端实现
│ ├── config.py # 配置和速率限制
│ └── exceptions.py # 异常定义
├── bocha/ # 博查搜索模块
│ ├── __init__.py
│ ├── client.py # 核心客户端实现
│ ├── config.py # 配置和速率限制
│ └── exceptions.py # 异常定义
├── brave_search.py # Brave MCP工具实现
├── metaso_search.py # Metaso MCP工具实现
└── bocha_search.py # 博查搜索MCP工具实现
search
query (字符串):搜索关键词count (数字,可选):每页结果数量(最大20)offset (数字,可选):页偏移量(最大9)location_search
query (字符串):位置搜索关键词count (数字,可选):结果数量(最大20)search
query (字符串):搜索关键词mode (字符串,可选):搜索模式
concise简洁模式,简明扼要地回答detail深入模式,提供详细全面的回答(默认)research研究模式,深入分析回答(<mark>当前不支持,反向工程尚未成功</mark>)scholar_search
query (字符串):学术搜索关键词mode (字符串,可选):搜索模式,如上所述query (字符串):搜索关键词count (数字,可选):结果数量(1-10,默认10)page (数字,可选):页数,从1开始freshness (字符串,可选):时间范围
noLimit不限时间(默认)oneDay一天内oneWeek一周内oneMonth一个月内oneYear一年内summary (布尔值,可选):显示详细摘要,默认false