by zboralski
Headless IDA Pro binary analysis via Model Context Protocol
# Add to your Claude Code skills
git clone https://github.com/zboralski/ida-headless-mcpGuides for using mcp servers skills like ida-headless-mcp.
Last scanned: 5/30/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-30T16:24:49.135Z",
"npmAuditRan": true,
"pipAuditRan": true
}ida-headless-mcp is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by zboralski. Headless IDA Pro binary analysis via Model Context Protocol. It has 147 GitHub stars.
Yes. ida-headless-mcp 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/zboralski/ida-headless-mcp" and add it to your Claude Code skills directory (see the Installation section above).
ida-headless-mcp is primarily written in Python. It is open-source under zboralski on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh ida-headless-mcp against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
Headless IDA Pro binary analysis via Model Context Protocol. Go orchestrates multi-session concurrency while Python workers handle IDA operations.
┌─────────────────┐
│ MCP Client │ Claude Desktop, Claude Code, CLI
│ (HTTP/SSE) │
└────────┬────────┘
│ http://localhost:17300/
▼
┌─────────────────┐
│ Go Server │ Session registry, worker manager, watchdog
│ (MCP Tools) │
└────────┬────────┘
│ Connect RPC over Unix socket
▼
┌─────────────────┐
│ Python Worker │ IDA + idalib (one per session)
│ (per session) │
└─────────────────┘
Key features:
IDA Pro 9.0+ or IDA Essential 9.2+
idalib: install and activate:
./scripts/setup_idalib.sh
Go 1.21+ with protoc tools:
make install-tools
Python 3.10+ with dependencies:
pip3 install -r python/requirements.txt
Optional: Il2CppDumper for Unity game analysis
Optional: unflutter for Flutter/Dart app analysis
# Install unflutter (provides flutter_meta.json for import_flutter)
git clone https://github.com/zboralski/unflutter.git
cd unflutter && make install
git clone <repo-url>
cd ida-headless-mcp
make setup
This runs idalib setup, installs Python dependencies, and builds the server.
For manual setup or troubleshooting:
./scripts/setup_idalib.sh # Setup idalib (requires IDA Pro/Essential 9.x)
make install-python # Install Python dependencies
make build # Build Go server
./bin/ida-mcp-server
Server starts running on port 17300 (configurable via config.json, env, or --port), exposing both transports:
http://localhost:17300/http://localhost:17300/sseEdit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"ida-headless": {
"url": "http://127.0.0.1:17300/",
"type": "http"
}
}
}
Restart Claude Desktop after editing.
Copy .claude/settings.json to ~/.claude/settings.json to grant access to all IDA MCP tools.
1. open_binary(path="/path/to/binary.so")
→ {"session_id": "abc123", "has_decompiler": true}
2. run_auto_analysis(session_id="abc123")
→ {"completed": true}
3. get_entry_point(session_id="abc123")
→ {"address": 4198400}
4. get_decompiled_func(session_id="abc123", address=4198400)
→ {pseudocode...}
5. get_functions(session_id="abc123")
→ {"functions": [...], "count": 1523}
6. close_binary(session_id="abc123")
→ {"success": true}
1. Run unflutter on the target: unflutter meta libapp.so
2. open_binary(path="libapp.so")
3. import_flutter(session_id="...", meta_json_path="flutter_meta.json")
→ {"functions_created": 9926, "structs_created": 2090,
"signatures_applied": 9926, "comments_set": 34172}
4. run_auto_analysis(session_id="...")
The import_flutter tool reads structured JSON metadata from unflutter. It creates Dart class structs, function definitions with typed signatures, and annotates THR/PP/string reference comments in a single pass.
Use tools/list via MCP to see all available tools.
Command line flags:
./bin/ida-mcp-server \
--port 17300 \
--max-sessions 10 \
--session-timeout 4h \
--worker python/worker/server.py \
--debug
Environment variables (overridden by CLI flags):
IDA_MCP_PORT=17300
IDA_MCP_SESSION_TIMEOUT_MIN=240
IDA_MCP_MAX_SESSIONS=10
IDA_MCP_WORKER=/custom/worker.py
IDA_MCP_DEBUG=1
make build # Build Go server
make proto # Regenerate protobuf
make test # Run tests + consistency checks
make restart # Kill, rebuild, restart server
make clean # Clean build artifacts
Install test dependencies:
pip3 install -r requirements-test.txt
Run tests:
make test # All tests
pytest tests/ -v # Python tests only
go test ./... # Go tests only
Use MCP Inspector:
make run # Start server
make inspector # Launch inspector at http://localhost:5173
ida-headless-mcp/
├── cmd/ida-mcp-server/ # Go MCP server entry point
├── internal/
│ ├── server/ # MCP tool handlers
│ ├── session/ # Session registry
│ └── worker/ # Worker process manager
├── proto/ # Protobuf definitions
├── python/worker/ # Python worker (idalib wrapper)
├── contrib/il2cpp/ # Il2CppDumper helpers (MIT)
└── tests/ # Test suites
proto/ida/worker/v1/ida_service.protomake protopython/worker/ida_wrapper.pypython/worker/connect_server.pyinternal/server/server.goopen_binary(path)/tmp/ida-worker-{id}.sockclose_binary: save database, kill worker, cleanup<database_directory>/sessions for automatic restoration after server restartWorker fails to start:
python3 -c "import idapro; print('OK')"
If this fails, run ./scripts/setup_idalib.sh
Socket timeout: Check Python worker logs. Worker may have crashed during init.
Port already in use:
lsof -ti:17300 | xargs kill
# or use a different port
./bin/ida-mcp-server --port 17301
Session not found:
Session may have timed out. Use list_sessions to check active sessions.
MIT
MCP Servers:
Metadata Dumpers:
import_il2cpp)import_flutter)