
Debugger
STDIOMulti-language debugging MCP server with AI-friendly structured API for step-through debugging
Multi-language debugging MCP server with AI-friendly structured API for step-through debugging
MCP server for multi-language debugging – give your AI agents debugging superpowers 🚀
mcp-debugger is a Model Context Protocol (MCP) server that provides debugging tools as structured API calls. It enables AI agents to perform step-through debugging of multiple programming languages using the Debug Adapter Protocol (DAP).
🆕 Version 0.10.0: Now supports multiple languages through a clean adapter pattern! Start with Python, extend to any language.
🎬 Demo Video: See the debugger in action!
Recording in progress - This will show an AI agent discovering and fixing the variable swap bug in real-time
Add to your MCP settings configuration:
{ "mcpServers": { "mcp-debugger": { "command": "node", "args": ["C:/path/to/mcp-debugger/dist/index.js", "--log-level", "debug", "--log-file", "C:/path/to/logs/debug-mcp-server.log"], "disabled": false, "autoApprove": ["create_debug_session", "set_breakpoint", "get_variables"] } } }
docker run -v $(pwd):/workspace debugmcp/mcp-debugger:0.10.0
npm install -g @debugmcp/mcp-debugger mcp-debugger --help
Or use without installation via npx:
npx @debugmcp/mcp-debugger --help
📸 Screenshot: MCP Integration in Action
This screenshot will show real-time MCP protocol communication with tool calls and JSON responses flowing between the AI agent and debugger.
mcp-debugger exposes debugging operations as MCP tools that can be called with structured JSON parameters:
// Tool: create_debug_session // Request: { "language": "python", // 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" }
📸 Screenshot: Active Debugging Session
This screenshot will show the debugger paused at a breakpoint with the stack trace visible in the left panel, local variables in the right panel, and source code with line highlighting in the center.
Tool | Description | Status |
---|---|---|
create_debug_session | Create a new debugging session | ✅ Implemented |
list_debug_sessions | List all active sessions | ✅ Implemented |
set_breakpoint | Set a breakpoint in a file | ✅ Implemented |
start_debugging | Start debugging a script | ✅ Implemented |
get_stack_trace | Get the current stack trace | ✅ Implemented |
get_scopes | Get variable scopes for a frame | ✅ Implemented |
get_variables | Get variables in a scope | ✅ Implemented |
step_over | Step over the current line | ✅ Implemented |
step_into | Step into a function | ✅ Implemented |
step_out | Step out of a function | ✅ Implemented |
continue_execution | Continue running | ✅ Implemented |
close_debug_session | Close a session | ✅ Implemented |
pause_execution | Pause running execution | ❌ Not Implemented |
evaluate_expression | Evaluate expressions | ❌ Not Implemented |
get_source_context | Get source code context | ✅ Implemented |
📸 Screenshot: Multi-Session Debugging
This screenshot will show the debugger managing multiple concurrent debug sessions, demonstrating how AI agents can debug different scripts simultaneously with isolated session management.
Version 0.10.0 introduces a clean adapter pattern that separates language-agnostic core functionality from language-specific implementations:
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐
│ MCP Client │────▶│ SessionManager│────▶│ AdapterRegistry │
└─────────────┘ └──────────────┘ └─────────────────┘
│ │
▼ ▼
┌──────────────┐ ┌─────────────────┐
│ ProxyManager │◀─────│ Language Adapter│
└──────────────┘ └─────────────────┘
│
┌────────┴────────┐
│ │
┌─────▼──────┐ ┌─────▼──────┐
│Python │ │Mock │
│Adapter │ │Adapter │
└────────────┘ └────────────┘
Want to add debugging support for your favorite language? Check out the Adapter Development Guide!
Here's a complete debugging session example:
# 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
// 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" }
// 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" }
// 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" } }
First, get the scopes:
// 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": {} } ] }
Then get the local variables:
// 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 }
📸 Screenshot: Variable Inspection Reveals the Bug
This screenshot will show the TUI visualizer after stepping over line 4, where both variables incorrectly show value 20, clearly demonstrating the variable swap bug. The left panel shows the execution state, the center shows the highlighted code, and the right panel displays the incorrect variable values.
We welcome contributions! See CONTRIBUTING.md for guidelines.
# Development setup git clone https://github.com/debugmcp/mcp-debugger.git cd mcp-debugger npm install npm run build npm test
We use Act to run GitHub Actions workflows locally:
# 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
See tests/README.md for detailed testing instructions.
See Roadmap.md for planned features.
MIT License - see LICENSE for details.
Built with:
Give your AI the power to debug like a developer – in any language! 🎯