Server MCP deterministico e local-first per IDA Pro/Home: 109 operazioni di reverse engineering con schema rigoroso, risultati supportati da evidenze e modifiche all'IDB controllate da policy.

IDA Pro MCP è un server locale Model Context Protocol per IDA Pro. Consente a un client MCP di ispezionare un IDB, chiedere a IDA risultati di analisi deterministici e, quando esplicitamente consentito, scrivere annotazioni o altre modifiche nell'IDB. Il processo host viene eseguito al di fuori di IDA e avvia un processo IDA headless separato per ogni sessione per impostazione predefinita.
ida_* con schema
rigoroso, con discovery live tramite tools/list e ida_help.La versione corrente è 1.0.0a3. Questo è software alpha. I nomi pubblici
delle operazioni ida_*, gli schemi e il formato del workspace possono cambiare prima
di una release stabile 1.0.0. La superficie client predefinita contiene 109 operazioni con schema esatto.
Usa la discovery live per il contratto completo: tools/list enumera ogni
operazione con il suo schema, e ida_help(topic="...") restituisce gli argomenti esatti
e un esempio per una singola operazione.
Ti serve:
idat/idat64 utilizzabile.
Le evidenze dei test live del repository coprono IDA 9.3 e 9.4; 9.2 è la
soglia di compatibilità dichiarata.L'analisi normale non richiede un modello linguistico o un modello di embedding. Le funzionalità opzionali di ricerca semantica usano un modello locale per impostazione predefinita e restano disabilitate quando nessun modello è configurato.
Il runtime predefinito è idat: un processo IDA headless per sessione. Il
backend idalib è sperimentale, richiede un'installazione IDA 9.3 o successiva
con il pacchetto idapro attivato, e non è necessario per una prima installazione.
L'installer crea un ambiente gestito sotto la root di installazione, vi installa una copia congelata del checkout e scrive la configurazione del client per le posizioni client supportate. Dalla root del repository, esegui:
python3 install.py
Per un'installazione IDA nota, passala esplicitamente:
python3 install.py --ida-dir /path/to/ida-pro-9.3
Per un'esecuzione non interattiva:
python3 install.py --yes --no-ida-prompt --ida-dir /path/to/ida-pro-9.3
L'installer può anche trovare IDA tramite IDADIR, IDA_DIR, gli eseguibili
IDA nel PATH e le directory di installazione comuni. --ida-version
seleziona una versione quando è presente più di un'installazione. Usa
--dry-run per ispezionare prima le modifiche pianificate.
L'installer non scarica un modello di embedding a meno che tu non ne selezioni o
richieda uno. Può creare o aggiornare file di configurazione per ogni posizione
client nella sua mappa client integrata, inclusi i client che non sono installati
sulla tua macchina. Controlla install-report.json nella root di installazione e rimuovi
le voci inutilizzate se necessario. I file di configurazione regolari esistenti vengono salvati
prima di essere modificati; i file malformati, symlink o non regolari vengono
rifiutati anziché sovrascritti.
Riavvia il client MCP dopo l'installazione in modo che ricarichi la sua configurazione.
Gli harness degli agent scoprono la superficie degli strumenti in tempo reale: tools/list enumera ogni
operazione con il suo schema, e ida_help(topic="...") restituisce argomenti esatti
e un esempio. Non vengono installati file di skill statici.
La root di installazione predefinita è:
~/.local/share/ida-pro-mcp%LOCALAPPDATA%/ida-pro-mcpImposta IDA_PRO_MCP_HOME o passa --install-root per scegliere un'altra posizione.
Le release alpha sono costruite da GitHub Actions e pubblicate manualmente come
prerelease. Quando una release è disponibile, scarica l'asset bundle.zip o
bundle.tar.gz e il suo file SHA256SUMS dalla
pagina delle release. Verifica il
checksum, estrai il bundle ed esegui l'installer dalla sua directory di primo livello:
python3 install.py --yes --no-ida-prompt --ida-dir /path/to/ida-pro-9.3
La release contiene anche un wheel e una distribuzione sorgente per installazioni Python scriptate. Il bundle è la via più semplice perché include l'installer e tutti i file di progetto necessari per configurare un client MCP. Le release sono di qualità alpha; conserva il binario originale e l'IDB e leggi le note di release prima di aggiornare.
L'installer scrive la voce del server per i percorsi di configurazione client che conosce. Supporta Gemini CLI, Antigravity, Antigravity IDE, Antigravity CLI, Claude Code, Codex, Copilot CLI, OpenCode, Claude Desktop, Cursor, VS Code, Windsurf, Cline e Roo Code. OpenCode e i client della famiglia Copilot usano forme di configurazione diverse; lascia che l'installer scriva quei file o segui la guida di setup di OpenCode.
Per un client che usa il formato JSON comune, la voce è equivalente a:
{
"mcpServers": {
"ida-pro-mcp": {
"command": "/path/to/ida-pro-mcp/.venv/bin/python",
"args": ["-u", "-m", "ida_pro_mcp.host.server"],
"env": {
"IDA_PRO_MCP_HOME": "/path/to/ida-pro-mcp",
"IDADIR": "/path/to/ida-pro-9.3",
"IDA_MCP_TOOL_SURFACE": "agent"
}
}
}
}
Su Windows, usa l'interprete gestito in
<install-root>/.venv/Scripts/python.exe. I dettagli importanti sono
l'interprete gestito, -u -m ida_pro_mcp.host.server, la directory IDA
selezionata e IDA_MCP_TOOL_SURFACE=agent. Non puntare il client a
install.py; quel file è l'installer, non il server MCP.
Dopo aver modificato la configurazione di un client, riavvia completamente il client e verifica che
ida_help compaia tra le sue operazioni disponibili. Se il client mostra solo una
vecchia interfaccia ampia tool(action=...), verifica che l'ambiente selezioni
la superficie predefinita agent anziché
IDA_MCP_TOOL_SURFACE=legacy.
Usa prima un percorso assoluto verso un binario di test. L'apertura di un binario normalmente attende che l'analisi iniziale di IDA sia completata; un binario di grandi dimensioni può richiedere tempo.
ida_open_binary(binary_path="/absolute/path/to/sample")
ida_session_status()
ida_overview()
ida_list_imports(limit=30)
ida_list_strings(query="http", limit=30)
ida_find(query="main", limit=20)
ida_decompile(address="<address returned by IDA>")
ida_xrefs_to(address="<same address>")
Usa ida_help(topic="ida_decompile") ogni volta che ti serve lo schema esatto degli
argomenti. Gli schemi pubblici delle operazioni sono rigorosi: gli argomenti sconosciuti vengono rifiutati.
Gli indirizzi possono essere accettati come interi o stringhe secondo il singolo
contratto dell'operazione; usa la forma mostrata da ida_help per l'operazione nel
tuo client.
Per un piccolo registro di indagine, le operazioni sui findings del workspace sono:
ida_write_finding(title="Input reaches parser", address="<address returned by IDA>", kind="finding", status="confirmed", confidence=0.8, evidence=[{"type":"call", "value":"recv", "address":"<evidence address>"}])
ida_analysis_brief()
ida_next_target()
ida_export_findings(format="markdown")
I findings del workspace sono mantenuti separatamente dalle modifiche all'IDB. Se la policy attiva
consente la scrittura nel workspace, ida_write_finding registra un finding localmente;
altrimenti il server restituisce un errore di policy. ida_publish_findings(dry_run=true)
mostra in anteprima le modifiche all'IDB. Pubblicazione, rinomina, patching e altre mutazioni dell'IDB
sono controllate dalla policy e richiedono la presa d'atto documentata dell'operazione dove
l'operazione ne espone una.
La pagina principale resta orientata ai compiti, ma questo indice compatto mantiene la superficie pubblica
facile da scorrere. Ogni nome sotto è preceduto da ida_ quando viene chiamato. Gli
schemi completi e gli esempi sono disponibili in tempo reale tramite tools/list e
ida_help(topic="...").
| Gruppo | Operazioni |
|---|---|
| Sessione | open_binary, open_background, session_state, session_status, session_health, close_session, session_get, session_list, sso_activate, agent_login, agent_logout, session_switch |
| Discovery | overview, find, semantic_search, reranker_status, function_families, index_functions, index_status, cancel_index, list_functions, list_strings, list_imports, list_types, list_segments, list_sigs, sreg_get, sreg_list, auto_wait, events, registers, search_data_value, search_query_lang, r2_status, r2_bininfo, r2_load_hints, r2_disassemble_hypothesis, r2_vxrefs, fw_detect_vector_table, fw_detect_load_base, fw_detect_mmio, fw_rtos_scan, fw_carve |
| Codice | decompile, disassemble, compare_functions, diff_sessions, xrefs_to, callers, callees, read_bytes, get_type, callgraph, emulate |
| Findings |
La policy di base del server è assist. Una sessione può rendere più restrittiva la
policy di base dell'operatore ma non può allentarla. La policy è deterministica; non
decide che un'operazione rischiosa è sicura perché un client la richiede.
L'ispezione in sola lettura è il normale punto di partenza. Esempi includono
ida_overview, ida_find, ida_list_functions, ida_list_strings,
ida_list_imports, ida_decompile, ida_disassemble, ida_xrefs_to,
ida_callers, ida_callees, ida_callgraph, ida_read_bytes e le
operazioni di calcolo. Queste consumano comunque file locali e risorse IDA,
e il client MCP riceve i loro risultati.
Le seguenti azioni modificano stato durevole o eseguono codice e dovrebbero essere trattate come ad alto impatto:
ida_rename, ida_comment, ida_patch_bytes, modifiche a funzioni/tipi/segmenti/dati,
applicazione di firme, ida_save_idb, snapshot e operazioni di undo/restore
possono modificare l'IDB o lo stato correlato.ida_publish_findings scrive i findings nell'IDB. Esegui prima la sua forma dry-run;
la forma non dry-run è controllata.ida_close_session smantella il runtime IDA live ed è distruttiva dal
punto di vista della sessione.ida_python esegue Python arbitrario nel processo IDA attivo. È
bloccata in modalità safe e richiede una presa d'atto esplicita del rischio con
la policy normale.ida_emulate è utile per controlli controllati, ma le azioni mutanti dell'emulatore
richiedono la presa d'atto corrispondente.ida_til_export e ida_til_import accedono al filesystem e sono controllate.
I percorsi del filesystem sono vincolati dalla root di memoria configurata dove quella
protezione si applica.Non usare --disable-policy come flag di comodo. Imposta
IDA_MCP_POLICY_MODE=off e disabilita tutti i gate della policy, incluse le prese d'atto
di scrittura e altri controlli del workflow. Se una chiamata viene negata, leggi la
voce ida_help dell'operazione e fornisci l'argomento di presa d'atto esatto solo
quando lo schema di quell'operazione lo supporta.
Mentre IDA sta ancora eseguendo l'analisi iniziale, la modalità safe blocca alcune
operazioni di analisi full-binary, indicizzazione e script. È pensata per mantenere
le chiamate di inizio sessione ristrette; esegui il polling di ida_session_status o
ida_session_health anziché aggirare la protezione.
Il bridge ascolta su loopback e usa un token per sessione. Non è un servizio di rete: non esporre o inoltrare la porta del bridge a una rete non attendibile. Tratta script, trace, binari, dati di corpus e richieste client importati come input non attendibile.
Il normale percorso host-to-IDA è locale. Il progetto non esegue un servizio LLM integrato nel percorso di analisi, e l'embedding locale è opt-in. Ciò non rende automaticamente offline l'intero workflow:
llama-server,
i download opzionali di corpus di minacce e le integrazioni esterne Rizin/radare2
possono effettuare richieste di rete quando abilitati.Per un setup solo locale, usa il runtime locale predefinito, lascia disabilitati Gemini e gli altri download opzionali, e configura il client MCP e il suo modello secondo la policy dei dati della tua organizzazione. "Solo locale" richiede comunque di verificare cosa il client invia al proprio provider di modello.
Passa esplicitamente la directory di installazione:
python3 install.py --ida-dir /path/to/ida-pro-9.3
Puoi anche impostare IDADIR o IDA_DIR. Se vengono trovate più installazioni,
usa --ida-version 9.3 o --no-ida-prompt per controllare la selezione. Conferma
che la directory selezionata contenga un idat o idat64 eseguibile.
Riavvia il client e ispeziona la sua voce di configurazione. Conferma che il suo
comando usi il Python del venv gestito e -u -m ida_pro_mcp.host.server, e
che il blocco env contenga il IDADIR corretto. Rivedi
install-report.json; l'installer registra i fallimenti di aggiornamento del client e mantiene
i backup accanto ai file modificati. Le forme di configurazione di OpenCode e della famiglia Copilot
differiscono dall'esempio JSON comune.
La normale chiamata ida_open_binary attende l'analisi iniziale. Controlla
ida_session_status e ida_session_health, concedi più tempo per un binario
di grandi dimensioni e controlla i log per sessione sotto la directory di installazione/dati. L'operazione
di apertura in background è disponibile, ma è pensata per casi in cui
comprendi il suo comportamento asincrono e le restrizioni della modalità safe.
Di solito è la policy che funziona come configurato. Usa ida_help per ispezionare lo
schema esatto dell'operazione e il suo requisito di presa d'atto. Non aggiungere
argomenti arbitrari: gli schemi sono rigorosi. Rivedi IDA_MCP_POLICY_MODE e il
file di policy dell'operatore prima di modificare la policy. Disabilitare tutti i gate della policy è una
scelta separata e deliberatamente non sicura.
La ricerca semantica è opzionale e richiede un indice e un backend di embedding compatibile. L'elenco ordinario, la ricerca, la decompilazione e il lavoro di cross-reference non la richiedono. Per configurare il percorso locale opzionale, usa le opzioni esplicite dell'embedder dell'installer, ad esempio:
python3 install.py --setup-embedder
L'installer può anche eseguire --embedder-doctor, usare un percorso di modello esplicito o
scaricare un modello selezionato e llama-server quando richiesto. Le licenze dei modelli,
l'uso del disco e i download di rete sono tua responsabilità. Se il modello è
mancante, il server dovrebbe segnalare la ricerca semantica come non disponibile anziché
fingere che sia stata eseguita.
Correggi la sintassi JSON, JSONC o TOML segnalata e riesegui l'installer. Rifiuta anche percorsi di configurazione symlink e non regolari per evitare di sovrascrivere un target inatteso. I file regolari esistenti vengono salvati; il comportamento di rollback predefinito dell'installer può ripristinare quei backup se una fase successiva fallisce.
Controlla ida_session_health, il log della sessione e il log del bridge. Conferma che
il client stia usando la stessa root di installazione e lo stesso IDADIR che l'installer
ha registrato. Il backend idat predefinito assegna a ogni sessione il proprio processo; non
passare all'idalib sperimentale mentre diagnostichi un'installazione di base.
tools/list e
ida_help espongono ogni operazione pubblica, schema ed esempio.Per i nomi esatti delle operazioni, usa il riferimento generato o chiedi al server
in esecuzione con ida_help. Il vecchio backend tool(action=...) resta disponibile
per compatibilità ed è selezionato con IDA_MCP_TOOL_SURFACE=legacy; le nuove
integrazioni dovrebbero usare la superficie ida_* con schema esatto.
write_finding, mark_examined, list_findings, search_findings, update_finding, export_findings, publish_findings, import_annotations, analysis_brief, next_target |
| Modifica | create_function, change_function, rename, comment, patch_bytes, save_idb, make_code, undefine, rename_local, declare_type, apply_type, add_segment, set_segment_attrs, apply_sig, sreg_set, create_data, create_strlit, undo_begin, undo_end, add_entry, idb_snapshot, idb_restore_snapshot, struct_member_add, struct_member_del, struct_member_rename, struct_member_set_type, enum_member_add, enum_member_rename, enum_member_revalue, til_delete, til_export, til_import, mark_dangerous |
| Calcolo | calc_eval, calc_offset, calc_convert, calc_resolve, calc_deref, calc_chain, calc_align, calc_bitops |
| Supporto | python, continue, help |
| Workflow | batch |