MCP调试中心

mcp-debug-hub 是一个VS Code扩展,它通过模型上下文协议(MCP)公开VS Code的调试功能。它使AI编码助手(如Cline、Claude、Cursor或Copilot)能够直接在VS Code中控制和检查调试会话,提供强大的调试自动化和检查功能。
主要特点
- 调试会话控制:以编程方式启动、停止、附加到进程和管理VS Code调试会话
- 多进程调试:调试父子进程层次结构,完全支持子进程、工作进程和生成的进程
- 智能上下文检测:自动使用在VS Code的“调用堆栈”视图中选择的帧进行检查操作
- 断点管理:设置、删除和列出断点,包括条件、点击次数和日志消息
- 代码执行控制:遍历代码,继续执行,并在任何时候暂停
- 运行时检查:计算表达式、检查变量和检查调用堆栈
- 会话感知操作:针对多进程场景中的特定调试会话
- 多语言支持:适用于VS Code调试适配器支持的任何语言
- 内置状态视图:从活动栏监视服务器状态、活动连接和指标。包括服务器控制、URL复制和自动启动切换的快速操作
需求
- VS Code 1.99.0或更高版本
- v22.x或更新版本
- 带有调试配置的工作区(位于
launch.json或workspace.code-workspace)
入门
安装
从VS代码市场安装扩展或从源代码构建:
git clone https://github.com/R-D-menasheof/mcp-debug-hub.git
cd mcp-debug-hub
npm install
npm run vsix
code --install-extension dist/mcp-debug-hub.vsixMCP客户端配置
根据您使用的客户端配置MCP客户端。每个客户端的配置格式略有不同。
\[!注意\]\ 默认端口为37337。您可以在VS代码设置中更改此设置 mcpDebugHub.ssePort.MCP客户端配置示例
Cursor
首选 Cursor Settings -> MCP ->编辑配置(或直接编辑 ~/.cursor/mcp.json):
{
"mcpServers": {
"debug-mcp": {
"url": "http://localhost:37337/mcp"
}
}
}Cline
跟随 临床MCP文件 并添加此配置:
{
"mcpServers": {
"debug-mcp": {
"command": "node",
"args": [],
"transport": {
"type": "sse",
"url": "http://localhost:37337/mcp"
}
}
}
}确保正确配置SSE传输类型。
Continue
将配置添加到Continue配置文件中(~/.continue/config.json):
{
"mcpServers": {
"debug-mcp": {
"transport": {
"type": "sse",
"url": "http://localhost:37337/mcp"
}
}
}
}启动服务器
当VS Code打开时,扩展可以自动启动(配置 mcpDebugHub.autostart 在设置中),或手动使用:
- 从活动栏(图层图标)打开MCP调试中心视图
- 点击 开始 按钮或启用 自动启动 切换
- 或者,使用命令面板:
MCP Debug Hub: Start
您的第一个提示
- 确保工作区中有调试配置(
.vscode/launch.json或workspace.code-workspace) - 在MCP客户端中输入以下提示:
Launch the debug configuration "Python: Current File" and set a breakpoint at line 10 of main.py您的MCP客户端应启动调试会话并设置断点。
工具
- 调试会话管理 (9个工具)
- launch_debug - launch_child_debug - attach_to_process - stop_debug - list_launch_configurations - get_debug_state - list_debug_sessions - get_session_hierarchy - get_session_info
- 断点管理 (5个工具)
- set_breakpoint - set_breakpoints - remove_breakpoint - list_breakpoints - clear_all_breakpoints
- 执行控制 (5个工具)
- continue_execution - pause_execution - step_over - step_into - step_out
- 运行时检查 (5个工具)
- evaluate_expression - list_threads - get_stack_frames - get_variables - get_current_location
工具参考
launch_debug
使用工作区设置(launch.json或workspace.code workspace)中的命名配置启动新的调试会话。
参数:
configuration(字符串,必填):工作区设置中的调试配置名称(例如,“Python:当前文件”,“节点:启动程序”)
例子:
{
"configuration": "Python: Current File"
}launch_child_debug
作为现有会话的子会话启动新的调试会话。可用于调试多进程应用程序中的子进程、工作进程或衍生进程。
参数:
parentSessionId(字符串,必填):父调试会话的IDconfiguration(字符串,必填):工作区设置中调试配置的名称consoleMode(string,可选):是使用单独的控制台还是与父级合并(默认值:“separate”)。选项:“分离”、“合并”lifecycleManagedByParent(布尔值,可选):生命周期(重启/停止)是否由父级管理(默认值:false)
例子:
{
"parentSessionId": "abc123",
"configuration": "Python: Worker Process",
"consoleMode": "merged",
"lifecycleManagedByParent": true
}附件_流程
通过PID或进程名将调试器附加到已运行的进程。
参数:
configuration(string,必填):连接类型调试配置的名称"request": "attach"processId(数字,可选):要附加到的进程ID。需要processId或processName。processName(字符串,可选):要附加的进程名称(例如,“python3”、“node”)。需要processId或processName。
例子:
{
"configuration": "Python: Attach",
"processId": 12345
}stop_debug
停止调试会话并终止调试的程序。可以在多进程调试中针对特定会话。
参数:
sessionId(字符串,可选):要停止的可选会话ID。如果未提供,则停止活动会话
例子:
{
"sessionId": "worker-123"
}list_launch_configurations
列出工作区设置中的所有可用调试启动配置。
参数: 无
输出示例:
{
"configurations": [
{ "name": "Python: Current File", "type": "python", "request": "launch" },
{ "name": "Python: Attach", "type": "python", "request": "attach" }
],
"total": 2
}get_debug_state
获取有关当前活动调试会话的详细信息,包括会话ID、状态和配置。
参数: 无
list_debug_sessions
列出所有活动的调试会话及其层次结构信息。显示多进程调试场景的父子关系。
参数: 无
输出示例:
{
"sessions": [
{
"id": "main-123",
"name": "Python: main.py",
"type": "python",
"state": "paused",
"parent": null,
"children": ["worker-456", "worker-789"]
}
],
"total": 3
}get_session层次结构
以树结构获取调试会话层次结构。可用于在多进程调试中可视化父子关系。
参数: 无
get_session_info
按ID获取特定调试会话的详细信息。包括父级、子级、状态和会话元数据。
参数:
sessionId(string,必填):用于获取信息的调试会话的ID
例子:
{
"sessionId": "worker-456"
}设断点
使用可选条件、命中计数或日志消息在源文件中的特定行设置断点。
参数:
file(string,必填):源文件的绝对路径(例如,“/workspace/src/main.py”)line(number,必填):应设置断点的行号(从1开始,第一行为1)condition(string,可选):可选条件表达式-断点仅在计算结果为true时触发(例如,“x>10”)hitCondition(字符串,可选):可选的点击计数条件(例如,“>5”表示第5次点击后中断,“==3”表示仅在第3次点击时中断)logMessage(string,可选):可选的日志消息输出,而不是中断(logpoint)。使用{expression}进行变量插值。
例子:
{
"file": "/workspace/src/main.py",
"line": 42,
"condition": "x > 10"
}设置断点
一次设置多个断点。分别返回每个断点的成功/失败状态。
参数:
breakpoints(数组,必填):要设置的断点数组(每批最少1个,最多50个)
例子:
{
"breakpoints": [
{
"file": "/workspace/src/main.py",
"line": 10
},
{
"file": "/workspace/src/utils.py",
"line": 25,
"condition": "count > 5"
}
]
}移除断点
从源文件中的特定行中删除断点。
参数:
file(string,必填):包含要删除的断点的源文件的绝对路径line(number,必填):要删除的断点的行号(从1开始)
列表_断点
列出当前在工作区中设置的所有断点,包括它们的位置、条件和验证状态。
参数: 无
清除所有断点
清除工作区中所有文件的所有断点。
参数: 无
继续执行
继续执行程序,直到到达下一个断点或程序终止。可以在多进程调试中针对特定会话。
参数:
sessionId(string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作
执行不力
在当前执行点暂停当前运行的程序。可以在多进程调试中针对特定会话。
参数:
sessionId(string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作
跨步
遍历当前代码行,在不输入任何函数调用的情况下执行它。可以在多进程调试中针对特定会话。
参数:
sessionId(string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作
step_into
进入当前行的函数调用,在被调用的函数内进行调试。可以在多进程调试中针对特定会话。
参数:
sessionId(string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作
退出
退出当前函数,继续执行,直到它返回给调用函数。可以在多进程调试中针对特定会话。
参数:
sessionId(string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作
求值表达式
在暂停的调试会话的上下文中计算表达式并返回其结果。如果未提供frameId/threadId,则自动使用在VS Code的“调用堆栈”视图中选择的帧。
参数:
expression(string,必填):要计算的表达式(例如,“x+y”、“user.name”、“len(items)”)。frameId(数字,可选):堆栈帧ID来自get_stack_frames。如果未提供,则使用“调用堆栈”视图中的活动帧。threadId(number,可选):线程ID。如果没有提供frameId,则使用此线程的顶部框架。sessionId(字符串,可选):会话ID。如果未提供,则对活动调试会话进行操作。
示例:
{
"expression": "user.name",
"threadId": 1
}{
"expression": "len(items)",
"frameId": 2
}list_threads
列出调试会话中的所有线程及其ID和名称。在调用之前,使用此选项查看哪些线程可用 get_stack_frames, evaluate_expression,或 get_variables 与特定 threadId.
参数:
sessionId(string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作
输出示例:
{
"threads": [
{ "id": 1, "name": "MainThread" },
{ "id": 2, "name": "Worker-1" },
{ "id": 3, "name": "Worker-2" }
],
"total": 3
}get_stack_frames
获取当前调用堆栈帧,包括文件位置、行号和帧ID。可以选择指定从哪个线程获取帧以进行多线程调试。
参数:
threadId(number,可选):可选线程ID。如果省略,则返回第一个线程的堆栈帧。使用list_threads查看所有线程IDsessionId(string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作
例子:
{
"threadId": 2,
"sessionId": "worker-123"
}get_variables
获取当前作用域中的所有变量及其值,包括局部变量、全局变量和闭包变量。如果未提供frameId/threadId,则自动使用在VS Code的“调用堆栈”视图中选择的帧。
参数:
frameId(数字,可选):堆栈帧ID来自get_stack_frames。如果未提供,则使用“调用堆栈”视图中的活动帧。threadId(number,可选):线程ID。如果没有提供frameId,则使用此线程的顶部框架。sessionId(字符串,可选):会话ID。如果未提供,则对活动调试会话进行操作。
示例:
{
"threadId": 1
}{
"frameId": 2,
"sessionId": "worker-123"
}get_current \_位置
返回调试器中当前暂停执行的确切文件路径、行号和列。在检查变量或计算表达式之前,使用此方法了解当前的执行上下文。可以在多进程调试中针对特定会话。
参数:
sessionId(string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作
配置
MCP调试中心扩展支持VS代码设置中的以下配置选项:
mcpDebugHub.ssePort
MCP SSE(服务器发送事件)服务器的端口号。用于Cursor、Continue和Cline等AI客户端进行连接调试。
- 类型: 数字 - 违约: 37337 - 范围: 1024-65535
mcpDebugHub.sseHost
MCP SSE服务器将侦听的主机地址。使用“localhost”进行本地连接,或使用“0.0.0.0”允许远程连接。
- 类型: 字符串 - 违约: "localhost"
mcpDebugHub.autostart
打开VS Code时自动启动MCP服务器。禁用时,使用“MCP调试中心:启动服务器”命令手动启动。此设置也可以直接从MCP调试中心状态视图切换。
- 类型: 布尔 - 违约: false
mcpDebugHub.logLevel
记录详细程度。“debug”显示所有消息,“error”仅显示错误。查看“MCP调试中心”输出通道中的日志。
- 类型: 字符串 - 选择: debug, info, warn, error - 违约: "info"
更改端口
要使用其他端口,请更新您的VS Code设置:
{
"mcpDebugHub.ssePort": 8080
}然后更新您的MCP客户端配置以使用新端口。确切的格式取决于您的客户端:
对于光标:
{
"mcpServers": {
"debug-mcp": {
"url": "http://localhost:8080/mcp"
}
}
}对于克莱恩:
{
"mcpServers": {
"debug-mcp": {
"command": "node",
"args": [],
"transport": {
"type": "sse",
"url": "http://localhost:8080/mcp"
}
}
}
}继续:
{
"mcpServers": {
"debug-mcp": {
"transport": {
"type": "sse",
"url": "http://localhost:8080/mcp"
}
}
}
}概念
调试配置
该扩展使用工作区设置中的VS Code调试配置。配置可以存储在 .vscode/launch.json (单根工作区)或 workspace.code-workspace (多根工作区)。在使用MCP调试中心之前,您必须为项目设置至少一个调试配置。
示例 launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}断点验证
当您设置断点时,它可能处于“挂起”状态,直到调试会话到达可以验证它的代码。已验证的断点保证会被命中,而挂起的断点可能需要调整。
栈帧
堆栈帧表示暂停执行点处的调用堆栈。帧ID 0是当前(最顶部)帧。使用帧ID evaluate_expression 和 get_variables 检查调用堆栈的不同级别。
发展
从源头构建
git clone https://github.com/R-D-menasheof/mcp-debug-hub.git
cd mcp-debug-hub
npm install
npm run compile在开发中运行
- 在VS Code中打开项目
- 按F5开始调试
- 将打开一个新的VS Code窗口,其中加载了扩展名
- 配置您的MCP客户端以连接到
http://localhost:37337/mcp
运行测试
npm test已知限制
- 该扩展需要一个具有调试配置的活动VS Code工作区
- 一些调试适配器可能对某些功能(例如,条件断点)的支持有限
- SSE传输要求MCP客户端支持服务器发送事件
贡献
欢迎投稿!请随时提交拉取请求。
许可证
看 许可证 文件以获取详细信息。
