堆栈交换MCP服务器
模型上下文协议(MCP)服务器,用于搜索堆栈溢出并检索问题及其最佳答案。在Python和TypeScript实现中都可用。
概述
这些MCP服务器提供智能堆栈溢出搜索功能,并具有自动答案检索功能。他们实施了一种复杂的多遍搜索策略,可以找到最相关的问题,并返回他们接受或投票最多的答案。
主要特点
- 智能搜索策略:尝试不同方法以找到最佳结果的多遍搜索算法
- 答案检索:自动获取每个问题的已接受或投票最多的答案
- 跨站点支持:需要时回退到ServerFault和SuperUser(Python版本)
- API关键支持:用于增加配额的可选堆栈Exchange API密钥
- 灵活过滤:支持标记、日期范围和结果限制
实现
Python版本(生产就绪)
位于 mcp-stackexchage-python/,这是具有高级功能的主要实现:
特征:
- 多通道搜索策略(标题搜索、关键字搜索、跨站点回退)
- 基于查询相关性和帖子得分的智能重新排名
- 支持基本标签过滤
- 自动短语检测,以获得更好的搜索结果
- 跨站点搜索(堆栈溢出、服务器故障、超级用户)
要求:
- Python 3.12+
- 依赖关系:
mcp[cli]>=1.12.4,httpx
安装:
cd mcp-stackexchage-python
pip install -e .
# or with uv:
uv pip install -e .TypeScript版本(实验版)
位于 mcp-stackexchage-ts/,这是TypeScript环境的一个更简单的实现:
特征:
- 带答案检索的基本堆栈溢出搜索
- 可选类似问题搜索
- 基于环境的配置
- Zod模式验证
要求:
- Node.js
- 依赖关系:
@modelcontextprotocol/sdk,tsx,zod
安装:
cd mcp-stackexchage-ts
npm install备注TypeScript版本尚处于实验阶段,尚未经过全面测试。它提供了基本功能,但缺少Python版本的一些高级功能。
配置
环境变量
两台服务器都支持以下环境变量:
STACKEXCHANGE_KEY:您的Stack Exchange API密钥(可选,将API配额从每天300个请求增加到10000个请求)
TypeScript版本还支持:
debug:启用调试日志记录prefer_accepted:首选已接受的答案(默认值:true)use_similar:启用类似问题搜索(默认值:true)max_results:默认最大结果(默认值:5)max_age_days:默认最大年龄(以天为单位)(默认值:1825)
用法
可用工具
so.search_and_answers
搜索Stack Overflow并检索问题及其最佳答案。
参数:
query(字符串,必填):搜索查询或问题描述tags(数组,可选):要过滤的堆栈溢出标签(最多5个)max_results(整数,可选):最大结果数(1-10,默认值:5)prefer_accepted(布尔值,可选):首选接受的答案(默认值:true)max_age_days(整数,可选):问题的最大年龄(以天为单位)(默认值:1825)use_similar(布尔值,可选):包含类似问题搜索(仅限TypeScript)
ping (仅限Python)
返回pong消息的简单健康检查工具。
运行服务器
Python服务器
cd mcp-stackexchage-python
python server.pyTypeScript服务器
cd mcp-stackexchage-ts
tsx stackoverflow-mcp.ts与MCP客户端集成
这些服务器可以与任何兼容MCP的客户端集成。配置您的客户端以通过stdio传输连接到服务器。
客户端配置示例:
{
"mcpServers": {
"stackoverflow": {
"command": "python",
"args": ["/path/to/mcp-stackexchage-python/server.py"],
"env": {
"STACKEXCHANGE_KEY": "your-api-key-here"
}
}
}
}搜索策略(Python版本)
Python实现使用了一种复杂的多遍搜索策略:
- 通过A:Stack Overflow上只有标题搜索,有0-2个基本标签,按投票排序
- 通行证B:仅在Stack Overflow上搜索标题,不带标签(如果Pass A产生的结果不足)
- 通过C:在Stack Overflow上使用引用短语进行关键字搜索,按相关性排序
- 通过D:将搜索扩展到ServerFault和SuperUser(如果结果仍然不足)
每次通过后,结果都会根据以下因素重新排名:
- 查询令牌在标题和标签中匹配
- 帖子评分
- 存在已接受的答案
API费率限制
如果没有API密钥:
- 每天300个请求
- 在您的IP的所有用户之间共享
使用API密钥:
- 每天10000个请求
- 按键限制
获取您的免费API密钥:https://stackapps.com/apps/oauth/register
许可证
国际协调委员会
贡献
欢迎投稿!请随时提交问题或拉取请求。
全部
- \[\]为这两种实现添加全面的测试
- \[\]使用多遍搜索策略增强TypeScript版本
- \[\]添加对更多Stack Exchange站点的支持
- \[\]实现缓存以减少API调用
- \[\]添加适当的错误处理和重试逻辑
