MCP server for .NET debugging — enable AI agents to debug .NET applications interactively.
debug-mcp is a Model Context Protocol server that exposes .NET debugging capabilities as structured API tools. It allows AI assistants like Claude, GPT, or Copilot to:
- Launch or attach to .NET processes
- Set breakpoints, exception breakpoints, and tracepoints
- Step through code line by line
- Inspect variables, evaluate expressions, and read memory
- Analyze stack traces and threads
- Get full exception context with one call (exception autopsy)
- Navigate code with go-to-definition, find usages, and diagnostics
- Automatically resolve symbols from public symbol servers
Unlike similar tools that use external debuggers via DAP protocol, debug-mcp interfaces directly with the .NET runtime using ICorDebug APIs — the same approach used by JetBrains Rider.
# No installation needed (.NET 10+)
dnx -y debug-mcp- .NET 10 SDK or later
- Linux (Windows and macOS support planned)
Add to your claude_desktop_config.json:
{
"mcpServers": {
"dotnet-debugger": {
"command": "dnx",
"args": ["-y", "debug-mcp"]
}
}
}Add to your .mcp.json:
{
"mcpServers": {
"dotnet-debugger": {
"command": "dnx",
"args": ["-y", "debug-mcp"]
}
}
}You: Debug my ASP.NET app and find why GetUser returns null
Claude: I'll launch your application and investigate.
[Calls debug_launch with program path]
[Calls breakpoint_set at UserService.cs:42]
[Calls debug_continue]
[Calls breakpoint_wait with 30s timeout]
The breakpoint was hit. Let me check the variables.
[Calls variables_get for current frame]
I found the issue: the `userId` parameter is an empty string.
The bug is in the calling code at line 28 where...
You: My app throws NullReferenceException somewhere in checkout. Find it.
Claude: I'll set an exception breakpoint and trigger the flow.
[Calls debug_launch with program path]
[Calls breakpoint_set_exception for System.NullReferenceException]
[Calls debug_continue]
[Calls breakpoint_wait with include_autopsy: true]
Caught it! The exception was thrown in OrderService.cs at line 87.
Here's the full context from the autopsy:
- cart.Items was null because LoadCart() returned an empty cart
- The null check at line 85 only checked cart, not cart.Items
| Category | Tools | Description |
|---|---|---|
| Session | debug_launch, debug_attach, debug_disconnect, debug_state |
Start, stop, and monitor debug sessions |
| Execution | debug_continue, debug_pause, debug_step |
Control program flow |
| Breakpoints | breakpoint_set, breakpoint_remove, breakpoint_list, breakpoint_enable, breakpoint_wait |
Set and manage source breakpoints |
| Exception Breakpoints | breakpoint_set_exception |
Break on specific exception types (first/second chance) |
| Tracepoints | tracepoint_set |
Non-blocking breakpoints that log messages without pausing |
| Exception Autopsy | exception_get_context |
Full exception analysis: type, message, inner exceptions, stack frames with source, and local variables |
| Inspection | threads_list, stacktrace_get, variables_get, evaluate |
Examine program state |
| Memory | object_inspect, memory_read, layout_get, references_get, members_get |
Deep object and memory analysis |
| Modules | modules_list, modules_search, types_get |
Explore loaded assemblies and types |
| Code Analysis | code_load, code_goto_definition, code_find_usages, code_find_assignments, code_get_diagnostics |
Roslyn-powered code navigation and diagnostics |
| Process I/O | process_write_input, process_read_output |
Interact with debuggee stdin/stdout |
| URI | Description |
|---|---|
debugger://session |
Current debug session state |
debugger://breakpoints |
All active breakpoints |
debugger://threads |
Thread list with states |
debugger://source/{file} |
Source file contents |
- Architecture — System design and components
- How Debugging Works — ICorDebug internals explained
- MCP Tools Reference — Complete API documentation
- MCP Resources — Subscribable state views
- Development Guide — Building, testing, contributing
| Project | Language | Approach | .NET Support |
|---|---|---|---|
| mcp-debugger | TypeScript | DAP | Via external debugger |
| dap-mcp | Python | DAP | Via external debugger |
| LLDB MCP | C++ | Native | No |
| debug-mcp | C# | ICorDebug | Native, direct |
AGPL-3.0 — see LICENSE for details.