IDA-instances-MCP
IDA-instances-MCP
Eigener Build von ida-pro-mcp: ein MCP-Server, der es MCP-Clients ermöglicht, IDA Pro zu steuern – überarbeitet mit einem Durchgang zur Stabilitätshärtung, der darauf abzielt, mehrere Headless-idalib-Instanzen zu hosten (das Ida-Instances-Setup).
Dies ist ein Fork von mrexodias ida-pro-mcp (MIT). Das gesamte Verdienst am Upstream
gebührt Duncan Ogilvie und allen Mitwirkenden; die unten
beschriebenen, eigenen Änderungen werden in diesem Repository gepflegt.
Eigene Änderungen
Stabilitätshärtung gegenüber Upstream v2.0.0:
Bereich | Änderung |
Datensicherheit | Die Bereinigung von Teildatenbanken ist eigentümerbewusst: |
Speicherzuverlässigkeit |
|
Nebenläufigkeit | Die Supervisor-Sperre umfasst nicht mehr das Starten von Workern (~120 s), Health-Checks (~2,5 s/Sitzung) oder die Beendigung veralteter Worker – ein langsames Öffnen kann nicht mehr alle Sitzungen einfrieren |
Robustheit | Fehlerhafter JSON-RPC über stdio liefert |
Timeouts | Proxy-Timeout von 30 s auf 900 s angehoben und konfigurierbar gemacht ( |
Netzwerk | Worker-Port-TOCTOU verwendet nun Retries; SSE-Schreibvorgänge und das Herunterfahren sind sperrengeschützt; CORS-Richtlinienlesungen werden außerhalb des IDA-Hauptthreads gecacht |
Ressourcengrenzen | IDB-Trace-Protokoll auf 64 MB begrenzen ( |
Authentifizierung | Jede HTTP-Anfrage erfordert einen Instanz-API-Schlüssel; dieser wird über |
Hosting-Endpunkte |
|
Bereinigung im Leerlauf | Sitzungen, die |
Elegantes Herunterfahren | Bei |
Selbst-Update | Der Start prüft GitHub-Releases; bei interaktiven Sitzungen wird ein Update per Tastendruck angeboten |
Hosting-Standards | Der leitende Headless-Supervisor lauscht auf 0.0.0.0:9999; auch das GUI-Plugin bindet 0.0.0.0 und verlangt nun denselben API-Key |
Related MCP server: idalib-mcp-headless
Voraussetzungen
Linux, macOS oder Windows
Python 3.11+ (
idapyswitchinnerhalb von IDA verwenden, um sie abzustimmen)IDA Pro 8.3+ (9.x empfohlen). IDA Free wird nicht unterstützt
Ein MCP-Client (Claude Code, Cursor, Codex, Opencode, VS Code, ...)
Einrichtung
idalib für die uv-Umgebung aktivieren:
# 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"Für Headless-Ausführungen müssen zusätzlich das IDA-Installationsverzeichnis in IDADIR angegeben.
Headless-Supervisor ausführen (Hosting-Modus)
uv run idalib-mcp # serves http://0.0.0.0:9999/mcp (new default)Beim Start wird ein API-Key generiert (oder von Festplatte geladen), und jede Anfrage ohne einen solchen erhält 401 Unauthorized — ohne Ausnahmen.
Den Key genau einmal von der Maschine/dem Netzwerk abrufen, das der Instanz gehört:
curl http://your-host:9999/key
# {"key": "3f2b..."} <- save it; this endpoint is now burned until restartDer Key bleibt unter
~/.idapro/mcp/api_key(Modus0600) und überlebt Reboots;GET /keystellt ihn einmal pro Serverstart wieder ausÜberschreibbar mit
IDA_MCP_API_KEY(oder Verlagerung überIDA_MCP_API_KEY_FILE)Alle anderen Endpunkte verlangen ihn bei jedem Aufruf:
Authorization: Bearer <key>
# or equivalently
X-API-Key: <key>Der Key wird niemals aufgezeichnet.
Hosting-Endpunkte
Endpunkt | Auth | Zweck |
| keine | Bereitschaftstest: |
| Key | Offene Datenbanken einschließlich letzter Zeitstempel |
| Key | Binär-Upload mit Rohdaten, gestreamt nach |
# 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"Nützliche 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 startupSitzungsbezogene Tools: idb_open, idb_list, idb_close — pro Sitzung wird eine Datenbank geöffnet; jede Sitzung erhält einen eigenen isolierten Worker-Prozess.
GUI-Proxy ausführen (interaktives IDA)
Das Plugin in IDA starten (Edit -> Plugins -> MCP oder Ctrl+Alt+M), dann:
uv run ida-pro-mcp # stdio proxy, auto-discovers IDA
uv run ida-pro-mcp --transport http://127.0.0.1:9999 # serve HTTP insteadEinen MCP-Client verbinden
Generische JSON-Konfiguration (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>"Für den GUI-Proxy über stdio: uv run ida-pro-mcp --config ausführen und das JSON in den Client einfügen.
Konfiguration (Umgebungsvariablen)
Variable | Standard | Bedeutung |
|
| Maximale Sekunden für Öffnen + Auto-Analyse vor dem Zuschlagen ( |
|
| Auffangzeit pro weitergeleitetem Tool-Aufruf |
|
| GUI-Proxy → IDA-Upstream-Timeout ( |
|
| Begrenzung des Trace-Protokolls innerhalb der IDB |
|
| Standardwert für |
|
| Budgets für Integritätstests |
|
| Minuten, bevor eine unbewegte Sitzung automatisch geschlossen wird ( |
|
| Obergrenze für |
|
| Wo Uploads gespeichert werden |
| – / | Instanz-Key injizieren oder Speicherort verändern |
|
| Speicherbudget pro Datenbank / gesamt bei |
| unset | Auf |
Sicherheitshinweise: Der API-Key sperrt jeden HTTP-Endpunkt und gilt für Supervisor und GUI-Plugin gleichermaßen (das Plugin kann über
py_evalbeliebigen Code ausführen, daher ist es auch im Loopback mit Key gesichert). Es ist ein Bearer-Token: Wer ihn erhält, besitzt die Instanz. Ein TLS-Reverse-Proxy einbinden, sobald es Ihr sicheres Netzwerk verlässt. Browser können den Key als?key=<key>übergeben (praktisch für/config.html).
Testen
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 -qLizenz
MIT — übernommen aus ida-pro-mcp.
Produktnamen des Upstreams (IDA Pro, Hex-Rays) sind Marken der Hex-Rays SA; dieses
Projekt erfordert eine eigene gültige IDA-Pro-Lizenz.
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 the Seline Analytics API
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Hosted MCP server for task-first delegation to remote workstations and workers.
Related MCP Servers
- AlicenseCqualityAmaintenanceMCP Server for automated reverse engineering with IDA Pro.431,602 PyPI12,620MIT
- FlicenseNot gradedqualityDmaintenanceA headless MCP server that manages multiple independent IDA Pro worker processes for reverse engineering, supporting database operations and debug tools.22-
- AlicenseNot gradedqualityDmaintenanceHeadless MCP server for IDA Pro enabling on-demand database loading and programmatic reverse engineering workflows via MCP tools.18MIT
- AlicenseNot gradedqualityAmaintenanceHeadless reverse engineering MCP server integrating IDA Pro for static analysis and x64dbg for dynamic debugging via controlled MCP tools.4GPL 3.0