by duty1g
x64dbg-MCP Server is a native MCP (Model Context Protocol) plugin for x64dbg that exposes the debugger's full functionality over HTTP. Connect any MCP-compatible AI assistant and control x64dbg programmatically: set breakpoints, step through code, read memory, dump registers, and more. Built with Zig — zero dependencies, single-binary output, cros
# Add to your Claude Code skills
git clone https://github.com/duty1g/x64dbg-mcp-serverGuides for using ai agents skills like x64dbg-mcp-server.
Last scanned: 8/24/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-08-24T04:42:30.884Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}x64dbg-mcp-server is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by duty1g. x64dbg-MCP Server is a native MCP (Model Context Protocol) plugin for x64dbg that exposes the debugger's full functionality over HTTP. Connect any MCP-compatible AI assistant and control x64dbg programmatically: set breakpoints, step through code, read memory, dump registers, and more. Built with Zig — zero dependencies, single-binary output, cros. It has 1,910 GitHub stars.
Yes. x64dbg-mcp-server passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/duty1g/x64dbg-mcp-server" and add it to your Claude Code skills directory (see the Installation section above). x64dbg-mcp-server ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
x64dbg-mcp-server is primarily written in Zig. It is open-source under duty1g on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh x64dbg-mcp-server against similar tools.
No comments yet. Be the first to share your thoughts!
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
You are controlling x64dbg through MCP tools.
Transport matters:
WaitForEvent to long-poll for events, or read the [state] and [event:*] lines included in every tool response.Treat every assumption about debugger state as stale until verified by a tool response.
Before every action, call GetDebugState. No exceptions.
NO_TARGET — nothing loaded. Use LoadBinary or AttachProcess first.PAUSED — target is stopped. You can read memory, disassemble, inspect registers.RUNNING — target is executing. You CANNOT read memory, disassemble, or inspect anything. Call WaitForPause or PauseDebug first.Every tool response includes a [state] line at the end showing the current debugger status — PAUSED with address/module/instruction, RUNNING, or NO_TARGET. Always read it. This is your primary state awareness mechanism.
Every tool response may also include [event:*] lines — queued debugger events (breakpoints hit, exceptions, DLL loads) that occurred since your last call. Always read these too.
If the user says "paused", "hit breakpoint", "stopped", or "debugger is paused" — immediately call GetDebugState to see where you are. Do not guess.
MCP is request/response. Between your tool calls, anything can happen — breakpoints can hit, exceptions can fire, the user can interact with the debugger. Every time you are about to act, verify first.
Bad:
SetBreakpoint → run → Disassemble (wrong: run blocks but verify anyway)
Good:
GetDebugState → SetBreakpoint → run → GetDebugState → Disassemble
GetDebugState
LoadBinary (path)
WaitForPause — target pauses at system breakpoint
GetDebugState — confirm PAUSED, note the address
GetAllRegisters — see initial state
ListModules — see what's loaded
Disassemble — look at current code
GetDebugState — must be PAUSED
SetBreakpoint (target) — set the BP
run — blocks until target pauses (5-min timeout)
GetDebugState — confirm PAUSED, check address
Disassemble — see where we landed
GetAllRegisters — inspect state
GetDebugState — must be PAUSED
StepOver — response includes new address + disassembly
— read the response carefully before next step
StepOver — keep stepping, reading each response
GetAllRegisters — check registers when needed
GetCallStack — check call context when needed
SearchSymbols (pattern) — find the API across all modules
SetBreakpoint (address) — break on it
run — blocks until BP hits
GetDebugState
GetArguments — read function arguments
GetCallStack — see who called it
GetDebugState — must be PAUSED
TraceInto (count) — step N instructions, get address + disasm log
GetDebugState — see where we ended up
LoadBinary → WaitForPause → GetDebugState
AnalyzeModule — check sections, EP, image size
DetectOEP — look for packing indicators (RWX sections, zero raw sizes)
SetHardwareBreakpoint — on suspected OEP or after unpacking stub
run → GetDebugState — run blocks until pause
DumpModule — dump the unpacked module
GetDebugState — must be PAUSED
Disassemble (address) — see current bytes
WriteMemToAddress — patch with new bytes
Disassemble (address) — verify the patch
GetPatches — see all active patches
WaitForEvent (timeoutMs: 120000) — long-poll up to 2 minutes
— returns any events that fired
GetDebugState — check where we are now
WaitForEvent (timeoutMs: 120000) — keep watching
Every tool response includes a [state] line showing current debugger status and any [event:*] lines with queued events. You always know where you are.
| Tool | Parameters | Description |
|---|---|---|
GetDebugState |
— | Current state (NO_TARGET/RUNNING/PAUSED), PID, address, module |
LoadBinary |
filePath |
Load an executable into the debugger |
AttachProcess |
pid |
Attach to a running process by PID |
run |
timeoutMs? (default 300000) |
Resume execution (F9). Blocks until target pauses or timeout |
PauseDebug |
— | Pause the target (F12) |
WaitForPause |
timeout? (ms, default 10000) |
Block until target pauses (breakpoint/exception) |
StopDebug |
— | Terminate debug session |
RestartDebug |
— | Restart debug session |
ExecuteDebuggerCommand |
command |
Run any x64dbg command string. Blocks if target becomes RUNNING |
EvalExpression |
expression |
Evaluate expression (address, register, symbol, arithmetic) |
Echo |
message |
Echo input back (connectivity test) |
ListCommandsByCategory |
category? |
List available MCP tools |
SearchForStrings |
searchText |
Search process memory for text |
GetEventLog |
count? (default 20) |
Last N debugger events |
ClearEventLog |
— | Clear the event log |
WaitForEvent |
timeoutMs? (default 30000) |
Long-poll for debugger events. For HTTP clients to watch state changes |
| Tool | Parameters | Description |
|---|---|---|
StepInto |
— | Single-step into calls (F7). Returns new address + disassembly |
StepOver |
— | Step over calls (F8). Returns new address + disassembly |
StepOut |
— | Run until return (Ctrl+F9). Returns new address + disassembly |
RunToAddress |
address |
Run until hitting a specific address |
TraceInto |
count |
Step N instructions recording address + disassembly for each |
TraceOver |
count |
Trace N instructions stepping OVER calls |
| Tool | Parameters | Description |
|---|---|---|
SetBreakpoint |
target (address or symbol) |
Set INT3 breakpoint |
SetHardwareBreakpoint |
address, type (r/w/x), size? |
Set hardware BP (DR0-DR3) |
SetConditionalBreakpoint |
address, condition, log? |
Set BP with condition expression |
SetMemoryBreakpoint |
address, type (r/w/x), singleshoot? |
Set memory breakpoint |
SetExceptionBreakpoint |
exceptionCode, chance (1/2/3), action |
Configure exception BP (break/ignore) |
DeleteExceptionBreakpoint |
exceptionCode |
Delete an exception breakpoint |
EnableBreakpoint |
address |
Enable a breakpoint |
DisableBreakpoint |
address |
Disable without deleting |
ToggleBreakpoint |
address |
Toggle enabled/disabled |
DeleteBreakpoint |
target |
Remove a breakpoint |
DeleteAllBreakpoints |
— | Remove all BPs (normal, hardware, memory) |
ResetHitCount |
address |
Reset a BP's hit counter to zero |
ListBreakpoints |
— | List all active breakpoints |
SetBreakpointCommand |
address, command |
Run x64dbg command on BP hit |
SetBreakpointFastResume |
address, enable |
Auto-resume on BP hit |
| Tool | Parameters | Description |
|---|---|---|
Disassemble |
address?, count? (default 16) |
Disassemble N instructions |
DisassembleFunction |
address? |
Disassemble entire function (needs analysis first) |
GetCurrentAddress |
— | Current EIP/RIP with label and comment |
GetFunctions |
module? |
List analyzed functions with addresses |
GetReferences |
address |
Find CALL/JMP xrefs to target address |
Assemble |
address, instruction |
Assemble an instruction at address |
| Tool | Parameters | Description |
|---|---|---|
GetAllRegisters |
— | Dump all general-purpose registers |
SetRegister |
register, value |
Set a CPU register value |
GetCallStack |
— | Current thread call stack |
GetArguments |
count? |
Read function arguments from stack/registers |
WatchExpressions |
expressions (array) |
Evaluate multiple expressions in one call |
FollowPointer |
address, depth? |
Dereference pointer chain N levels deep |
| Tool | Parameters | Description |
|---|---|---|
ReadMemory |
address, size? (default 64) |
Hex dump of process memory |
WriteMemToAddress |
address, bytes (hex) |
Patch memory with hex bytes |
AllocateMemory |
size |
Allocate memory in target process |
FreeMemory |
address |
Free allocated memory |
GetMemoryMap |
— | Memory regions with addresses, sizes, protection |
GetDumpableRegions |
— | List committed, readable memory regions |
FindPattern |
pattern, module? |
Scan for byte pattern with ?? wildcards |
GetPatches |
— | List all memory patches |
RestorePatches |
— | Restore all patches to original bytes |
DumpMemory |
address, size, filePath |
Save memory region to file |
| Tool | Parameters | Description |
|---|---|---|
ListModules |
— | List loaded modules with base addresses and sizes |
GetImports |
module? |
Show module import table |
GetExports |
module? |
Show module export table |
SearchSymbols |
pattern |
Search for symbols matching pattern across all modules |
ListSymbols |
module |
List exported symbols of a specific module |
GetStrings |
module? |
Extract ASCII strings from module memory |
| Tool | Parameters | Description |
|---|---|---|
AnalyzeModule |
module? |
PE structure: sections, EP, image size, characteristics |
AnalyzeCode |
address?, type (function/module/controlflow) |
Run code analysis |
DetectOEP |
module? |
Detect Original Entry Point for packed executables |
DumpModule |
module, filePath |
Dump entire module to file |
GetPEB |
— | Read Process Environment Block fields |
GetSEHChain |
— | Walk Structured Exception Handler chain (x32) |
SaveDatabase |
— | Save the x64dbg database (.dd64/.dd32) |
| Tool | Parameters | Description |
|---|---|---|
CommentOrLabelAtAddress |
address, text, type (comment/label) |
Add comment/label in disassembly |
SetBookmark |
address |
Set a bookmark |
DeleteBookmark |
address |
Delete a bookmark |
ListBookmarks |
— | List all bookmarks |
| Tool | Parameters | Description |
|---|---|---|
GetThreads |
— | List all threads with IDs and instruction pointers |
SwitchThread |
threadId |
Switch active thread context |
SuspendThread |
threadId |
Suspend a thread |
ResumeThread |
threadId |
Resume a suspended thread |
| Mistake | Fix |
|---|---|
| Disassemble while target is RUNNING | WaitForPause or PauseDebug first |
Assume breakpoint was hit after run |
run blocks now, but still GetDebugState after |
| Forget to check state after user says "paused" | Immediately GetDebugState |
| Read memory at wrong address | EvalExpression to resolve symbols first |
Use DisassembleFunction without analysis |
AnalyzeCode with type=function first, or ExecuteDebuggerCommand with analr <address> |
| Set breakpoint on symbol without resolving | SearchSymbols or EvalExpression to get actual address |
| Lose track of which binary is loaded | GetDebugState tells you, ListModules for full list |
Pass MCP tool name to ExecuteDebuggerCommand |
Call the tool directly — ExecuteDebuggerCommand rejects MCP tool names |
Use erun to blindly pass all exceptions |
Use SetExceptionBreakpoint for selective exception handling |
| Go idle while user interacts with GUI | Call WaitForEvent with longer timeout (60-120s) to watch for events |
Use EvalExpression to resolve anything:
kernel32:CreateFileA, ntdll:NtAllocateVirtualMemorycip, rax, esp+4, [rsp+0x28]rax+0x10, modulebase+0x1000CommentOrLabelAtAddressWhen analyzing code, always tell the user:
Reference concrete addresses and module names — never say "the current function" without saying which one.
When the target is RUNNING in a message loop (waiting for user input, showing a dialog, sitting at a UI screen), run will time out because no breakpoint is being hit. Do NOT fall back to static file analysis — use the debugger properly.
Strategies:
GetMessageA, SendMessageA, CreateFileA, ReadFile, button handlers). The target pauses when the user triggers that code path.WaitForEvent(timeoutMs: 120000) to watch for breakpoint hits or exceptions while they click around.Never give up and read the binary file from disk. The debugger can always pause, inspect, and resume.
x64dbg-MCP Server is a native MCP (Model Context Protocol) plugin for x64dbg that exposes the debugger's full functionality over HTTP. Connect any MCP-compatible AI assistant and control x64dbg programmatically: set breakpoints, step through code, read memory, dump registers, and more.
Built with Zig — zero dependencies, single-binary output, cross-compiles to both x32 and x64 from any host. No .NET, no Python, no runtime — just drop the plugin into your x64dbg plugins folder and go.
MCP 2024-11-05 — Streamable HTTP + SSE transports, JSON-RPC 2.0.
Download the latest release or build from source:
dist/ into your x64dbg root folder (deploys both x32 and x64)The MCP server starts automatically. Default ports:
0.0.0.0:90940.0.0.0:9095Add to your MCP client config (.mcp.json, etc.):
Streamable HTTP (recommended):
{
"mcpServers": {
"x64dbg": {
"type": "http",
"url": "http://localhost:9094/",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
}
}
}
SSE (legacy clients):
{
"mcpServers": {
"x64dbg": {
"type": "sse",
"url": "http://localhost:9094/sse",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
}
}
}
If connecting from WSL or a remote machine, use the host's IP address and set the bind address to 0.0.0.0 in the config dialog.
Example — AI-assisted reverse engineering session:
You: Load calc.exe and break at the entry point
AI: [calls LoadBinary, SetBreakpoint, run, WaitForPause]
Loaded calc.exe, hit breakpoint at 0x7FF7A1234000 in calc.exe
You: What are the current registers?
AI: [calls GetAllRegisters]
RAX: 0x0, RCX: 0x7FF7A1234000, RDX: 0x1, ...
You: Read 64 bytes at the current instruction pointer
AI: [calls ReadMemory]
48 83 EC 28 E8 12 34 00 00 ...
You: Step over the next 3 instructions and show me the stack
AI: [calls StepOver x3, GetCallStack]
Stepped to 0x7FF7A1234010, call stack: ...
72 MCP tools covering the full x64dbg debugging workflow.
| Tool | Description |
|---|---|
GetDebugState |
Current debugger state, PID, instruction pointer |
LoadBinary |
Load an executable into the debugger |
ExecuteDebuggerCommand |
Run any x64dbg command |
ListCommandsByCategory |
List available MCP tools |
SearchForStrings |
Search process memory for text |
GetEventLog |
Last N debugger events (exceptions, breakpoints, DLL loads) |
ClearEventLog |
Clear the event log |
EvalExpression |
Evaluate any x64dbg expression (address, register, arithmetic) |
AttachProcess |
Attach to a running process by PID |
Echo |
Echo input back |
WaitForEvent |
Long-poll for debugger events (breakpoint, pause, resume, exception) |
| Tool | Description |
|---|---|
GetCurrentAddress |
Current EIP/RIP with label and comment |
Disassemble |
Disassemble N instructions at an address |
DisassembleFunction |
Disassemble an entire function by boundaries |
ReadMemory |
Hex dump of process memory |
WaitForPause |
Block until target pauses |
run |
Resume execution (F9) |
StepInto |
Single-step into calls (F7) |
StepOver |
Step over calls (F8) |
StepOut |
Run until return (Ctrl+F9) |
PauseDebug |
Pause the target (F12) |
StopDebug |
Terminate debug session |
RestartDebug |
Restart debug session |
SetBreakpoint |
Set INT3 breakpoint at address/symbol |
SetHardwareBreakpoint |
Set hardware breakpoint (DR0-DR3, read/write/execute) |
SetConditionalBreakpoint |
Set breakpoint with condition expression and optional log |
EnableBreakpoint |
Enable a breakpoint at a given address |
DisableBreakpoint |
Disable a breakpoint without deleting it |
ToggleBreakpoint |
Toggle a breakpoint between enabled and disabled |
DeleteBreakpoint |
Remove a breakpoint |
DeleteAllBreakpoints |
Remove all breakpoints (normal, hardware, memory) |
ResetHitCount |
Reset a breakpoint's hit counter to zero |
ListBreakpoints |
List all active breakpoints |
GetAllRegisters |
Dump all general-purpose registers |
SetRegister |
Set a CPU register value |
GetCallStack |
Current thread call stack |
GetThreads |
List all threads with IDs and instruction pointers |
SwitchThread |
Switch active thread context |
SuspendThread |
Suspend a thread by its thread ID |
ResumeThread |
Resume a suspended thread |
ListModules |
List loaded modules with base addresses and sizes |
GetMemoryMap |
Memory regions with addresses, sizes, and protection |
GetDumpableRegions |
List committed, readable memory regions |
AllocateMemory |
Allocate memory in the target process |
FreeMemory |
Free allocated memory in the target process |
WriteMemToAddress |
Patch memory with hex bytes |
RestorePatches |
Restore all patches to original bytes |
Assemble |
Assemble an instruction at an address |
CommentOrLabelAtAddress |
Add comment/label in disassembly |
SetBookmark |
Set a bookmark at an address |
DeleteBookmark |
Delete a bookmark |
ListBookmarks |
List all bookmarks |
GetImports |
Show module import table |
GetExports |
Show module export table |
SearchSymbols |
Search for symbols matching a pattern |
ListSymbols |
List exported symbols of a module |
GetPatches |
List all memory patches |
FindPattern |
Scan module memory for byte pattern with ?? wildcards |
GetStrings |
Extract ASCII strings from a module's memory |
GetReferences |
Find CALL/JMP xrefs to a target address |
GetFunctions |
List analyzed functions with addresses and labels |
AnalyzeModule |
PE structure analysis: sections, EP, image size |
DetectOEP |
Detect Original Entry Point for packed executables |
DumpMemory |
Save memory region to file on disk |
DumpModule |
Dump an entire module to a file |
RunToAddress |
Run until hitting a specific address |
TraceInto |
Step N instructions recording address + disassembly |
FollowPointer |
Dereference pointer chain N levels deep |
WatchExpressions |
Evaluate multiple expressions in one call |
GetSEHChain |
Walk Structured Exception Handler chain (x32) |
GetPEB |
Read Process Environment Block fields |
GetArguments |
Read function arguments from stack/registers |
SetMemoryBreakpoint |
Set memory breakpoint (read/write/execute) |
SetExceptionBreakpoint |
Configure exception breakpoint (break or ignore, first/second/all chance) |
DeleteExceptionBreakpoint |
Delete an exception breakpoint |
AnalyzeCode |
Run code analysis (function, module, or control flow) |
TraceOver |
Trace N instructions stepping over calls |
SetBreakpointCommand |
Set a command to execute when a breakpoint is hit |
SetBreakpointFastResume |
Enable/disable fast resume (auto-continue) on a breakpoint |
SaveDatabase |
Save the x64dbg database (.dd64/.dd32) |
Go to Plugins > x64dbg-MCP Server > Configure MCP Server... to change the bind address, port, a