Skip to main content
Glama
Claude-Reverser

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: .id0/.id1/.id2/.nam/.til-Dateien, die einer anderen laufenden Instanz gehören, werden niemals gelöscht; ist keine Eigentumsermittlung möglich, schlägt die Bereinigung sicher fehl

Speicherzuverlässigkeit

idb_save läuft mit einem Budget von 600 s (zuvor 60 s); idb_close weigert sich, nach einem fehlgeschlagenen Speichern einen Worker zu beenden, anstatt Änderungen stillschweigend zu verwerfen

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 -32700/-32600 zurück, statt den Proxy abzustürzen

Timeouts

Proxy-Timeout von 30 s auf 900 s angehoben und konfigurierbar gemacht (IDA_MCP_PROXY_TIMEOUT), sodass lange Dekompilierungen clientseitig nicht mehr als „fehlgeschlagen“ gelten, während sie serverseitig noch laufen

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 (IDA_MCP_TRACE_MAX_MB), überdimensionierte Argumente/Ergebnisse werden gekürzt; Warteschlange für fehlgeschlagene Flushes ist begrenzt

Authentifizierung

Jede HTTP-Anfrage erfordert einen Instanz-API-Schlüssel; dieser wird über GET /key genau einmal ausgestellt und dann verbraucht. Der Schlüssel wird auf der Festplatte gesichert, damit er Neustarts und Reboots überlebt

Hosting-Endpunkte

GET /health (unauthentifizierter Bereitschaftstest), GET /sessions (offene Datenbanken + letzter Zugriff), POST /upload (direkter Binär-Upload mit Größenlimit)

Bereinigung im Leerlauf

Sitzungen, die IDA_MCP_IDLE_TIMEOUT Minuten lang unangetastet bleiben, werden automatisch geschlossen (nach dem Speichern)

Elegantes Herunterfahren

Bei SIGTERM/SIGINT wird jede geöffnete Datenbank vor dem Beenden gespeichert – mit pct stop geht keine Arbeit mehr verloren

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+ (idapyswitch innerhalb von IDA verwenden, um sie abzustimmen)

  • IDA Pro 8.3+ (9.x empfohlen). IDA Free wird nicht unterstützt

  • uv

  • 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 restart
  • Der Key bleibt unter ~/.idapro/mcp/api_key (Modus 0600) und überlebt Reboots; GET /key stellt ihn einmal pro Serverstart wieder aus

  • Überschreibbar mit IDA_MCP_API_KEY (oder Verlagerung über IDA_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

GET /health

keine

Bereitschaftstest: {"status":"ok","uptime":N,"sessions":N} — abfragen statt zu warten

GET /sessions

Key

Offene Datenbanken einschließlich letzter Zeitstempel

POST /upload?filename=NAME

Key

Binär-Upload mit Rohdaten, gestreamt nach IDA_MCP_UPLOAD_DIR; gibt den Pfad zur Übergabe an idb_open zurück

# 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 startup

Sitzungsbezogene 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 instead

Einen 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

IDA_MCP_OPEN_TIMEOUT

1800

Maximale Sekunden für Öffnen + Auto-Analyse vor dem Zuschlagen (0 = unbegrenzt)

IDA_MCP_WORKER_CALL_TIMEOUT

900

Auffangzeit pro weitergeleitetem Tool-Aufruf

IDA_MCP_PROXY_TIMEOUT

900

GUI-Proxy → IDA-Upstream-Timeout (0 = unbegrenzt)

IDA_MCP_TRACE_MAX_MB

64

Begrenzung des Trace-Protokolls innerhalb der IDB

IDA_MCP_MAX_WORKERS

4

Standardwert für --max-workers

IDA_MCP_HEALTH_TCP_TIMEOUT / IDA_MCP_HEALTH_RPC_TIMEOUT

2.0 / 10.0

Budgets für Integritätstests

IDA_MCP_IDLE_TIMEOUT

60

Minuten, bevor eine unbewegte Sitzung automatisch geschlossen wird (90 schaltet ab)

IDA_MCP_MAX_UPLOAD_MB

100

Obergrenze für POST /upload-Datensätze

IDA_MCP_UPLOAD_DIR

~/.idapro/mcp/uploads

Wo Uploads gespeichert werden

IDA_MCP_API_KEY / IDA_MCP_API_KEY_FILE

– / ~/.idapro/mcp/api_key

Instanz-Key injizieren oder Speicherort verändern

IDA_MCP_SHUTDOWN_SAVE_TIMEOUT / IDA_MCP_SHUTDOWN_SAVE_BUDGET

30 / 120

Speicherbudget pro Datenbank / gesamt bei SIGTERM

IDA_MCP_NO_UPDATE_CHECK

unset

Auf 1 setzen, um die GitHub-Release-Prüfung zu deaktivieren

Sicherheitshinweise: Der API-Key sperrt jeden HTTP-Endpunkt und gilt für Supervisor und GUI-Plugin gleichermaßen (das Plugin kann über py_eval beliebigen 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 -q

Lizenz

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.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    A headless MCP server that manages multiple independent IDA Pro worker processes for reverse engineering, supporting database operations and debug tools.
    12
  • A
    license
    Not graded
    quality
    D
    maintenance
    Headless MCP server for IDA Pro enabling on-demand database loading and programmatic reverse engineering workflows via MCP tools.
    18
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server that enables AI agents to control IDA Pro instances via Unix-socket supervisor, providing tools for decompilation, disassembly, and Python scripting.
    3

View all related MCP servers

Related MCP Connectors

  • MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.

  • MCP server for ScanMalware.com URL scanning, malware detection, and analysis.

  • MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Claude-Reverser/IDA-instances-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server