AgentStack
MCP verified Apache-2.0 Self-run

Kd Mcp

mcp-originsec-kd-mcp · by originsec

An MCP server wrapping `kd.exe` for Windows kernel debugging

No reviews yet
0 installs
6 views
0.0% view→install

Install

$ agentstack add mcp-originsec-kd-mcp

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution Used
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Kd Mcp? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

kd-mcp

An MCP (Model Context Protocol) server wrapping kd.exe for Windows kernel debugging. Spawns kd.exe as a subprocess and exposes its functionality as 22 MCP tools. Handles KDNET connections, breakpoints, memory reads, register inspection, and symbol resolution without the threading limitations of DbgEng COM wrappers.

> Designed to pair with hyperv-mcp, > which manages Hyper-V VMs and configures KDNET inside guests via PowerShell > Direct. Use hyperv-mcp to snapshot a VM and set up KDNET, then pass the > resulting kernel_attach_string to kd-mcp's kernel_attach to drop into a > kernel debug session.


Requirements


Installation

Install directly from GitHub:

pip install git+https://github.com/originsec/kd-mcp.git

This installs the kd-mcp console script and pulls in the mcp dependency automatically.

To install a specific revision (tag or commit):

pip install git+https://github.com/originsec/kd-mcp.git@v0.1.0

kd.exe location

The server defaults to:

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\kd.exe

Override with the KD_EXE environment variable if installed elsewhere:

$env:KD_EXE = "C:\path\to\kd.exe"

Connecting to MCP clients

Claude Code (CLI)

claude mcp add kd -- kd-mcp

.mcp.json

{
  "mcpServers": {
    "kd": {
      "command": "kd-mcp"
    }
  }
}

If you need to pin KD_EXE per-config:

{
  "mcpServers": {
    "kd": {
      "command": "kd-mcp",
      "env": { "KD_EXE": "C:\\path\\to\\kd.exe" }
    }
  }
}

You can also invoke the module directly without the console script:

python -m kd_mcp

Development install

git clone https://github.com/originsec/kd-mcp.git
cd kd-mcp
pip install -e .

Available Tools (21 total)

Session

| Tool | Parameters | Returns | |------|-----------|---------| | kernel_attach | connect_string, reset_vm?, timeout | {status, kernel_version, attempts, output} | | status | — | {connected, pid?} | | detach | — | {status} |

kernel_attach — Launches kd.exe and connects via KDNET. Auto-respawns kd.exe on connection failures until timeout expires, so it can catch the KDNET hello packet whenever the target becomes ready (e.g. after a VM reboot). Pass reset_vm with a Hyper-V VM name to hard-reset the VM 2 seconds after kd.exe starts.

connect_string format: "net:port=50000,key=a1b2.c3d4.e5f6.a7b8.c9d0"

Execution Control

| Tool | Parameters | Returns | |------|-----------|---------| | go | timeout | {status, output} | | break_in | timeout | {status, output} | | step_into | — | {output} | | step_over | — | {output} |

go resumes execution (g) and waits for the next break event. break_in sends Ctrl+Break / NMI over KDNET to halt a running kernel.

Breakpoints

| Tool | Parameters | Returns | |------|-----------|---------| | bp | address, once | {output} | | hw_bp | address, width, access | {output} | | list_bps | — | {output} | | remove_bp | bp_id | {output} |

address accepts symbols or hex addresses: "nt!NtCreateFile", "fffff805\1234abcd"`

hw_bp access types: "e" = execute (default), "r" = read, "w" = write. remove_bp defaults to "*" (clear all breakpoints).

Inspection

| Tool | Parameters | Returns | |------|-----------|---------| | raw | cmd, timeout | {output} | | get_regs | — | {output} | | read_mem | address, count, width | {output} | | stack_trace | frames | {output} | | whereami | — | {rip, symbol, stack} | | list_modules | pattern? | {output} | | find_symbol | pattern | {output} | | addr_to_symbol | address | {output} | | set_sympath | path? | {output} | | reload_symbols | module? | {output} |

raw executes any kd command directly: "!process 0 0", "dt nt!_EPROCESS @$proc", etc.

read_mem width values: 1 = byte (db), 2 = word (dw), 4 = dword (dd), 8 = qword (dq).

whereami returns current RIP, nearest symbol (ln), and top 5 stack frames in one call.

set_sympath with no argument queries the current path. Example path: "srv*C:\\symbols*https://msdl.microsoft.com/download/symbols"

Typical Workflow

# 1. Attach kd.exe (connect_string from your KDNET setup)
kernel_attach(connect_string="net:port=50000,key=a1b2.c3d4.e5f6.a7b8.c9d0",
              reset_vm="debug-vm")

# 2. Set a breakpoint and resume
bp(address="nt!NtCreateFile")
go()

# 3. Inspect on break
whereami()
stack_trace(frames=30)
read_mem(address="@rcx", count=32, width=8)

# 4. Continue or detach
go()
detach()

Contributing

Issues and PRs welcome. This is a research tool, not a product — expect rough edges and breaking changes between versions.


License

Apache 2.0 — see [LICENSE](./LICENSE) and [NOTICE](./NOTICE)

Built by Origin for security research and red team operations.

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.