错误分析服务

Dev-Support-MCP是一个基于Python的本地模型上下文协议(MCP)服务器,旨在帮助开发者诊断和理解编程错误,通过集成Stack Overflow提供高质量的结构化答案。

  • by ShiraSt1
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 ShiraSt1/dev-support-mcp

使用说明

开发人员支持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 <module>\n    result = 10 / 0\nZeroDivisionError: division by zero",
    "language": "python"
}

输出:

{
    "error_message": "Traceback (most recent call last):\n  File \"script.py\", line 5, in <module>\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": "<p>You can handle ZeroDivisionError using try-except blocks...</p>",
            "answer_is_accepted": true
        }
    ]
}

使用误差归一化工具

示例用法

输入:

Traceback (most recent call last):
  File "C:\Users\dev\project\main.py", line 42, in <module>
    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)。
    在常规网络中,可以省略此变量。