symgraph/GhidrAssistMCP

An native MCP server extension for Ghidra

GhidrAssistMCP – Ghidra用AI対応ブリッジ

概要

GhidrAssistMCPは、Ghidraアプリケーション内でModel Context Protocol (MCP) サーバーを実行するGhidra拡張機能です。このサーバーは、Ghidraのリバースエンジニアリング機能(関数リストの取得、逆アセンブル、コメント編集、解析の実行など)を、AIアシスタントやその他の自動化ツールが呼び出せるクリーンなHTTPベースのAPIとして公開します。

AI/MLにとっての重要性

  • 標準化されたAPI – MCPに対応することで、外部のLLMベースのアシスタント(コンパニオンであるGhidrAssistクライアントなど)は、Javaコードを埋め込むことなく、Ghidraに質問を投げ、構造化されたJSON形式の回答を受け取ることができます。
  • ツールカタログ – 入力スキーマと読み取り/書き込みアノテーションを備えた100個の明示的な「ツール」が定義されており、LLMは利用可能な操作とその呼び出し方法を容易に把握できます。
  • 非同期処理とキャッシュ – 時間のかかる解析はバックグラウンドジョブとして実行され、結果はキャッシュされます。これはLLMがクエリを反復的に洗練させる際に有用です。
  • マルチプログラムおよびヘッドレスサポート – サーバーはGUIおよびGhidraのanalyzeHeadlessモードの両方で動作するため、AIパイプラインは多数のバイナリに対して完全に自動化された解析を実行できます。

主な機能(READMEより)

機能 内容
MCPサーバー統合 公式のMCP Java SDK (v2.0.1) を実装し、Server-Sent Events (SSE) とストリーミング可能なJSONエンドポイントという2つのHTTPトランスポートを公開します。
明示的なツールカタログ プロジェクト管理、プログラム調査、逆アセンブル、デコンパイル、コメント、型、解析オプションなどを網羅する100個のツール(デフォルトで93個が有効)を提供します。
リソーステンプレートとプロンプト プログラムメタデータ、関数、文字列、インポート/エクスポート、セグメント用の事前定義されたMCPリソースに加え、一般的なREタスク用の7つの解析プロンプトを提供します。
結果のキャッシュと非同期タスク 繰り返しクエリはキャッシュから取得され、長時間実行される操作はポーリングやキャンセルが可能なタスクIDを返します。
マルチプログラムとフォーカス認識 複数の開いているプログラムを処理し、フォーカスされているプログラムウィンドウを自動的に使用します。また、クライアントがprogram_nameを指定することも可能です。
共有ランタイムとUI 1つのサーバーインスタンスがGhidraプロジェクトマネージャーによって所有され、すべてのCodeBrowserウィンドウが設定とログを共有するビューを取得します。
ヘッドレスモード analyzeHeadlessから起動できるため、AIパイプラインはGUIなしでGhidraと対話できます。
設定可能なUI Ghidraウィンドウ(Window → GhidrAssistMCP)から、ツールの有効化/無効化、ホスト/ポートの変更、リクエスト/レスポンスログのリアルタイム監視が可能です。

利用方法

  1. インストール – GhidraのFile → Install Extensionsから拡張機能(ZIP)をインストールします(Ghidra 12.0/12.1およびJava 25+が必要です)。
  2. Ghidraの起動 – プロジェクトマネージャーが開くと、MCPサーバーが自動的に起動します。
  3. 設定 – 必要に応じてホスト/ポートを設定し、使用したいツールを有効にします。
  4. ツールの呼び出し – MCP互換クライアント(コンパニオンのGhidrAssist UIやカスタムスクリプトなど)からツールを呼び出します:
    {"method":"tools/call","params":{"name":"list_functions","arguments":{"program_name":"/binaries/example"}}}
    
    サーバーは関数のJSONリストを返します。
  5. ヘッドレス実行 – GhidraのanalyzeHeadlessランチャーを使用し、サーバーを起動するプリスクリプトを実行します。その後、外部のAIサービスからエンドポイント(/mcpまたは/sse)にクエリを送信します。

想定されるユーザー

  • LLM駆動型のバイナリ解析アシスタントを構築するセキュリティ研究者。
  • GhidraのJava APIを埋め込むことなく、プログラムレベルの情報(関数、CFG、デコンパイル結果など)を必要とする自動化パイプライン。
  • LLMを活用したWebベースのUIを通じて、学生がリバースエンジニアリングを学習するための教育ツール。

制限事項と考慮事項(ドキュメントより)

  • サーバーは単一のポート(デフォルトは8080)で動作するため、そのポートが空いている必要があります。
  • 安全のため、一部の強力な操作(import_file、export_program、スクリプト実行など)はデフォルトで無効になっています。
  • この拡張機能はMCP Java SDK 2.0.1に依存しています。新しいMCPリビジョンにはSDKの更新が必要になる場合があります。
  • ヘッドレスモードでは、サーバーはJVMが実行されている間のみ生存します。completion_fileを使用してクリーンにシャットダウンさせることができます。

上記の情報はすべてリポジトリのREADMEから直接引用したものであり、追加の機能は推測されていません。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト