模型上下文协议服务器

一个生产就绪的模型上下文协议服务器,具有RAG功能,提供可组合的Web搜索和内容提取工具。

  • by ixchio
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 ixchio/web-mcp

使用说明

🔍 Web MCP服务器

具有RAG功能的生产就绪模型上下文协议服务器

特性 • 快速开始 • API 参考 • 建筑 • 贡献


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

🎉 打开 http://localhost:7860

选项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 作为指导方针。

  1. 分叉存储库
  2. 创建要素分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

🐛 故障排除

错误 解决方案
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生态系统

⬆ 返回顶部