IDA Pro MCP Fusion について
IDA Pro MCP Fusionは、MCP対応のコーディングエージェントをローカルのライセンス済みIDA Proに接続し、リバースエンジニアリングを行います。ライブ解析に永続SQLiteキャッシュと、複数バイナリを扱うヘッドレスワーカーを単一エンドポイントで統合します。
主な機能
- 01関数のデコンパイルと逆アセンブル
- 02クロスリファレンスとコールグラフの照会
- 03SQLiteへの解析キャッシュ
- 04複数バイナリセッションの管理
- 05制限付きツールプロファイル
活用シーン
- 01複数のバイナリサンプルで関数を調査
- 02反復調査でインデックス済み解析を再利用
- 03複数バイナリのキャッシュを一括構築
- 04自動化を読み取り専用ツールに制限
MCP 対応
MCPサーバーはstdioまたはHTTP経由で、IDAの解析、編集、キャッシュ、セッション管理ツールをMCPクライアントに公開します。ローカルのライセンス済みIDA Proが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
1 つの MCP エンドポイント。多数のバイナリ。永続的な分析コンテキスト。
クイックスタート · Fusion を選ぶ理由 · アーキテクチャ · ツール · 設定 · 開発
Fusion とは?
IDA Pro MCP Fusion は、MCP 互換のコーディングエージェントを IDA Pro に接続し、1 つの接続を実用的なリバースエンジニアリング用ワークスペースに変えます。ライブの IDA 分析に永続的な SQLite インデックスと、複数のバイナリを分離されたヘッドレスワーカーで開いたままにできるスーパーバイザーを組み合わせています。
関数の逆コンパイルや逆アセンブル、クロスリファレンスの追跡、型の照会、シンボルの名前変更、データのパッチ、シグネチャの作成、複数サンプルの調査、キャッシュ済み分析の再利用に活用できます。IDA のシングルスレッド API を何度もたどる必要はありません。
重要
このプロジェクトには、ライセンス済みの IDA Pro をローカルにインストールする必要があります。IDA Free はサポートされていません。サーバーは IDA、Hex-Rays、またはホスト型分析サービスを提供しません。
Fusion を選ぶ理由
| 機能 | 変更点 | |
|---|---|---|
| ⚡ | 永続的な SQLite キャッシュ | 関数、文字列、グローバル、インポート、xref、コールグラフのエッジを、繰り返しの調査でも引き続き照会できます。 |
| ◈ | 複数バイナリ対応スーパーバイザー | 1 つの MCP エンドポイントから、複数の GUI またはヘッドレスデータベースを開き、アドレス指定し、閉じられます。 |
| ⛓ | 永続ワーカー | 後から起動したスーパーバイザーは、同じデータベース用の既存ワーカーを検出して引き継げます。 |
| ◎ | バッチ優先のワークフロー | 1 回の idb_batch_open 呼び出しで、サンプル群の分析を事前に実行し、キャッシュを構築できます。 |
| ⛨ | 制御された操作範囲 | 読み取り専用プロファイル、オプトイン方式の危険なツール、ワーカー数の上限、タイムアウト、アイドル時のクリーンアップによって、自動化を制限します。 |
キャッシュは IDB の隣に <database>.mcp.sqlite として保存されます。IDB の更新日時とキャッシュスキーマを基に最新状態を確認するため、古い行が黙って再利用されることはありません。
クイックスタート
1. 前提条件
uv がまだインストールされていない場合は、インストールしてください。
python -m pip install uv
IDA のヘッドレス Python 環境を一度有効にします。
# Windows — adjust the IDA version/path if needed
uv run "C:\Program Files\IDA Professional 9.3\idalib\python\py-activate-idalib.py"
# macOS — adjust the IDA version/path if needed
uv run "/Applications/IDA Professional 9.3.app/Contents/MacOS/idalib/python/py-activate-idalib.py"
2. MCP サーバーを追加する
推奨のセットアップでは、このリポジトリから最新のコードを直接実行します。
{
"mcpServers": {
"ida-pro-mcp-fusion": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/rison1337/ida-pro-mcp-fusion",
"idalib-mcp",
"--stdio"
]
}
}
}
Claude Code:
claude mcp add ida-pro-mcp-fusion -- uvx --from git+https://github.com/rison1337/ida-pro-mcp-fusion idalib-mcp --stdio
または、最新リリースからパッケージ化された MCP バンドルをダウンロードします。
3. データベースを開く
接続済みのエージェントに、次のように開始するよう依頼します。
idb_open(
"C:/samples/target.exe",
preferred_session_id="target",
build_caches=True,
init_hexrays=True,
)
以降の各分析呼び出しでは、データベースを明示的に指定します。
survey_binary(database="target")
decompile("main", database="target")
xrefs_to("WinMain", database="target")
cache_callgraph_hotspots(limit=25, database="target")
アーキテクチャ
- MCP クライアントは、stdio または HTTP 経由で
idalib-mcpを起動します。 - スーパーバイザーはバイナリごとにワーカーを作成または引き継ぎ、ワーカー数の上限を適用します。
- ツール呼び出しには
databaseセッション ID が含まれるため、リクエストは正しい IDB にルーティングされます。 - IDA はライブの逆コンパイルと変更処理を実行し、キャッシュツールはサイドカーの SQLite データベースからインデックス化されたクエリに応答します。
- ワーカーはホスト上で検出可能な状態を保ち、アイドル状態の TTL が経過すると自動的にクリーンアップされます。
GUI データベースも利用できます。idb_open は、次の 4 つのルーティングモードをサポートします。
| モード | 動作 |
|---|---|
prefer_headless | idalib ワーカーを使用または作成します。これがデフォルトです。 |
force_headless | 実行中の GUI インスタンスを引き継ぎません。 |
prefer_gui | 一致する GUI インスタンスを引き継ぎ、なければワーカーを作成します。 |
force_gui | 一致する GUI インスタンスを引き継ぐか、IDA GUI を起動します。 |
複数バイナリのワークフロー
小規模なコレクションを開き、すべてのセッションを利用可能な状態に保ちます。
idb_batch_open(
[
"C:/samples/loader.exe",
"C:/samples/payload.dll",
"C:/samples/helper.dll",
],
session_prefix="case42",
refresh_cache=True,
cache_include_xrefs=True,
)
大規模なコーパスでは、各キャッシュを構築した後、ワーカーをすぐに解放します。
idb_batch_open(
["C:/corpus/a.exe", "C:/corpus/b.exe", "C:/corpus/c.exe"],
close_after_cache=True,
retry_without_auto_analysis_on_timeout=True,
)
便利なセッション制御:
idb_list()
idb_close(database="case42_1_loader")
ツール一覧
コードベースには、スーパーバイザーの複数セッション制御に加えて、IDA 向けの分析ツールが 75 個登録されています。クライアントに表示される正確な数は意図的に変動します。デバッガーツールは拡張機能であり、危険な操作は明示的に有効化しない限り無効で、プロファイルによって許可リストをさらに絞り込むこともできます。
| 分野 | 主なツール |
|---|---|
| セッション | idb_open、idb_batch_open、idb_list、idb_close、idb_save |
| 調査と逆コンパイル | survey_binary、decompile、disasm、analyze_function、analyze_component |
| 検索と関連性 | find、find_bytes、search_text、xrefs_to、callees、callgraph、trace_data_flow |
| 永続キャッシュ | cache_status、refresh_cache、cache_entity_query、cache_xrefs、cache_callgraph_hotspots、cache_find_regex |
| 型とスタック | declare_type、type_inspect、set_type、infer_types、stack_frame、declare_stack |
| データベース編集 | rename、set_comments、define_func、define_code、patch_asm、make_data |
| シグネチャ | make_signature、make_signature_for_function、make_signature_for_range、find_xref_signatures |
| デバッガー拡張機能 | dbg_start、dbg_bps、dbg_regs、dbg_stacktrace、dbg_read、dbg_write |
キャッシュ専用の 9 つのツールは次のとおりです。
cache_status refresh_cache
cache_refresh_if_stale cache_list_funcs
cache_entity_query cache_xrefs
cache_callgraph cache_callgraph_hotspots
cache_find_regex
設定
ワーカープール
uvx --from git+https://github.com/rison1337/ida-pro-mcp-fusion \
idalib-mcp --stdio --max-workers 4
| オプション/変数 | 用途 |
|---|---|
--max-workers N | 同時に実行するデータベースワーカーの最大数です。0 は無制限を意味します。デフォルト:4。 |
IDA_MCP_MAX_WORKERS | ワーカー数上限の環境変数によるデフォルト値です。 |
IDA_MCP_OPEN_TIMEOUT | 自動分析を伴うオープン処理の最大時間(秒)です。デフォルト:1800。0 にすると上限が無効になります。 |
IDA_MCP_LOAD_TIMEOUT | 読み込みのみのオープン処理の最大時間(秒)です。デフォルト:300。0 にすると上限が無効になります。 |
制限付きプロファイル
厳選したツールのみを公開します。
idalib-mcp --stdio --profile profiles/readonly.txt
すぐに使えるプロファイルが 2 つ含まれています。
profiles/readonly.txt— 変更ツールを使わずに調査しますprofiles/triage.txt— 初期分析向けに機能を絞ったツール一覧です
セッションを引き続き開いて調査できるよう、管理ツールは常に利用できます。
HTTP トランスポート
idalib-mcp --host 127.0.0.1 --port 8745
IDA GUI ブリッジ:
ida-pro-mcp --transport http://127.0.0.1:8744/sse
GUI プラグインをインストールし、クライアント設定を対話形式で生成するには:
python -m pip install https://github.com/rison1337/ida-pro-mcp-fusion/archive/refs/heads/main.zip
ida-pro-mcp --install
インストール後、IDA と MCP クライアントを再起動してください。
安全上の注意
- サーバーはデフォルトでループバックにバインドします。信頼できないネットワークに公開しないでください。
- 変更を加えるツールと任意の Python ツールは安全ではないものとして扱われ、デフォルトでは有効になっていません。
py_eval、py_exec_file、デバッガーの制御、パッチ適用操作では、コードを実行したり、IDB を恒久的に変更したりする可能性があります。信頼できるクライアントと入力に対してのみ有効にしてください。- 信頼できないバイナリは、手動でマルウェアを分析する場合と同じ隔離境界内で分析してください。
ワークフローで必要な場合にのみ、安全でないワーカーツールを有効にしてください。
idalib-mcp --stdio --unsafe
トラブルシューティング
uvx が認識されない
python -m pip install uv で uv をインストールし、新しいターミナルを開いて、uvx --version で確認してください。
Python と IDA のバージョンが一致しない
Hex-Rays の idapyswitch を実行して Python 3.11 以降のインストールを選択し、py-activate-idalib.py で再度 idalib を有効にしてください。
データベース呼び出しで database が必要だと表示される
idb_list() を呼び出し、返された session_id を database= として渡してください。セッション ID の代わりにパスやファイル名を指定することはできません。
ワーカーの上限に達した
idb_close で使用していないセッションを閉じるか、--max-workers を引き上げるか、コーパスのインデックス作成には close_after_cache=True を使用してください。
開発
リポジトリをクローンし、プラットフォームに依存しないテストスイートを実行してください。
git clone https://github.com/rison1337/ida-pro-mcp-fusion.git
cd ida-pro-mcp-fusion
python -m pip install pytest jsonschema "mcp>=1.0" "tomli-w>=1.0"
python -m pytest -q tests
有効化した IDA 環境で、IDA を使用するテストスイートを実行してください。
uv run ida-mcp-test tests/typed_fixture.elf -q
新しい IDA ツールは src/ida_pro_mcp/ida_mcp/api_*.py に配置し、@tool デコレーターを通じて登録します。スーパーバイザーとワーカーのライフサイクルテストは tests/ 以下にあります。
プロジェクトの由来とクレジット
Fusion Edition は rison1337 がメンテナンスしています。
このプロジェクトは、MIT ライセンスの mrexodia/ida-pro-mcp コードベースを基盤としています。永続キャッシュとヘッドレスオーケストレーションには、QiuChenly/ida-pro-mcp-enhancement および winmin/ida-headless-mcp で開発されたアイデアも取り入れています。クレジットはこのページとソース履歴に記載しています。Fusion のパッケージング、キャッシュツール、バッチワークフロー、セッションのライフサイクル、公開上のアイデンティティは、このリポジトリで管理しています。
ライセンス
MIT License のもとで配布されています。IDA Pro と Hex-Rays は Hex-Rays SA の商標であり、このプロジェクトには含まれていません。
ロシア語
1 つの MCP 接続。多数のバイナリ。分析コンテキストを保持。
クイックスタート · Fusion を選ぶ理由 · アーキテクチャ · ツール · 設定
Fusion とは?
IDA Pro MCP Fusion は MCP 対応エージェントを IDA Pro に接続し、1 つの接続を本格的なリバースエンジニアリング環境に変えます。IDA でのライブ分析に永続的な SQLite インデックスと、分離されたヘッドレスワーカーで複数のバイナリを保持できるスーパーバイザープロセスを組み合わせています。
関数の逆コンパイルや逆アセンブル、クロスリファレンス、型、呼び出しグラフの調査、シンボルの名前変更、データへのパッチ適用、シグネチャの作成に加え、すでに構築した分析結果を再利用できます。
重要
ローカルにライセンス認証済みの IDA Pro がインストールされている必要があります。IDA Free はサポートされていません。サーバーには IDA や Hex-Rays は含まれず、バイナリを外部サービスに送信することもありません。
Почему Fusion
| Возможность | Что это даёт | |
|---|---|---|
| ⚡ | Постоянный SQLite-кэш | Функции, строки, глобальные переменные, импорты, xref и call graph доступны между запусками. |
| ◈ | Мульти-бинарный supervisor | Несколько GUI- или headless-баз управляются через одну MCP-точку. |
| ⛓ | Живущие воркеры | Следующее подключение может найти и принять уже запущенный worker для той же базы. |
| ◎ | Пакетный анализ | Открытие образцов и построение кэшей выполняется одним idb_batch_open. |
| ⛨ | Контролируемый интерфейс | Read-only-профили, лимит воркеров, тайм-ауты и opt-in для опасных инструментов. |
Кэш лежит рядом с IDB в файле <database>.mcp.sqlite. Актуальность проверяется по времени изменения IDB и версии схемы, поэтому устаревшие данные не выдаются незаметно.
Быстрый старт
1. Что понадобится
- IDA Pro 8.3 или новее; рекомендуется IDA 9.x
- Python 3.11 или новее
uv/uvx- MCP-клиент, который умеет запускать локальный stdio-сервер
Установите uv, если его ещё нет:
python -m pip install uv
Один раз активируйте headless Python от IDA:
# Windows — при необходимости измените версию и путь к IDA
uv run "C:\Program Files\IDA Professional 9.3\idalib\python\py-activate-idalib.py"
# macOS — при необходимости измените версию и путь к IDA
uv run "/Applications/IDA Professional 9.3.app/Contents/MacOS/idalib/python/py-activate-idalib.py"
2. Добавьте MCP-сервер
Рекомендуемая конфигурация запускает код напрямую из этого репозитория:
{
"mcpServers": {
"ida-pro-mcp-fusion": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/rison1337/ida-pro-mcp-fusion",
"idalib-mcp",
"--stdio"
]
}
}
}
Для Claude Code:
claude mcp add ida-pro-mcp-fusion -- uvx --from git+https://github.com/rison1337/ida-pro-mcp-fusion idalib-mcp --stdio
Готовый MCPB-пакет доступен в последнем релизе.
3. Откройте базу
Попросите подключённого агента начать так:
idb_open(
"C:/samples/target.exe",
preferred_session_id="target",
build_caches=True,
init_hexrays=True,
)
Каждый следующий вызов анализа получает явный ID базы:
survey_binary(database="target")
decompile("main", database="target")
xrefs_to("WinMain", database="target")
cache_callgraph_hotspots(limit=25, database="target")
Архитектура
- MCP-клиент запускает
idalib-mcpчерез stdio или HTTP. - Supervisor создаёт или принимает по одному worker-процессу на каждый бинарник.
- Каждый вызов содержит
database, поэтому запрос попадает в нужную IDB-сессию. - IDA выполняет живой анализ и изменения, а cache-инструменты читают индекс из SQLite.
- Воркеры остаются обнаруживаемыми на компьютере и завершаются после периода простоя.
idb_open поддерживает четыре режима:
| Режим | Поведение |
|---|---|
prefer_headless | Использовать или создать idalib-worker. Режим по умолчанию. |
force_headless | Не принимать запущенный GUI-процесс. |
prefer_gui | Принять подходящий GUI, а если его нет — создать worker. |
force_gui | Принять GUI или запустить новый процесс IDA. |
Работа с несколькими бинарниками
Открыть несколько образцов и оставить все сессии доступными:
idb_batch_open(
[
"C:/samples/loader.exe",
"C:/samples/payload.dll",
"C:/samples/helper.dll",
],
session_prefix="case42",
refresh_cache=True,
cache_include_xrefs=True,
)
Для большого корпуса можно построить кэш и сразу освободить worker:
idb_batch_open(
["C:/corpus/a.exe", "C:/corpus/b.exe", "C:/corpus/c.exe"],
close_after_cache=True,
retry_without_auto_analysis_on_timeout=True,
)
Управление сессиями:
idb_list()
idb_close(database="case42_1_loader")
Инструменты
В кодовой базе зарегистрировано 75 инструментов анализа IDA, а supervisor добавляет управление мульти-бинарными сессиями. Видимый клиенту список намеренно меняется: debugger-инструменты являются расширением, опасные операции отключены без явного разрешения, а профиль может оставить только выбранные имена.
| Область | Примеры |
|---|---|
| Сессии | idb_open, idb_batch_open, idb_list, idb_close, idb_save |
| Обзор и декомпиляция | survey_binary, decompile, disasm, analyze_function, analyze_component |
| Поиск и связи | find, find_bytes, search_text, xrefs_to, callees, callgraph, trace_data_flow |
| Постоянный кэш | cache_status, refresh_cache, cache_entity_query, cache_xrefs, cache_callgraph_hotspots, cache_find_regex |
| Типы и стек | declare_type, type_inspect, set_type, infer_types, stack_frame, declare_stack |
| Изменение базы | rename, set_comments, define_func, define_code, patch_asm, make_data |
| Сигнатуры | make_signature, make_signature_for_function, make_signature_for_range, find_xref_signatures |
| Debugger-расширение | dbg_start, dbg_bps, dbg_regs, dbg_stacktrace, dbg_read, dbg_write |
Настройка
Пул воркеров
uvx --from git+https://github.com/rison1337/ida-pro-mcp-fusion \
idalib-mcp --stdio --max-workers 4
| Параметр / переменная | Назначение |
|---|---|
--max-workers N | Максимум одновременно работающих баз; 0 — без лимита. По умолчанию 4. |
IDA_MCP_MAX_WORKERS | Значение лимита по умолчанию из окружения. |
IDA_MCP_OPEN_TIMEOUT | Максимальное время автоанализа при открытии в секундах. По умолчанию 1800. |
IDA_MCP_LOAD_TIMEOUT | Максимальное время загрузки без автоанализа. По умолчанию 300. |
Ограниченные профили
Оставить только выбранные инструменты:
idalib-mcp --stdio --profile profiles/readonly.txt
profiles/readonly.txt— просмотр без инструментов измененияprofiles/triage.txt— компактный набор для первичного анализа
HTTP
idalib-mcp --host 127.0.0.1 --port 8745
GUI-мост:
ida-pro-mcp --transport http://127.0.0.1:8744/sse
Для установки GUI-плагина:
python -m pip install https://github.com/rison1337/ida-pro-mcp-fusion/archive/refs/heads/main.zip
ida-pro-mcp --install
После установки перезапустите IDA и MCP-клиент.
Безопасность
- По умолчанию сервер слушает только loopback. Не открывайте его в недоверенную сеть.
- Изменяющие и произвольные Python-инструменты помечены как unsafe и выключены по умолчанию.
py_eval,py_exec_file, debugger-команды и патчинг могут выполнять код или менять IDB.- Непроверенные бинарники анализируйте в той же изоляции, что и при ручном malware analysis.
Включить unsafe-инструменты можно явно:
idalib-mcp --stdio --unsafe
Решение проблем
uvx не найден
Установите uv командой python -m pip install uv, откройте новый терминал и проверьте uvx --version.
Несовместимая версия Python или IDA
Запустите idapyswitch, выберите Python 3.11+, затем снова выполните py-activate-idalib.py.
Ошибка о том, что нужен database
Вызовите idb_list() и передайте возвращённый session_id как database=. Пути и имена файлов вместо ID сессии не принимаются.
Достигнут лимит воркеров
Закройте неиспользуемую сессию через idb_close, увеличьте --max-workers или используйте close_after_cache=True.
Разработка
git clone https://github.com/rison1337/ida-pro-mcp-fusion.git
cd ida-pro-mcp-fusion
python -m pip install pytest jsonschema "mcp>=1.0" "tomli-w>=1.0"
python -m pytest -q tests
Для тестов, которым нужна сама IDA:
uv run ida-mcp-test tests/typed_fixture.elf -q
Новые инструменты находятся в src/ida_pro_mcp/ida_mcp/api_*.py и регистрируются через @tool. Тесты supervisor и lifecycle — в tests/.
Проект и авторство
Fusion Edition поддерживается rison1337.
Проект основан на MIT-кодовой базе mrexodia/ida-pro-mcp. Постоянный кэш и headless-оркестрация также используют идеи из QiuChenly/ida-pro-mcp-enhancement и winmin/ida-headless-mcp. Атрибуция сохранена в README и истории исходников; упаковка Fusion, cache-инструменты, batch workflow и lifecycle сессий поддерживаются в этом репозитории.
Лицензия
Проект распространяется по MIT License. IDA Pro и Hex-Rays — товарные знаки Hex-Rays SA и не входят в состав проекта.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。