MCP调试适配器协议
Model Context Protocol(MCP)的实现,它能够与调试适配器进行交互,使语言模型在调试会话期间可以控制调试器、设置断点、评估表达式以及导航源代码。
服务介绍
dap-mcp
dap-mcp 是为管理 Debug Adapter Protocol (DAP) 会话量身定制的 Model Context Protocol (MCP) 的实现。MCP 提供了一个标准化框架,用于优化和扩展大型语言模型的上下文窗口,在这个项目中,它被用来增强和简化调试工作流。
特性
- Debug Adapter Protocol 集成: 使用标准化协议与调试器交互。
- MCP 框架: 利用 MCP 优化上下文并增强调试工作流。
- 丰富的调试工具: 设置、列出和移除断点;控制执行(继续、步入/步出/下一步);评估表达式;更改堆栈帧;查看源代码。
- 灵活的配置: 通过 JSON 配置文件自定义调试器设置、源目录和其他参数。
安装
前提条件
- Python 3.10 或更高版本
- uv(可选,用于运行服务器)
安装并运行服务器
安装 dap-mcp 及其依赖项:
pip install dap-mcp
python -m dap_mcp --config config.json
# Or, if you have uv installed
uvx dap-mcp@latest --config config.json
配置
该项目使用一个 JSON 配置文件(例如 .config.json)来指定调试器设置和源目录。示例配置如下:
{
"type": "debugpy",
"debuggerPath": "/path/to/python/with/debugpy",
"debuggerArgs": [
"-m",
"debugpy.adapter"
],
// source directories for resolving file paths
// if you always use absolute paths, you can omit this
"sourceDirs": [
"/path/to/source/code"
],
// debugger-specific settings start here
// configurations for debugpy can be found at
// https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings
// you can use "program" instead of "module" to specify the program to debug
"module": "pytest",
// the python executable to use to run the debuggee
"python": ["/path/to/python"],
"cwd": "/path/to/working/directory"
}
此配置告知调试器:
- 调试器可执行文件的路径及其参数。
- 在断点操作期间解析文件路径的源目录。
- 启动被调试程序所需的其他设置(如模块、工作目录和解释器路径)。
可用的调试器类型
| 类型 | 示例路径 | 示例参数 |
|---|---|---|
| debugpy | /usr/bin/python3 |
["-m", "debugpy.adapter"] |
| lldb | /usr/bin/lldb-dap |
[] |
可用工具
该项目通过 MCP 框架公开了几个可以调用的工具:
- launch: 启动被调试程序。
- set_breakpoint: 在指定文件和行设置断点(可选条件)。
- remove_breakpoint: 从指定文件和行移除断点。
- list_all_breakpoints: 列出当前在调试器中设置的所有断点。
- continue_execution: 在命中断点后继续程序执行。
- step_in: 步入函数调用。
- step_out: 退出当前函数。
- next: 执行到下一行代码。
- evaluate: 在当前调试上下文中评估表达式。
- change_frame: 切换到不同的堆栈帧。
- view_file_around_line: 查看指定行周围的源代码(如果没有指定,则使用上次提供的文件)。
- terminate: 终止调试会话。
这些工具提供了 XML 渲染输出,以便与 MCP 客户端集成。
扩展与其他 DAP 服务器
要支持额外的 DAP 服务器,您只需在 dap_mcp/config.py 文件中添加一个新的 DAP 特定配置类。所有 DAP 配置都从基础的 DAPConfig 类扩展而来。每个新的子类应该:
- 定义一个唯一的
type值(使用Literal)作为判别器。 - 包含该调试器特有的任何其他字段或设置。
例如,要为假设的名为 "mydap" 的 DAP 服务器添加支持,您可以添加如下内容:
class MyDAP(DAPConfig):
type: Literal["mydap"]
# Add any additional settings for MyDAP here
customSetting: Optional[str] = Field(
None, description="A custom setting for MyDAP."
)
创建了新的配置类之后,通过包含您的新类来更新用于调试器特定配置的联合类型。例如:
DebuggerSpecificConfig = Annotated[Union[DebugPy, MyDAP], Field(..., discriminator="type")]
现在,当您提供一个带有 "type": "mydap" 的配置 JSON 时,它将使用您的新 MyDAP 类进行解析和验证,并且您的 DAP 服务器扩展将被完全集成。
贡献
欢迎贡献!要贡献,请遵循以下步骤:
- 分叉仓库。
- 为您的功能或错误修复创建一个新的分支。
- 编写测试并确保所有检查通过。
- 提交拉取请求。
请遵循编码指南并在更改中包含适当的测试。
许可证
本项目根据 AGPL-3.0 许可证授权。详情请参阅 LICENSE 文件。