
ローカルファーストで決定論的なIDA Pro/Home向けMCPサーバー:109の厳格なスキーマによるリバースエンジニアリング操作、証拠に基づく検出結果、ポリシーで制御されたIDB編集。

IDA Pro MCPは、IDA Pro用のローカルModel Context Protocolサーバーです。MCPクライアントがIDBを検査し、IDAに決定論的な解析結果を問い合わせ、明示的に許可された場合には注釈やその他の変更をIDBに書き戻すことを可能にします。ホストプロセスはIDAの外部で実行され、デフォルトではセッションごとに別個のIDAヘッドレスプロセスを起動します。
ida_*オペレーションを備え、tools/listとida_helpを通じてライブに検出可能。現在のバージョンは1.0.0a3です。これはアルファ版ソフトウェアです。公開されているida_*オペレーション名、スキーマ、ワークスペース形式は、安定版1.0.0リリースまでに変更される可能性があります。デフォルトのクライアントサーフェスには109個の厳密なスキーマのオペレーションが含まれます。完全なコントラクトについてはライブ検出を使用してください。はすべてのオペレーションをそのスキーマとともに列挙し、は1つのオペレーションの正確な引数と例を返します。
tools/listida_help(topic="...")必要なもの:
idat/idat64実行ファイルがあること。リポジトリのライブテストエビデンスはIDA 9.3と9.4をカバーしており、9.2が宣言された互換性の下限です。通常の解析には言語モデルや埋め込みモデルは不要です。オプションのセマンティック検索機能はデフォルトでローカルモデルを使用し、モデルが構成されていない場合は無効のままです。
デフォルトのランタイムはidatです。セッションごとに1つのヘッドレスIDAプロセスです。idalibバックエンドは実験的であり、idaproパッケージがアクティベートされたIDA 9.3以降のインストールが必要で、初回インストールには不要です。
インストーラーはインストールルートの下に管理された環境を作成し、チェックアウトの固定コピーをそこにインストールし、サポートされているクライアントの場所に対してクライアント設定を書き込みます。リポジトリのルートから実行します:
python3 install.py
既知のIDAインストールがある場合は、明示的に渡します:
python3 install.py --ida-dir /path/to/ida-pro-9.3
非対話実行の場合:
python3 install.py --yes --no-ida-prompt --ida-dir /path/to/ida-pro-9.3
インストーラーはIDADIR、IDA_DIR、PATH上のIDA実行ファイル、および一般的なインストールディレクトリを通じてもIDAを見つけることができます。--ida-versionは複数のインストールが存在する場合にバージョンを選択します。まず--dry-runを使用して計画された変更を確認してください。
インストーラーは、あなたが選択または要求しない限り埋め込みモデルをダウンロードしません。組み込みのクライアントマップにあるすべてのクライアントの場所に対して設定ファイルを作成または更新する可能性があり、マシンにインストールされていないクライアントも含まれます。インストールルートのinstall-report.jsonを確認し、必要に応じて未使用のエントリを削除してください。既存の通常の設定ファイルは変更前にバックアップされます。不正な形式、シンボリックリンク、または非通常ファイルは上書きされずに拒否されます。
インストール後はMCPクライアントを再起動して、設定を再読み込みさせてください。
エージェントハーネスはツールサーフェスをライブに検出します。tools/listはすべてのオペレーションをそのスキーマとともに列挙し、ida_help(topic="...")は正確な引数と例を返します。静的なスキルファイルはインストールされません。
デフォルトのインストールルートは:
~/.local/share/ida-pro-mcp%LOCALAPPDATA%/ida-pro-mcp別の場所を選択するにはIDA_PRO_MCP_HOMEを設定するか、--install-rootを渡してください。
アルファリリースはGitHub Actionsによってビルドされ、手動でプレリリースとして公開されます。リリースが利用可能な場合は、リリースページからbundle.zipまたはbundle.tar.gzアセットとそのSHA256SUMSファイルをダウンロードしてください。チェックサムを検証し、バンドルを展開し、そのトップレベルディレクトリからインストーラーを実行します:
python3 install.py --yes --no-ida-prompt --ida-dir /path/to/ida-pro-9.3
リリースには、スクリプトによるPythonインストール用のwheelとソースディストリビューションも含まれています。バンドルは、インストーラーとMCPクライアントを構成するために必要なすべてのプロジェクトファイルを含むため、最も簡単なルートです。リリースはアルファ品質です。アップグレードする前に、元のバイナリとIDBを保持し、リリースノートを読んでください。
インストーラーは、認識しているクライアント設定パスに対してサーバーエントリを書き込みます。Gemini CLI、Antigravity、Antigravity IDE、Antigravity CLI、Claude Code、Codex、Copilot CLI、OpenCode、Claude Desktop、Cursor、VS Code、Windsurf、Cline、Roo Codeをサポートしています。 OpenCodeとCopilotファミリーのクライアントは異なる設定形式を使用します。インストーラーにそれらのファイルを書き込ませるか、OpenCodeセットアップガイドに従ってください。
一般的なJSON形式を使用するクライアントの場合、エントリは次と同等です:
{
"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"
}
}
}
}
Windowsでは、<install-root>/.venv/Scripts/python.exeにある管理されたインタープリターを使用してください。重要な詳細は、管理されたインタープリター、-u -m ida_pro_mcp.host.server、選択されたIDAディレクトリ、およびIDA_MCP_TOOL_SURFACE=agentです。クライアントをinstall.pyに向けないでください。そのファイルはインストーラーであり、MCPサーバーではありません。
クライアント設定を変更した後は、クライアントを完全に再起動し、利用可能なオペレーションにida_helpが表示されることを確認してください。クライアントがレガシーの広範なtool(action=...)インターフェースのみを表示する場合は、環境がIDA_MCP_TOOL_SURFACE=legacyではなくデフォルトのagentサーフェスを選択していることを確認してください。
まずテストバイナリへの絶対パスを使用してください。バイナリを開くと通常、IDAの初期解析が完了するまで待機します。大きなバイナリは時間がかかることがあります。
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>")
正確な引数スキーマが必要な場合はいつでもida_help(topic="ida_decompile")を使用してください。公開オペレーションのスキーマは厳格です。未知の引数は拒否されます。アドレスは個々のオペレーションのコントラクトに従って整数または文字列として受け入れられる場合があります。クライアント内のオペレーションについてida_helpが示す形式を使用してください。
小さな調査記録の場合、ワークスペースfindingsオペレーションは次のとおりです:
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")
ワークスペースfindingsはIDBの編集とは別に保持されます。アクティブなポリシーがワークスペース書き込みを許可している場合、ida_write_findingはfindingをローカルに記録します。そうでない場合、サーバーはポリシーエラーを返します。ida_publish_findings(dry_run=true)はIDBの変更をプレビューします。公開、名前変更、パッチ適用、およびその他のIDB変更はポリシーでゲートされ、オペレーションが承認を公開している場合は、そのオペレーションの文書化された承認が必要です。
フロントページはタスク指向のままですが、このコンパクトなインデックスは公開サーフェスをスキャンしやすくします。以下の各名前は、呼び出される際にida_が接頭辞として付きます。完全なスキーマと例は、tools/listとida_help(topic="...")を通じてライブに利用可能です。
| グループ | オペレーション |
|---|---|
| Session | 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 |
| Code | decompile, disassemble, compare_functions, diff_sessions, xrefs_to, callers, callees, read_bytes, get_type, callgraph, emulate |
| Findings |
サーバーのベースラインポリシーはassistです。セッションはオペレーターのベースラインポリシーを厳格化することはできますが、緩和することはできません。ポリシーは決定論的です。クライアントが要求したからといって、危険なオペレーションが安全であると判断することはありません。
読み取り専用の検査が通常の出発点です。例としては、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、および計算オペレーションがあります。これらは依然としてローカルファイルとIDAリソースを消費し、MCPクライアントはその結果を受け取ります。
以下のアクションは永続的な状態を変更するかコードを実行するため、高インパクトとして扱うべきです:
ida_rename、ida_comment、ida_patch_bytes、関数/型/セグメント/データの変更、シグネチャの適用、ida_save_idb、スナップショット、およびundo/restoreオペレーションは、IDBまたは関連する状態を変更する可能性があります。ida_publish_findingsはfindingsをIDBに書き込みます。まずそのdry-run形式を実行してください。非dry-run形式はゲートされています。ida_close_sessionはライブIDAランタイムを破棄し、セッションの観点からは破壊的です。ida_pythonはアクティブなIDAプロセスで任意のPythonを実行します。セーフモードではブロックされ、通常のポリシーでは明示的なリスク承認が必要です。ida_emulateは制御されたチェックに有用ですが、エミュレーターを変更するアクションには対応する承認が必要です。ida_til_exportとida_til_importはファイルシステムにアクセスし、ゲートされています。ファイルシステムパスは、そのガードが適用される場合、構成されたメモリルートによって制約されます。--disable-policyを便利フラグとして使用しないでください。これはIDA_MCP_POLICY_MODE=offを設定し、書き込み承認やその他のワークフロー制御を含むすべてのポリシーゲートを無効にします。呼び出しが拒否された場合は、そのオペレーションのida_helpエントリを読み、そのオペレーションのスキーマがサポートしている場合にのみ、正確な承認済み引数を指定してください。
IDAがまだ初期解析を実行している間、セーフモードは一部の全バイナリ解析、インデックス作成、およびスクリプトオペレーションをブロックします。これは初期セッションの呼び出しを狭く保つことを意図しています。ガードを迂回するのではなく、ida_session_statusまたはida_session_healthをポーリングしてください。
ブリッジはループバックでリッスンし、セッションごとのトークンを使用します。これはネットワークサービスではありません。ブリッジポートを信頼できないネットワークに公開または転送しないでください。インポートされたスクリプト、トレース、バイナリ、コーパスデータ、およびクライアントリクエストは信頼できない入力として扱ってください。
通常のホストからIDAへのパスはローカルです。プロジェクトは解析パスに組み込みのLLMサービスを実行せず、ローカル埋め込みはオプトインです。ただし、それによってワークフロー全体が自動的にオフラインになるわけではありません:
llama-serverダウンロード、オプションの脅威コーパスダウンロード、および外部のRizin/radare2統合は、有効にするとネットワークリクエストを行う場合があります。ローカルのみのセットアップには、デフォルトのローカルランタイムを使用し、Geminiおよびその他のオプションのダウンロードを無効のままにし、組織のデータポリシーに従ってMCPクライアントとそのモデルを構成してください。「ローカルのみ」であっても、クライアントが独自のモデルプロバイダーに何を送信するかを確認する必要があります。
インストールディレクトリを明示的に渡してください:
python3 install.py --ida-dir /path/to/ida-pro-9.3
IDADIRまたはIDA_DIRを設定することもできます。複数のインストールが見つかった場合は、--ida-version 9.3または--no-ida-promptを使用して選択を制御してください。選択したディレクトリに実行可能なidatまたはidat64が含まれていることを確認してください。
クライアントを再起動し、その設定エントリを検査してください。そのコマンドが管理されたvenv Pythonと-u -m ida_pro_mcp.host.serverを使用していること、およびenvブロックに正しいIDADIRが含まれていることを確認してください。install-report.jsonを確認してください。インストーラーはクライアント更新の失敗を記録し、変更されたファイルの隣にバックアップを保持します。OpenCodeとCopilotファミリーの設定形式は、一般的なJSONの例とは異なります。
通常のida_open_binary呼び出しは初期解析を待機します。ida_session_statusとida_session_healthを確認し、大きなバイナリにはより多くの時間を許可し、インストール/データディレクトリの下にあるセッションごとのログを確認してください。バックグラウンドオープンオペレーションも利用可能ですが、その非同期動作とセーフモードの制限を理解している場合を対象としています。
これは通常、構成どおりにポリシーが機能していることを意味します。ida_helpを使用して、オペレーションの正確なスキーマとその承認要件を検査してください。任意の引数を追加しないでください。スキーマは厳格です。ポリシーを変更する前に、IDA_MCP_POLICY_MODEとオペレーターポリシーファイルを確認してください。すべてのポリシーゲートを無効にすることは、別個の、意図的に安全でない選択です。
セマンティック検索はオプションであり、インデックスと互換性のある埋め込みバックエンドが必要です。通常のリスト、検索、逆コンパイル、およびクロスリファレンス作業には必要ありません。オプションのローカルパスをセットアップするには、インストーラーの明示的なembedderオプションを使用します。例えば:
python3 install.py --setup-embedder
インストーラーは--embedder-doctorを実行したり、明示的なモデルパスを使用したり、要求された場合に選択されたモデルとllama-serverをダウンロードすることもできます。モデルのライセンス、ディスク使用量、およびネットワークダウンロードはあなたの責任です。モデルが欠落している場合、サーバーはセマンティック検索が実行されたふりをするのではなく、利用不可として報告するはずです。
報告されたJSON、JSONC、またはTOML構文を修正し、インストーラーを再実行してください。また、予期しないターゲットを上書きしないように、シンボリックリンクおよび非通常の設定パスを拒否します。既存の通常ファイルはバックアップされます。インストーラーのデフォルトのロールバック動作は、後のフェーズが失敗した場合にそれらのバックアップを復元できます。
ida_session_health、セッションログ、およびブリッジログを確認してください。クライアントがインストーラーが記録したものと同じインストールルートとIDADIRを使用していることを確認してください。デフォルトのidatバックエンドは各セッションに独自のプロセスを与えます。基本的なインストールを診断している間は、実験的なidalibに切り替えないでください。
tools/listとida_helpがすべての公開オペレーション、スキーマ、および例を公開します。正確なオペレーション名については、生成されたリファレンスを使用するか、実行中のサーバーにida_helpで問い合わせてください。古いtool(action=...)バックエンドは互換性のために引き続き利用可能で、IDA_MCP_TOOL_SURFACE=legacyで選択されます。新しい統合では、厳密なスキーマのida_*サーフェスを使用すべきです。
write_finding, mark_examined, list_findings, search_findings, update_finding, export_findings, publish_findings, import_annotations, analysis_brief, next_target |
| Edit | 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 |
| Calculation | calc_eval, calc_offset, calc_convert, calc_resolve, calc_deref, calc_chain, calc_align, calc_bitops |
| Support | python, continue, help |
| Workflow | batch |