ida-fusion-mcp
ida-fusion-mcp is a multi-instance IDA Pro MCP server for reverse engineering, enabling AI clients to analyze, modify, and debug one or more IDA Pro databases (GUI and headless idalib sessions) simultaneously.
Instance & Session Management
List and manage multiple IDA Pro GUI and headless instances
Route tool calls to specific instances via
instance_idCompare metadata, entrypoints, and segments between two IDA instances
Retrieve large/paginated outputs via cached result chunking
Refresh tool schemas and internal caches
Binary Triage & Overview
survey_binary– One-call compact overview: file metadata, segments, statistics, top strings/functions, imports, call graph summaryanalyze_function– Deep single-function analysis: pseudocode, strings, constants, callers, callees, xrefs, comments, basic blocksanalyze_component– Group analysis of related functions: internal call graph, shared globals, interface vs. internal classification
Navigation & Discovery
List/filter functions, globals, and imports with pagination
Search by regex, byte patterns (with wildcards), strings, immediates, data/code references, or full-text
Structured entity queries across functions, globals, imports, strings, and names
Decompilation & Disassembly
Decompile functions to pseudocode; disassemble to assembly
Batch decompile to file; export function data as JSON, C headers, or prototypes
Cross-References & Call Graphs
Get xrefs to addresses or struct fields
Build call graphs with depth/edge limits
Get control flow graph basic blocks
Trace data flow forward or backward across multiple hops
Memory Reading
Read raw bytes, typed integers (i8–u64, various endianness), strings, and global variable values
Read and parse struct layouts at addresses
Convert numbers between hex, decimal, binary, and ASCII
Patching & Modification
Patch raw bytes or inject assembly instructions
Write typed integer values
Define/undefine functions, code instructions, and data
Renaming & Comments
Batch rename functions, globals, locals, and stack variables
Set or append comments (with deduplication) in disassembly and decompiler views
diff_before_after– Apply a rename/type/comment change and compare decompilation side by side
Type System
Declare C types, apply types to functions/globals/locals/stack variables, infer types
Search struct definitions, inspect types with size and member layout
Manage stack frame variables (query, create, delete)
Batch-apply multiple type edits
Signature Generation
Generate IDA, x64dbg, mask, and bitmask byte signatures for addresses, functions, or address ranges
Find signatures for code locations referencing a specific address
Debugger Control
Get debugger status and current instruction pointer
Read general-purpose and named registers (current or specific threads)
Set/clear breakpoint conditions in batch
Read/write debug memory and get stack traces
Scripting
Execute arbitrary Python code or script files directly within IDA's context with full API access
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ida-fusion-mcplist instances and decompile entry points of both binaries"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ida-fusion-mcp
ida-fusion-mcp is a fork and continuation of MeroZemory/ida-multi-mcp. It keeps the original multi-instance IDA routing model, renames the public project, and adds a larger tool surface ported from ida-pro-mcp.
The goal is straightforward: one MCP endpoint for reverse-engineering work that spans more than one IDA database. Your AI client keeps one stable server config, and each tool call is routed to the correct IDA Pro GUI instance or headless idalib worker by instance_id.
v0.1.1 stabilization candidate: fixes synchronization, installer safety, debugger routing/schema parity, macOS detection, and selected correctness issues. It is a local candidate only; no tag, package, or public release has been published.
The project combines three things that are usually separate:
multi-binary routing for loaders, payloads, plugins, services, and shared libraries;
a broad IDA tool surface adapted from
ida-pro-mcp;headless IDA Pro sessions for background analysis without opening another GUI window.
What Problem It Solves
Most IDA MCP setups assume a single active database. That is awkward once an investigation needs context from several files at once: a dropper and payload, a patched and unpatched build, a client and server pair, or a main executable plus libraries.
ida-fusion-mcp makes the target explicit. The AI client first asks for registered instances, receives short IDs such as k7m2 or px3a, and includes one of those IDs in every IDA tool call. That small constraint prevents a common failure mode: the model decompiles, renames, patches, or debugs the wrong database because two IDA windows are open.
Related MCP server: IDA Auto MCP
Core Ideas
Idea | Practical effect |
One MCP server | Configure Claude Code, Cursor, Codex, VS Code, or another MCP client once. |
Many IDA backends | GUI IDA instances and headless |
Required | Tool calls are deliberately scoped to one database. |
Static + dynamic schemas | Tools are visible before IDA is open, then refreshed from live IDA instances. |
Local-only transport | IDA listens on loopback HTTP JSON-RPC; the MCP server talks stdio to the client. |
Compatibility aliases | The public name is |
Tool Surface
The IDA-side tools cover the normal reverse-engineering loop: discovery, navigation, decompilation, xrefs, memory reads, patching, type work, comments, stack variables, debugger access, and binary triage.
The recent port from ida-pro-mcp adds these higher-level capabilities:
Category | Tools |
Signature generation |
|
Type catalog |
|
Unified search |
|
IDAPython file execution |
|
Debugger control |
|
Breakpoints |
|
Registers and stack |
|
Debugger memory |
|
Router-level tools add multi-instance operations:
Tool | Purpose |
| Show every registered GUI or headless IDA backend. |
| Refresh schemas from currently connected IDA instances. |
| Compare metadata and segments from two registered instances. |
| Save decompiler output to disk without stuffing huge output into chat. |
| Retrieve follow-up chunks from truncated large responses. |
| Manage headless IDA Pro sessions. |
Comparison
Capability | ida-fusion-mcp | ida-pro-mcp | Typical single-instance MCP |
Multiple GUI IDA windows | First-class workflow | Not the main focus | Usually awkward |
Per-call target selection | Required | Context/session dependent | Often implicit |
Headless IDA Pro | Managed |
| Often absent |
Signature/type/search tools | Included from the port | Included upstream | Varies |
Cross-binary helpers | Included at router level | Not the focus | Usually absent |
Best fit | Multi-file investigations and agent workflows | Upstream single-database IDA tooling | One binary at a time |
Quick Start
Install the package, install the IDA loader, then open binaries in IDA.
python -m pip install git+https://github.com/andsopwn/ida-fusion-mcp.git
ida-fusion-mcp --install
ida-fusion-mcp --listExample client prompt:
Call list_instances, identify the two open binaries, decompile their entry points, and compare the initialization paths.The legacy ida-multi-mcp console command is still provided as an alias. New configuration uses ida-fusion-mcp.
Installation Details
Requirements
Mode | IDA edition/version | Python | Extra package |
GUI plugin | IDA Pro/Home 8.3+ | IDA's matching Python, server on 3.11+ | none |
Managed headless | IDA Pro 9.x with | server/worker on 3.11+ |
|
Post-change v0.1.1 GUI routing and managed idalib are verified with IDA Pro 9.3 on macOS arm64, including a real GUI restart and managed-session lifecycle.
macOS
IDA often uses a different Python build than your shell. Check IDA's Python first:
import sys
print(sys.version)Then install with the matching Python version:
pipx install git+https://github.com/andsopwn/ida-fusion-mcp.git
python3.11 -m pip install --user git+https://github.com/andsopwn/ida-fusion-mcp.git
ida-fusion-mcp --installFor Claude Code, a direct CLI registration is usually clearer than a module command:
claude mcp add ida-fusion-mcp -s user -- ida-fusion-mcpFor managed headless sessions, install the optional idapro dependency into a
Python 3.11 environment. Persist that exact worker interpreter in the MCP
client registration; running the server once with the flag does not update the
client's saved configuration. Use this registration instead of the GUI-only
Claude Code command above:
python3.11 -m pip install \
"ida-fusion-mcp[idalib] @ git+https://github.com/andsopwn/ida-fusion-mcp.git"
claude mcp add ida-fusion-mcp -s user -- \
ida-fusion-mcp --idalib-python /absolute/path/to/idalib-pythonFor JSON-based clients, store the same argument in the server entry:
{
"command": "/absolute/path/to/server-python",
"args": ["-m", "ida_fusion_mcp", "--idalib-python", "/absolute/path/to/idalib-python"]
}GUI mode does not require idapro. Headless mode requires IDA Pro 9.x with
libidalib and an interpreter where import idapro is discoverable.
Windows
py -3.11 -m pip install git+https://github.com/andsopwn/ida-fusion-mcp.git
ida-fusion-mcp --installIf IDA uses a different Python version, replace 3.11 with IDA's version. For a custom IDA directory:
ida-fusion-mcp --install --ida-dir "C:\Program Files\IDA Professional 9.3"Linux
python3 -m pip install --user git+https://github.com/andsopwn/ida-fusion-mcp.git
ida-fusion-mcp --installManual MCP Config
ida-fusion-mcp --install writes client configs automatically when it recognizes the client. To inspect the raw MCP config:
ida-fusion-mcp --configTypical output:
{
"mcpServers": {
"ida-fusion-mcp": {
"command": "/path/to/python3",
"args": ["-m", "ida_fusion_mcp"]
}
}
}Using It
Open one or more binaries in IDA Pro. The loader installed by --install starts an IDA-local HTTP server and registers the database in ~/.ida-mcp/instances.json.
Check what is live:
ida-fusion-mcp --listThen use the displayed instance_id in prompts or tool arguments:
Use instance k7m2. Find functions referencing the string "license", decompile the callers, and summarize the validation path.For two binaries:
Use k7m2 as the old build and px3a as the patched build. Compare the functions around the entry point and report changed calls.For headless work:
Open /samples/payload.bin with idalib_open, wait for analysis, then run survey_binary on the returned instance.Architecture
AI client
|
| MCP stdio
v
ida-fusion-mcp router
|-- local registry and schema cache
|-- output cache for large responses
|-- idalib worker manager
|
| HTTP JSON-RPC on loopback
v
IDA GUI #1 IDA GUI #2 idalib worker #1The router does not own IDA analysis state. It validates the requested instance_id, forwards the call to the matching backend, normalizes large outputs, and returns the MCP response to the client.
Operational Notes
The installed IDA loader is named
ida_fusion_mcp_loader.pyso it does not shadow theida_fusion_mcppackage when IDA imports plugins by filename.The implementation module remains
ida_fusion_mcp.The registry lives under
~/.ida-mcp/by default.GUI instances send heartbeats; stale entries are cleaned up.
If an IDA window opens a different input file, the old instance expires and a new ID is registered.
The stdio router advertises debugger tools normally and internally enables the IDA backend's
dbgextension for discovery and invocation. Clients pass onlyinstance_id; unsafe-tool configuration and debugger-state checks stay enforced by the backend.py_evalandpy_exec_fileare unsafe, in-process code-execution tools. Their reduced builtins/import surface is defense in depth, not containment; disable them in the IDA MCP tool configuration unless the workflow requires them. Managed idalib workers omit@unsafetools unless opened withunsafe=true; the GUI plugin retains its existing enabled-tool defaults for compatibility.
Troubleshooting
IDA does not show the plugin
Check that the loader exists:
ls ~/.idapro/plugins/ida_fusion_mcp_loader.pyOn Windows:
Get-Item "$env:APPDATA\Hex-Rays\IDA Pro\plugins\ida_fusion_mcp_loader.py"If IDA reports No module named 'ida_fusion_mcp', install the package with the Python version used by IDA. If IDA itself is using Python older than 3.11, switch IDA to a supported Python build with idapyswitch.
The MCP client starts the wrong Python
Run:
ida-fusion-mcp --configIf the generated command points to an unexpected interpreter, configure the client to call the ida-fusion-mcp CLI directly.
No instances are listed
Start IDA with a binary loaded, then run:
ida-fusion-mcp --listIf the list is still empty, check the IDA output window for [ida-fusion-mcp] messages.
Development
git clone https://github.com/andsopwn/ida-fusion-mcp.git
cd ida-fusion-mcp
python -m venv .venv
. .venv/bin/activate
python -m pip install -e .
python -m compileall -q src
python -m ida_fusion_mcp --configThe public package exposes both commands:
ida-fusion-mcp --config
ida-multi-mcp --config # compatibility aliasLineage And License
ida-fusion-mcp is MIT licensed. See LICENSE.
This repository is based on and extends MIT-licensed work from:
ida-multi-mcp, the original multi-instance IDA MCP router.ida-pro-mcp, copyright (c) 2025 Duncan Ogilvie.ida-sigmaker, copyright (c) 2024 Mahmoud Abdelkader.
Those attributions are intentional: this project is ida-multi-mcp plus additional ported functionality, packaging the useful IDA tool surface into a router-oriented workflow for multi-binary analysis.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/andsopwn/ida-fusion-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server