使用说明
x64dbg Multi-Instance MCP
Multi-instance MCP server for x64dbg debugger.Debug multiple targets simultaneously with automatic port assignment.
Based on Wasdubya/x64dbgMCP (original single-instance MCP server).
Features
- 50+ x64dbg SDK Tools - Registers, memory, disassembly, breakpoints, modules, symbols, threads, labels, comments, pattern search, and more
- Multi-Instance Support - Debug multiple targets simultaneously, each with a unique instance ID
- Auto Port Assignment - Patched plugin automatically finds a free port when the default (8888) is in use
- Cross-Architecture Support - Works with both x64dbg (64-bit) and x32dbg (32-bit)
- Auto-Discovery - Running x64dbg instances are automatically detected and registered
- Output Caching - Large responses are automatically truncated and cached for paginated retrieval
Quick Install
Option A: One-click (Windows)
Double-click install.bat
Option B: Manual
git clone https://github.com/wasdubya/x64dbgmcp
cd x64dbgmcp
pip install -e .
claude mcp add --scope user x64dbg -- python -m x64dbg_multi_mcp
Option C: Claude Desktop config (claude_desktop_config.json)
{
"mcpServers": {
"x64dbg": {
"command": "python",
"args": ["-m", "x64dbg_multi_mcp"]
}
}
}
Plugin Setup
- Copy
MCPx64dbg.dp64to[x64dbg_dir]/release/x64/plugins/ - Copy
MCPx64dbg.dp32to[x64dbg_dir]/release/x32/plugins/(for 32-bit) - Launch x64dbg - check logs (ALT+L) for
HTTP server started at http://localhost:8888/
The patched plugin (build_msvc/build64/Release/MCPx64dbg.dp64) includes auto port assignment:
- First instance binds to port 8888
- Second instance automatically binds to 8889, third to 8890, etc.
- No manual configuration needed
Multi-Instance Debugging
Claude/Cursor
↓ MCP (stdio)
x64dbg-multi-mcp Server (central router)
├── x64dbg #1 (port 8888) → instance "a1b2" [malware.exe]
├── x64dbg #2 (port 8889) → instance "c3d4" [dropper.dll]
└── x64dbg #3 (port 8890) → instance "e5f6" [payload.exe]
Usage
"List all x64dbg instances" → list_instances()
"Read RAX from instance a1b2" → RegisterGet(instance_id="a1b2", register="rax")
"Set breakpoint in instance c3d4" → DebugSetBreakpoint(instance_id="c3d4", addr="0x1400010a0")
"Compare modules between instances" → GetModuleList on each instance
Management Tools
| Tool | Description |
|---|---|
list_instances |
List all active x64dbg instances with health status |
refresh_tools |
Re-scan for new x64dbg instances |
get_cached_output |
Retrieve truncated output with pagination |
Available Tools (56)
| Category | Tools |
|---|---|
| Debug Control | DebugRun, DebugPause, DebugStop, DebugStepIn, DebugStepOver, DebugStepOut |
| Registers | RegisterGet, RegisterSet, GetRegisterDump |
| Memory | MemoryRead, MemoryWrite, MemoryIsValidPtr, MemoryGetProtect, MemoryBase, GetMemoryMap, MemoryRemoteAlloc, MemoryRemoteFree |
| Breakpoints | DebugSetBreakpoint, DebugDeleteBreakpoint, SetHardwareBreakpoint, DeleteHardwareBreakpoint, GetBreakpointList |
| Disassembly | DisasmGetInstructionRange, StepInWithDisasm |
| Assembly | AssemblerAssemble, AssemblerAssembleMem |
| Modules & Symbols | GetModuleList, QuerySymbols |
| Threads | GetThreadList, GetTebAddress |
| Stack | StackPop, StackPush, StackPeek, GetCallStack |
| Flags | FlagGet, FlagSet |
| Labels & Comments | LabelSet, LabelGet, LabelList, CommentSet, CommentGet |
| Cross-References | XrefGet, XrefCount |
| Pattern Search | PatternFindMem |
| Expressions | MiscParseExpression, MiscRemoteGetProcAddress |
| Strings | StringGetAt |
| Branch Analysis | GetBranchDestination |
| Patches | GetPatchList, GetPatchAt |
| System | EnumHandles, EnumTcpConnections, ExecCommand |
| Page Rights | SetPageRights |
All tools require an instance_id parameter to specify which x64dbg instance to target.
Build from Source
Requirements: CMake + MSVC (Visual Studio Build Tools)
git clone https://github.com/wasdubya/x64dbgmcp
cd x64dbgmcp
cmake -S . -B build -A x64
cmake --build build --config Release
For both 32-bit and 64-bit:
cmake --build build --target all_plugins --config Release
For 32-bit only:
cmake -S . -B build32 -A Win32 -DBUILD_BOTH_ARCHES=OFF
cmake --build build32 --config Release
Deployment / Migration
To install on a new machine:
- Copy the entire
x64dbgMCPfolder - Run
install.bat(requires Python 3.10+) - Copy
MCPx64dbg.dp64/.dp32to x64dbg'splugins/directory - Done - launch x64dbg and Claude/Cursor
To uninstall: run uninstall.bat
Project Structure
x64dbgMCP/
├── src/
│ ├── MCPx64dbg.cpp # C++ plugin (HTTP server, auto-port)
│ ├── x64dbg.py # Legacy single-instance MCP server
│ └── x64dbg_multi_mcp/ # Multi-instance MCP package
│ ├── server.py # Central MCP server (mcp.server.Server)
│ ├── router.py # Routes tools to x64dbg instances via HTTP
│ ├── registry.py # File-based instance registry
│ ├── instance_id.py # Deterministic base36 ID generation
│ ├── health.py # Health checks & auto-discovery
│ ├── cache.py # Output caching for large responses
│ └── tools.py # 56 tool schema definitions
├── tests/
│ ├── test_multi_mcp_e2e.py # End-to-end test with mock servers
│ └── test_all_tools_live.py # Live test against real x64dbg
├── setup.py # pip install support
├── install.bat # One-click installer
└── uninstall.bat # One-click uninstaller
Usage Tips
- Provide the full path of the binary so the model can restart it if needed:
init C:\Path\to\EXE - Use
GetModuleListfirst so the model knows valid address ranges - Use
list_instancesto see all connected debuggers before starting analysis - x64dbg won't respond to addresses out of range - always verify with
MemoryIsValidPtr
Example from Cursor
