Skip to main content
Glama
README.md
# mcp-dap

MCP-DAP bridge for enabling code agents to debug processes via the Debug Adapter Protocol (DAP).

## Overview

This package provides an MCP (Model Context Protocol) server that exposes debugging capabilities through DAP. It allows AI coding agents to:

- Launch and attach to debug sessions
- Set breakpoints and step through code
- Inspect variables and evaluate expressions
- Control execution flow (continue, step over, step into, step out)

## Installation

```bash
pip install mcp-dap
```

## Run with uvx

Run directly from this repo:

```bash
uvx --from . mcp-dap
```

Run directly from GitHub:

```bash
uvx --from git+https://github.com/ztripez/mcp-dap mcp-dap
```

For MCP client config, point the server command at `uvx`:

```json
{
  "mcpServers": {
    "dap": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/ztripez/mcp-dap", "mcp-dap"]
    }
  }
}
```

## Debug adapters

`mcp-dap` is the MCP bridge; language DAP servers are separate runtime tools.

- Python (`debugpy`): included as a Python dependency.
- Rust/C/C++ (`codelldb`): install CodeLLDB (`vadimcn.vscode-lldb`) or `codelldb` on PATH.
- JavaScript/TypeScript (`jsdebug`): install Node.js and `js-debug-dap` (or have VS Code js-debug).
- Java (`javadebug`): install JDK + VS Code Java Debug extension (`vscjava.vscode-java-debug`).
- Go (`godlv`): install Delve (`go install github.com/go-delve/delve/cmd/dlv@latest`).

You can configure adapter paths with environment variables or `mcp-dap.toml`.

### Rust evaluate tip (CodeLLDB)

When using the Rust adapter (`rust`/`codelldb`), expression evaluation in `repl` context is handled by LLDB's command console.

- Prefix expressions with `?` to evaluate as Rust expressions.
- Example: `? cli.steps`
- Example: `? cli`

Without the `?` prefix, LLDB may interpret input as a debugger command and return errors like `'cli' is not a valid command`.

If local variables appear empty at a breakpoint, set the breakpoint one or two lines after variable initialization and try again.

Example:

```toml
[adapters.codelldb]
enabled = true
codelldb_path = "/path/to/codelldb"

[adapters.jsdebug]
enabled = true
node_path = "/usr/bin/node"
jsdebug_path = "/home/user/.local/share/mcp-dap/js-debug/src/dapDebugServer.js"
```

## Development

```bash
# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run linting
ruff check .
ruff format --check .

# Run type checking
mypy src
```

## Usage

Configure in your MCP client:

```json
{
  "mcpServers": {
    "dap": {
      "command": "mcp-dap"
    }
  }
}
```

## License

MIT

TDQS

A3.5/5.0

Scored across 17 tools

Disambiguation4/5

Each tool maps to a distinct debugger action: session lifecycle, breakpoint control, stepping, and inspection. The only mild ambiguity is between debug_get_pending_events (which includes output events) and debug_get_output (raw stdout/stderr), but the descriptions mostly clarify the separation.

Naming Consistency5/5

All tools use the same debug_ prefix followed by a clear verb_noun pattern (e.g., debug_set_breakpoints, debug_step_over, debug_get_threads). The naming is highly predictable and makes the purpose of each tool easy to infer.

Tool Count4/5

17 tools is slightly above the typical well-scoped range, but each tool corresponds to a necessary DAP operation. The set is not bloated; it covers a reasonable breadth of debugging functionality without obvious redundancy.

Completeness4/5

The set covers session launch/attach/disconnect, breakpoint management, execution control, stack/scope/variable inspection, evaluation, and output retrieval. Minor gaps exist, such as listing existing breakpoints or setting variable values, but core debugging workflows are adequately supported.

Maintenance

ActivityInactive
ResponsivenessNo issues