IDA-instances-MCP
IDA-instances-MCP
ida-pro-mcpのカスタムビルド: MCPクライアントがIDA Proを操作できるようにするMCPサーバーで、複数のヘッドレスidalibインスタンスをホストすることを目的とした安定性向上対応(Ida-Instancesセットアップ)を加えた再構成版です。
これはmrexodia氏のida-pro-mcp(MIT)のフォークです。アップストリームの功績はすべてDuncan Ogilvie氏とコントリビューターに帰属し、以下のカスタム変更はこのリポジトリで維持されています。
変更内容の概要
アップストリームv2.0.0に追加された安定性強化:
領域 | 変更内容 |
データの安全性 | 部分データベースのクリーンアップは所有権を考慮: 他の稼働中インスタンスが所有する |
保存の信頼性 |
|
同時実行性 | スーパーバイザーロックは、ワーカーの起動(約120秒)、ヘルスプローブ(セッションあたり約2.5秒)、または古いワーカーの終了にまたがりません。1つの遅いオープンがすべてのセッションをフリーズさせることはありません |
堅牢性 | 不正なJSON-RPCがstdioで受信されると、プロキシをクラッシュさせる代わりに |
タイムアウト | プロキシのタイムアウトを30秒→900秒に引き上げ、 |
ネットワーク | ワーカーポートのTOCTOUは改訂され、再試行されます。SSEの書き込みと終了処理はロックで保護されます。CORSポリシーの読み取りはIDAメインスレッドの外でキャッシュされます |
リソース制限 | IDBトレースログは |
認証 | すべてのHTTPリクエストにはインスタンスAPIキーが必要です。 |
ホスティングエンドポイント |
|
アイドル回収 |
|
グレースフルシャットダウン |
|
自己更新 | 起動時にGitHubリリースをチェックします。対話セッションでは、1キー入力で自動更新が提案されます |
ホスティングの既定値 | ヘッドレススーパーバイザーは0.0.0.0:9999で待ち受けます。GUIプラグインも0.0.0.0にバインドされ、同じAPIキーが必要になります |
Related MCP server: idalib-mcp-headless
要件
Linux、macOS、Windows
Python 3.11以上(IDA内では
idapyswitchを使用して一致させてください)IDA Pro 8.3以上(9.x推奨)。IDA Freeはサポートされていません
MCPクライアント(Supabase Code、Cursor、Codex、OpenCode、VS Codeなど)
セットアップ
uv環境でidalibを有効化します:
# 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"ヘッドランモードでは、IDAのインストールディレクトリがIDADIRに設定されていることも必要です。
ヘッドレススーパーバイザーの実行(ホスティングモード)
uv run idalib-mcp # serves http://0.0.0.0:9999/mcp (new default)起動時にAPIキーが生成され(またはディスクから読み込まれ)、それを持たないすべてのリクエストは例外的な場合を除き401 Unauthorizedになります。
インスタンスを所有するマシン/ネットワークから、キーを一度だけ取得します:
curl http://your-host:9999/key
# {"key": "3f2b..."} <- save it; this endpoint is now burned until restartキーは
~/.idapro/mcp/api_key(モード0600)に保存され、再起動後も維持されます。GET /keyはサーバー起動ごとに一度だけ再発行しますIDA_MCP_API_KEYで上書きできます(またはIDA_MCP_API_KEY_FILEで移設)他のすべてのエンドポイントでは毎回キーが必要です:
Authorization: Bearer <key>
# or equivalently
X-API-Key: <key>キーがログに記録されることはありません。
ホスティングエンドポイント
エンドポイント | 認証 | 目的 |
| なし | 動作確認プローブ: |
| キー | 開いているデータベースと最終アクセス時刻 |
| キー | 生ボディのバイナリアップロード。 |
# 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"便利なフラグ:
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セッションのライフサイクルツール: idb_open、idb_list、idb_close — セッションごとに1つのデータベースを開きます。各セッションには独立したワーカープロセスがあります。
GUIプロキシの実行(対話型IDA)
IDA内でプラグインを起動して(Edit -> Plugins -> MCP、またはCtrl+Alt+M)、その後:
uv run ida-pro-mcp # stdio proxy, auto-discovers IDA
uv run ida-pro-mcp --transport http://127.0.0.1:9999 # serve HTTP insteadMCPクライアントを接続する
一般的なJSON構成(HTTPトランスポート):
{
"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>"stdioを使用するGUIプロキシの場合は、uv run ida-pro-mcp --configを実行して、そのJSONをクライアントに貼り付けます。
設定(環境変数)
変数 | デフォルト | 説明 |
|
| リードプローブ前のオープン+自動解析の最大秒数( |
|
| 転送された個々のツールコールのバックストップ |
|
| GUIプロキシからIDAへのタイムアウト( |
|
| IDB内に保存されるトレースログの上限 |
|
| デフォルトの |
|
| ヘルスプローブの予算 (秒) |
|
| 未使用のセッションが自動的にクローズされるまでの分( |
|
|
|
|
| アップロードの保存先 |
| – / | インスタンスキーの注入、または場所の変更 |
|
| SIGTERM時のデータベースごと/合計保存予算 |
| 未設定 | GitHubリリースチェックを無効化するには |
セキュリティメモ: APIキーは、スーパーバイザーとGUIプラグインの両方で、すべてのHTTPエンドポイントを保護します(プラグインは
py_evalを介して任意のコードを実行できるため、ループバックでもキーが必要です)。これはBearerトークンであり、入手した相手なら誰でもインスタンスを作成できることを意味します。信頼されたネットワークの外部に公開する場合はTLS対応リバースプロキシを配置してください。ブラウザでは?key=<key>でキーを渡せます(/config.htmlで便利です)。
テスト
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ライセンス
MIT — アップストリームのida-pro-capから継承しています。アップストリームの製品名(IDA Pro、Hex-Rays)はHex-Rays SAの商標であり、このプロジェクトはユーザー自身による有効なIDA Proライセンスが必要になります。
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