ghidralens
GhidraLens
Ghidra を AI クライアント内に表示。シンボルをクリックすると名前を変更でき、コールをクリックすると追跡できます。

これまでの Ghidra MCP サーバーはどれもテキストを返すだけでした。モデルは読めますが、ユーザーは操作できません。GhidraLens は同じ解析結果を インタラクティブビュー として返します。これは MCP Apps(io.modelcontextprotocol/ui)上に構築されています。この拡張機能により、サーバーは実際の HTML を会話に組み込めるようになります。
あなたとモデルは同じライブプログラムを見ています。変数をクリックして名前を変更すると、モデルが次にデコンパイルするときには新しい名前が反映されます。
これは実際のスクリーンショットです。where.exe を Ghidra でデコンパイルしたもので、すべての識別子に由来元のアドレスが付与されています。
できること
ビュー | 説明 |
デコンパイラ | Ghidra の C 出力をライブなトークンストリームとして表示。すべての識別子にアドレスと種類が付与されます。ローカル変数をクリックすると名前を変更でき、コールをクリックすると追跡できます。サイドバーには呼び出し元、呼び出し先、変数が表示されます。 |
関数ブラウザ | バイナリ内のすべての関数を、アドレス・名前・サイズ・呼び出し元数でフィルタリング/ソートできます。行をクリックするとデコンパイルします。 |
コールグラフ | 呼び出し元を左、呼び出し先を右、指定した関数を中央に表示。ノードをクリックすると中央に再配置します。 |
関数ブラウザ

コールグラフ

ツールは全部で10個。3つはビューを開き、残りは検索と書き込みです。その中にはモデルが決して見ることのない2つがあり、ビュー内のクリックが発火させるためだけに存在します。
Related MCP server: GhidraMCP
連携の仕組み
MCP client ──stdio──▶ server/ ──HTTP──▶ bridge/ ──JPype──▶ Ghidra (JVM)
(Claude, TypeScript PyGhidra program stays
Cursor, …) MCP server session resident
▲
│ ui:// HTML in a sandboxed iframe
└── ui/ three self-contained viewsブリッジは意図的に独立した常駐プロセスにしています。Ghidra の自動解析はコストの高い処理ですが、これは 一度だけ 実行されます。64 KB の Windows システムユーティリティ(198関数)で測定した結果は次のとおりです。
初回オープン(解析込み) | 25 秒 |
同じバイナリを再度開く | 0.3 秒 |
2 KB の関数を1つデコンパイル | 0.4 秒 |
87ノードのコールグラフ | < 0.1 秒 |
MCP サーバーやクライアントを再起動しても、解析済みのプログラムはそのまま残ります。
セットアップ
前提条件: Ghidra 11.3+、JDK 21+、Python 3.9–3.13(3.14 は不可 — JPype にまだ wheel がないため)、Node 20+。bridge/setup.py.md を参照してください。Python 側は要求が厳しく、そのファイルに失敗するすべてのパターンが記載されています。JAVA_HOME が未設定の場合、GhidraLens が JDK を見つけてくれます。これにより「Java はインストール済みだがシェルを再起動していない」というよくあるケースにも対応できます。
git clone https://github.com/hellosverre/ghidralens
cd ghidralens
npm install
npm run build次に、確認したいバイナリに対してブリッジを起動します:
python bridge/serve.py --binary /path/to/target.exeトークンが出力されます。そのトークンとビルド済みサーバーへのパスを MCP クライアントの設定に記入します:
{
"mcpServers": {
"ghidralens": {
"command": "node",
"args": ["/absolute/path/to/ghidralens/server/dist/index.js"],
"env": {
"GHIDRALENS_BRIDGE_URL": "http://127.0.0.1:8799",
"GHIDRALENS_TOKEN": "paste-the-printed-token-here"
}
}
}
}あとはクライアントに次のように依頼するだけです: 「ライセンス検証を処理する関数をデコンパイルして」。
ツール
ツール | 表示先 | レンダリング |
| モデル | — |
| モデル | — |
| モデル + ビュー | デコンパイラ |
| モデル + ビュー | 関数ブラウザ |
| モデル + ビュー | コールグラフ |
| モデル | — |
| モデル + ビュー | — |
| モデル + ビュー | — |
| ビューのみ | — |
| モデル | — |
add_comment は意図的にモデルから隠されています。可視性は、MCP Apps が「エージェントが実行してよい操作」と「クリックが実行してよい操作」を分離する仕組みです。書き込みツールをモデルの一覧から外すことで、一覧を短く保ち、モデルが自発的に名前を変更するのを防ぎます。
名前の変更とコメントは、save_program で Ghidra プロジェクトに書き込まれるまでメモリ上に保持されます。書き込んだ後は、他の編集と同様に Ghidra GUI に表示されます。
Ghidra なしでビューを開発する
npm run dev:ui
# open http://localhost:5173/dev/harness.htmlui/dev/harness.ts は 本物の MCP Apps ホスト です。iframe 内のビューに対して SDK の AppBridge を実行するため、ui/initialize ハンドシェイク、開始時の ui/notifications/tool-result、クリックによって発火するすべての tools/call は、実際の postMessage JSON-RPC を経由します。右側にはメッセージトレースとホストテーマの切り替えがあります。ビューは両方のテーマで正しく表示される必要があるためです。
ツールバーで切り替えられる2つのデータソース:
fixtures — Ghidra 不要、インストールも不要
live bridge — 実行中のブリッジにプロキシするため、実際に解析されたプログラムに対して開発できます
何かを信用する前に、live で確認してください。fixtures はきれいですが、実際の出力はローカル変数56個を伴う400行の関数と87ノードのコールグラフで、実際にレイアウトが崩れるのはこのようなケースです。
ローカルモデルで実行する
リバースエンジニアリングは、まさにホスト型モデルに送信したくない種類の作業です。そのため、agent/ollama-agent.mjs は GhidraLens を Ollama の背後に置く小さな MCP ホストです。API キーは不要で、データがマシンの外に出ることもありません。
OLLAMA_MODEL=qwen3:14b node agent/ollama-agent.mjs "what does this binary do?"_meta.ui.visibility を尊重するため、アプリ専用ツールはモデルから見えないままになります。これはグラフィカルクライアントが強制するのと同じ分離です。~9B モデルでも find_strings と list_functions を使って方向を掴むには十分です。14B モデルなら、デコンパイルされた C を読む能力が著しく向上します。
テスト
スイート | Ghidra の要否 | 対象 |
| 不要 | MCP サーフェス: ツール、 |
| 不要 | ブリッジの認証、CSRF 拒否、ルーティング、入力検証 |
| 必要 | すべての Ghidra 呼び出し: 解析、キャッシュ、デコンパイラトークン、インポート、名前変更、書き込み |
| 必要(ブリッジ実行中) | チェーン全体と、すべてのペイロードがビューの参照先の形状に一致すること |
最初の2つは CI で実行できるものです。test_session.py は bridge/session.py に手を加えた後に重要となるテストです。Ghidra API 呼び出しが正しいことを証明できる唯一のテストであり、書かれた当日に実際のバグを3件検出しました。
セキュリティ
ブリッジは 127.0.0.1 にのみバインドし、X-GhidraLens-Token に実行ごとのトークンを要求し、Origin または Referer ヘッダーを含むリクエストをすべて拒否します。そのため、ブラウザで開いているページがデコンパイラに到達することはできません。マルチユーザーモデルはなく、外部公開を想定していません。--host はループバック以外を拒否します。
バイナリの解析はそれを実行するわけではありませんが、Ghidra はマルウェアをためらいなく開きます。他のリバースエンジニアリング作業と同じ隔離策を使用してください。
ライセンス
MIT。
Maintenance
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables LLMs to perform binary analysis using Ghidra in headless mode, extracting functions, pseudocode, structs, and enums from binaries for interactive reverse-engineering.94
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to autonomously reverse engineer binaries using Ghidra's capabilities including decompilation, function analysis, automatic renaming, and BSim integration for function similarity matching.1AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceBridges Ghidra's reverse engineering capabilities with AI tools through 179 specialized tools for automated binary analysis and documentation. It supports full read/write access for function decompilation, renaming, and cross-binary documentation transfer in both GUI and headless modes.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to analyze binaries, debug processes, and inspect kernel state using Ghidra, x64dbg, WinDbg, and ILSpyCmd.5Apache 2.0
Related MCP Connectors
Renders interactive Chart.js charts and dashboards inline in AI conversations.
Live browser debugging for AI assistants — DOM, console, network via MCP.
AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hellosverre/ghidralens'
If you have feedback or need assistance with the MCP directory API, please join our Discord server