🚀 🔍 搜索融合MCP服务器
搜索融合MCP服务器是一个高可用性的多引擎搜索聚合服务器,提供智能故障转移、统一API和针对大语言模型(LLM)优化的内容处理功能。它集成了多个搜索引擎,具备基于优先级的智能路由和自动故障转移机制。
🔔 v3.0.0版本新特性:
本次版本进行了重大的并发性能升级!增强了多线程支持,具备线程安全操作、智能连接池和基于信号量的请求限制功能。现在支持50个以上的并发搜索,且不会出现竞态条件或数据损坏的问题!
🚀 快速开始
安装
选项1:从PyPI安装(推荐)
pip install search-fusion-mcp
选项2:从源码安装
git clone https://github.com/sailaoda/search-fusion-mcp.git
cd search-fusion-mcp
pip install -e .
✨ 主要特性
🔄 多引擎集成
- 谷歌搜索 - 使用API密钥可获得卓越性能
- Serper搜索 - 具备高级功能的谷歌搜索替代方案
- Jina AI搜索 - 由人工智能驱动,具备智能内容处理能力
- DuckDuckGo - 免费搜索,无需API密钥
- Exa搜索 - 人工智能驱动的语义搜索
- 必应搜索 - 微软搜索API
- 百度搜索 - 中文搜索引擎
🚀 高级特性
- 智能故障转移 - 在引擎故障或达到速率限制时自动切换引擎
- 基于优先级的路由 - 根据可用性和性能智能选择引擎
- 统一响应格式 - 所有引擎的响应均采用一致的JSON结构
- 速率限制保护 - 内置冷却机制
- 🔄 高并发支持 - 通过连接池实现线程安全操作
- ⚡ 性能优化 - 通过基于信号量的并发控制实现异步操作
- 针对LLM优化的内容 - 支持分页的高级网页内容抓取
- 维基百科集成 - 专用的维基百科搜索工具
- 时光机 - 历史网页存档搜索
- 环境变量配置 - 纯MCP配置,无需配置文件
- 🌐 增强的代理自动检测 - 零配置的智能代理检测
📊 监控与分析
- 实时监控引擎状态
- 跟踪成功率
- 错误处理与恢复
- 性能指标监控
⚡ 并发与性能
- 线程安全操作 - 所有引擎统计信息和状态更新均受异步锁保护
- 连接池 - 共享HTTP客户端,可配置连接限制(最大100个连接)
- 信号量控制 - 并发请求限制(最多30个同时搜索)
- 超时保护 - 60秒搜索超时,防止请求堆积
- 资源管理 - 通过自动清理连接实现高效内存使用
- 竞态条件预防 - 在搜索管理器初始化时采用双重检查锁定
🏗️ 架构
搜索融合MCP服务器
├── 🔧 配置管理器 # 处理MCP环境变量
├── 🔍 搜索管理器 # 多引擎编排,具备并发控制
├── ⚡ 并发层 # 线程安全操作与性能优化
│ ├── 异步锁保护 # 线程安全的状态更新
│ ├── HTTP连接池 # 具有连接限制的共享客户端
│ ├── 信号量控制 # 并发请求限制(最多30个)
│ └── 超时管理 # 60秒超时保护
├── 🚀 引擎实现 # 各个搜索引擎
│ ├── 谷歌搜索 # 谷歌自定义搜索
│ ├── Serper搜索 # Serper API
│ ├── Jina搜索 # Jina AI搜索
│ ├── DuckDuckGo搜索 # DuckDuckGo
│ ├── Exa搜索 # Exa AI
│ ├── 必应搜索 # 必应API
│ └── 百度搜索 # 百度API
├── 🛠️ 高级抓取器 # 多方法网页抓取
└── 📡 MCP服务器 # 集成FastMCP
🌐 增强的代理自动检测(v2.0新特性!)
搜索融合现在具备受concurrent-browser-mcp启发的智能代理自动检测功能,提供零配置的无缝代理支持!
✨ 三层检测策略
- 环境变量 - 优先级最高,检查
HTTP_PROXY、HTTPS_PROXY、ALL_PROXY
- 端口扫描 - 使用套接字连接测试扫描常见代理端口
- 系统代理 - 检测操作系统级别的代理设置(支持macOS)
🔍 支持的代理端口(按优先级排序)
- 7890 - Clash默认端口
- 1087 - V2Ray常用端口
- 8080 - 通用HTTP代理端口
- 3128 - Squid代理默认端口
- 8888 - 其他代理软件端口
- 10809 - V2Ray SOCKS端口
- 20171 - 额外的代理端口
🚀 零配置使用方法
直接运行 - 代理将自动检测:
search-fusion-mcp
手动覆盖(如有需要):
env HTTP_PROXY="http://your-proxy:port" search-fusion-mcp
📊 检测过程
🔍 检查环境变量...
🔍 扫描代理端口:[7890, 1087, 8080, ...]
✅ 检测到本地代理端口:7890
🌐 自动检测到的代理:http://127.0.0.1:7890
🆚 与concurrent-browser-mcp的比较
| 特性 |
Search-Fusion |
concurrent-browser-mcp |
| 检测方法 |
✅ 环境变量 → 端口扫描 → 系统代理 |
✅ 相同策略 |
| 端口列表 |
✅ 7个常见端口 |
✅ 7个常见端口 |
| 连接测试 |
✅ 套接字测试 |
✅ 套接字测试 |
| 超时时间 |
✅ 3秒 |
✅ 3秒 |
| macOS支持 |
✅ networksetup |
✅ networksetup |
| 语言 |
Python |
TypeScript |
MCP集成
环境变量配置
搜索融合使用纯MCP环境变量配置,无需配置文件。
MCP客户端配置(从PyPI安装):
{
"mcp": {
"mcpServers": {
"search-fusion": {
"command": "search-fusion-mcp",
"env": {
"GOOGLE_API_KEY": "your_google_api_key",
"GOOGLE_CSE_ID": "your_google_cse_id",
"SERPER_API_KEY": "your_serper_api_key",
"JINA_API_KEY": "your_jina_api_key",
"EXA_API_KEY": "your_exa_api_key",
"BING_API_KEY": "your_bing_api_key",
"BAIDU_API_KEY": "your_baidu_api_key",
"BAIDU_SECRET_KEY": "your_baidu_secret_key"
}
}
}
}
}
MCP客户端配置(从源码安装):
{
"mcp": {
"mcpServers": {
"search-fusion": {
"command": "python",
"args": ["-m", "src.main"],
"cwd": "/path/to/your/search-fusion-mcp",
"env": {
"GOOGLE_API_KEY": "your_google_api_key",
"GOOGLE_CSE_ID": "your_google_cse_id",
"SERPER_API_KEY": "your_serper_api_key",
"JINA_API_KEY": "your_jina_api_key",
"EXA_API_KEY": "your_exa_api_key",
"BING_API_KEY": "your_bing_api_key",
"BAIDU_API_KEY": "your_baidu_api_key",
"BAIDU_SECRET_KEY": "your_baidu_secret_key"
}
}
}
}
}
支持的环境变量
| 搜索引擎 |
环境变量 |
是否必需 |
描述 |
获取API密钥 |
| 谷歌 |
GOOGLE_API_KEY
GOOGLE_CSE_ID |
两者都需要 |
谷歌自定义搜索API |
获取API密钥 |
| Serper |
SERPER_API_KEY |
需要API密钥 |
Serper谷歌搜索API |
获取API密钥 |
| Jina AI |
JINA_API_KEY |
需要API密钥 |
Jina AI搜索API |
获取API密钥 |
| 必应 |
BING_API_KEY |
需要API密钥 |
微软必应搜索API |
获取API密钥 |
| 百度 |
BAIDU_API_KEY
BAIDU_SECRET_KEY |
两者都需要 |
百度搜索API |
获取API密钥 |
| Exa |
EXA_API_KEY |
需要API密钥 |
Exa AI搜索API |
获取API密钥 |
| DuckDuckGo |
无需 |
- |
免费搜索,无需API密钥 |
- |
替代变量名:
GOOGLE_SEARCH_API_KEY
GOOGLE_SEARCH_CSE_ID
SERPER_SEARCH_API_KEY
引擎优先级
搜索引擎会自动进行优先级排序:
- 谷歌搜索(优先级1) - 使用API密钥可获得卓越性能
- Serper搜索(优先级1) - 具备高级功能的谷歌搜索替代方案
- Jina AI搜索(优先级1.5) - 由人工智能驱动,使用可选API密钥可获得高级功能
- DuckDuckGo(优先级2) - 免费,无需API密钥
- Exa搜索(优先级2) - 使用API密钥的人工智能驱动搜索
- 必应搜索(优先级3) - 微软搜索API
- 百度搜索(优先级3) - 中文搜索引擎
🛠️ MCP工具
1. search
执行网页搜索,具备智能引擎选择和故障转移功能。
参数:
query(必需):搜索查询词
num_results(默认值:10):返回的结果数量
engine(默认值:"auto"):引擎偏好
"auto":自动选择引擎(推荐)
"google":优先使用谷歌搜索
"serper":优先使用Serper搜索
"jina":优先使用Jina AI搜索
"duckduckgo":优先使用DuckDuckGo
"exa":优先使用Exa搜索
"bing":优先使用必应搜索
"baidu":优先使用百度搜索
2. fetch_url
抓取并处理网页内容,具备智能分页和多方法回退功能。
参数:
url(必需):要抓取的网页URL
use_jina(默认值:true):是否优先使用Jina阅读器获取针对LLM优化的内容
with_image_alt(默认值:false):是否为图像生成替代文本
max_length(默认值:50000):每页的最大内容长度(如果超过则自动分页)
page_number(默认值:1):从先前抓取的内容中检索特定页面
特性:
- 智能多方法回退:尝试Jina阅读器 → Serper抓取 → 直接HTTP请求
- 自动分页:将大内容拆分为可管理的页面
- 并发安全缓存:唯一的页面ID可防止在高并发场景下发生冲突
- 针对LLM优化的内容:为人工智能处理优化的干净Markdown格式
3. get_available_engines
获取所有搜索引擎的当前状态和可用性。
4. search_wikipedia
搜索维基百科文章,查找实体、人物、地点、概念等。
参数:
entity(必需):要搜索的实体
first_sentences(默认值:10):返回的句子数量(0表示返回完整内容)
5. search_archived_webpage
使用时光机搜索网站的存档版本。
参数:
url(必需):要搜索的网站URL
year(可选):目标年份
month(可选):目标月份
day(可选):目标日期
💻 使用示例
基础用法
result = await search("2024年人工智能趋势")
result = await search("机器学习", engine="google")
高级网页抓取
result = await fetch_url("https://example.com/long-article")
if result.get("is_paginated"):
page_2 = await get_page(result["page_id"], 2)
维基百科搜索
result = await search_wikipedia("Python编程语言")
result = await search_wikipedia("量子计算", first_sentences=0)
🧪 开发
开发环境设置
git clone https://github.com/sailaoda/search-fusion-mcp.git
cd search-fusion-mcp
pip install -r requirements.txt
pip install -e .
🔧 配置指南
如需详细的配置说明,请参阅 MCP_CONFIG_GUIDE.md。
📊 性能
- 延迟 - 通过缓存实现亚秒级响应时间
- 可用性 - 通过智能故障转移实现99.9%的正常运行时间
- 吞吐量 - 高效处理并发请求
- 可扩展性 - 高效的资源利用和并发处理
📈 并发基准测试
测试性能(v3.0.0+):
- ✅ 50个以上并发搜索 - 无竞态条件或数据损坏
- ✅ 线程安全统计 - 准确的请求计数和错误跟踪
- ⚡ 连接池 - 高效的HTTP资源管理
- 🛡️ 超时保护 - 每个请求60秒超时,防止系统过载
- 📊 实时监控 - 在高负载期间实时监控引擎状态
推荐限制:
- 并发搜索:10个(可通过信号量配置)
- 连接池:最大100个连接,20个保持活动连接
- 请求超时:60秒
- 内存使用:约50MB基线 + 每个并发请求约2MB
🤝 贡献
- 分叉仓库
- 创建功能分支
- 进行更改
- 为新功能添加测试
- 提交拉取请求
📄 许可证
本项目采用MIT许可证 - 详情请参阅 LICENSE 文件。
🚨 速率限制与最佳实践
- 谷歌搜索 - 免费套餐每天100次查询
- Serper API - 根据计划而异
- Jina AI - 根据订阅情况设置速率限制
- DuckDuckGo - 无官方限制,但请合理使用
- 其他引擎 - 请查看各自的API文档
请始终实施适当的延迟并遵守速率限制,以确保可持续使用。
📞 支持
为MCP社区精心打造 ❤️