🚀 🔍 搜索融合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社區精心打造 ❤️