Headless IDA Pro binary analysis via Model Context Protocol. Go orchestrates multi-session concurrency while Python workers handle IDA operations.
Key features:
- Multi-session concurrency via process isolation
- 52 MCP tools for binary analysis
- Il2CppDumper and Blutter metadata import support
-
IDA Pro 9.0+ or IDA Essential 9.2+
-
idalib - Install and activate:
./scripts/setup_idalib.sh -
Go 1.21+ with protoc tools:
-
Python 3.10+ with Connect:
pip3 install connect-python -
Optional: Il2CppDumper for Unity game analysis
-
Optional: Blutter for Flutter/Dart app analysis
Server exposes both transports on port 17300 (configurable via config.json, env, or --port):
- Streamable HTTP (recommended): http://localhost:17300/
- SSE compatibility endpoint: http://localhost:17300/sse
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
Restart Claude Desktop after editing.
Copy .claude/settings.json to ~/.claude/settings.json to grant access to all 51 IDA MCP tools.
Use tools/list via MCP to see all available tools.
Command-line flags:
Environment variables (overridden by CLI flags):
Install test dependencies:
Run tests:
Use MCP Inspector:
- Add RPC to proto/ida/worker/v1/ida_service.proto
- Regenerate: make proto
- Implement in python/worker/ida_wrapper.py
- Add handler in python/worker/connect_server.py
- Register MCP tool in internal/server/server.go
- Client calls open_binary(path)
- Go creates session in registry (UUID)
- Go spawns Python worker subprocess
- Worker creates Unix socket at /tmp/ida-worker-{id}.sock
- Worker opens IDA database with idalib
- Go creates Connect RPC clients over socket
- Subsequent tool calls proxy to worker via Connect
- Watchdog monitors idle time (default: 4 hours)
- On timeout or close_binary: save database, kill worker, cleanup
- Session metadata persists under <database_directory>/sessions for automatic restoration after server restart
Worker fails to start:
If fails, run ./scripts/setup_idalib.sh
Socket timeout: Check Python worker logs. Worker may have crashed during init.
Port already in use:
Session not found: Session may have timed out. Use list_sessions to check active sessions.
MIT
MCP Servers:
- LaurieWired/GhidraMCP - Ghidra MCP server
- mrexodia/ida-pro-mcp - IDA Pro MCP with SSE transport
- cnitlrt/headless-ida-mcp-server - Alternative headless IDA MCP
Metadata Dumpers:
- Perfare/Il2CppDumper - Unity Il2Cpp metadata extraction (used by import_il2cpp)
- worawit/blutter - Flutter/Dart reverse engineering (used by import_flutter)
.png)


