使用说明
🔍 Web MCP服务器
具有RAG功能的生产就绪模型上下文协议服务器
Web MCP 通过模型上下文协议公开了用于web搜索和内容提取的可组合工具,以及具有流式答案的强大RAG管道。
使用 克劳德桌面版, 光标,以及任何兼容MCP的客户端。
✨ 特性
| 特性 | 描述 |
|---|---|
| 🔎 MCP工具 | search 对于网络元数据, fetch 用于内容提取 |
| 🧠 RAG 流程 | 搜索→ 获取→ 块→ 嵌入→ 重排序→ 流媒体 |
| ⚡ 流媒体 | 实时令牌流,即时反馈 |
| 🔒 安全 | 速率限制、SSRF保护、可选身份验证 |
| 📊 分析 | 内置14天使用情况仪表板 |
| 🐳 码头工人 | 带健康检查的生产就绪容器 |
| 🧪 已测试 | 带CI/CD的全面测试套件 |
快速开始
选项1:Docker(推荐)
docker run -p 7860:7860 -e SERPER_API_KEY=your-key ghcr.io/your-username/web-mcp
选项2:本地安装
# Clone the repository
git clone https://github.com/your-username/web-mcp.git
cd web-mcp
# Install dependencies
pip install -r requirements.txt
# Set your API key and run
export SERPER_API_KEY="your-serper-key"
python app.py
选项3:拥抱面部空间
📖 API 参考
MCP工具
search --Web搜索元数据
# Returns metadata only (no content scraping)
{
"query": "OpenAI GPT-5",
"search_type": "news", # or "search"
"num_results": 5
}
fetch --内容提取
# Extracts readable text from any URL
{
"url": "https://example.com/article",
"timeout": 20
}
ask_rag --RAG管道(流媒体)
# Full pipeline with streaming answer
{
"query": "What is the speed of light?"
}
健康检查
curl http://localhost:7860/api/health
{
"status": "healthy",
"timestamp": "2024-01-15T12:00:00Z",
"components": {
"serper_api_key": "configured",
"rag_pipeline": "loaded"
}
}
🏗️ 建筑
graph TD;
A[User Query] --> B{Serper Search};
B --> C[Concurrent Fetch top K pages];
C --> D[Sentence-aware Chunking - NLTK];
D --> E[Embed via all-MiniLM-L6-v2];
E --> F[(FAISS Index - TTL Cached)];
F --> G[Retrieve top N chunks];
G --> H[Rerank via ms-marco Cross-Encoder];
H --> I[Stream answer via Qwen2.5-0.5B-Instruct];
I --> J[Final Answer + Sources];
设计决策
| 组件 | 选择 | 基本原理 |
|---|---|---|
| 分块 | 句子感知(NLTK) | 保留语义边界 |
| 嵌入 | 全MiniLM-L6-v2 | 快速、准确、384昏暗 |
| 索引 | FAISS+TTL缓存 | O(1)查找,不重新嵌入 |
| 重排序器 | 交叉编码器 | 相关性提高10倍 |
| 发电机 | Qwen2.5-0.5B | 在CPU上运行,对免费层友好 |
| 重试 | 指数级回退 | 对瞬态故障具有弹性 |
⚙️ 配置
通过环境变量进行的所有设置:
| 变量 | 默认值 | 描述 |
|---|---|---|
SERPER_API_KEY |
必需的 | Serper.dev API密钥 |
API_AUTH_TOKEN |
残疾的 | API身份验证的承载令牌 |
EMBED_MODEL |
sentence-transformers/all-MiniLM-L6-v2 |
嵌入模型 |
RERANKER_MODEL |
cross-encoder/ms-marco-MiniLM-L-6-v2 |
Reranker模型 |
GEN_MODEL |
Qwen/Qwen2.5-0.5B-Instruct |
发电机型号 |
CHUNK_SIZE |
200 |
每个块的最大单词数 |
RAG_TOP_K |
6 |
来自FAISS的块状物 |
RERANK_TOP_K |
3 |
重新评级后的区块 |
FAISS_CACHE_TTL |
300 |
索引缓存秒数 |
🔐 Authentication
当 API_AUTH_TOKEN 设置,则所有API终结点都需要:
Authorization: Bearer <your-token>
Gradio UI请求是豁免的。
📊 基准测试
奔跑 python benchmark.py:
| 度量 | 值 |
|---|---|
| 检索延迟(失败) | ~12 ms/查询 |
| 检索吞吐量 | ~80个查询/秒 |
| NDCG@10(马可女士) | 0.65-0.85 |
| E2E延迟(搜索→ 答案) | ~3.5秒 |
🧪 测试
# Run all tests
pytest
# With coverage
pytest --cov=. --cov-report=html
# Run specific test file
pytest tests/test_rag.py -v
🐳 码头工人
构建
docker build -t web-mcp .
跑
docker run -d \
--name web-mcp \
-p 7860:7860 \
-e SERPER_API_KEY=your-key \
-e API_AUTH_TOKEN=optional-secret \
-v web-mcp-data:/app/data \
web-mcp
Docker Compose
version: '3.8'
services:
web-mcp:
build: .
ports:
- "7860:7860"
environment:
- SERPER_API_KEY=${SERPER_API_KEY}
volumes:
- web-mcp-data:/app/data
restart: unless-stopped
volumes:
web-mcp-data:
🤝 贡献
欢迎投稿!请参阅 贡献.md 作为指导方针。
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
🐛 故障排除
| 错误 | 解决方案 |
|---|---|
SERPER_API_KEY is not set |
导出密钥: export SERPER_API_KEY=xxx |
Rate limit exceeded |
降低请求频率或增加限制 |
Failed to load ML models |
快跑 pip install -r requirements.txt |
Unauthorized |
检查你的 API_AUTH_TOKEN 或禁用身份验证 |
📜 许可证
MIT许可证-请参阅 许可证 了解详情。
内置于❤️ 对于MCP生态系统
