
ghidra-mcp v6.0.0
GhidraのリバースエンジニアリングとAIツールを橋渡しするMCPサーバー:逆コンパイル、Pコードエミュレーション、ライブデバッグ、データフロー解析、バッチ操作、規約の適用をヘッドレスモードとGUIモードで提供する256のツール。
Ghidra MCP Server
これが役に立つと思われたら、ぜひ ⭐ スターをお願いします。他の方にも見つけてもらいやすくなります!
Ghidra MCP が時間の節約になるなら、プロジェクトへのスポンサーを検討してください。一度限りの支援でも継続的な支援でも、互換性更新、本番環境の強化、ドキュメント、新しいツールの開発に役立ちます。
Ghidra の強力なリバースエンジニアリング機能と、最新の AI ツールや自動化フレームワークを結びつける、プロダクション対応の Model Context Protocol (MCP) サーバーです。271 個の MCP ツール、実戦で鍛えられた AI ワークフロー、そして現在利用可能な最も包括的な Ghidra-MCP 統合を提供します — 新たに P コードエミュレーション、ライブデバッガー統合、PCode グラフデータフロー解析に対応しました。
Ghidra MCP の特長
ほとんどの Ghidra MCP 実装は、読み取り専用のツールを数個提供して終わりです。しかし、このプロジェクトは違います — デモではなく、実際のバイナリを日常的に分析するリバースエンジニアによって作られました。
- 271 個の MCP ツール — 競合実装の 3 倍以上の数。読み取り操作だけでなく、名前変更、型付け、コメント付与、構造体作成、スクリプト実行、P コードエミュレーション、ライブデバッグのための完全な書き込みアクセスを提供します。
- 実戦で鍛えられた AI ワークフロー — 数百の関数にわたって洗練された実証済みのドキュメントワークフロー(V5)。ステップバイステップのプロンプト、ハンガリアン記法リファレンス、バッチ処理ガイド、孤立コード発見を含みます。
- プロダクション品質の信頼性 — アトミックトランザクション、バッチ操作(API 呼び出しを 93% 削減)、設定可能なタイムアウト、優雅なエラーハンドリング。静かな失敗はありません。
- バイナリ間のドキュメント転送 — SHA-256 関数ハッシュマッチングにより、バイナリバージョン間で自動的にドキュメントを伝搬。一度ドキュメントを作成すれば、どこにでも適用できます。
- 完全な Ghidra Server 統合 — 共有 Ghidra Server への接続、リポジトリ管理、バージョンコントロール、チェックアウト/チェックインワークフロー、マルチユーザーコラボレーション。
- ヘッドレスモードと GUI モード — Ghidra GUI の有無にかかわらず実行可能。CI/CD パイプラインや大規模自動解析のために Docker 対応。
- 設計上の意見表明 — v5.0 では、命名規則、型安全性、ドキュメント標準をツール層に移動しました。AI エージェントと人間のエンジニアは、毎回プロンプトにスタイルガイドを貼り付けなくても、一貫した出力を生成します。
規則の強制
あなたも経験したことがあるでしょう:プロジェクトの半年前に、同じコードベースで ProcessItem、process_items、handleItem、ItemProc が見つかる — 4 つの異なるセッションやエンジニアによって、共通の契約なしで名前付けられた、同じことをする 4 つの関数。修正には必要以上に時間がかかり、問題は再発します。
v5.0 では、規則を「覚えておくべきこと」から、実際に強制できるツール層に移動しました。
| 階層 | 動作 | 例 |
|---|---|---|
| 自動修正 | 静かに適用される | uint32 上の count フィールド → 保存時に自動的に dwCount にプレフィックス |
| 警告 | 変更は通るが、警告が返される | processData → 「名前は動詞を含む PascalCase であるべき: ProcessData」 |
| 拒否 | 説明付きで変更がブロックされる | undefined → undefined 型変更 → 「型が変わっていないため、拒否:変更なし」 |
AI エージェントにとって、これは毎回のセッション、モデル、実行で一貫した出力を意味します — スタイルガイドをプロンプトに貼り付ける必要はありません。ツールがルールを知っており、モデルは決定を下すだけでよいのです。
チームにとって、これは「それは我々の命名規則ではない」という種類のレビューコメント全体を排除します。規則の調整はツール内で行われ、コードレビューではありません。
大規模な個人作業にとって、analyze_function_completeness は 0–100% のスコアを正直に測定します:構造上の推論(修正不可能なコンパイラアーティファクト)は有効スコアで許容され、対数スケーリングにより一つの悪いカテゴリが全てを台無しにするのを防ぎ、階層化されたプレートコメント品質により何が欠けているのか、なぜなのかが正確にわかります。
🌟 機能
コア MCP 統合
- 完全な MCP 互換性 — Model Context Protocol の完全実装
- 271 個の MCP ツール — バイナリ解析のあらゆる側面をカバーする包括的な API サーフェス
- プロダクション対応の信頼性 — アトミックトランザクション、バッチ操作、設定可能なタイムアウト
- リアルタイム解析 — Ghidra の解析エンジンとのライブ統合
互換性に関する注意: MCP ツール名は GitHub Copilot CLI と CAPI 検証用に正規化されています。公開されるツール名は小文字、数字、アンダースコア、ハイフンのみを使用します。
/debugger/statusのようなネストされた HTTP パスは、静的なブリッジツールとの衝突を避けるために、必要に応じてdebugger_status_2のような名前で公開されます。
バイナリ解析機能
- 関数解析 — 逆コンパイル、呼び出しグラフ、相互参照、完全性スコア
- データフロー解析 — 任意の変数やレジスタからの PCode グラフ値伝搬(前方/後方)
- データ構造発見 — フィールド解析と名前提案を伴う構造体/共用体/列挙型の作成
- 文字列抽出 — 正規表現検索、品質フィルタリング、文字列を起点とした関数発見
- インポート/エクスポート解析 — シンボルテーブル、外部ロケーション、序数インポート解決
- メモリとデータ検査 — 生メモリ読み取り、バイトパターン検索、配列境界検出
- バイナリ間ドキュメント — 関数ハッシュマッチングとバージョン間のドキュメント伝搬
動的解析(v5.4.0)
- P コードエミュレーション — Ghidra の
EmulatorHelperを使用して任意の関数を分離実行;API ハッシュをミリ秒単位でブルートフォース解決 - ライブデバッガー統合 — Ghidra の TraceRmi フレームワークを介した 17 の Java エンドポイント + 22 の Python ブリッジツール(Windows PE では dbgeng、それ以外では gdb/lldb):アタッチ、ステップ実行、ブレークポイント、レジスタ、メモリ読み取り、非中断関数トレース、ASLR 対応の静的↔動的アドレス変換
AI 駆動のリバースエンジニアリングワークフロー
- 関数ドキュメントワークフロー V5 — ハンガリアン記法、型監査、自動検証スコアリングを含む完全な関数ドキュメント作成のための 7 ステッププロセス
- バッチドキュメント — 複数の関数を同時にドキュメント化するための並列サブエージェントディスパッチ
- 孤立コード発見 — 既知のコードの間にあるギャップから未発見の関数を自動的にスキャン
- データ型調査 — 構造体発見とフィールド解析のための体系的なワークフロー
- バージョン間マッチング — 異なるバイナリバージョン間でのハッシュベースの関数マッチング
開発と自動化
- Ghidra スクリプト管理 — MCP 経由での Ghidra スクリプトの作成、実行、更新、削除
- マルチプログラム対応 — 複数の開いているプログラムの切り替えと比較
- バッチ操作 — 一括名前変更、コメント付与、型付け、ラベル管理(API 呼び出しを 93% 削減)
- ヘッドレスサーバー — Ghidra GUI なしでの完全解析 — Docker および CI/CD 対応
- プロジェクトとバージョン管理 — プロジェクト作成、ファイル管理、Ghidra Server 統合
- 解析制御 — Ghidra アナライザの一覧表示、設定、プログラムからのトリガー
🚀 クイックスタート
前提条件
- Java 21 LTS(OpenJDK 推奨)
- Apache Maven 3.9+
- Ghidra 12.1.2(または互換バージョン)
- Python 3.10+ と uv(推奨)または pip + venv
共有 Ghidra Server ユーザーへ:Ghidra 12.1.2 クライアントを使用するには、Ghidra Server が 12.1、12.0.5、またはそれより新しい互換バージョンである必要があります。12.1 クライアントからこのプラグインを使用する前に、サーバーをアップグレードしてください。
Ghidra 12.1.2 には Jython がオプションの拡張機能として同梱されています。Java スクリプトはデフォルトで動作しますが、
ghidra_scripts/にある.pyスクリプトを使用するには、File > Install Extensions から Jython 拡張機能をインストールし、Ghidra を再起動する必要があります。
インストール
すべてのプラットフォームで推奨:
python -m tools.setupを直接使用してください。
ensure-prereqsは、ローカルの Maven リポジトリに必要な Ghidra JAR に加えて、Python ランタイム要件をインストールします。deployはビルド出力をコピーし、ユーザープロファイル拡張機能をインストールし、Ghidra ユーザー設定にパッチを適用します。
- リポジトリをクローン: ```bash
git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
- 推奨: 最初に環境の事前確認を実行してください: ```text
python -m tools.setup preflight --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
- Ghidra にビルドしてデプロイする: ```text
python -m tools.setup ensure-prereqs --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
python -m tools.setup build
python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
deploy は、既に実行中の一致する Ghidra インスタンスを保存/閉じ、
必要に応じて拡張機能をインストールし、Ghidra を起動し、MCP のヘルスを待ち、
スキーマのスモークチェックを実行します。
- オプションの厳格/手動モード (高度): ```text
Skip automatic prerequisite setup
python -m tools.setup build python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.2_PUBLIC" - コマンドのヘルプを表示: ```text
python -m tools.setup --help
- オプションのビルド専用モード (上級/トラブルシューティング): ```text
python -m tools.setup build
サポートされているビルドパス: python -m tools.setup build は内部でMavenを使用しており、リポジトリタスクやドキュメントで使用される標準的なワークフローです。 ```bash
Manual Maven build (requires Ghidra deps already installed in local .m2)
mvn clean package assembly:single -DskipTests
入力: ```bash
# Secondary/manual Gradle build path only (not used by tools.setup or VS Code tasks)
GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension
インストール (Linux — Ubuntu/Debian)
- リポジトリをクローンする: ```bash
git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
- システムの前提条件をインストール(まだインストールされていない場合): ```bash
sudo apt update && sudo apt install -y openjdk-21-jdk maven python3 python3-pip python3-venv curl jq unzip
Debian/Kali/Ubuntu 23.04+ の注意(PEP 668): これらのディストリビューションはシステム Python を 外部管理 としてマークしているため、そのまま
pip installを実行するとerror: externally-managed-environmentで失敗します。--break-system-packagesで回避しないでください — apt で管理されるツールを破壊する可能性があります。代わりに uv(推奨 — これはプロジェクトローカルの.venvを自動的に作成・管理し、このリポジトリのコマンドが使用するものです)を使用してください:curl -LsSf https://astral.sh/uv/install.sh | sh uv run bridge-mcp-ghidra # deps を .venv に解決してブリッジを起動またはクラシックな仮想環境:
python3 -m venv .venv && source .venv/bin/activate pip install -e . bridge-mcp-ghidra
- 環境の事前チェックを実行: ```bash
python -m tools.setup preflight --ghidra-path ~/ghidra_12.1.2_PUBLIC
- Ghidra にビルドしてデプロイ (単一コマンド): ```bash
python -m tools.setup ensure-prereqs --ghidra-path ~/ghidra_12.1.2_PUBLIC
python -m tools.setup build
python -m tools.setup deploy --ghidra-path ~/ghidra_12.1.2_PUBLIC
This will:
- Install Ghidra JAR dependencies into your local
~/.m2/repository - Build
GhidraMCP-<version>.zipwith Maven - Extract the extension to
~/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/ - Update
preferenceswithLastExtensionImportDirectory - Install Python requirements
- Optional: setup only Maven dependencies: ```bash
python -m tools.setup install-ghidra-deps --ghidra-path ~/ghidra_12.1.2_PUBLIC
- コマンドのヘルプを表示: ```bash
python -m tools.setup --help
Linuxのパス: 拡張機能は
$HOME/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/GhidraMCP/にインストールされます。 Ghidraの設定ファイルは$HOME/.config/ghidra/ghidra_<version>_PUBLIC/にあります。
インストール (macOS — Homebrew)
- 前提条件のインストール: ```bash
brew install openjdk@21 maven python ghidra
- リポジトリをクローンする: ```bash
git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
- GhidraのJARをローカルMavenにインストールする: ```bash
python -m tools.setup install-ghidra-deps
--ghidra-path /opt/homebrew/opt/ghidra/libexec - ビルドとデプロイ: ```bash
python -m tools.setup ensure-prereqs
--ghidra-path /opt/homebrew/opt/ghidra/libexec python -m tools.setup build python -m tools.setup deploy
--ghidra-path /opt/homebrew/opt/ghidra/libexec
The extension is installed to ~/Library/ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/.
Note:
--ghidra-versionis required when using the Homebrew path because the path contains no version string.
- Ghidraを起動し、プラグインを有効にしてください: ```bash
/opt/homebrew/opt/ghidra/libexec/ghidraRun
メインプロジェクトウィンドウで: Tools > GhidraMCP > Start MCP Server
- Cursor/Claude MCP を設定 (
~/.cursor/mcp.json): ```json { "mcpServers": { "ghidra": { "command": "uv", "args": ["run", "--directory", "/path/to/ghidra-mcp", "bridge-mcp-ghidra"] } } }
インストール (Arch Linux — AUR)
@Pandoriaantje がコミュニティ AUR パッケージをメンテナンスしています:
ghidra-mcp-git—mainブランチを追跡ghidra-mcp— タグ付きリリースを追跡
お好みの AUR ヘルパーでインストールしてください(例:)```bash yay -S ghidra-mcp # or ghidra-mcp-git
### 基本使用法
#### オプション 1: Stdio Transport (AIツール向け推奨)```bash
uv run bridge-mcp-ghidra # or: python -m bridge_mcp_ghidra
クローンしたチェックアウトから Autohand Code にブリッジを追加するには:```bash autohand mcp add ghidra uv run --directory /path/to/ghidra-mcp bridge-mcp-ghidra
Add `--scope project` before `ghidra` to save the server in the current project's `.autohand` configuration instead of your user configuration.
#### オプション2: ストリーム可能なHTTPトランスポート (Web/HTTPクライアントに推奨)```bash
uv run bridge-mcp-ghidra --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 8081
MCPクライアントのHTTPトランスポート用設定(クライアントのMCP設定ファイルに追加):```json { "mcpServers": { "ghidra-mcp-http": { "url": "http://127.0.0.1:8081/mcp" } } }
ブラウザベースのクライアント(例:[MCP Inspector](https://github.com/modelcontextprotocol/inspector))は
そのまま動作します。HTTPトランスポートはCORSプリフライト(`OPTIONS`)リクエストに応答し、
`mcp-session-id` / `mcp-protocol-version` ヘッダーをスクリプトに公開します。
許可されるオリジンはHostヘッダーポリシーを反映します — 任意のポート上のループバックは常に許可され、
さらにバインドホストと `GHIDRA_MCP_ALLOWED_HOSTS` にリストされたすべてのホストが許可されます。
#### オプション3: SSEトランスポート(非推奨 — 代わりにstreamable-httpを使用)```bash
uv run bridge-mcp-ghidra --transport sse --mcp-host 127.0.0.1 --mcp-port 8081
高度なブリッジフラグ
| フラグ | デフォルト | 説明 |
|---|---|---|
--transport | stdio | stdio (AIツール), streamable-http (ウェブクライアント), sse (非推奨) |
--mcp-host | 127.0.0.1 | HTTPトランスポートのバインドホスト |
--mcp-port | — | HTTPトランスポートのポート |
--lazy | off | 接続時にデフォルトのツールグループのみを読み込みます。起動が高速ですが、tools/list_changed をサポートしていないMCPクライアントでは不完全なツールリストが表示されます。Claude Codeでは推奨されません。 |
--no-lazy | (default) | 接続時にすべてのツールグループを即座に読み込みます。ほとんどのAIクライアントで必要です。 |
--default-groups | listing,function,program | --lazy が設定されている場合に接続時に読み込まれるカンマ区切りのグループ。 |
厳格なプログラムルーティング(マルチプログラムの安全性)
GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1 を設定すると、ブリッジはプログラムセレクタを省略したプログラムスコープの呼び出しを拒否し、サーバーの共有「現在のプログラム」(switch_program やアクティブなGUIタブが移動するプログラム)に呼び出しを乗せる代わりに、明確なエラーを返します。```bash
export GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1
uv run bridge-mcp-ghidra
これがないと、`program=` を省略した呼び出しは、その時点でカレントのプログラムに対して実行されます。これは単一プログラムのワークフローでは問題ありませんが、複数のプログラムが開かれていると危険です。その呼び出しがエラーなく間違ったバイナリを読み取ったり編集したりする可能性があるからです。複数のクライアントがサーバーを共有する場合、それぞれがそのカレントプログラムのグローバル状態を他のクライアントの下から奪い合うため、危険性はさらに高まります。
strict モードがオンの場合、プログラムスコープのすべての呼び出しはターゲットを指定する必要があります。これは、開かれているプログラムを選択するすべてのセレクタに適用されます。単純な `program=` や、クロスプログラムツールの `source_program`/`target_program`、`program_a`/`program_b`(必須として宣言されていますが、サーバーは空で届いた場合にカレントプログラムにフォールバックします)などです。セレクタを忘れると、間違ったバイナリへの無言の書き込みではなく、最初の不正な呼び出しで大きなエラーとして表面化します。プログラムセレクタのないツール(`open_program` や `close_program` は `path`/`name` を受け取ります)は影響を受けません。デフォルトではオフです。変数が設定されていない場合、ブリッジは呼び出しを変更せずに送信します。
#### ツールコンテキストのオーバーヘッド削減
ブリッジは大規模なカタログを公開します。モデルのツールサーフェスを小さく保つために、`--lazy` を指定して実行します(接続時に `listing,function,program` のみをロードします)。モデルにすべてを登録させる代わりに、**オンデマンドで**残りを**探索**させます。
- `search_tools("rename function")` — グループがロードされていないツールも含め、**カタログ全体**をキーワード検索します。各結果は、現在呼び出し可能かどうか、および不可能な場合にそれを有効にするための正確な `load_tool_group(...)` 呼び出しを示します。
- `list_tool_groups()` — すべてのカテゴリとそのロード状態を一覧表示します。
- `load_tool_group("datatype")` / `unload_tool_group("datatype")` — 実行時にカテゴリをロードまたは削除します。
- `check_tools("rename_or_label,batch_set_comments")` — 指定されたツールが現在呼び出し可能であることを確認します。
`search_tools` は eager モードと `--lazy` モードの両方で動作するため、`tools/list_changed` を尊重するエージェントは、事前のコンテキストコストなしで完全な探索を得られます。
#### オプション: スタンドアロンデバッガサーバーの起動```bash
uv sync --group debugger
uv run python -m debugger
デバッガサーバーはデフォルトで http://127.0.0.1:8099/ をリッスンし、MCPブリッジが公開する debugger_* プロキシツールに必要です。
デバッガサーバーフラグ:
| フラグ | デフォルト | 説明 |
|---|---|---|
--port | 8099 | HTTPサーバーポート |
--host | 127.0.0.1 | バインドアドレス(LAN上に公開するには 0.0.0.0) |
--exports-dir | — | 序数から名前への解決のための dll_exports/ ディレクトリへのパス |
--log-level | INFO | DEBUG, INFO, WARNING, または ERROR |
デフォルトのポートまたはホストを変更した場合は、.env で GHIDRA_DEBUGGER_URL を設定してブリッジがそれを見つけられるようにします。
Ghidra内で
- Ghidraを起動し、CodeBrowser ウィンドウを開きます。
- CodeBrowser で、ファイル > 設定 > すべてのプラグインを設定 > GhidraMCP からプラグインを有効にします。
- オプション: CodeBrowser > 編集 > ツールオプション > GhidraMCP HTTP サーバー からカスタムポートを設定します。
- ツール > GhidraMCP > MCP サーバーを起動 からサーバーを起動します。
- サーバーはデフォルトで
http://127.0.0.1:8089/で実行されます。
動作確認```bash
Quick health check
curl http://127.0.0.1:8089/check_connection
Expected: "Connected: GhidraMCP plugin running with program ''"
Get version info
curl http://127.0.0.1:8089/get_version
## このプロジェクトを支援する
Ghidra MCPがエンジニアリングやリバースエンジニアリングの時間を節約してくれるなら、[プロジェクトのスポンサーになる](https://github.com/sponsors/bethington)ことを検討してください。
- 一回限りのスポンサーは、修正、互換性更新、リリース作業の資金となります。
- 継続的なスポンサーは、メンテナンス、ドキュメント、本番環境の堅牢化を維持するのに役立ちます。
- 企業の支援は、ブリッジ、ヘッドレスサーバー、デバッガ統合、ワークフローツールの長期的な信頼性を優先するのに役立ちます。
## 🔒 セキュリティ
GhidraMCPは**ローカルホストのみの開発**向けに設計されています。デフォルト設定(HTTPサーバーが `127.0.0.1` にバインドされ、認証なし)は、信頼されたシングルユーザーワークステーション上で安全であり、v5.4.1以前の動作と一致します。
**サーバーをループバックの外部に公開する場合は、まずこれら3つの環境変数を設定してください。** トークンがない場合、サーバーは非ループバックバインドでの起動を拒否します。
| 環境変数 | 効果 |
|---|---|
| `GHIDRA_MCP_AUTH_TOKEN` | 設定すると、すべてのHTTPリクエストは `Authorization: Bearer <token>` を保持しなければなりません。タイミングセーフな比較を行います。`/mcp/health`、`/health`、`/check_connection` は例外です。 |
| `GHIDRA_MCP_ALLOW_SCRIPTS` | `1`、`true`、`yes` に設定すると `/run_script_inline` と `/run_ghidra_script` が有効になります。**v5.4.1以降はデフォルトでオフ** — これらのエンドポイントはGhidraプロセスに対して任意のJavaを実行します。ヘッドレスモードでは、サーバー起動時にOSGi `BundleHost` の初期化(Felixフレームワーク、約数百ミリ秒)もトリガーされます。スクリプト実行が必要でなければオフのままにしてください。 |
| `GHIDRA_MCP_FILE_ROOT` | ディレクトリパスを設定すると、ファイルシステムパスエンドポイント(`/load_program`、`/import_file`、`/open_project`、`/delete_file` など)は入力を正規化し、このルート配下にあることを要求します。パストラバーサルを防ぎます。 |
名前品質の強制はセキュリティとは別です。デフォルトでは、`rename_function_by_address` とグローバル書き込みエンドポイントは、組み込みの品質ゲートに合格しない名前を拒否し、構造体フィールド書き込みは組み込みのフィールドプレフィックス規則を適用します。**Edit > Tool Options > GhidraMCP HTTP Server > Strict Naming Enforcement** で組み込みの規則レイヤーを無効にできます。同じTool Optionsチェックボックスは、`rename_data`、`rename_global_variable`、`set_global`、`apply_data_type` のプレフィックス/型ガード、および `create_struct`、`add_struct_field`、`modify_struct_field` での構造体フィールドのハンガリアンプレフィックスの自動修正をカバーします。この設定はMCPサーバーの起動時または再起動時に読み取られます。強制が無効になっている場合でも、関数/グローバル規則の警告は返されます。
### 例: 認証付きでプライベートLANに公開する```bash
export GHIDRA_MCP_AUTH_TOKEN=$(openssl rand -hex 32)
export GHIDRA_MCP_ALLOW_SCRIPTS=1 # only if your workflow needs it
export GHIDRA_MCP_FILE_ROOT=/srv/ghidra/inputs
java -jar GhidraMCPHeadless.jar --bind 0.0.0.0 --port 8089
Ghidra Server 認証
共有Ghidra Serverに接続する場合、GhidraMCPは自動的にパスワードダイアログを抑制できます。次の順序で資格情報を解決します(最初の空でない値が優先されます):
互換性に関する注意:Ghidra 12.1.2クライアントにはGhidra Server 12.1.2、12.0.5、またはそれ以降の互換性のあるサーバーが必要です。古い共有サーバーは、12.1クライアントへのアップグレードの安全な対象ではありません。
GHIDRA_SERVER_PASSWORD環境変数(またはGhidraインストールディレクトリまたは~内の.envファイル)~/.ghidra-cred— ホームディレクトリ内の1行パスワードファイル<ghidra-install-dir>/.ghidra-cred
ユーザー名も同様に解決されます:GHIDRA_SERVER_USER 環境変数 → user.name システムプロパティ。
パスワードが見つからない場合、Ghidraは通常のGUIプロンプトを表示します。サイレント認証を有効にするには、これらを .env(完全なブロックについては .env.template を参照)に設定してください。
v5.4.0 から v5.4.1 への移行
- スクリプトエンドポイントはデフォルトでオフになりました。
/run_script_inlineまたは/run_ghidra_scriptに依存していた場合は、GHIDRA_MCP_ALLOW_SCRIPTS=1をエクスポートしてください。これは意図的な破壊的変更です。以前のデフォルトは安全ではありませんでした。 - ローカルホストのみのデプロイメントでは変更は必要ありません。 認証、バインド拒否、パスルートチェックはすべてオプトインです。
❓ トラブルシューティング
ツールに「GhidraMCP」メニューが表示されない
原因: プラグインが有効化されていないか、正しくインストールされていません。
解決策:
- 拡張機能がインストールされていることを確認:ファイル > 拡張機能のインストール — GhidraMCP がリストに表示されるはずです
- プラグインを有効化:ファイル > 設定 > すべてのプラグインの設定 > GhidraMCP(チェックボックスをオン)
- インストール/有効化後に Ghidra を再起動
サーバーが応答しない / 接続が拒否されました
原因: サーバーが起動していないか、ポートが間違っています。
解決策:
- サーバーを起動したことを確認:ツール > GhidraMCP > MCPサーバーを起動
- 設定されたポートを確認:編集 > ツールオプション > GhidraMCP HTTPサーバー
- ポートが使用中かどうかを確認: ```bash
Linux/macOS
lsof -i :8089Windows
netstat -ano | findstr :8089 - Ghidraコンソールでエラーを探す: Window > Console
pip install が error: externally-managed-environment で失敗する
原因: PEP 668。Debian系ディストリビューション(Debian 12+、Kali、Ubuntu 23.04+)はシステムPythonを外部管理としてマークしており、apt管理のパッケージを保護するためにグローバルなpip installをブロックしています。
解決策: 仮想環境を使用してください — --break-system-packagesは絶対に使わないでください。推奨される方法は uv で、プロジェクトローカルの.venvを自動的に管理します:```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
cd ghidra-mcp
uv run bridge-mcp-ghidra
またはクラシックなvenv:```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
bridge-mcp-ghidra
python -m debugger で ModuleNotFoundError が発生し、pybag または comtypes が見つからない
原因: スタンドアロンのデバッガサーバは、デフォルトではインストールされないオプションのWindows専用Python依存関係を使用します。
解決方法:```text uv sync --group debugger uv run python -m debugger
If you have both a global Python and a project venv, make sure you install
into and run from the same interpreter.
(グローバルのPythonとプロジェクトのvenvの両方がある場合は、同じインタプリタにインストールして実行するようにしてください。)
### 500 Internal Server Errors(500内部サーバーエラー)
**原因:** サーバー側の例外。多くの場合、プログラムデータの不足が原因です。
**解決方法:**
1. CodeBrowserでバイナリが読み込まれていることを確認する
2. 最初に自動解析を実行する: **Analysis > Auto Analyze**
3. Ghidraコンソール(**Window > Console**)でJava例外を確認する
4. 一部の操作では、完全に解析されたバイナリが必要です
### 404 Not Found Errors(404 Not Foundエラー)
**原因:** エンドポイントが存在しない、またはURLが間違っている。
**解決方法:**
1. エンドポイントが存在することを確認する: `curl http://127.0.0.1:8089/get_version`
2. エンドポイント名のタイプミスを確認する
3. 正しいHTTPメソッドを使用していることを確認する (GET vs POST)
### Python Ghidra scripts fail with "No script provider found"(Python Ghidraスクリプトが「No script provider found」で失敗する)
**原因:** Ghidra 12.1.2では、Jythonサポートがデフォルトで有効になっていません。`.py`スクリプトにはバンドルされたJython拡張機能が必要です。Python 3スクリプトは、Ghidra Script Managerの代わりにPyGhidraを使用する必要があります。
**解決方法:**
1. Ghidraフロントエンドで、**File > Install Extensions**を開く。
2. **Jython**にチェックを入れ、Ghidraを再起動してからScript Managerを更新する。
3. 新しい自動化には、Java GhidraスクリプトまたはPyGhidraを推奨します。
### Extension not appearing in Install Extensions(拡張機能がInstall Extensionsに表示されない)
**原因:** JARファイルの場所が間違っている。
**解決方法:**
1. 手動インストール場所: `~/.ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/lib/GhidraMCP.jar`
2. または、**File > Install Extensions > Add**を使用してZIPファイルを選択する
3. JAR/ZIPがご使用のGhidraバージョン用にビルドされていることを確認する
### Build fails with "Ghidra dependencies not found"(ビルドが「Ghidra dependencies not found」で失敗する)
**原因:** Ghidra JARがローカルのMavenリポジトリにインストールされていない。
**解決方法:**```text
# Windows (recommended)
python -m tools.setup install-ghidra-deps --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
📊 本番パフォーマンス
- MCP ツール: 271 ツールが完全実装済み
- 速度: ほとんどの操作でサブ秒応答
- 効率性: バッチ操作による API 呼び出しの 93% 削減
- 信頼性: 全か無かのセマンティクスによるアトミックトランザクション
- AI ワークフロー: 数百の実関数で洗練された実績のあるドキュメントプロンプト
- デプロイ: バージョン認識型の自動デプロイスクリプト
🛠️ API リファレンス
271 の MCP ツールは HTTP エンドポイントをバックエンドとし、カタログカテゴリ別にグループ化されています。python -m tools.gen_readme_api_reference --write によって tests/endpoints.json から生成されます。実行時には /mcp/schema のライブスキーマが信頼できます。使用パターン: docs/prompts/TOOL_USAGE_GUIDE.md.
プログラム & セッション管理
analysis_status- 開いているプログラムの自動解析ステータスを取得close_program- プロジェクトパスまたは名前で開いているプログラムを閉じるcreate_property_map- アドレスをキーとする型付き値を格納するユーザープロパティマップを作成delete_property_map- ユーザープロパティマップとそのすべての値を削除exit_ghidra- Ghidra を保存して終了get_address_spaces- プログラム内のすべての物理アドレス空間とオーバーレイアドレス空間を一覧表示(オーバーレイには is_overlay フラグと overlayed_space 名を含む)get_current_program_info- 現在のプログラム情報を取得get_language_metadata- プログラムの言語記述をダンプ: アドレス空間、レジスタ、デフォルトシンボル、エンディアン、ポインタサイズ (issue #192)get_program_options- プログラムオプショングループ内のすべてのオプションを、型、現在値、デフォルト値、説明とともに読み取るget_property- プロパティマップ内のアドレスに格納された値を読み取るimport_file- ディスク上のバイナリファイルを現在の Ghidra プロジェクトにインポートして開くlist_open_programs- 開いているプログラムを一覧表示list_option_groups- プログラムオプショングループを一覧表示(例:list_project_files- プロジェクトファイルを一覧表示list_properties- プロパティマップに格納された (アドレス, 値) エントリをページネーション付きで一覧表示list_property_maps- ユーザー定義のプロパティマップ(アドレスごとの型付きキー→値ストア)を一覧表示open_program- プロジェクトからプログラムを開くreanalyze- プログラムで完全な自動解析をトリガーremove_program_option- プログラムオプショングループからオプションを削除remove_property- プロパティマップ内の単一アドレスに格納された値を削除save_all_programs- 開いているすべてのプログラムを保存save_program- 現在のプログラムを保存set_image_base- プログラムのベースアドレスを設定(すべてのアドレスを再ベース)set_program_option- 型付きプログラムオプションを設定set_property- プロパティマップ内のアドレスに値を設定switch_program- 現在のプログラムを切り替え
プロジェクト構成
create_folder- プロジェクトにフォルダを作成delete_file- プロジェクトからファイルを削除delete_project- Ghidra プロジェクトを削除list_projects- 利用可能な Ghidra プロジェクトを一覧表示move_file- ファイルを別のプロジェクトフォルダに移動move_folder- フォルダを別の場所に移動project_info- 実行中のツールや開いているプログラムを含む詳細なプロジェクト情報を取得
ヘッドレスプロジェクト & プログラムライフサイクル
スタンドアロンのヘッドレスサーバー(GhidraMCPHeadlessServer)で利用可能。
archive_project- 現在開いているプロジェクトを Ghidra ネイティブの .gar ファイルにアーカイブcheckin_program- 開いているプログラムを共有 Ghidra サーバーに新しいバージョンとしてチェックインclose_project- 現在開いているプロジェクトを閉じるcreate_project- 新しい Ghidra プロジェクトを作成export_program- 開いているプログラムまたはプロジェクト内のプログラムを Ghidra Zip ファイル (.gzf) にエクスポートget_project_info- 現在開いているプロジェクトの情報を取得import_program- Ghidra Zip ファイル (.gzf) を現在開いているプロジェクトに新しい DomainFile としてインポート(target_folder に、デフォルトは '/')load_program- 解析のためにバイナリファイルをヘッドレスサーバーにロードload_program_from_project- Ghidra プロジェクトからプログラムをロード(ヘッドレス)open_project- 既存の Ghidra プロジェクト (.gpr ファイルまたはディレクトリ) を開くrestore_project- Ghidra .gar アーカイブをparent_dir/project_nameの新しいオンディスクプロジェクトに復元server_status- ヘッドレスサーバーの接続ステータスを確認
一覧表示 & 列挙
list_bookmarks- ブックマークを一覧表示list_calling_conventions- 利用可能な呼び出し規約を一覧表示list_classes- 名前空間/クラス名を一覧表示list_data_items- 定義済みデータを一覧表示list_data_items_by_xrefs- クロスリファレンス数でソートされたデータを一覧表示list_exports- エクスポートされたシンボルを一覧表示list_external_locations- 外部ロケーションを一覧表示list_functions- アドレス付きで関数を一覧表示list_functions_enhanced- メタデータ付きで関数を一覧表示list_globals- グローバル変数を一覧表示list_imports- インポートされたシンボルを一覧表示list_methods- すべての関数名をページネーション付きで一覧表示list_namespaces- すべての名前空間を一覧表示list_scripts- 利用可能な Ghidra スクリプトを一覧表示list_segments- メモリセグメントを一覧表示list_strings- 定義済み文字列を一覧表示
コンテキスト & ルックアップ
get_current_address- カーソルアドレスを取得(GUIのみ)get_current_function- カーソル位置の関数を取得(GUIのみ)get_current_selection- CodeBrowser リスト内のハイライトされたアドレス範囲を取得(GUIのみ)get_entry_points- プログラムのエントリポイントを取得get_enum_values- 列挙値を取得get_external_location- 外部ロケーションの詳細を取得get_full_call_graph- 完全なコールグラフを取得get_function_by_address- アドレスから関数を取得get_function_call_graph- コールグラフを取得get_function_callees- 呼び出される関数を取得get_function_callers- 呼び出し元の関数を取得get_function_count- ロードされたプログラム内の関数の数を返すget_function_jump_targets- ジャンプターゲットを取得get_function_labels- 関数内のラベルを取得get_function_variables- 関数内のすべての変数を一覧表示get_struct_layout- 構造体レイアウトを取得get_valid_data_types- 有効なデータ型名を取得
検索
find_similar_functions- 類似関数を検索search_byte_patterns- バイトパターンを検索search_data_types- データ型を検索search_functions- 名前で関数を検索search_functions_enhanced- 高度な関数検索search_strings- 正規表現/サブ文字列パターンで定義済み文字列を検索
逆コンパイル & 逆アセンブル
decompile_function- 関数を逆コンパイルdisassemble_bytes- バイト範囲を逆アセンブルdisassemble_function- 関数を逆アセンブルforce_decompile- 強制的に新たに逆コンパイル
関数タグ、変数 & 属性
add_function_tag- 関数に1つ以上のタグを付与batch_add_function_tags- 1回のトランザクションで多数の関数にタグを付与batch_remove_function_tags- 1回のトランザクションで多数の関数からタグを削除clear_flow_and_repair- シード範囲に対して Ghidra の GUI アクション「Clear Flow and Repair」を実行: シードから到達可能な命令フローをクリアし、関数本体を修復し、保持されたフローを再逆アセンブル(ClearFlowAndRepairCmd、clear_data=false、clear_labels=false、repair=true)create_function_tag- オプションのコメント付きでプログラム全体の関数タグ定義を作成delete_function_tag- プログラム全体の関数タグ定義を削除get_function_tags- 特定の関数に割り当てられたすべてのタグを一覧表示list_class_members- C++ クラスのメンバー関数を一覧表示list_function_tags- すべてのプログラム全体の関数タグ定義とその使用回数を一覧表示remove_function_tag- 関数から1つ以上のタグを削除search_functions_by_tag- 指定されたタグが付与されたすべての関数を一覧表示set_decompiler_variable_type- 逆コンパイラ(高レベル)変数またはパラメータの型を名前で設定set_function_no_return- no-return 属性を設定set_function_tag_comment- 既存のプログラム全体の関数タグのコメント/説明を更新set_function_this_type- 暗黙の 'this' ポインタ(x86 __thiscall/__fastcall では ECX)の逆コンパイラ/データベース型を設定set_variables- 複数の変数の型と名前をアトミックに設定
クロスリファレンス
add_memory_reference- 自動アナライザが推測できない2つのメモリアドレス間のユーザー定義クロスリファレンスを作成(実行時に設定されるポインタテーブル、vtable、遅延バインド関数ポインタ、見逃したジャンプ/スイッチテーブル)get_bulk_xrefs- 複数アドレスのクロスリファレンスを一括取得get_function_xrefs- 関数のクロスリファレンスを取得get_xrefs_from- アドレスからの参照を取得get_xrefs_to- アドレスへの参照を取得remove_reference- あるアドレスから別のアドレスへのメモリクロスリファレンスを削除 — add_memory_reference の逆操作
データ型 & 構造体
add_struct_field- 構造体フィールドを追加analyze_global_completeness- グローバル変数のドキュメント完全性を予算制限付きの0-100スケールでスコアリング — analyze_function_completeness のデータアドレス版apply_data_type- データ型を適用audit_global- グローバル変数のドキュメント状態を監査audit_globals_in_function- 関数内から参照されるすべてのグローバル変数を1回の呼び出しで監査batch_set_variable_types- 複数の変数型を一括設定clone_data_type- データ型をクローンcreate_array_type- 配列型を作成create_data_type_category- データ型カテゴリを作成create_enum- 列挙を作成create_function_signature- 関数シグネチャ型を作成create_pointer_type- ポインタ型を作成create_struct- 構造体を作成create_typedef- typedef を作成create_union- 共用体を作成delete_data_type- データ型を削除embed_struct_field- 構造体フィールドを値による埋め込み構造体型に置き換え(例:get_data_type_size- データ型のサイズ(バイト)を取得get_type_size- データ型のサイズと情報を取得import_data_types- GDT からデータ型をインポートlist_data_type_categories- データ型カテゴリを一覧表示list_data_types- データ型を一覧表示modify_struct_field- 構造体フィールドを変更modify_struct_field_type- 名前またはオフセット(offset:N)で構造体フィールドの型を設定move_data_type_to_category- データ型をカテゴリに移動recreate_struct- 1ステップで構造体を置き換え: オプションで既存の同名型を削除し、フィールド JSON で新規作成(create_struct と同じ形式)remove_struct_field- 構造体フィールドを削除resize_struct- 既存の構造体を合計バイトサイズで拡大または縮小resolve_duplicate_type- 単純な名前で重複データ型を見つけ、使用されていない /Demangler サイズ1のスタブを、より大きな正規型が存在する場合に削除set_function_prototype- 関数プロトタイプを設定(戻り値型、パラメータ型、呼び出し規約)set_global- グローバル変数に名前、型、プレートコメント、配列長をアトミックに適用set_local_variable_type- 変数型を設定set_parameter_type- パラメータ型を設定set_variable_storage- 変数ストレージを設定validate_data_type- データ型の構文を検証validate_data_type_exists- データ型の存在をチェックvalidate_function_prototype- 関数プロトタイプを検証
名前変更 & ラベル
batch_create_labels- 複数のラベルを作成batch_delete_labels- 複数のラベルを削除batch_rename_function_components- 関数コンポーネントを一括で名前変更create_label- ラベルを作成delete_label- アドレスのラベルを削除rename_data- データシンボルの名前を変更rename_external_location- 外部ロケーションの名前を変更rename_function- 名前で関数の名前を変更rename_function_by_address- アドレスで関数の名前を変更rename_global_variable- グローバル変数の名前を変更rename_label- ラベルの名前を変更rename_or_label- 名前を変更またはラベルを作成rename_variable- 関数内の変数の名前を変更rename_variables- 変数を一括で名前変更
コメント & ブックマーク
batch_set_comments- 複数のコメントを設定clear_function_comments- 関数のすべてのコメントをクリアdelete_bookmark- ブックマークを削除get_comment- 任意のアドレス(データアドレスを含む)でリストコメント(plate/pre/eol/post/repeatable)を取得(関数が必要な get_plate_comment とは異なる)get_plate_comment- プレートコメントを取得set_bookmark- ブックマークを設定set_comment- 任意のアドレス(データアドレスを含む)で指定された種類(plate/pre/eol/post/repeatable)のリストコメントを設定set_decompiler_comment- PRE_COMMENT を設定set_disassembly_comment- EOL_COMMENT を設定set_plate_comment- プレートコメントを設定
解析
analyze_api_call_chains- API 呼び出しチェーンを解析analyze_call_graph- 関数コールグラフのパターンを解析analyze_control_flow- 制御フローを解析analyze_data_region- データ領域を解析analyze_dataflow- 関数内の値伝播をトレース(PCode グラフ、前方/後方)analyze_for_documentation- 複合 RE ドキュメント解析(逆コンパイル + 分類 + 変数 + 完全性)analyze_function_complete- 包括的な単一呼び出し関数解析analyze_function_completeness- ドキュメントの完全性を解析analyze_struct_field_usage- 構造体フィールドの使用状況を解析apply_data_classification- データ分類を適用batch_analyze_completeness- 複数関数の完全性を一括解析batch_apply_documentation- 1回の呼び出しで関数にすべてのドキュメントを適用batch_decompile- 複数の関数を一度に逆コンパイルcan_rename_at_address- アドレスで名前変更が可能かチェックclear_instruction_flow_override- フローオーバーライドをクリアconfigure_analyzer- 解析プラグインを設定create_function- アドレスに関数を作成create_memory_block- メモリブロックを作成delete_function- アドレスの関数を削除detect_array_bounds- 配列境界を検出detect_crypto_constants- 暗号定数を検出detect_malware_behaviors- マルウェアの動作を検出extract_iocs_with_context- コンテキスト付きで IOC を抽出find_anti_analysis_techniques- アンチ解析手法を検出find_code_gaps- 実行可能メモリ内の関数間の未定義バイトのギャップを検出find_dead_code- デッドコードを検出find_next_undefined_function- 次の未定義関数を検出get_assembly_context- アセンブリコンテキストを取得get_field_access_context- フィールドアクセスコンテキストを取得get_function_pcode- 関数の生の P コードをダンプ (issue #192)inspect_memory_content- メモリバイトを検査list_analyzers- 利用可能な解析プラグインを一覧表示read_memory- 生のメモリを読み取りrun_analysis- 現在のプログラムで自動解析を実行search_instructions- ニーモニックおよび/またはオペランドのサブ文字列で命令を検索suggest_field_names- フィールド名を提案
クロスバイナリドキュメント & アーカイブ
archive_ingest_function- 単一関数のドキュメントをクロスバージョンアーカイブ(bsim Postgres 上の re_kb.functions)に取り込むarchive_ingest_program- プログラム内のすべての関数をクロスバージョンドキュメントアーカイブに一括取り込みbatch_string_anchor_report- ソースファイルの文字列とその FUN_* 関数のレポートbulk_fuzzy_match- クロスバイナリ関数の一括ファジーマッチングfind_similar_functions_fuzzy- クロスバイナリファジー関数マッチングmerge_program_documentation- 一括マージ: あるプログラムから別のプログラムに、一致するアドレスのすべての RE ドキュメント(関数名、シグネチャ、プレートコメント、EOL/PRE/POST の命令コメント、非デフォルトラベル、グローバルシンボル)をコピー
ユーティリティ & ドキュメント転送
apply_function_documentation- 関数ドキュメントを適用check_connection- ヘルスチェックエンドポイントcompare_programs_documentation- プログラム間のドキュメントを比較convert_number- 数値を基数間で変換diff_functions- 2つの関数を差分find_undocumented_by_string- 文字列を参照する未ドキュメント関数を検索get_bulk_function_hashes- 関数ハッシュを一括取得get_function_documentation- 関数ドキュメントをエクスポートget_function_hash- 関数ハッシュを取得get_function_signature- 関数特徴シグネチャを取得get_metadata- プログラムメタデータを取得get_version- プラグインバージョンを取得health- ヘッドレスサーバーのヘルスチェックエンドポイントmcp_health- HTTP サーバーヘルス: プール統計、稼働時間、メモリ、アクティブリクエスト数mcp_schema- エンドポイントメタデータ付きの機械可読 API スキーマtool_goto_address- CodeBrowser のリストと逆コンパイラを特定のアドレスに移動tool_launch_codebrowser- ファイルを CodeBrowser で開き、必要に応じて新規起動tool_running_tools- 実行中のすべての Ghidra ツールウィンドウを一覧表示
エミュレーション
emulate_function- 制御されたレジスタ/メモリ入力で単一の関数をエミュレートemulate_hash_batch- API ハッシュ解決をブルートフォース
スクリプティング
run_ghidra_script- 出力キャプチャ付きでスクリプトを実行run_script_inline- インラインスクリプトコードを実行
Ghidra サーバー & バージョン管理
server_admin_set_permissions- リポジトリのユーザー権限を設定server_admin_terminate_all_checkouts- フォルダ内のすべてのチェックアウトを再帰的に終了server_admin_terminate_checkout- 単一ファイルのすべてのチェックアウトを終了server_admin_users- サーバー上のすべてのユーザーを一覧表示server_authenticate- プログラム認証用のサーバー資格情報を登録server_checkouts- フォルダ内のすべてのチェックアウトファイル(サーバー側チェックアウトを含む)を一覧表示server_connect- Ghidra サーバーに接続server_disconnect- Ghidra サーバーから切断server_repositories- 接続したサーバー上のリポジトリを一覧表示server_repository_create- サーバー上に新しいリポジトリを作成server_repository_file- サーバーリポジトリからファイル情報を取得server_repository_files- サーバーリポジトリフォルダ内のファイルを一覧表示server_version_control_add- ファイルをバージョン管理に追加server_version_control_checkin- バージョン管理ファイルをチェックインserver_version_control_checkout- バージョン管理ファイルをチェックアウトserver_version_control_undo_checkout- ファイルのチェックアウトを元に戻すserver_version_history- ファイルのバージョン履歴を取得
デバッガ (Ghidra TraceRmi — GUIのみ)
ブリッジの WinDbg デバッガプロキシがアクティブな Windows ホストでは(GHIDRA_DEBUGGER_URL)、競合する名前に _2 サフィックスが付きます(例: debugger_status_2)。
debugger_dynamic_to_static- 現在のトレースからランタイム動的アドレスを静的な Ghidra プログラムアドレスに変換debugger_interrupt- 実行中のターゲットを割り込み(ブレークイン)debugger_launch- Ghidra の Trace RMI デバッガランチャーを通じて実行可能ファイルを起動debugger_launch_offers- 現在のプログラムで利用可能なデバッガ起動/アタッチオプションを一覧表示debugger_list_breakpoints- 現在のトレース内のすべてのブレークポイントを一覧表示debugger_modules- デバッグプロセスにロードされているモジュール(DLL/EXE)を一覧表示debugger_read_memory- デバッグプロセスからメモリを読み取りdebugger_registers- 現在のデバッグトレーススナップショットから CPU レジスタを読み取りdebugger_remove_breakpoint- アドレスのブレークポイントを削除debugger_resume- デバッグプロセスの実行を再開debugger_set_breakpoint- トレース内のアドレスにソフトウェア実行ブレークポイントを設定debugger_stack_trace- 現在のスレッドのコールスタックバックトレースを取得debugger_static_to_dynamic- 静的な Ghidra プログラムアドレスを現在のトレース内のランタイム動的アドレスに変換debugger_status- デバッガステータスを取得: アクティブトレース、スレッド、実行状態、モジュール数debugger_step_into- 次の命令にシングルステップイン(コールに従う)debugger_step_out- 現在の関数からステップアウト(リターンまで実行)debugger_step_over- 次の命令をステップオーバー(コールには従わない)debugger_traces- 開いているすべてのデバッグトレースを一覧表示
システム
prompt_policy- スコープ付き自動化プロンプト処理を一時的に有効化、無効化、または照会
ブリッジ静的ツールPythonブリッジ自身に定義されています(インスタンス発見、ツールグループ管理)。Ghidra接続前でも常に利用可能です。また、GHIDRA_DEBUGGER_URLがスタンドアロンデバッガサーバーを指している場合、ブリッジは22個のdebugger_* WinDbgツールをプロキシします。
check_tools- 現在登録されて呼び出し可能なツールを報告しますconnect_instance- ブリッジを特定のGhidraインスタンスに接続しますimport_file- ディスクからバイナリを現在のプロジェクトにインポートして開きますlist_instances- 実行中のGhidra MCPインスタンスを検出します(UDS + TCPポートスキャン)list_tool_groups- ツールグループとそのロード状態を一覧表示しますload_tool_group- ツールグループの動的ツールをMCPクライアントに登録しますsearch_tools- キーワードで全ツールカタログを検索しますunload_tool_group- ツールグループの動的ツールの登録を解除します
変更履歴はCHANGELOG.mdを参照してください。
🏗️ アーキテクチャ```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ AI/Automation │◄──►│ MCP Bridge │◄──►│ Ghidra Plugin │ │ Tools │ │ (bridge_mcp_ │ │ (GhidraMCP.jar) │ │ (Claude, etc.) │ │ ghidra/) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ MCP Protocol HTTP REST Ghidra API (stdio/streamable-http) (localhost:8089) (Program, Listing)
### Components
- **python/bridge_mcp_ghidra/** — Python MCPサーバーパッケージ(`ghidra-mcp-bridge` ホイールとして提供;`bridge-mcp-ghidra` コンソールスクリプト)。MCPプロトコルをHTTP呼び出しに変換します(225カタログエントリ)
- **GhidraMCP.jar** — 分析機能をHTTP経由で公開するGhidraプラグイン(175のGUIエンドポイント)
- **GhidraMCPHeadlessServer** — スタンドアロンヘッドレスサーバー — 183エンドポイント、GUI不要
- **ghidra_scripts/** — 一般的なタスク用の自動化スクリプト集
## 🔧 開発
### ソースからのビルド```bash
# Recommended: direct Python-first workflow
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup build
python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
# Version bump (updates all maintained version references atomically)
python -m tools.setup bump-version --new X.Y.Z
現在の標準的なビルドシステムはMavenです。tools.setup、VS Codeタスク、および文書化されたデプロイフローはすべてpom.xmlを通じてビルドし、成果物をtarget/に書き込みます。build.gradleは、直接Ghidra/Gradleを使用するユーザーのための手動フォールバックとしてリポジトリに残っていますが、主要なパスではありません。
Command Reference
| Command | 説明 |
|---|---|
ensure-prereqs | Python依存関係とGhidra Maven JARを一括インストールします。新しいマシンではここから始めてください。 |
preflight | Python、ビルドツール、Ghidraパス、JARの可用性を変更せずに検証します。--strictを追加すると、ネットワーク到達可能性も確認します。 |
build | Maven(またはTOOLS_SETUP_BACKEND=gradleの場合はGradle)を使用してプラグインJARと拡張ZIPをビルドします。 |
deploy | ビルドした拡張をGhidraプロファイルにコピーし、自動起動のためにFrontEndTool.xmlをパッチします。 |
start-ghidra | 設定されたGhidraインストールを起動します。 |
clean | Maven/Gradleのビルド出力(target/、build/)を削除します。 |
clean-all | ビルド出力とローカルキャッシュ成果物(.m2 Ghidra JARなど)を削除します。 |
install-ghidra-deps | Ghidra JARのみを~/.m2にインストールします。ビルド環境が変わった場合に便利です。 |
install-python-deps | uv syncを使用してPython依存関係グループをインストールします。 |
run-tests | Javaオフラインテストスイートを実行します(ライブGhidraは不要)。 |
verify-version | バージョン文字列がpom.xml、CHANGELOG.md、README.md間で一貫しているか確認します。 |
bump-version --new X.Y.Z | すべてのバージョン参照を原子的に更新します。--tagを渡すとgitタグを作成します。 |
ほとんどのコマンドで受け入れられる共通フラグ:
| フラグ | 説明 |
|---|---|
--ghidra-path PATH | Ghidraインストールディレクトリ。デフォルトは.envのGHIDRA_PATH。 |
--dry-run | アクションを実行せずに表示します。 |
--force | Ghidra JARが既に存在する場合でも再インストールします(install-ghidra-deps、ensure-prereqs)。 |
--with-debugger | デバッガPython要件を強制インストールします(Windowsのみ)。 |
--use-debugger-toggle | .envからINSTALL_DEBUGGER_DEPSを読み取り、デバッガ依存関係をインストールするかどうかを判断します。 |
--test TIER | (deployのみ)releaseやdebugger-liveなどのライブデプロイ回帰ティアにオプトインします。 |
--strict | (preflightのみ)Maven CentralおよびPyPIのネットワーク到達可能性も確認します。 |
デプロイテストティアはオプトインです。ベンチマークティアがアクティブなGhidraプロジェクト内のBenchmark.dllとBenchmarkDebug.exeをインポート/リセットできるためです。リリースをカットする前には--test releaseを使用するか、マシン上のすべてのデプロイでライブベンチマーク回帰を実行したい場合は、ローカルの.envにGHIDRA_MCP_DEPLOY_TESTS=releaseを設定してください。テストとリリース回帰を参照してください。```text
Standard first-time setup and deploy
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC" python -m tools.setup build python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
Preflight check before deploying
python -m tools.setup preflight --strict --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
Version bump and tag
python -m tools.setup bump-version --new X.Y.Z --tag
Run offline Java tests
python -m tools.setup run-tests
Show full help
python -m tools.setup --help
### プロジェクト構造```
ghidra-mcp/
├── pyproject.toml # uv project (ghidra-mcp-bridge wheel + dependency groups)
├── python/bridge_mcp_ghidra/ # MCP server package (Python, 225 catalog entries)
├── src/main/java/ # Ghidra plugin + headless server (Java)
│ └── com/xebyte/
│ ├── GhidraMCPPlugin.java # GUI plugin (196 endpoints)
│ ├── headless/ # Headless server (183 endpoints)
│ └── core/ # Shared service layer (12 services)
├── debugger/ # Optional standalone debugger server (port 8099)
├── ghidra_scripts/ # Automation scripts for batch workflows
├── tests/ # Python unit tests + endpoint catalog
│ ├── unit/ # Catalog consistency, schema, tool function tests
│ └── endpoints.json # Endpoint specification (225 entries)
├── docs/ # Documentation
│ ├── prompts/ # AI workflow prompts (V5 documentation workflows)
│ ├── releases/ # Version release notes
│ └── project-management/ # Contributor planning docs (Gradle migration, etc.)
├── tools/setup/ # Build and deployment CLI (python -m tools.setup)
├── fun-doc/ # Internal RE curation tool — not part of the MCP plugin
│ # Priority-queue worker, LLM scoring, web dashboard.
│ # See fun-doc/README.md for details.
└── .github/workflows/ # CI/CD pipelines
Library Dependencies
Ghidra JARは、コンパイル前にローカルのMavenリポジトリ(~/.m2/repository)にインストールする必要があります。
これはマシンごとに一度だけのセットアップであり、Ghidraのバージョンが変更された場合にも再度必要です。
-Deployはデフォルトでこれらを自動的にインストールします。
このツールは、次の間でバージョンの一貫性を強制します:
pom.xml(ghidra.version)--ghidra-pathバージョンセグメント(例:ghidra_12.1.2_PUBLIC)
これらが一致しない場合、デプロイメントは明確なエラーを表示して即座に失敗します。
トラブルシューティング:バージョンの不一致
バージョンの不一致エラーが表示された場合は、両方の値を一致させてください:
pom.xml→ghidra.version--ghidra-pathバージョンセグメント(ghidra_X.Y.Z_PUBLIC)
その後、再実行してください:
mvn clean package -Deploy -DskipTests
``````text
python -m tools.setup preflight --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
Maltegoをローカルにインストールする場合、DockerイメージをプルしてDockerコマンドで実行します。 最新バージョンのDockerを使用します。
-
Clone the repository:
git clone https://github.com/pathtorepo/maltego-docker.git cd maltego-docker -
Build the Docker image:
docker build -t maltego . -
Run the Docker container:
docker run -d --name maltego-container maltego
詳細なドキュメントは WATCH.md ファイルで参照してください。```text
Windows
python -m tools.setup install-ghidra-deps --ghidra-path "C:\path\to\ghidra_12.1.2_PUBLIC"
**必要なライブラリ(14個のJAR、約37MB):**
| ライブラリ | ソースパス | 目的 |
|---------|------------|---------|
| **Base.jar** | `Features/Base/lib/` | Ghidraのコア機能 |
| **Decompiler.jar** | `Features/Decompiler/lib/` | 逆コンパイルエンジン |
| **PDB.jar** | `Features/PDB/lib/` | Microsoft PDBシンボルサポート |
| **FunctionID.jar** | `Features/FunctionID/lib/` | 関数識別 |
| **SoftwareModeling.jar** | `Framework/SoftwareModeling/lib/` | プログラムモデルAPI |
| **Project.jar** | `Framework/Project/lib/` | プロジェクト管理 |
| **Docking.jar** | `Framework/Docking/lib/` | UIドッキングフレームワーク |
| **Generic.jar** | `Framework/Generic/lib/` | 汎用ユーティリティ |
| **Utility.jar** | `Framework/Utility/lib/` | コアユーティリティ |
| **Gui.jar** | `Framework/Gui/lib/` | GUIコンポーネント |
| **FileSystem.jar** | `Framework/FileSystem/lib/` | ファイルシステムサポート |
| **Graph.jar** | `Framework/Graph/lib/` | グラフ/コールグラフ解析 |
| **DB.jar** | `Framework/DB/lib/` | データベース操作 |
| **Emulation.jar** | `Framework/Emulation/lib/` | Pコードエミュレーション |
> **注意**: ライブラリはリポジトリに含まれていません(`.gitignore`を参照)。ビルド前にGhidraのインストールからインストールする必要があります。
> **自動化エントリポイント**:
> - `python -m tools.setup` はサポートされているセットアップ/ビルド/デプロイ/バージョン管理インターフェースです
> - `ensure-prereqs`、`build`、`deploy`、`preflight`、`clean-all`、`bump-version` を直接使用してください
> - これらのコマンドは現在、正規のJavaビルドバックエンドとしてMavenを使用しています。
### 開発機能
- **自動デプロイ**: バージョン認識デプロイスクリプト
- **バッチ操作**: API呼び出しを93%削減
- **アトミックトランザクション**: オール・オア・ナッシングのセマンティクス
- **包括的なロギング**: デバッグおよびトレース機能
## 📚 ドキュメント
### コアドキュメント
- [ドキュメントインデックス](https://github.com/bethington/ghidra-mcp/blob/main/docs/README.md) - 完全なドキュメントナビゲーション
- [プロジェクト構造](https://github.com/bethington/ghidra-mcp/blob/main/docs/PROJECT_STRUCTURE.md) - プロジェクト構成ガイド
- [テストとリリース回帰](https://github.com/bethington/ghidra-mcp/blob/main/docs/TESTING.md) - ローカルテスト、CI、ライブGhidra回帰、リリースゲート
- [命名規則](https://github.com/bethington/ghidra-mcp/blob/main/docs/NAMING_CONVENTIONS.md) - コード命名基準
- [ハンガリアン記法](https://github.com/bethington/ghidra-mcp/blob/main/docs/HUNGARIAN_NOTATION.md) - 変数命名ガイド
### AIワークフロープロンプト
- [関数ドキュメント V5](https://github.com/bethington/ghidra-mcp/blob/main/docs/prompts/FUNCTION_DOC_WORKFLOW_V5.md) — 主要ワークフロー: ハンガリアン記法、型監査、検証スコアリングを備えた7ステッププロセス
- [バッチドキュメント V5](https://github.com/bethington/ghidra-mcp/blob/main/docs/prompts/FUNCTION_DOC_WORKFLOW_V5_BATCH.md) — マルチ関数処理のための並列サブエージェントディスパッチ
- [孤立コード発見](https://github.com/bethington/ghidra-mcp/blob/main/docs/prompts/ORPHANED_CODE_DISCOVERY_WORKFLOW.md) — 未発見の関数のための自動スキャナー
- [データ型調査](https://github.com/bethington/ghidra-mcp/blob/main/docs/prompts/DATA_TYPE_INVESTIGATION_WORKFLOW.md) — 体系的な構造発見
- [クロスバージョンマッチング](https://github.com/bethington/ghidra-mcp/blob/main/docs/prompts/CROSS_VERSION_MATCHING_COMPREHENSIVE.md) — ハッシュベースの関数マッチング
- [クイックスタートプロンプト](https://github.com/bethington/ghidra-mcp/blob/main/docs/prompts/QUICK_START_PROMPT.md) — 初心者向け簡易ワークフロー
- [すべてのプロンプト](https://github.com/bethington/ghidra-mcp/blob/main/docs/prompts/README.md) — 完全なプロンプトインデックス
### リリース履歴
- [完全な変更ログ](https://github.com/bethington/ghidra-mcp/blob/main/CHANGELOG.md) - 全バージョンのリリースノート
- [リリースノート](https://github.com/bethington/ghidra-mcp/blob/main/docs/releases) - 詳細なリリースドキュメント
## 🐳 ヘッドレスサーバー(Docker)
GhidraMCPには、Ghidra GUIなしで自動分析を行うためのヘッドレスサーバーモードが含まれています。
### Dockerでのクイックスタート```bash
# Build and run
docker-compose up -d ghidra-mcp
# Test connection
curl http://localhost:8089/check_connection
# Connection OK - GhidraMCP Headless Server v5.17.0
ヘッドレスAPIワークフロー```bash
1. Load a binary
curl -X POST -d "file=/data/program.exe" http://localhost:8089/load_program
2. Run auto-analysis (identifies functions, strings, data types)
curl -X POST http://localhost:8089/run_analysis
3. List discovered functions
curl "http://localhost:8089/list_functions?limit=20"
4. Decompile a function
curl "http://localhost:8089/decompile_function?address=0x401000"
5. Get metadata
curl http://localhost:8089/get_metadata
### 主要なヘッドレスエンドポイント
| エンドポイント | メソッド | 説明 |
|----------|--------|-------------|
| `/load_program` | POST | 解析用のバイナリファイルをロード |
| `/run_analysis` | POST | Ghidra自動解析を実行 |
| `/list_functions` | GET | 検出されたすべての関数を一覧表示 |
| `/list_exports` | GET | エクスポートされたシンボルを一覧表示 |
| `/list_imports` | GET | インポートされたシンボルを一覧表示 |
| `/decompile_function` | GET | 関数をCコードに逆コンパイル |
| `/create_function` | POST | アドレスに関数を作成 |
| `/get_metadata` | GET | プログラムのメタデータを取得 |
| `/create_project` | POST | Ghidraプロジェクトを作成 |
| `/list_analyzers` | GET | 利用可能なアナライザーを一覧表示 |
| `/server/status` | GET | Ghidraサーバーの接続を確認 |
### 設定
Docker用の環境変数:
- `GHIDRA_MCP_PORT` - サーバーポート (デフォルト: 8089)
- `GHIDRA_MCP_BIND_ADDRESS` - バインドアドレス (デフォルト: Docker内では0.0.0.0)
- `JAVA_OPTS` - JVMオプション (デフォルト: -Xmx4g -XX:+UseG1GC)
## 🤝 貢献
詳細なコントリビューションガイドラインについては [CONTRIBUTING.md](https://github.com/bethington/ghidra-mcp/blob/main/CONTRIBUTING.md) を参照してください。
### クイックスタート
1. リポジトリをフォーク
2. 機能ブランチを作成 (`git checkout -b feature/amazing-feature`)
3. 変更をビルドしてテスト (`mvn clean package assembly:single -DskipTests` または `GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension`)
4. 必要に応じてドキュメントを更新
5. 変更をコミット (`git commit -m 'Add amazing feature'`)
6. ブランチにプッシュ (`git push origin feature/amazing-feature`)
7. プルリクエストを作成
## 📄 ライセンス
このプロジェクトはApache License 2.0の下でライセンスされています。詳細は [LICENSE](https://github.com/bethington/ghidra-mcp/blob/main/LICENSE) ファイルを参照してください。
## 🏆 プロダクションステータス
| 指標 | 値 |
|--------|-------|
| **バージョン** | 5.17.0 |
| **MCPツール** | 249件完全実装 |
| **GUIエンドポイント** | 196 (GhidraMCPPlugin) |
| **ヘッドレスエンドポイント** | 195 (GhidraMCPHeadlessServer) |
| **コンパイル** | ✅ 100%成功 |
| **バッチ効率** | 93%のAPI呼び出し削減 |
| **AIワークフロー** | 7つの実績あるドキュメンテーションワークフロー |
| **Ghidraスクリプト** | 自動化スクリプト含む |
| **ドキュメント** | AIプロンプトを含む包括的 |
バージョン履歴とリリースノートについては [CHANGELOG.md](https://github.com/bethington/ghidra-mcp/blob/main/CHANGELOG.md) を参照してください。
## 🙏 謝辞
このプロジェクトは、2025年8月に [LaurieWired/GhidraMCP](https://github.com/LaurieWired/GhidraMCP) から派生し、その後大幅に書き直され拡張されました。出発点としてLaurieWired氏のオリジナル作品を認めます。ライセンスの帰属については [NOTICE](https://github.com/bethington/ghidra-mcp/blob/main/NOTICE) を参照してください。
## 👥 コントリビューター
このプロジェクトは、献身的なコントリビューターの作業によって恩恵を受けています。
### 主要コントリビューター
**[@heeen](https://github.com/heeen)** — 主な貢献:
- バイナリ間比較のためのファジー関数マッチングと構造化差分 (#13)
- スクリプト実行の改善とバグ修正 (#12)
- 新しいAPIエンドポイント: `save_program`, `exit_ghidra`, `delete_function`, `create_memory_block`, `run_script_inline` (#11)
- アーキテクチャビジョン: アノテーション駆動設計、UDSトランスポート、Pythonブリッジ最適化提案
**[@huehuehuehueing](https://github.com/huehuehuehueing)** — 主な貢献:
- アドレス空間プレフィックスサポート — エンドポイント全体のアドレス解析に `<space>:<hex>` 構文(例: `mem:1000`, `code:ff00`)を追加し、組み込みファームウェアのようなマルチスペースターゲットを可能に (#84, closes #65)
- オプションの `program` パラメータ + 必須パラメータスキーマ修正 — すべてのエンドポイントで `program` をオプションにし、適切な currentProgram フォールバックを設定、カタログが継承していた必須/オプションのスキーマバグを修正 (#92)
- #44 (データ型/列挙型ツール) の種 — v5.0の列挙型+構造体強制レイヤーを動機付けた issue
- **Ghidraチーム** - 素晴らしいリバースエンジニアリングプラットフォームに対して
- **Model Context Protocol** - 標準化されたAI統合フレームワークに対して
- **コントリビューター** - テスト、フィードバック、改善に対して
---
## 🔗 関連プロジェクト
- [re-universe](https://github.com/bethington/re-universe) — Ghidra BSim PostgreSQLプラットフォームによる大規模バイナリ類似性解析。AI駆動のリバースエンジニアリングワークフローでGhidraMCPと完全に連携。
- [cheat-engine-server-python](https://github.com/bethington/cheat-engine-server-python) — 動的メモリ解析とデバッグのためのMCPサーバー。
---
**エンタープライズ級の信頼性と包括的なバイナリ解析機能を備えた本番環境へのデプロイ準備完了。**