Headless IDA Pro MCP lets AI agents analyze binaries directly through IDA’s decompiler and disassembler without opening the GUI. You set up IDA Pro 9.4, expose idalib through a Rust-native MCP server such as ida-mcp-rs, connect it to Claude Code or Cursor, and then drive decompilation, xrefs, renames, comments, and scripting through natural language. In 2026 this workflow is faster to stand up, more memory-safe, and far more capable than the Python MCP servers of a year earlier.
What is headless IDA and why pair it with MCP in 2026
IDA Pro is the industry-standard disassembler and decompiler from Hex-Rays. “Headless” IDA runs the analysis engine without the graphical interface, using the idalib library that ships inside IDA Pro 9.x. Instead of a human clicking through disassembly windows, a script or an AI agent calls IDA functions programmatically.
The Model Context Protocol (MCP) is an open standard that connects AI models to tools. For reverse engineering, an MCP server wraps IDA’s engine so that an assistant can ask for a function’s decompilation, follow cross-references, rename variables, or read memory — then use the result to reason about the binary. The phrase “vibe reversing,” popularized by the ida-pro-mcp project, describes exactly this: describing what you want a binary to do in natural language and letting the agent drive IDA to find out.
Why is 2026 the inflection point? Three changes converged:
- IDA open-sourced its SDK. With IDA 9.2, Hex-Rays open-sourced the IDA SDK (github.com/HexRaysSA/ida-sdk), making Rust bindings and headless tooling dramatically easier to build.
- Rust-native servers matured. Projects such as Binarly’s
idalibbindings andblacktop/ida-mcp-rsreached production quality across Windows, Linux, and macOS. - Multi-database and background analysis became standard. You can now analyze dozens of firmware variants or kernel drivers in parallel, asynchronously, where a single GUI session would take hours.
Why Rust-native: idalib bindings vs traditional IDAPython approaches
Most early IDA MCP servers were thin wrappers around IDAPython. They run Python inside IDA, which works but carries real costs: a Python runtime dependency, slower startup, and the performance penalty of calling into IDA through an interpreted layer on every decompile or xref lookup.
Rust-native approaches bind directly to the IDA SDK. Binarly’s idalib provides idiomatic Rust bindings tested against IDA Pro 9.4 on Windows 11, Ubuntu 24.04 LTS, and macOS Sequoia (Apple Silicon). Because Rust compiles to a single native binary with no runtime, startup is near-instant and memory management is explicit and safe. The bindings power production vulnerability-research tools such as rhabdomancer (finding insecure API calls) and haruspex (extracting Hex-Rays pseudocode).
The practical difference in a MCP session is throughput. A Rust-native server can decompile hundreds of functions and walk thousands of xrefs in the time a Python wrapper spends importing its dependencies. For large binary corpora — malware variant sets, entire firmware families, or a folder of kernel drivers — that difference is the difference between minutes and hours.
| Dimension | Rust-native (idalib / ida-mcp-rs) | IDAPython wrapper (classic) |
|---|---|---|
| Startup cost | Near-zero, native binary | Python runtime + module imports |
| Memory safety | Compile-time guarantees | Relies on CPython runtime |
| Throughput on large corpora | High | Lower per-operation overhead |
| Ease of extending the server | Rust traits / CLI | Direct Python |
| Ecosystem | Newer, smaller | Huge existing IDAPython codebase |
Hex-Rays itself contributed to the effort through its contributor program, and Binarly’s idalib has roughly 268 stars with 71 commits since September 2024 — a young but active and well-supported codebase.
Setup: install IDA Pro 9.4, idalib/idapro package, and an MCP server
You need a licensed copy of IDA Pro 9.4 or newer — this is a hard requirement for every headless approach, because idalib ships inside IDA. There is no free headless mode.
Step 1 — Install IDA Pro 9.4. Install the standard IDA distribution for your OS. Both ida-mcp-rs and idalib are tested on Linux (Ubuntu 24.04+), macOS (including Apple Silicon), and Windows 11.
Step 2 — Get the Rust bindings. Add Binarly’s idalib crate to your project, or use it indirectly through an MCP server. If you build your own tooling:
cargo add idalib
cargo build --release
The bindings point at your local IDA installation. You usually configure the IDA root path in an environment variable or configuration file.
Step 3 — Install a Rust-native MCP server. ida-mcp-rs (blacktop/ida-mcp-rs, about 809 stars) is the leading option. On macOS and Linux use Homebrew; on Windows use Scoop:
# macOS / Linux
brew install blacktop/tap/ida-mcp-rs
# Windows
scoop install ida-mcp-rs
The server creates an isolated IDA profile, and by default disables Lumina auto-lookup so your analysis does not leak function names to the Lumina server.
Step 4 — Verify it runs. Start the server against a sample binary:
ida-mcp-rs --db sample.exe
If the server starts and lists its tools over stdio, your headless IDA path is ready.
Configuring your MCP client (Claude Code / Cursor) to talk to the headless server
MCP servers expose two transports: stdio (spawning the server as a child process) and streamable HTTP (connecting to a running server over the network). Both are supported by ida-mcp-rs.
For Claude Code, add an entry to your MCP configuration:
{
"mcpServers": {
"ida": {
"command": "ida-mcp-rs",
"args": ["--db", "target.bin"]
}
}
}
For Cursor, use the MCP settings panel and point it at the same server. If you run many analyses concurrently, start the HTTP server and connect all clients to it:
ida-mcp-rs serve-http --max-workers 4
Then every connected client shares the same stateful analysis pool, with each agent working on its own database context to avoid cross-contamination between concurrent sessions.
Core tools for a vibe-reversing session: decompile, xrefs, rename, comments
An effective agent session leans on a small set of high-value tools. Across the Rust-native servers and ida-pro-mcp-style wrappers, these are the same fundamentals:
- Decompile a function (
decompile/analyse_hexrays) — get Hex-Rays pseudocode for a given address or function name. - Cross-references (
xrefs_to,xrefs_from) — find who calls a function or writes to a global. - Rename (
set_name) — give functions and variables meaningful names that persist in the IDB. - Comments (
set_comment) — annotate addresses; mutation tools inida-mcp 2.0return the old comment so the agent sees the diff without a read-back round trip. - Read memory (
read_memory) — inspect raw bytes at an address or in a structure. - Strings — enumerate strings to map functionality in unknown binaries.
A typical “vibe” session looks like this. You ask: “Find the function that handles the network packet, annotate its structure fields, and tell me if there is an overflow before the bounds check.” The agent decompiles the entry point, follows xrefs to the handler, reads the buffer allocation, and reports the vulnerability — all while adding names and comments to the IDB that a human reviewer can inspect afterward.
Mutation tools matter for workflow. In ida-mcp 2.0, every write tool returns old_* fields (old_comment, old_name, old_color, old_bytes), so the AI sees exactly what changed without re-reading the database. Ramune-ida goes further: write tools automatically create undo points, and crash recovery reopens the IDB transparently, so a failed analysis does not lose your annotations.
Background analysis and async task handling for large binaries
Decompiling a 50 MB firmware image synchronously would freeze your agent’s turn. Rust-native servers handle this with background analysis.
In ida-mcp-rs, call analyze_funcs with background: true. The server returns a task_id immediately, and you poll task_status until completion:
analyze_funcs(background=true) -> task_id
task_status(task_id) -> progress + results
The agent can issue the background analysis, then work on other parts of the binary, and return to collect results when the task finishes. This keeps the LLM responsive while the engine grinds through thousands of functions.
Multi-worker HTTP mode generalizes this: a pool of workers analyzes several databases concurrently, so one agent can diff one firmware variant while another maps a second. This is the pattern used for malware variant analysis and firmware diffing across an entire family.
Advanced: run_script, multi-database analysis, malware variant diffing
When the built-in tool set is not enough, arbitrary IDAPython unlocks the full engine. In ida-mcp-rs, run_script executes embedded IDAPython with a configurable timeout (default 120 seconds, maximum 600), and returns the printed output or errors. In ida-mcp 2.0, run_script is gated by the IDA_MCP_ALLOW_SCRIPTS environment variable — deliberate, because arbitrary script execution is a powerful and dangerous capability.
Multi-database analysis is the standout advanced feature. ida-mcp 2.0 supports multiple IDBs at once, with a supervisor that proxies resource reads across worker databases. Practical uses:
- Malware variant analysis — load five samples of a family, find common and divergent functions, and map the polymorphic parts.
- Firmware diffing — compare two versions of a bootloader to isolate exactly which functions changed between releases, then decompile only those.
- Patch analysis — analyze the original and patched binaries side by side so the agent highlights the vulnerability fix.
At RECON 2026, Elias Bachaalany demonstrated an agent analyzing a folder of about 80 Windows kernel drivers with a single prompt in roughly four hours, recovering IOCTL interfaces and emitting a compilable CMake client. That is the practical ceiling of today’s multi-database headless workflows.
Comparison: Rust-native ida-mcp-rs vs Python ida-pro-mcp vs SQL-surface tools
The 2026 IDA MCP landscape splits into three approaches, each with a different philosophy.
| Approach | Exemplar | Stars (approx) | Strength |
|---|---|---|---|
| Rust-native headless | blacktop/ida-mcp-rs | ~809 | Performance, memory safety, background analysis |
| Python wrapper + plugin | mrexodia/ida-pro-mcp | ~7,898 | Most mature, richest tool surface, huge community |
| SQL-as-interface | RECON 2026 “SELECT * FROM binary” | new | One schema replaces ~20 MCP tools |
ida-pro-mcp is the most popular project on GitHub for IDA MCP, with roughly 7,898 stars and 959 forks. It exposes disassembly, type inference, debugger control, pattern matching, call-graph analysis, and batch rename/patch, and it supports headless idalib mode. Its breadth makes it the best first stop if you want the largest tool set.
ida-mcp-rs is narrower but faster and memory-safe, and its background-analysis and HTTP multi-worker modes are genuinely better for large corpora.
The SQL-surface idea from RECON 2026 challenges the entire tool-list paradigm: instead of ~20 MCP tools, one schema where you SELECT and UPDATE functions, xrefs, strings, and imports tables. It is not yet a shipped tool, but it signals where the ecosystem is heading. For practical 2026 work, choose ida-pro-mcp for breadth or ida-mcp-rs for performance.
Security and licensing: sandboxing IDAPython, worker isolation, IDA license requirements
Headless IDA MCP is a real attack surface, and the riskiest capability is arbitrary script execution. run_script / execute_python give the AI agent full IDAPython power — and by extension full access to the filesystem and network of the host running IDA.
Practical hardening:
- Never run it against untrusted prompts on a shared host. Assume a malicious prompt could run arbitrary code.
- Gate scripts. Keep
IDA_MCP_ALLOW_SCRIPTSunset unless you explicitly need scripting. - Use worker isolation.
--max-workersand per-agent context isolation (as inida-pro-mcp) keep concurrent analyses from contaminating each other.Ramune-idauses stateless disposable workers, so a crash cannot corrupt your primary IDB. - Disable Lumina auto-lookup. Do this by default to avoid leaking function-name queries to Hex-Rays’s Lumina service.
- Set timeouts. A 120-to-600-second cap on
run_scriptprevents a runaway analysis loop from consuming the host.
Licensing is non-negotiable. Every headless path requires IDA Pro 9.4 (or newer) with a valid license, because idalib is part of IDA itself. There is no headless free tier. Ensure your license accounts for each worker or database you run concurrently on your team’s infrastructure.
Conclusion: when headless IDA MCP should (and shouldn’t) replace the GUI
Use headless IDA MCP when the work is repetitive, bulk, or parallel — scanning a malware family, diffing firmware versions, auditing a folder of kernel drivers, or extracting Hex-Rays pseudocode at scale. The AI agent turns decompilation, xref-walking, renaming, and annotation into a conversation, and the throughput of a Rust-native server is far beyond what a human clicking through the GUI can match.
Keep the GUI when the work is exploratory, creative, or deeply interactive: designing a custom analysis algorithm, reverse engineering a novel obfuscation scheme, or when you need the full visual graph view to form a hypothesis. Headless MCP is a complement, not a replacement, for the analyst’s own judgment.
Start small: install IDA Pro 9.4, run idalib or ida-mcp-rs headlessly against one sample, and let an agent rename and annotate a single function. Once you see the IDB fill with quality names and comments, scale to as many workers as your hardware and license allow — and join the 2026 shift where reverse engineering is increasingly a conversation with your decompiler.
FAQ
Do I need IDA Pro to use headless MCP?
Yes. Every headless approach, whether idalib, ida-mcp-rs, or ida-pro-mcp, requires a licensed copy of IDA Pro 9.4 or newer because idalib ships inside IDA itself. There is no free headless mode.
What is the difference between idalib and ida-mcp-rs?
idalib is Binarly’s idiomatic Rust binding for the IDA SDK — a library you build tools with. ida-mcp-rs is a ready-made Rust-native MCP server (built on the same kind of stack) that exposes IDA to AI agents over stdio or HTTP. Use the bindings to build custom tooling; use the MCP server to get agent integration quickly.
Which IDA MCP server is most popular in 2026?
mrexodia/ida-pro-mcp is the largest, with roughly 7,898 stars and 959 forks. It offers the broadest tool surface and supports headless idalib mode. blacktop/ida-mcp-rs (~809 stars) is the leading Rust-native option with faster performance and background analysis.
Is running IDAPython scripts through the MCP server safe?
Only with controls. Arbitrary script execution gives the agent full host access, so keep run_script gated (for example via IDA_MCP_ALLOW_SCRIPTS), set timeouts, use worker isolation, run on dedicated hosts, and never point it at untrusted prompts on a shared system.
Can the agent do background analysis on very large binaries?
Yes. Servers such as ida-mcp-rs support asynchronous analysis where analyze_funcs(background: true) returns a task_id you poll with task_status, letting the agent keep working while the engine processes thousands of functions. Multi-worker HTTP mode extends this across several databases concurrently.
