MCP Debugger
mcp-debugger
用于多语言调试的 MCP 服务器 —— 为您的 AI 代理赋予调试超能力 🚀
🎯 概述
mcp-debugger 是一个模型上下文协议 (MCP) 服务器,它将调试工具作为结构化的 API 调用提供。它使 AI 代理能够使用调试适配器协议 (DAP) 对多种编程语言进行单步调试。
🆕 0.19.0 版本:通过 JDI 桥接实现 Java 调试,支持启动和附加模式!此外还有使用 Delve 的 Go 调试。
🆕 0.17.0 版本:支持 Rust 调试!在 Linux/macOS 上使用 CodeLLDB 调试 Rust 程序,包括 Cargo 项目、异步代码和完整的变量检查——此外,步进命令现在会返回活动的源代码上下文,以便代理自动保持其位置。
🔥 0.16.0 版本:支持 JavaScript/Node.js 调试!通过捆绑的 js-debug 提供完整的调试功能,支持 TypeScript,并通过改进的 npx 分发实现零运行时依赖。
🎬 演示视频:查看调试器运行情况!
录制中 - 这将展示 AI 代理实时发现并修复变量交换错误的过程
✨ 主要功能
🌐 多语言支持 – 适用于任何语言的简洁适配器模式
🐍 通过 debugpy 进行 Python 调试 – 完全支持 DAP 协议
🟨 通过 js-debug 进行 JavaScript (Node.js) 调试 – VSCode 经过验证的调试器
🦀 通过 CodeLLDB 进行 Rust 调试 – 调试 Rust 和 Cargo 项目(Linux/macOS/Windows 使用 GNU 工具链)
🐹 通过 Delve 进行 Go 调试 – 完全支持 Go 程序的 DAP
☕ 通过 JDI 桥接进行 Java 调试 – JDK 21+ 的启动和附加模式
🔷 通过 netcoredbg 进行 .NET/C# 调试 – 完全支持 DAP 调试 .NET 应用程序
警告:在 Windows 上,请使用 GNU 工具链以获得完整的变量检查功能。运行
mcp-debugger check-rust-binary <path-to-exe>来验证您的构建,并参阅 Windows 上的 Rust 调试 获取详细指南。 注意:发布的 npm 包附带 Linux x64 CodeLLDB 运行时,以保持在注册表大小限制内。在 macOS 或 Windows 上,请将CODELLDB_PATH环境变量指向现有的 CodeLLDB 安装(例如来自 VSCode 扩展),或者克隆仓库并运行pnpm --filter @debugmcp/adapter-rust run build:adapter以在本地供应商化您的平台二进制文件。
Windows Rust 设置脚本
如果您在 Windows 上,并且想要获得可用的 GNU 工具链 + dlltool 配置的最快路径,请运行:
pwsh scripts/setup/windows-rust-debug.ps1该脚本安装 stable-gnu 工具链(通过 rustup),设置 dlltool.exe(优先使用 MSYS2/MinGW,如果不可用则回退到 rustup 自带的副本),构建捆绑的 Rust 示例,并默认运行 Rust 冒烟测试。添加 -SkipTests 以选择不运行测试。如果您希望将 dlltool 路径持久化到您的用户 PATH/DLLTOOL 变量中,请添加 -UpdateUserPath。
该脚本还将尝试配置基于 MSYS2 的 MinGW-w64 工具链(通过 winget + pacman),以便 cargo +stable-gnu 拥有功能齐全的 dlltool/ld/as 堆栈。如果已安装 MSYS2,它将直接重用;否则它会引导您安装它(或发出警告以便您手动安装)。
🧪 用于测试的模拟适配器 – 无需外部依赖即可测试
🔌 STDIO 和 SSE 传输模式 – 适用于任何 MCP 客户端
📦 零运行时依赖 – 通过 esbuild + tsup 实现自包含捆绑包
⚡ npx 就绪 – 直接使用
npx @debugmcp/mcp-debugger运行 - 无需安装📊 1266+ 测试通过 – 经过实战检验的端到端测试
🐳 Docker 和 npm 包 – 随处部署
🤖 为 AI 代理构建 – 结构化的 JSON 响应,易于解析
🛡️ 路径验证 – 防止因不存在的文件导致崩溃
📝 AI 感知行上下文 – 带有代码上下文的智能断点放置
🚀 快速入门
对于 MCP 客户端 (Claude Desktop 等)
添加到您的 MCP 设置配置中:
{
"mcpServers": {
"mcp-debugger": {
"command": "node",
"args": ["C:/path/to/mcp-debugger/dist/index.js", "stdio", "--log-level", "debug", "--log-file", "C:/path/to/logs/debug-mcp-server.log"],
"disabled": false,
"autoApprove": ["create_debug_session", "set_breakpoint", "get_variables"]
}
}
}对于 Claude Code CLI
对于 Claude Code 用户,我们提供了一个自动安装脚本:
先决条件:在运行安装脚本之前,必须安装 Claude CLI 并使其在您的 PATH 中可用。请参阅 Claude Code 文档 获取安装说明。
# Clone the repository
git clone https://github.com/debugmcp/mcp-debugger.git
cd mcp-debugger
# Run the installation script
./scripts/install-claude-mcp.sh
# Verify the connection (use 'claude mcp list' if claude is on your PATH)
claude mcp list重要:需要 stdio 参数以防止控制台输出破坏 JSON-RPC 协议。请参阅 CLAUDE.md 获取详细的设置和故障排除信息。
使用 Docker
docker run -v $(pwd):/workspace debugmcp/mcp-debugger:latest⚠️ Docker 镜像附带 Python、JavaScript、Go、Java 和 .NET 适配器。Rust 调试需要本地、SSE 或打包部署,其中适配器在您的工具链旁边运行。注意:适配器在运行时动态加载 — 只有安装并检测到其工具链的适配器才会被
list_supported_languages报告为可用。
使用 npm
npm install -g @debugmcp/mcp-debugger
mcp-debugger --help或者通过 npx 使用,无需安装:
npx @debugmcp/mcp-debugger --help📸 截图:MCP 集成运行中
此截图将显示 AI 代理与调试器之间实时流动的 MCP 协议通信、工具调用和 JSON 响应。
📚 工作原理
mcp-debugger 将调试操作公开为 MCP 工具,可以使用结构化的 JSON 参数调用:
// Tool: create_debug_session
// Request:
{
"language": "python", // or "javascript", "rust", "go", "java", "dotnet", or "mock" for testing
"name": "My Debug Session"
}
// Response:
{
"success": true,
"sessionId": "a4d1acc8-84a8-44fe-a13e-28628c5b33c7",
"message": "Created python debug session: My Debug Session"
}📸 截图:活动调试会话
此截图将显示调试器在断点处暂停,左侧面板显示堆栈跟踪,右侧面板显示局部变量,中心显示带有行高亮的代码。
🛠️ 可用工具
工具 | 描述 | 状态 |
| 创建新的调试会话 | ✅ 已实现 |
| 列出所有活动会话 | ✅ 已实现 |
| 显示可用的语言适配器 | ✅ 已实现 |
| 在文件中设置断点 | ✅ 已实现 |
| 开始调试脚本 | ✅ 已实现 |
| 将调试器附加到正在运行的进程 | ✅ 已实现 |
| 从进程中分离调试器 | ✅ 已实现 |
| 获取当前堆栈跟踪 | ✅ 已实现 |
| 列出调试会话中的所有线程 | ✅ 已实现 |
| 获取帧的变量作用域 | ✅ 已实现 |
| 获取作用域中的变量 | ✅ 已实现 |
| 获取当前帧中的局部变量 | ✅ 已实现 |
| 单步跳过当前行 | ✅ 已实现 |
| 单步进入函数 | ✅ 已实现 |
| 单步跳出函数 | ✅ 已实现 |
| 继续运行 | ✅ 已实现 |
| 暂停运行 | ✅ 已实现 |
| 在调试上下文中评估表达式 | ✅ 已实现 |
| 获取源代码上下文 | ✅ 已实现 |
| 关闭会话 | ✅ 已实现 |
| 将更改后的 Java 类热交换到正在运行的 JVM 中 (仅限 Java) | ✅ 已实现 |
📸 截图:多会话调试
此截图将显示调试器管理多个并发调试会话,演示 AI 代理如何通过隔离的会话管理同时调试不同的脚本。
🏗️ 架构:动态适配器加载
0.10.0 版本引入了一种简洁的适配器模式,将语言无关的核心功能与特定语言的实现分离开来:
┌─────────────┐ ┌────────────────┐ ┌──────────────┐ ┌─────────────────┐
│ MCP Client │────▶│ DebugMcpServer │────▶│SessionManager│────▶│ AdapterRegistry │
└─────────────┘ └────────────────┘ └──────────────┘ └─────────────────┘
│ │
▼ ▼
┌──────────────┐ ┌─────────────────┐
│ ProxyManager │◀─────│ Language Adapter│
└──────────────┘ └─────────────────┘
│
┌──────────────┴──────────────────────────────────────────┐
│ │
┌───────────┼───────────┬───────────┬───────────┬───────────┐ │
│ │ │ │ │ │ │
┌─────▼────┐┌─────▼────┐┌─────▼────┐┌─────▼────┐┌─────▼────┐┌─────▼────┐
│Python ││JavaScript││Rust ││Go ││Java ││Dotnet ││Mock │
│Adapter ││Adapter ││Adapter ││Adapter ││Adapter ││Adapter ││Adapter │
└──────────┘└──────────┘└──────────┘└──────────┘└──────────┘└──────────┘└──────���───┘添加语言支持
想要为您最喜欢的语言添加调试支持吗?请查看 适配器开发指南!
💡 示例:调试 Python 代码
这是一个完整的调试会话示例:
# buggy_swap.py
def swap_variables(a, b):
a = b # Bug: loses original value of 'a'
b = a # Bug: 'b' gets the new value of 'a'
return a, b第 1 步:创建调试会话
// Tool: create_debug_session
// Request:
{
"language": "python",
"name": "Swap Bug Investigation"
}
// Response:
{
"success": true,
"sessionId": "a4d1acc8-84a8-44fe-a13e-28628c5b33c7",
"message": "Created python debug session: Swap Bug Investigation"
}第 2 步:设置断点
// Tool: set_breakpoint
// Request:
{
"sessionId": "a4d1acc8-84a8-44fe-a13e-28628c5b33c7",
"file": "buggy_swap.py",
"line": 2
}
// Response:
{
"success": true,
"breakpointId": "28e06119-619e-43c0-b029-339cec2615df",
"file": "C:\\path\\to\\buggy_swap.py",
"line": 2,
"verified": false,
"message": "Breakpoint set at C:\\path\\to\\buggy_swap.py:2"
}第 3 步:开始调试
// Tool: start_debugging
// Request:
{
"sessionId": "a4d1acc8-84a8-44fe-a13e-28628c5b33c7",
"scriptPath": "buggy_swap.py"
}
// Response:
{
"success": true,
"state": "paused",
"message": "Debugging started for buggy_swap.py. Current state: paused",
"data": {
"message": "Debugging started for buggy_swap.py. Current state: paused",
"reason": "breakpoint"
}
}第 4 步:检查变量
首先,获取作用域:
// Tool: get_scopes
// Request:
{
"sessionId": "a4d1acc8-84a8-44fe-a13e-28628c5b33c7",
"frameId": 3
}
// Response:
{
"success": true,
"scopes": [
{
"name": "Locals",
"variablesReference": 5,
"expensive": false,
"presentationHint": "locals",
"source": {}
},
{
"name": "Globals",
"variablesReference": 6,
"expensive": false,
"source": {}
}
]
}然后获取局部变量:
// Tool: get_variables
// Request:
{
"sessionId": "a4d1acc8-84a8-44fe-a13e-28628c5b33c7",
"scope": 5
}
// Response:
{
"success": true,
"variables": [
{"name": "a", "value": "10", "type": "int", "variablesReference": 0, "expandable": false},
{"name": "b", "value": "20", "type": "int", "variablesReference": 0, "expandable": false}
],
"count": 2,
"variablesReference": 5
}📸 截图:变量检查揭示错误
此截图将显示在跳过第 4 行后的 TUI 可视化工具,其中两个变量错误地显示为值 20,清楚地演示了变量交换错误。左侧面板显示执行状态,中心显示高亮代码,右侧面板显示错误的变量值。
📖 文档
📘 工具参考 – 完整的 API 文档
🚦 入门指南 – 首次设置
🏗️ 架构概述 – 多语言设计
🔧 适配器开发 – 添加新语言
🔌 动态加载架构 – 运行时发现、延迟加载、缓存
🧩 适配器 API 参考 – 适配器、工厂、加载器和注册表契约
🔄 迁移指南 – 升级到 v0.15.0 (动态加载)
🐍 Python 调试指南 – Python 特定功能
🟨 JavaScript 调试指南 – JavaScript/TypeScript 功能
🐹 Go 调试指南 – 使用 Delve 进行 Go 调试
☕ Java 调试指南 – 使用 JDI 桥接进行 Java 调试
Windows 上的 Rust 调试 - 工具链要求和故障排除
🔧 故障排除 – 常见问题及解决方案
🤝 贡献
我们欢迎贡献!请参阅 CONTRIBUTING.md 获取指南。
# Development setup
git clone https://github.com/debugmcp/mcp-debugger.git
cd mcp-debugger
# Install dependencies and vendor debug adapters
pnpm install
# All debug adapters (JavaScript js-debug, Rust CodeLLDB) are automatically downloaded
# Build the project
pnpm build
# Run tests
pnpm test
# Check adapter vendoring status
pnpm vendor:status
# Force re-vendor all adapters (if needed)
pnpm vendor:force调试适配器供应商化
该项目在 pnpm install 期间自动供应商化调试适配器:
JavaScript: 从 GitHub 发布下载 Microsoft 的 js-debug
Rust: 下载当前平台的 CodeLLDB 二进制文件
CI 环境: 设置
SKIP_ADAPTER_VENDOR=true以跳过供应商化
手动管理适配器:
# Check current vendoring status
pnpm vendor:status
# Re-vendor all adapters
pnpm vendor
# Clean and re-vendor (force)
pnpm vendor:force
# Clean vendor directories only
pnpm clean:vendor在本地运行容器测试
我们使用 Act 在本地运行 GitHub Actions 工作流:
# Build the Docker image first
docker build -t mcp-debugger:local .
# Run tests with Act (use WSL2 on Windows)
act -j build-and-test --matrix os:ubuntu-latest请参阅 tests/README.md 获取详细的测试说明。
📊 项目状态
✅ 生产就绪: v0.19.0,具有六个语言适配器和完善的多语言分发
✅ 简洁架构,采用适配器模式
✅ JavaScript/Node.js: 通过 js-debug 实现完整的调试循环
✅ Go: 通过 Delve DAP 实现完整的调试支持
✅ Java: 通过 JDI 桥接实现启动和附加模式
🦀 Rust: 在 Linux/macOS/Windows 上提供全面支持 (Windows 需要 GNU 工具链;CodeLLDB 不支持 MSVC)
📈 活跃开发: 定期更新和改进
📄 许可证
MIT 许可证 - 详情请参阅 LICENSE。
👥 贡献者
@swinyx — Go 适配器 (Delve)
@roofpig95008 — Java 适配器
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/debugmcp/mcp-debugger'
If you have feedback or need assistance with the MCP directory API, please join our Discord server