IDA-instances-MCP
Click on "Deploy 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-instances-MCPDecompile the function at 0x401000 and summarize what it does."
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-instances-MCP
Custom build of ida-pro-mcp: an MCP Server that lets MCP clients drive IDA Pro — reworked with a stability pass aimed at hosting multiple headless idalib instances (the Ida-Instances setup).
This is a fork of mrexodia's ida-pro-mcp (MIT). All upstream credit goes to
Duncan Ogilvie and contributors; the custom
changes below are maintained in this repository.
What's custom
Stability hardening on top of upstream v2.0.0:
Area | Change |
Data safety | Partial-database cleanup is ownership-aware: it never deletes |
Save reliability |
|
Concurrency | Supervisor lock no longer spans worker spawn (~120s), health probes (~2.5s/session) or stale-worker termination — one slow open can't freeze every session |
Robustness | Malformed JSON-RPC over stdio returns |
Timeouts | Proxy timeout raised 30s → 900s and made configurable ( |
Networking | Worker port TOCTOU now retries; SSE writes and teardown are lock-guarded; CORS policy reads are cached off the IDA main thread |
Resource limits | IDB trace log capped at 64 MB ( |
Authentication | Every HTTP request requires an instance API key; issued exactly once via |
Hosting endpoints |
|
Idle reaping | Sessions untouched for |
Graceful shutdown | On |
Self-update | Startup checks GitHub releases; interactive sessions are offered a one-keypress auto-update |
Hosting defaults | Headless supervisor listens on 0.0.0.0:9999; the GUI plugin also binds 0.0.0.0 and now requires the same API key |
Related MCP server: idalib-mcp-headless
Requirements
Linux, macOS or Windows
Python 3.11+ (use
idapyswitchinside IDA to match)IDA Pro 8.3+ (9.x recommended). IDA Free is not supported
An MCP client (Claude Code, Cursor, Codex, Opencode, VS Code, ...)
Setup
Activate idalib for your uv environment:
# linux (server deployment)
uv run "/opt/idapro-9.x/idalib/python/py-activate-idalib.py"
# macos
uv run "/Applications/IDA Professional 9.x.app/Contents/MacOS/idalib/python/py-activate-idalib.py"
# windows
uv run "C:\Program Files\IDA Professional 9.x\idalib\python\py-activate-idalib.py"Headless runs additionally need the IDA install directory in IDADIR.
Run the headless supervisor (hosting mode)
uv run idalib-mcp # serves http://0.0.0.0:9999/mcp (new default)On startup an API key is generated (or loaded from disk) and every request
without it gets 401 Unauthorized — no exceptions.
Fetch the key once, from the machine/network that owns the instance:
curl http://your-host:9999/key
# {"key": "3f2b..."} <- save it; this endpoint is now burned until restartThe key persists at
~/.idapro/mcp/api_key(mode0600) and survives reboots;GET /keyre-issues it once per server startOverride with
IDA_MCP_API_KEY(or relocate viaIDA_MCP_API_KEY_FILE)All other endpoints require it on every call:
Authorization: Bearer <key>
# or equivalently
X-API-Key: <key>The key is never logged.
Hosting endpoints
Endpoint | Auth | Purpose |
| none | Readiness probe: |
| key | Open databases incl. last-accessed timestamps |
| key | Raw-body binary upload, streamed to |
# provisioning flow
while ! curl -sf http://10.0.0.4:9999/health >/dev/null; do sleep 1; done
KEY=$(curl -s http://10.0.0.4:9999/key | jq -r .key)
curl -H "Authorization: Bearer $KEY" --data-binary @sample.elf \
"http://10.0.0.4:9999/upload?filename=sample.elf"Useful flags:
uv run idalib-mcp --host 127.0.0.1 --port 9999 # override bind address
uv run idalib-mcp --max-workers 8 # concurrent databases (default 4, 0 = unlimited)
uv run idalib-mcp --unsafe # enable destructive/debugger tools (DANGEROUS)
uv run idalib-mcp --profile tools.txt # restrict worker tools to a profile file
uv run idalib-mcp --stdio # stdio transport instead of HTTP
uv run idalib-mcp path/to/binary # open a binary at startupSession lifecycle tools: idb_open, idb_list, idb_close — open one database
per session; each session gets its own isolated worker process.
Run the GUI proxy (interactive IDA)
Start the plugin inside IDA (Edit -> Plugins -> MCP, or Ctrl+Alt+M), then:
uv run ida-pro-mcp # stdio proxy, auto-discovers IDA
uv run ida-pro-mcp --transport http://127.0.0.1:9999 # serve HTTP insteadConnect an MCP client
Generic JSON config (HTTP transport):
{
"mcpServers": {
"ida-instances": {
"url": "http://your-host:9999/mcp",
"headers": {
"Authorization": "Bearer <key-from-/key>"
}
}
}
}Claude Code:
claude mcp add --transport http ida-instances http://your-host:9999/mcp \
--header "Authorization: Bearer <key-from-/key>"For the GUI proxy over stdio, run uv run ida-pro-mcp --config and paste the
JSON into your client.
Configuration (environment variables)
Variable | Default | Meaning |
|
| Max seconds for open + auto-analysis before reap ( |
|
| Backstop per forwarded tool call |
|
| GUI-proxy → IDA upstream timeout ( |
|
| Trace log cap stored inside the IDB |
|
| Default |
|
| Health probe budgets |
|
| Minutes before an untouched session is auto-closed ( |
|
| Cap for |
|
| Where uploads are stored |
| – / | Inject or relocate the instance key |
|
| Per-database / total save budget on SIGTERM |
| unset | Set |
Security notes: the API key gates every HTTP endpoint on both the supervisor and the GUI plugin (the plugin can execute arbitrary code via
py_eval, so it is keyed even on loopback). It is a bearer token — anyone who obtains it owns the instance; add a TLS reverse proxy if it leaves your trusted network. Browsers can pass the key as?key=<key>(handy for/config.html).
Testing
IDADIR=/path/to/ida uv run ida-mcp-test tests/crackme03.elf -q
IDADIR=/path/to/ida uv run ida-mcp-test tests/typed_fixture.elf -q
IDADIR=/path/to/ida uv run ida-mcp-test tests/crackme03.elf -c api_analysis # one category
IDADIR=/path/to/ida uv run coverage run -m ida_pro_mcp.test tests/crackme03.elf -qLicense
MIT — inherited from upstream ida-pro-mcp.
Upstream product names (IDA Pro, Hex-Rays) are trademarks of Hex-Rays SA; this
project requires your own valid IDA Pro license.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Hosted MCP server for task-first delegation to remote workstations and workers.
Self-hosted MCP server: 26 deterministic dev, security, and EVM tools.
Related MCP Servers
- AlicenseCqualityAmaintenanceMCP Server for automated reverse engineering with IDA Pro.4311,870MIT
- FlicenseNot gradedqualityDmaintenanceA headless MCP server that manages multiple independent IDA Pro worker processes for reverse engineering, supporting database operations and debug tools.18-
- AlicenseNot gradedqualityDmaintenanceHeadless MCP server for IDA Pro enabling on-demand database loading and programmatic reverse engineering workflows via MCP tools.18MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that enables AI agents to control IDA Pro instances via Unix-socket supervisor, providing tools for decompilation, disassembly, and Python scripting.3-