mcpField
S
stackexchange-mcp

stackexchange-mcp

本地服务
github.com/YashLimbani开发工具02 天前更新

关于 stackexchange-mcp

stackexchange-mcp 是面向 AI 助手的只读 MCP 服务,可搜索 Stack Overflow 及其他 Stack Exchange 站点,并读取问答,为调试和研究提供依据。

主要功能

  1. 01按主题、站点和标签搜索问题
  2. 02根据错误信息查找讨论
  3. 03读取问题及高质量答案
  4. 04查询标签和技术概览
  5. 05查看 API 配额与限流状态

适用场景

  1. 01为编程错误查找高票答案
  2. 02比较 Stack Exchange 讨论中的方案
  3. 03查找技术对应的准确标签
  4. 04根据站点标签整理入门概览

MCP 相关

向 MCP 客户端提供搜索、问答、标签、配额、资源和提示词功能。返回内容采用精简 Markdown,并附带归属信息。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"yashlimbani-stackexchange": {
"command": "uvx",
"args": [
"stackexchange-mcp"
],
"env": {
"YOUR_API_KEY": "<YOUR_API_KEY>"
}
}
}
}
启动命令uvx stackexchange-mcp
需要配置的环境变量
YOUR_API_KEY密钥Your API key for the service

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypistackexchange-mcp0.1.2

工具

6

收录的工具列表 · 更新于 1 天前

参数类型必填说明
sitestring否Stack Exchange 站点标识,例如 'stackoverflow' 或 'serverfault'。
sortenum否结果排序方式。'votes' 会优先显示评价较高的问题。relevance | votes | activity | creation
tagsany否用于限制结果的可选标签,例如 ['python', 'asyncio'](最多 5 个)。
limitinteger否要返回的结果数。
querystring是要搜索的关键词,例如 'asyncio sleep vs time.sleep'。
accepted_onlyboolean否仅返回有已采纳回答的问题。

详细介绍

stackexchange-mcp

一个 MCP 服务,可让你的 AI 助手搜索 Stack Overflow 和其他 Stack Exchange 站点,阅读问题及其最佳答案,并依据真实的投票答案提供调试帮助,而不是凭空猜测。

  • 只读: 不会发布内容、投票或编辑任何内容。
  • 适合模型的输出: 提供简短摘要,使用 Markdown 而非 HTML,保留代码块,长篇内容会截断并附上链接。
  • 遵循 API 限制: 支持可选 API 密钥、退避处理、请求间隔、重试、缓存和配额跟踪。
  • 错误说明清晰: 每次失败都会告知模型发生了什么,以及接下来可以尝试什么。

与 Stack Exchange, Inc. 无关。API 返回的内容依据 CC BY-SA(视具体帖子而定,为 3.0 或 4.0)许可。服务会返回作者、链接和许可证信息,方便助手注明出处。

提供的功能

[project] name = "mcp-server" version = "0.1.0" requires-python = ">=3.12" dependencies = [ "httpx>=0.28.1", "mcp[cli]>=1.0,<2", "pydantic>=2.14.2", ]

[dependency-groups] dev = [ "pytest>=9.2.0", ]

工具
工具用途
search_questions查找相关主题的讨论。可按标签、站点、排序方式筛选,也可只查已采纳答案。
get_question阅读一个问题及其最佳答案(已采纳答案排在最前)。
search_by_error_message查找包含所粘贴错误或堆栈跟踪的帖子。搜索前会移除文件路径、行号和地址。
search_tags查找准确的标签名称(避免助手猜测标签)。
get_tag_overview获取某项技术的摘要、问题数量和票数最高的问题。
get_quota_status查看剩余 API 配额以及当前生效的速率限制等待时间。
资源
URI内容
stackexchange://sites可作为 site 传入的站点别名(缓存 24 小时)。
stackexchange://help/search-tips有效搜索指南。
stackexchange://quota实时配额快照(JSON)。
提示词
提示词功能
debug_error搜索错误,读取最相关的两个帖子,并附上链接说明可能的修复方法。
compare_approaches使用高票数讨论对比两种方法。
tag_primer根据某项技术的标签,编写一份入门概览。

快速开始

1. 获取免费 API 密钥(推荐)

服务无需密钥也能运行,但匿名配额较少:API 报告称,不使用密钥时每天可请求 300 次,使用密钥时每天可请求 10,000 次。在 Stack Apps 注册应用即可获取密钥;只读使用无需 OAuth。

2. 安装

你需要安装 uv。服务可直接通过 PyPI 运行:

uvx stackexchange-mcp

(这会启动一个 stdio 服务并等待;通常你会使用以下某个配置,让 AI 应用启动它。)

3. 连接你的 AI 应用

如果你的应用找不到 uvx,请使用它的完整路径(which uvx)。

VS Code(GitHub Copilot、Agent 模式) - .vscode/mcp.json:

{
  "servers": {
    "stackexchange": {
      "type": "stdio",
      "command": "uvx",
      "args": ["stackexchange-mcp"],
      "env": { "STACKEXCHANGE_KEY": "${input:se_key}" }
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "se_key",
      "description": "Stack Exchange API key",
      "password": true
    }
  ]
}

Antigravity CLI - 项目中的 .agents/mcp_config.json(或全局配置文件 ~/.gemini/config/mcp_config.json):

{
  "mcpServers": {
    "stackexchange": {
      "command": "uvx",
      "args": ["stackexchange-mcp"],
      "env": { "STACKEXCHANGE_KEY": "your-key" }
    }
  }
}

启动 agy 并运行 /mcp,确认连接成功。

Claude Code:

claude mcp add --env STACKEXCHANGE_KEY=your-key stackexchange -- uvx stackexchange-mcp

Claude Desktop(macOS/Windows)和 Cursor - 使用与 Antigravity 相同的 JSON 格式(mcpServers),配置文件为 claude_desktop_config.json 或 ~/.cursor/mcp.json。

请勿将密钥写入要提交的文件中。

配置

变量默认值用途
STACKEXCHANGE_KEY无API 密钥。可提高每日配额。
SE_DEFAULT_SITEstackoverflow工具调用未指定站点时使用的站点。
SE_CACHE_TTL_SECONDS300相同请求的缓存时长(0 表示禁用缓存)。
SE_MAX_BODY_CHARS2000返回的任何问题或答案正文的最大字符数。

速率限制和错误

  • 缓存时段内的相同请求不会消耗配额。
  • 如果 API 返回 backoff 值,服务会等待相应时长(最多 10 秒)后再进行下一次调用;若等待时间更长,则会报告等待时长,而不会阻塞。
  • 请求之间至少间隔 0.2 秒。
  • 超时、网络错误和 5xx 响应会以指数间隔重试两次(分别间隔 0.5 秒和 1 秒)。
  • 每日配额用尽后,服务会停止调用 API,直到下一个 UTC 日。
情况助手收到的提示
输入无效(站点错误、标签错误)指出错误的参数以及修正方法。
未找到问题或标签可能已被删除或位于其他站点;请使用 search_tags。
未找到搜索结果扩大查询范围、移除标签,或使用 search_tags。
受到速率限制告知需要等待的时长。
配额用尽设置 STACKEXCHANGE_KEY,或等待每日配额重置。
API 密钥无效检查或取消设置 STACKEXCHANGE_KEY。
Stack Exchange 无法访问通常是暂时的;请稍后重试。

API 密钥绝不会写入日志或错误消息。

示例提示词

无需指定工具名称。以下内容会促使助手使用此服务:

  • “asyncio.sleep 和 time.sleep 有什么区别?请查看 Stack Overflow。”
  • “我遇到了 AttributeError: 'NoneType' object has no attribute 'foo'——请在 Stack Overflow 上查找解决办法。”(粘贴回溯信息)
  • “Stack Overflow 上有用于测试异步代码的 pytest 标签吗?”
  • “我是 python-asyncio 新手。请根据 Stack Overflow 给我概述一下。”
  • “在 Server Fault 上查找近期关于 Docker 网络的讨论。”

测试情况

每个提示词的测试结果见 TESTING.md。

  • Antigravity CLI: 已连接并列出全部 6 个工具。在一次包含 10 个提示词的测试中,模型有 9 次在未获知工具名称的情况下选用了预期工具(有 1 个提示词仍需重新测试),并选择了合适的参数,例如 site、sort 和 accepted_only。对于无关问题,它正确地没有使用工具。
  • VS Code(Copilot Agent 模式): 服务已启动,并发现 6 个工具;尚未记录工具调用结果。
  • MCP Inspector: 已连接并列出服务的工具(发布前请重新检查所有资源和提示词)。

故障排除

  • **日志中显示服务器为“anonymous (low quota)”:**密钥未传到服务器。请将 STACKEXCHANGE_KEY 放入客户端配置的 env 块中。
  • **找不到命令:**在配置中使用 uvx 的绝对路径。
  • **VS Code 中未显示工具:**请在包含 .vscode/mcp.json 的工作区中使用普通的 Copilot Agent mode 聊天会话;某些会话类型使用各自独立的服务器列表。
  • **助手始终不调用工具:**明确要求它执行一次(“搜索 Stack Overflow 上的……”),并检查客户端中的工具列表。
  • **日志:**服务器将日志写入 stderr(绝不会写入承载协议的 stdout)。在 VS Code 中,打开“输出”面板并选择该服务器。

开发

git clone https://github.com/YashLimbani/stackexchange-mcp
cd stackexchange-mcp
uv sync
uv run pytest -q
npx @modelcontextprotocol/inspector uv run stackexchange-mcp

测试无需联网:API 使用 samples/ 中保存的真实响应进行模拟。设计说明请参阅 DESIGN.md,了解如何参与请参阅 CONTRIBUTING.md。

许可证

代码采用 MIT 许可证(参见 LICENSE)。Stack Exchange 内容采用 CC BY-SA 许可证;重新使用时请注明作者并附上链接。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。