Files
Sven Scharmentke 4cce8b1d65 build: add a standalone mcp-windbg.exe build (#143)
Freezes the server into a single self-contained `mcp-windbg.exe` with
PyInstaller,
for users who want nothing to do with a Python toolchain. `cdb.exe`
stays a
prerequisite.

**What the build does.** `scripts/Build-Exe.ps1` builds it, `-Verify`
runs the
scenarios against it, and `MCP_WINDBG_SERVER_EXE` re-points the e2e
harness at a
built binary so the whole suite runs with the same assertions and a
different
launcher. A new `exe` job does both on every PR.

**Signed release asset.** The exe is signed and attached to each release
with a
`SHA256SUMS` taken from the signed binary, since signing rewrites the PE
and a
digest from before it would match nothing anyone can download. The
signature is
verified before the asset is attached.

**Identity.** Version resource generated from `pyproject.toml`, plus an
icon and a
`Comments` field stating the binary is signed by Liasoft GmbH, which
sponsors the
certificate. Windows shows the certificate subject as the verified
publisher, so
without that note the author and the signer read as two unrelated names.

**Why signing uses a self-hosted runner.** The signing service requires
one. Two
rules keep that safe on a public repository, and both must hold if the
job is ever
changed: it stays out of reach of `pull_request`, `pull_request_target`
and
`issue_comment`, which would run a fork's code on it, and it never
checks out the
repository. It declares `permissions: {}`, takes its endpoint from a
secret, and
waits for approval in a `signing` environment.

**Verified.** 29 scenarios pass against the binary (2 kernel skips, no
target).
Signing exercised end to end with a rehearsal run, which builds, signs
and
attaches while publishing nothing: `osslsigncode verify` reports
`Succeeded`,
signer `O=Liasoft GmbH`, RFC3161 countersigned.

**Not yet exercised.** Nothing launches the signed binary, so a
post-sign smoke
step is worth adding.

Out of scope: winget.
2026-10-10 16:47:04 +02:00

8.3 KiB

Client configuration

mcp-windbg works with any MCP client. Below are ready-to-paste snippets for the common ones. Install the server first, then point the client at it:

pip install mcp-windbg

All snippets set _NT_SYMBOL_PATH so stack traces resolve against the Microsoft symbol server. Adjust the path or add more locations as needed. For running from a checkout, see Development; for uvx, see Other install methods.

Claude Code

Server with uvx

The uvx plugin is the shortest path. It needs no pip install and no MCP configuration:

/plugin marketplace add svnscha/mcp-windbg
/plugin install mcp-windbg-uvx@mcp-windbg

This plugin provides the eleven tools. Skills and agents are optional separate installs. The plugin runs the server with uvx, so it needs uv on PATH; it pins the server version so the plugin and the server it drives stay in step.

Symbols work out of the box: the plugin supplies the Microsoft symbol server as a default for _NT_SYMBOL_PATH. If you already have that variable set, your value wins and the default is ignored, so a symbol path you tuned yourself is never overwritten.

Registering the server directly

Register the server with claude mcp add. The -s user scope makes it available in every project; drop it to scope the server to the current project only. Everything after -- is the command Claude Code runs:

claude mcp add mcp-windbg -s user -e _NT_SYMBOL_PATH="SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols" -- python -m mcp_windbg

Claude Code records the server in .claude.json:

{
    "mcpServers": {
        "mcp-windbg": {
            "type": "stdio",
            "command": "python",
            "args": ["-m", "mcp_windbg"],
            "env": {
                "_NT_SYMBOL_PATH": "SRV*C:\\Symbols*https://msdl.microsoft.com/download/symbols"
            }
        }
    }
}

Add server options such as a filter script after the command, for example -- python -m mcp_windbg --filter-script C:\filters\pii_redaction.py. Run claude mcp list to confirm it connected.

Skills for an existing server

After installing the uvx plugin or registering your server, optionally add the four workflows with the skills-only plugin:

/plugin marketplace add svnscha/mcp-windbg
/plugin install mcp-windbg-skills@mcp-windbg

Use /mcp-windbg-skills:analyze-dump to start. The plugin uses your existing connection, including an HTTP service, and does not require uv or change the server's launch command, symbol settings, or version.

Agents for an existing server

/plugin marketplace add svnscha/mcp-windbg
/plugin install mcp-windbg-agents@mcp-windbg

Ask for mcp-windbg-agents:crash-analyst to investigate a dump through your existing connection. This agents plugin works independently of the skills plugin and does not install a server.

Claude Desktop

Add to claude_desktop_config.json (at %APPDATA%\Claude\claude_desktop_config.json):

{
    "mcpServers": {
        "mcp-windbg": {
            "command": "python",
            "args": ["-m", "mcp_windbg"],
            "env": {
                "_NT_SYMBOL_PATH": "SRV*C:\\Symbols*https://msdl.microsoft.com/download/symbols"
            }
        }
    }
}

Restart Claude Desktop completely after saving. For background, see Connect local MCP servers.

VS Code (GitHub Copilot)

Create .vscode/mcp.json in your workspace, or use MCP: Open User Configuration (press ++f1++) to make it available everywhere:

{
    "servers": {
        "mcp_windbg": {
            "type": "stdio",
            "command": "python",
            "args": ["-m", "mcp_windbg"],
            "env": {
                "_NT_SYMBOL_PATH": "SRV*C:\\Symbols*https://msdl.microsoft.com/download/symbols"
            }
        }
    }
}

Then enable MCP: settings (++ctrl+comma++) -> search MCP -> enable Model Context Protocol in Copilot Chat, and restart VS Code.

To pass server options such as a filter script or a custom CDB path, add them to args:

"args": ["-m", "mcp_windbg",
         "--cdb-path", "C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x64\\cdb.exe"]

GitHub Copilot CLI

Edit C:\Users\{username}\.copilot\mcp-config.json. "tools": ["*"] enables all of the server's tools:

{
    "mcpServers": {
        "mcp-windbg": {
            "type": "local",
            "command": "python",
            "args": ["-m", "mcp_windbg"],
            "tools": ["*"],
            "env": {
                "_NT_SYMBOL_PATH": "SRV*C:\\Symbols*https://msdl.microsoft.com/download/symbols"
            }
        }
    }
}

Autohand Code

Autohand Code registers stdio servers with autohand mcp add <name> <command>. Add --scope project to keep the registration in the current workspace instead of the user profile:

autohand mcp add mcp-windbg python -m mcp_windbg

Autohand has no flag for a per-server _NT_SYMBOL_PATH; the server inherits the environment that launched Autohand. Set _NT_SYMBOL_PATH in that shell (or system-wide) before starting Autohand so stack traces resolve.

HTTP transport

To run the server separately and connect over HTTP, start it with the streamable-http transport:

mcp-windbg --transport streamable-http --host 127.0.0.1 --port 8000

Then point the client at the endpoint:

{
    "servers": {
        "mcp_windbg_http": {
            "type": "http",
            "url": "http://localhost:8000/mcp"
        }
    }
}

This transport has no authentication, so keep it on localhost or a trusted network. See Debug from another machine for the full workflow.

Other install methods

The snippets above use a pip install, which is the simplest path. Three alternatives:

Standalone executable

mcp-windbg.exe is attached to every release. It carries its own Python interpreter and every dependency, so nothing needs installing and no Python has to be present. cdb.exe is still a prerequisite.

Download it, put it somewhere stable, and point the client straight at it:

{
    "servers": {
        "mcp_windbg": {
            "type": "stdio",
            "command": "C:\\tools\\mcp-windbg.exe",
            "env": {
                "_NT_SYMBOL_PATH": "SRV*C:\\Symbols*https://msdl.microsoft.com/download/symbols"
            }
        }
    }
}

No args are needed. Command-line options work as usual, so "args": ["--cdb-path", "C:\\dbg\\cdb.exe"] is still available.

The release also publishes a SHA256SUMS file, and the executable is code signed. Both are worth checking:

(Get-FileHash .\mcp-windbg.exe -Algorithm SHA256).Hash   # compare with SHA256SUMS
Get-AuthenticodeSignature .\mcp-windbg.exe | Format-List Status, SignerCertificate

Status should read Valid.

!!! note "Why the signature says Liasoft GmbH" The project is written by Sven Scharmentke and the signing certificate is sponsored by Liasoft GmbH, so Windows names Liasoft GmbH as the verified publisher while the file's own details say Sven Scharmentke. The executable's Comments field states the same.

With uvx, which fetches and runs the server on demand with nothing installed first. Swap the command and args of any snippet above for:

{
    "command": "uvx",
    "args": ["--from", "git+https://github.com/svnscha/mcp-windbg", "mcp-windbg"]
}

From source (development):

git clone https://github.com/svnscha/mcp-windbg.git
cd mcp-windbg
python -m venv .venv
.\.venv\Scripts\activate
pip install -e .
{
    "servers": {
        "mcp_windbg": {
            "type": "stdio",
            "command": "${workspaceFolder}/.venv/Scripts/python",
            "args": ["-m", "mcp_windbg"]
        }
    }
}