开发人员支持MCP-用于开发人员支持的MCP服务器
开发支持MCP是本地的 模型上下文协议(MCP) 用Python编写的服务器,旨在帮助开发人员诊断和理解编程错误。\ 服务器公开了多个MCP工具,包括基于Stack Overflow的错误分析。
所有MCP工具都与Claude和MCP检查员一起进行了测试,以确保 正确的工具注册、参数验证和一致的JSON-RPC响应。
项目概述
开发支持MCP通过以下方式帮助开发人员:
- 清理和规范原始错误消息
- 检测错误类型和编程语言
- 在Stack Overflow中搜索相关问题
- 以结构化格式返回高质量的答案
该项目演示了如何构建与外部API集成的可靠、可扩展的MCP服务器。
主要特点
MCP服务器
- 建于 FastMCP
- 溢出stdio传输
- 支持结构化工具注册和响应
堆栈溢出集成
- 搜索工具:在Stack Overflow中搜索与错误消息或堆栈跟踪相关的问题
- 智能过滤:更喜欢有公认答案的问题,可以通过编程语言标签进行筛选
- 答案检索:自动获取并包含已接受答案的全文(或不存在已接受答案时得分最高的答案)
- 相关性排序:返回按相关性和答案质量排序的结果
错误分析工作流程
- 误差归一化:清除原始错误消息。
- 提取签名时出错:从规范化错误中标识主要异常/错误类型
- 语言检测:自动从错误模式中检测编程语言(Python、JavaScript、Java、C/C++)
项目结构
Dev-Support-MCP/
├── mcp_server/
│ ├── __init__.py # Package initialization
│ ├── server.py # FastMCP server instance creation
│ ├── main.py # Entry point - registers tools and runs server
│ └── tools/
│ ├── __init__.py # Tools package initialization
│ └── stackoverflow.py # Stack Overflow search and error normalization tools
├── pyproject.toml # Project configuration and dependencies
├── uv.lock # Dependency lock file
└── README.md # This file主文件
mcp_server/main.py:注册所有工具的入口点(search_stackoverflow,normalize_error和气象工具),并使用stdio传输启动MCP服务器。
mcp_server/server.py:创建和导出共享FastMCP所有工具注册到的名为“编码助手”的实例。
mcp_server/tools/stackoverflow.py:包含两个主要工具:
- search_stackoverflow:搜索Stack Overflow API并返回相关问题和答案 - normalize_error:规范错误消息并提取错误签名和语言信息
安装
需求
- Python 3.11+
- uv(推荐)或pip
uv sync
# or
pip install -e .运行服务器
python -m mcp_server.main
# or
uv run -m mcp_server.main服务器通过stdio运行,并与MCP客户端兼容。
与MCP客户端集成
要将此服务器与MCP客户端(如Claude Desktop或其他MCP兼容工具)一起使用,请将客户端配置为运行:
python -m mcp_server.main
# or
uv run -m mcp_server.main客户端将通过stdio与服务器通信,发送工具调用请求并接收结构化响应。
使用堆栈溢出工具
输入
full_error(必填):要搜索的完整错误消息或堆栈跟踪文本language(可选):用于过滤结果的编程语言标签(例如。,"python","javascript","java").如果提供,则只会返回标记有此语言的问题。
输出
该工具返回一个字典,其中包含:
error_message:提供的原始错误消息short_explanation:搜索内容的简要说明results:最多3个结果的列表,每个结果包含:
- question_title:Stack Overflow问题的标题 - has_accepted_answer:布尔值,表示问题是否有可接受的答案 - link:问题或答案的URL - score:问题评分(赞成票-反对票) - creation_date:创建问题时的ISO格式日期 - answer_text:答案的完整HTML内容(如果可用,则接受答案,否则得分最高的答案) - answer_is_accepted:布尔值,指示返回的答案是否为已接受的答案
示例用法
输入:
{
"full_error": "Traceback (most recent call last):\n File \"script.py\", line 5, in \n result = 10 / 0\nZeroDivisionError: division by zero",
"language": "python"
}输出:
{
"error_message": "Traceback (most recent call last):\n File \"script.py\", line 5, in \n result = 10 / 0\nZeroDivisionError: division by zero",
"short_explanation": "A search was performed on Stack Overflow using this error: \"Traceback (most recent call last):\".",
"results": [
{
"question_title": "How to handle ZeroDivisionError in Python?",
"has_accepted_answer": true,
"link": "https://stackoverflow.com/a/12345678",
"score": 45,
"creation_date": "2023-01-15T10:30:00+00:00",
"answer_text": "
You can handle ZeroDivisionError using try-except blocks...
",
"answer_is_accepted": true
}
]
}使用误差归一化工具
示例用法
输入:
Traceback (most recent call last):
File "C:\Users\dev\project\main.py", line 42, in
process_data(data)
File "C:\Users\dev\project\utils.py", line 15, in process_data
result = data[key]
KeyError: 'missing_key'输出:
{
"normalized_error": "KeyError: 'missing_key'",
"error_signature": "KeyError",
"detected_language": "python"
}使用的技术
- Python 3.11+:核心编程语言
- FastMCP:用于工具注册和stdio传输的MCP服务器框架
- httpx:API请求的异步HTTP客户端
- StackExchange API v2.3:堆栈溢出搜索和答案检索
- 紫外线:现代Python包管理器(可选,但推荐)
环境变量
此项目使用环境变量进行特定于环境的配置。
创建一个 .env 项目根目录中的文件,包含以下变量:
STACKEXCHANGE_API_BASE\
堆栈交换API的基本URL。\ 违约: https://api.stackexchange.com/2.3
CUSTOM_CA_BUNDLE\
可选。 自定义CA捆绑包文件的路径。\ 仅在具有HTTPS/SSL检查的环境中需要(例如公司代理、NetSpark)。\ 在常规网络中,可以省略此变量。
