Stack Overflow搜索服务

一个模块化的模型上下文协议(MCP)服务器,使AI助手能够搜索和访问Stack Overflow内容,获取技术解决方案、错误处理和编程知识。

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

使用说明

Stack Overflow MCP 服务器

一个模块化的模型上下文协议(MCP)服务器,使AI助手能够搜索并访问Stack Overflow上的内容,以获取技术解决方案、错误处理方法和编程知识。

特点/特性

  • 🔍 看起来像一个放大镜的符号,通常用于表示搜索、查看细节或寻找信息的动作。在中文中,可以简单地翻译为“🔍 放大镜”或根据上下文意译为“🔍 搜索”、“🔍 查看细节”等。但直接作为符号时,常保留其图形形式,不直接翻译。 多种搜索方法按查询、错误信息或特定问题ID进行搜索
  • 📊 表格/数据图表 高级过滤按标签、分数和被采纳的答案过滤结果
  • 🧩 代表拼图或碎片的符号,可翻译为“拼图块”或“碎片”。 错误分析解析错误信息并寻找相关解决方案
  • 📝(记事本或笔记的图标,可意译为“记事”或“笔记”) 灵活的格式设置以Markdown或JSON格式获取结果
  • 💬(表示“说”或“评论”的符号,无具体翻译内容) 评论支持可选择性地包含问题和答案评论
  • ⚡(闪电符号,常用于表示快速、能量或电) 速率限制内置保护以尊重 Stack Exchange API 的配额
  • 🏗️ 代表“建筑工地”或“正在建设中”。 模块化架构职责清晰分离,便于维护

先决条件

  • Python 3.12及以上版本
  • 紫外线 (建议使用)或 pip
  • 堆栈交换API密钥(见下文)

获取Stack Exchange API密钥

  1. 首选 Stack Apps OAuth 注册
  2. 填写表格:
    • 名称:“Stack Overflow MCP”(或您偏好的名称)
    • 描述:“用于访问Stack Overflow的MCP服务器”
    • OAuth 域名:“localhost”(用于本地使用)
  3. 提交并复制您的API密钥

安装

使用紫外线(推荐)

# Clone the repository
git clone <your-repo-url>
cd stackoverflow-mcp

# Install dependencies
uv pip install -e .

# For development
uv pip install -e ".[dev]"

使用 pip

pip install -e .

# For development
pip install -e ".[dev]"

配置

环境变量

创建一个 .env 项目根目录中的文件:

cp .env.example .env

编辑 .env 根据您的配置:

# Required
STACK_EXCHANGE_API_KEY=your_api_key_here

# Optional: Rate limiting (defaults shown)
MAX_REQUEST_PER_WINDOW=30
RATE_LIMIT_WINDOW_MS=60000
RETRY_AFTER_MS=2000

使用方法

在本地运行服务器

# Using uv
uv run main.py

# Using python
python main.py

使用 Docker 运行

# Build the Docker image
docker-compose build

# Run the server
docker-compose run --rm stackoverflow-mcp

在VS Code中添加MCP

添加到您的用户 mcp.json 文件(文件 > 选项 > 设置 > 搜索“mcp” > 在 settings.json 中编辑):

使用 Docker(推荐):

"stackoverflow-mcp": {
  "type": "stdio",
  "command": "docker",
  "args": [
    "compose",
    "-f",
    "C:/Users/YourUser/path/to/stackoverflow-mcp/docker-compose.yml",
    "run",
    "--rm",
    "-T",
    "stackoverflow-mcp"
  ],
  "env": {
    "STACK_EXCHANGE_API_KEY": "your_api_key_here"
  }
}

不使用 Docker:

"stackoverflow-mcp": {
  "type": "stdio",
  "command": "python",
  "args": ["C:/Users/YourUser/path/to/stackoverflow-mcp/main.py"],
  "env": {
    "STACK_EXCHANGE_API_KEY": "your_api_key_here"
  }
}

可用工具

1. search_by_query

高级搜索,提供全面的筛选选项。

参数:

  • query (必填):搜索查询字符串
  • tags按标签过滤(例如。, ["python", "pandas"])
    • ⚠️(警告符号,无具体文字含义,可理解为“注意”或“警告”的意思) 注无效标签会被自动检测并移除。搜索将继续使用仅包含有效标签,并显示哪些标签已被移除。
    • ℹ️ 注如果按标签搜索未找到结果,系统将自动取消标签过滤并重新尝试搜索,以查找相关内容。
  • excluded_tags排除特定标签
  • min_score最低分数阈值(默认:0)
  • has_accepted_answer要求接受答案(默认:否)
  • title必须出现在标题中的文本
  • body正文必须出现的文字
  • min_answers最少回答数量
  • sort_by按以下排序 activity, creation, votes,或 relevance (默认:“相关性”)
  • include_comments包含注释(默认:false)
  • response_format: "json" 或者 "markdown" (默认:“markdown”)
  • limit最大结果数(默认:10)

2. search_by_error

解析错误信息并寻找解决方案。

参数:

  • error_message (必需):错误信息或堆栈跟踪
  • language编程语言(例如,“python”,“javascript”)
  • technologies相关技术(例如。, ["react", "django"])
  • min_score最低分数阈值(默认:1)
  • include_comments包含注释(默认:false)
  • response_format: "json" 或者 "markdown" (默认:“markdown”)
  • limit最大结果数(默认:5)

3. get_question

通过ID获取包含所有答案的特定问题。

参数:

  • question_id (必填):Stack Overflow 问题ID
  • include_comments包含注释(默认:false)
  • response_format: "json" 或者 "markdown" (默认:“markdown”)