mcp-debug-hub 是一个 VS Code 扩展,它通过模型上下文协议(MCP)暴露了 VS Code 的调试功能。它使 AI 编码助手(如 Cline、Claude、Cursor 或 Copilot)能够在 VS Code 内直接控制和检查调试会话,提供强大的调试自动化和检查能力。
从 VS Code 市场安装扩展或从源代码构建:
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.vsix
根据您使用的客户端进行配置。每个客户端的配置格式略有不同。
[!NOTE] 默认端口是 37337。您可以在 VS Code 设置中的
mcpDebugHub.ssePort更改此设置。
前往 Cursor 设置 -> MCP -> 编辑配置(或直接编辑 ~/.cursor/mcp.json):
{
"mcpServers": {
"debug-mcp": {
"url": "http://localhost:37337/mcp"
}
}
}
</details>
<details>
<summary>Cline</summary>
遵循 Cline MCP 文档 并添加以下配置:
{
"mcpServers": {
"debug-mcp": {
"command": "node",
"args": [],
"transport": {
"type": "sse",
"url": "http://localhost:37337/mcp"
}
}
}
}
确保正确配置 SSE 传输类型。
</details> <details> <summary>Continue</summary>将配置添加到您的 Continue 配置文件 (~/.continue/config.json):
{
"mcpServers": {
"debug-mcp": {
"transport": {
"type": "sse",
"url": "http://localhost:37337/mcp"
}
}
}
}
</details>
该扩展可以自动启动(在设置中配置 mcpDebugHub.autostart),或者手动启动:
MCP Debug Hub: 启动.vscode/launch.json 或 workspace.code-workspace)启动调试配置“Python: 当前文件”,并在 main.py 的第 10 行设置断点
您的 MCP 客户端应该启动调试会话并设置断点。
调试会话管理 (9 个工具)
断点管理 (5 个工具)
执行控制 (5 个工具)
运行时检查 (5 个工具)
使用工作区设置中的命名配置启动新的调试会话(launch.json 或 workspace.code-workspace)。
参数:
configuration (字符串,必需):来自工作区设置的调试配置名称(例如,“Python: 当前文件”,“Node: 启动程序”)示例:
{
"configuration": "Python: 当前文件"
}
作为现有会话的子会话启动新的调试会话。对于调试多进程应用中的子进程、工作者或派生进程很有用。
参数:
parentSessionId (字符串,必需):父调试会话的 IDconfiguration (字符串,必需):来自工作区设置的调试配置名称consoleMode (字符串,可选):是否使用单独的控制台或合并到父控制台(默认:“separate”)。选项:“separate”,“merged”lifecycleManagedByParent (布尔值,可选):生命周期(重启/停止)是否由父会话管理(默认:false)示例:
{
"parentSessionId": "abc123",
"configuration": "Python: 工作者进程",
"consoleMode": "merged",
1: "lifecycleManagedByParent": true
}
通过进程ID或进程名将调试器附加到已运行的进程中。
参数:
configuration (字符串,必需):具有 "request": "attach" 的类型为“attach”的调试配置名称processId (数字,可选):要附加的进程ID。需要提供 processId 或 processName。processName (字符串,可选):要附加的进程名(例如,“python3”,“node”)。需要提供 processId 或 processName。示例:
{
"configuration": "Python: 附加",
"processId": 12345
}
停止调试会话并终止被调试的程序。可以针对多进程调试中的特定会话。
参数:
sessionId (字符串,可选):可选的会话ID。如果未提供,则停止当前活动会话示例:
{
"sessionId": "worker-123"
}
列出工作区设置中的所有可用调试启动配置。
参数: 无
示例输出:
{
"configurations": [
{ "name": "Python: 当前文件", "type": "python", "request": "launch" },
{ "name": "Python: 附加", "type": "python", "request": "attach" }
],
"total": 2
}
获取当前活动调试会话的详细信息,包括会话ID、状态和配置。
参数: 无
列出所有活动调试会话及其层级信息。显示多进程调试场景中的父子关系。
参数: 无
示例输出:
{
"sessions": [
{
"id": "main-123",
"name": "Python: main.py",
"type": "python",
"state": "paused",
"parent": null,
"children": ["worker-456", "worker-789"]
}
],
"total": 3
}
以树形结构获取调试会话层级。有助于可视化多进程调试中的父子关系。
参数: 无
通过ID获取特定调试会话的详细信息。包括父级、子级、状态和会话元数据。
参数:
sessionId (字符串,必需):要获取信息的调试会话ID示例:
{
"sessionId": "worker-456"
}
在源文件的特定行设置断点,可选带有条件、命中次数或日志消息。
参数:
file (字符串,必需):源文件的绝对路径(例如,“/workspace/src/main.py”)line (数字,必需):设置断点的行号(基于1,第一行是1)condition (字符串,可选):可选条件表达式 - 断点仅在该表达式为真时触发(例如,“x > 10”)hitCondition (字符串,可选):可选命中次数条件(例如,“>5”表示第五次命中后中断,“==3”表示仅在第三次命中时中断)logMessage (字符串,可选):可选的日志消息,用于代替中断(日志点)。使用 {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 (字符串,必需):包含要移除的断点的源文件的绝对路径line (数字,必需):要移除的断点的行号(基于1)列出当前工作区中设置的所有断点,包括它们的位置、条件和验证状态。
参数: 无
清除工作区中所有文件的所有断点。
参数: 无
继续程序执行直到下一个断点被命中或程序终止。可以针对多进程调试中的特定会话。
参数:
sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话在当前执行点暂停正在运行的程序。可以针对多进程调试中的特定会话。
参数:
sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话跳过当前代码行,执行它而不进入任何函数调用。可以针对多进程调试中的特定会话。
参数:
sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话进入当前行上的函数调用,以调试被调用的函数内部。可以针对多进程调试中的特定会话。
参数:
sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话跳出当前函数,继续执行直到返回到调用函数。可以针对多进程调试中的特定会话。
参数:
sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话在暂停的调试会话上下文中评估表达式,并返回其结果。如果没有提供 frameId 或 threadId,则自动使用 VS Code 调用堆栈视图中选择的帧。
参数:
expression (字符串,必需):要评估的表达式(例如,“x + y”,“user.name”,“len(items)”)。frameId (数字,可选):从 get_stack_frames 获取的堆栈帧ID。如果未提供,则使用调用堆栈视图中的活动帧。threadId (数字,可选):线程ID。如果提供了 threadId 但没有 frameId,则使用该线程的顶层帧。sessionId (字符串,可选):会话ID。如果未提供,则操作于当前活动调试会话。示例:
{
"expression": "user.name",
"threadId": 1
}
{
"expression": "len(items)",
"frameId": 2
}
列出调试会话中的所有线程及其ID和名称。在调用 get_stack_frames、evaluate_expression 或 get_variables 之前使用此功能查看可用线程。
参数:
sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话示例输出:
{
"threads": [
{ "id": 1, "name": "主线程" },
{ "id": 2, "name": "工作者-1" },
{ "id": 3, "name": "工作者-2" }
],
"total": 3
}
获取当前调用堆栈帧,包括文件位置、行号和帧ID。可选指定要从中获取帧的线程,用于多线程调试。
参数:
threadId (数字,可选):可选的线程ID。如果省略,则返回第一个线程的堆栈帧。使用 list_threads 查看所有线程IDsessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话示例:
{
"threadId": 2,
"sessionId": "worker-123"
}
获取当前作用域内的所有变量及其值,包括局部变量、全局变量和闭包变量。如果没有提供 frameId 或 threadId,则自动使用 VS Code 调用堆栈视图中选择的帧。
参数:
frameId (数字,可选):从 get_stack_frames 获取的堆栈帧ID。如果未提供,则使用调用堆栈视图中的活动帧。threadId (数字,可选):线程ID。如果提供了 threadId 但没有 frameId,则使用该线程的顶层帧。sessionId (字符串,可选):会话ID。如果未提供,则操作于当前活动调试会话。示例:
{
"threadId": 1
}
{
"frameId": 2,
"sessionId": "worker-123"
}
返回调试器当前暂停的确切文件路径、行号和列。在检查变量或评估表达式之前使用此功能了解当前执行上下文。可以针对多进程调试中的特定会话。
参数:
sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话MCP Debug Hub 扩展支持以下 VS Code 设置中的配置选项:
mcpDebugHub.ssePort
MCP SSE(服务器发送事件)服务器的端口号。AI 客户端如 Cursor、Continue 和 Cline 使用此端口连接进行调试。
37337mcpDebugHub.sseHost
MCP SSE 服务器监听的主机地址。使用 'localhost' 进行本地连接或 '0.0.0.0' 允许远程连接。
"localhost"mcpDebugHub.autostart
自动启动 MCP 服务器当 VS Code 打开时。禁