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.
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"]
}
}
}