JADX-AI-MCP (Part of Zin MCP Suite) について
JADX-AI-MCP は JADX プラグインと Python 製 MCP サーバーをつなぎ、LLM クライアントから Android APK の逆コンパイル済みコンテキストへリアルタイムにアクセスできる仕組みです。APK のリバースエンジニアリングやセキュリティレビュー向けに、コード、リソース、デバッグ情報の参照やリネーム、コメント追加を行えます。
主な機能
- 01クラス、メソッド、フィールドのソース取得
- 02クラス、メソッド、相互参照の検索
- 03Manifest、文字列、リソースファイルの参照
- 04コード要素のリネームとコメント追加
- 05デバッガーのスレッド、変数、スタック取得
- 06stdio と HTTP のトランスポートに対応
活用シーン
- 01APK のコードとアプリコンポーネントの分析
- 02潜在的なセキュリティ問題の確認
- 03クラス、メソッド、フィールドの参照追跡
- 04デバッグ時のスレッド、変数、スタック確認
MCP 対応
Python 製 MCP サーバーはプラグイン経由で JADX-GUI に接続し、逆コンパイル済みコード、リソース、相互参照、デバッガー情報を MCP クライアント向けのツールとして公開します。stdio と HTTP のトランスポートに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
JADX-AI-MCP(Zin MCP Suite の一部)
⚡ MCP を介して LLM と通信し、Claude などの LLM を使用して Android APK を分析するために構築された、完全自動化された MCP サーバーと JADX プラグインです。脆弱性の発見、APK の分析、リバースエンジニアリングを手軽に行えます。
⭐ コントリビューター
ご貢献いただいた素晴らしい皆さまに感謝します ⭐
Read The Docs
- Read The Docs が公開されました: https://jadx-ai-mcp.readthedocs.io/en/latest/
🤖 JADX-AI-MCP とは?
JADX-AI-MCP は、JADX デコンパイラ 用のプラグインで、Model Context Protocol (MCP) と直接統合し、Claude などの LLM によるライブリバースエンジニアリング支援を提供します。
つまり、「デコンパイル → コンテキストを考慮したコードレビュー → AI による提案」がすべてリアルタイムで行えます。
高レベルシーケンス図
sequenceDiagram
LLM CLIENT->>JADX MCP SERVER: INVOKE MCP TOOL
JADX MCP SERVER->>JADX AI MCP PLUGIN: INVOKE HTTP REQUEST
JADX AI MCP PLUGIN->>REQUEST HANDLERS: INVOKE HTTP REQUEST HANDLER
REQUEST HANDLERS->>JADX GUI: PERFORM ACTION/GATHER DATA
JADX GUI->>REQUEST HANDLERS: ACTION PERFORMED/DATA GATHERED
REQUEST HANDLERS->>JADX AI MCP PLUGIN: CRAFT HTTP RESPONSE
JADX AI MCP PLUGIN->>JADX MCP SERVER:HTTP RESPONSE
JADX MCP SERVER->>LLM CLIENT: MCP TOOL RESULT
デモをご覧ください!
- 迅速な分析を実行
https://github.com/user-attachments/assets/b65c3041-fde3-4803-8d99-45ca77dbe30a
- 脆弱性をすばやく発見
https://github.com/user-attachments/assets/c184afae-3713-4bc0-a1d0-546c1f4eb57f
- 複数の AI エージェントをサポート
https://github.com/user-attachments/assets/6342ea0f-fa8f-44e6-9b3a-4ceb8919a5b0
- お気に入りの LLM クライアントで実行
https://github.com/user-attachments/assets/b4a6b280-5aa9-4e76-ac72-a0abec73b809
- APK リソースを分析
https://github.com/user-attachments/assets/f42d8072-0e3e-4f03-93ea-121af4e66eb1
- JADX を使用した APK のデバッグ中に活躍する AI アシスタント
https://github.com/user-attachments/assets/2b0bd9b1-95c1-4f32-9b0c-38b864dd6aec
これは 2 つのツールの組み合わせです:
- JADX-AI-MCP
- JADX MCP SERVER
🤖 JADX-MCP-SERVER とは?
JADX MCP Server は、MCP (Model Context Protocol) を介して JADX-AI-MCP プラグイン (参照: jadx-ai-mcp) と連携するスタンドアロンの Python サーバーです。これにより、LLM がデコンパイルされた Android アプリのコンテキストとライブで通信できます。
Zin MCP Suite のその他のプロジェクト
現在の MCP ツール
以下の MCP ツールを利用できます。
fetch_current_class()— 選択したクラスの名前とソース全体を取得しますget_selected_text()— 現在選択されているテキストを取得しますget_all_classes()— プロジェクト内のすべてのクラスを一覧表示しますget_class_source()— 指定したクラスのソース全体を取得しますget_method_by_name()— メソッドのソースを取得しますsearch_method_by_name()— クラスを横断してメソッドを検索しますsearch_classes_by_keyword()— ソースコードに特定のキーワードを含むクラスを検索します(ページネーションに対応)get_methods_of_class()— クラス内のメソッドを一覧表示しますget_fields_of_class()— クラス内のフィールドを一覧表示しますget_smali_of_class()— クラスの smali を取得しますget_main_activity_class()— AndroidManifest.xml ファイルで指定されている jadx のメインアクティビティを取得します。get_main_application_classes_code()— AndroidManifest.xml で定義されているパッケージ名に基づいて、メインアプリケーションのすべてのクラスのコードを取得します。get_main_application_classes_names()— AndroidManifest.xml で定義されているパッケージ名に基づいて、メインアプリケーションのすべてのクラス名を取得します。get_android_manifest()— AndroidManifest.xml の内容を取得して返します。get_manifest_component- マニフェストファイル全体ではなく、指定したマニフェストコンポーネントを取得しますget_strings(): strings.xml ファイルを取得しますget_all_resource_file_names(): アプリケーションに存在するすべてのリソースファイル名を取得しますget_resource_file(): リソースファイルの内容を取得しますrename_class(): クラス名を変更しますrename_method(): メソッド名を変更しますrename_field(): フィールド名を変更しますrename_package(): パッケージ全体の名前を変更しますrename_variable(): メソッド内の変数名を変更しますadd_comment(): クラス、メソッド、フィールド、またはコードの1行(line=は逆コンパイルされたソースの1始まりの行番号)にコメントを追加します。コメントは JADX-GUI に表示され、プロジェクトとともに保存されます(同じ対象に再度コメントすると更新され、コメントを空にすると削除されます)list_comments(): プロジェクトに保存されているコメントを一覧表示します。必要に応じて1つのクラスに絞り込めますdebug_get_stack_frames(): jadx デバッガーからスタックフレームを取得しますdebug_get_threads(): jadx デバッガーからスレッドの情報を取得しますdebug_get_variables(): jadx デバッガーから変数を取得しますxrefs_to_class(): クラスへのすべての参照を検索します(メソッドレベルとクラスレベルの参照を返し、ページネーションに対応)xrefs_to_method(): メソッドへのすべての参照を検索します(オーバーライド関連のメソッドを含み、ページネーションに対応)xrefs_to_field(): フィールドへのすべての参照を検索します(そのフィールドにアクセスするメソッドを返し、ページネーションに対応)
🗒️ サンプルプロンプト
🔍 基本的なコードの理解
"このクラスの役割を1段落で説明してください。"
"このメソッドの責務を要約してください。"
"このクラスに難読化はありますか?"
"このクラスで必要になる可能性があるAndroidの権限をすべて列挙してください。"
🛡️ 脆弱性の検出
"このメソッドで安全でないAPIの使用はありますか?"
"このクラスにハードコードされたシークレットや認証情報がないか確認してください。"
"このメソッドはユーザー入力を使用する前にサニタイズしていますか?"
"このコードによってどのようなセキュリティ脆弱性が発生する可能性がありますか?"
🛠️ リバースエンジニアリングの補助
"難読化を解除し、クラス名とメソッド名を分かりやすい名前に変更してください。"
"このsmaliメソッドの本来の目的を推測できますか?"
"このクラスはどのライブラリやSDKの一部と思われますか?"
"'encryption'に関連するコードを含むクラスを教えてください。"
📦 静的解析
"このクラス内のネットワーク関連API呼び出しをすべて列挙してください。"
"ファイルI/O操作と、それに伴う潜在的なリスクを特定してください。"
"このメソッドはデバイス情報やPIIを漏えいしますか?"
🤖 AIによるコード変更
"読みやすさを向上させるため、このメソッドをリファクタリングしてください。"
"各手順を説明するコメントをこのコードに追加してください。"
"解析用に、このJavaメソッドをPythonに書き換えてください。"
📄 ドキュメントとメタデータ
"すべてのメソッドにJavadoc形式のコメントを生成してください。"
"このクラスはどのパッケージまたはアプリコンポーネントに属する可能性がありますか?"
"Androidコンポーネントの種類(Activity、Serviceなど)を特定できますか?"
🐞 デバッガーアシスタント
"Fetch stack frames, varirables and threads from debugger and provide summary"
"Based the stack frames from debugger, explain the execution flow of the application"
"Based on the state of variables, is there security threat?"
🛠️ はじめに
1. Releasesからダウンロード:https://github.com/zinja-coder/jadx-ai-mcp/releases
メモ
jadx-ai-mcp-<version>.jarとjadx-mcp-server-<version>.zipの両方をダウンロードしてください。
# 0. Download the jadx-ai-mcp-<version>.jar and jadx-mcp-server-<version>.zip
https://github.com/zinja-coder/jadx-ai-mcp/releases
# 1.
unzip jadx-mcp-server-<version>.zip
├jadx-mcp-server/
├── jadx_mcp_server.py
├── requirements.txt
├── README.md
├── LICENSE
├── src/
├── static/
├── examples/
└── test.sh
├jadx-ai-mcp-<version>.jar
# 2. Install the plugin
# For this you can follow two approaches:
## 1. One liner - execute below command in your shell
jadx plugins --install "github:zinja-coder:jadx-ai-mcp"
## The above one line code will install the latest version of the plugin directly into the jadx, no need to download the jadx-ai-mcp's .jar file.
## 2. Or you can use JADX-GUI to install it by following images as shown below:
## 3. GUI method, download the .jar file and follow below steps shown in images

# 3. Navigate to jadx-mcp-server directory
cd jadx-mcp-server
# 4. This project uses uv - https://github.com/astral-sh/uv instead of pip for dependency management.
## a. Install uv (if you dont have it yet)
curl -LsSf https://astral.sh/uv/install.sh | sh
## b. OPTIONAL, if for any reasons, you get dependecy errors in jadx-mcp-server, Set up the environment
uv venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
## c. OPTIONAL Install dependencies
uv pip install httpx fastmcp
# The setup for jadx-ai-mcp and jadx_mcp_server is done.
🤖 2. Claude Desktopを使用する
Claude DesktopがMCPを有効にして実行されていることを確認してください。
たとえば、Kali Linuxでは次のものを使用しました:https://github.com/aaddrick/claude-desktop-debian
MCPサーバーを設定し、LLMファイルに追加します:
nano ~/.config/Claude/claude_desktop_config.json
対象:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
次の内容をファイルに追加します:
{
"mcpServers": {
"jadx-mcp-server": {
"command": "/<path>/<to>/uv",
"args": [
"--directory",
"</PATH/TO/>jadx-mcp-server/",
"run",
"jadx_mcp_server.py"
]
}
}
}
次のように置き換えます:
path/to/uvを、実際のuv実行ファイルのパスに置き換えますpath/to/jadx-mcp-serverを、このリポジトリをクローンした場所の絶対パスに置き換えます
その後、コードを確認し、組み込みの統合機能を使ってリアルタイムのコードレビュー用プロンプトでやり取りできます。
または
以下のコマンドを使って、jadx_mcp_serverを実行ファイルとして直接インストールすることもできます:
uv tool install git+https://github.com/zinja-coder/jadx-mcp-server
その後、MCP設定のcommandセクションにjadx_mcp_serverを指定するだけで使用できます。
3. Cherry Studioを使用する
Cherry StudioでMCPツールを設定する場合は、次の設定を参照してください。
- Type:stdio
- command:uv
- argument:
--directory
path/to/jadx-mcp-server
run
jadx_mcp_server.py
path/to/jadx-mcp-serverを、このリポジトリをクローンした場所の絶対パスに置き換えます
4. LMStudioを使用する
mcp.jsonファイルを設定すれば、JADX AI MCP ServerをLM Studioで使用することもできます。設定方法を紹介する動画はこちらです。
https://github.com/user-attachments/assets/b4a6b280-5aa9-4e76-ac72-a0abec73b809
5. HTTPストリームモードで実行する
次の例のように、jadx_mcp_server.pyで--httpオプションを使うと、JadxをHTTPストリームモードで使用することもできます:
uv run jadx_mcp_server.py --http
OR
uv run jadx_mcp_server.py --http --port 9999
CLI の高度なオプション — フラグについて
接続は 2 つあり、それぞれに独自のホスト/ポートがあります。
┌─────────────┐ --host / --port ┌──────────────────┐ --jadx-host / --jadx-port ┌──────────────────┐
│ LLM Client │ ◄──────────────────► │ jadx-mcp-server │ ──────────────────────────► │ JADX-GUI Plugin │
│ (Claude, │ Where the MCP server │ │ Where the MCP server looks │ (jadx-ai-mcp) │
│ Codex..) │ LISTENS for clients │ │ for the JADX plugin │ │
└─────────────┘ └──────────────────┘ └──────────────────┘
| フラグ | デフォルト | 制御する内容 |
|---|---|---|
--http | オフ | stdio の代わりに HTTP トランスポートを使用します |
--host | 127.0.0.1 | MCP サーバーがリッスンする場所(LLM クライアント用のバインドアドレス) |
--port | 8651 | MCP サーバーがリッスンするポート |
--jadx-host | 127.0.0.1 | JADX プラグインの場所(接続先の JADX-GUI マシン) |
--jadx-port | 8650 | JADX プラグインが使用するポート |
使用例
シナリオ 1 — すべて同じマシン上で実行する場合(最も一般的):
# Default: MCP server on localhost:8651, connects to JADX plugin on localhost:8650
uv run jadx_mcp_server.py --http
シナリオ 2 — Docker コンテナーまたは WSL(MCP サーバーにホストネットワークからアクセス可能):
# MCP server listens on ALL interfaces so the host can reach it
# JADX plugin is still on the same machine
uv run jadx_mcp_server.py --http --host 0.0.0.0
シナリオ 3 — JADX-GUI を別のマシン(リモート VM など)で実行する場合:
# MCP server runs locally, but connects to JADX plugin on a remote machine
uv run jadx_mcp_server.py --http --jadx-host 192.168.1.100
シナリオ 4 — すべて別々のマシンで実行する完全なリモート構成:
# MCP server listens on all interfaces on port 9999
# JADX plugin is on a different machine at 192.168.1.100:8652
uv run jadx_mcp_server.py --http --host 0.0.0.0 --port 9999 --jadx-host 192.168.1.100 --jadx-port 8652
注意
⚠️ セキュリティ警告 — リモートバインド
--host 0.0.0.0(または localhost 以外のアドレス)を使用すると、MCP サーバーは認証なしの平文 HTTPですべてのネットワークインターフェースにバインドします。つまり、次のようになります。
- ネットワーク上の誰もが接続して、すべての MCP ツールを実行できます
- TLS 暗号化がないため、通信を傍受される可能性があります
- 攻撃者はサーバーを利用して、逆コンパイル済みコードを読み取り、クラス/メソッドの名前を変更し、デバッグ情報にアクセスできます
緩和策:
0.0.0.0にバインドするのは、信頼できる隔離ネットワーク(Docker ブリッジやローカル VM など)に限ってください- ファイアウォールを使用して、MCP ポートへのアクセスを制限してください
- 代わりにSSH トンネルを検討してください:
ssh -L 8651:127.0.0.1:8651 remote-host
Stdio モードの互換性
メモ
stdio モード(デフォルト。
--httpを指定しない場合)で実行すると、人間が読める出力(バナー、ヘルスチェック)はすべて stderr に書き込まれ、stdout は MCP JSON-RPC ストリーム用に確保されます。これにより、Codex、Claude Desktop、その他の stdio ベースの MCP クライアントとの互換性が確保されます。
6. JADX AI MCP Plugin のカスタムポートとホストの設定
- ポートの設定:JADX AI MCP Plugin がリッスンするポートを設定します。
- デフォルトポート:変更を元に戻し、デフォルトポートでリッスンします。
- サーバーの再起動:JADX AI MCP Plugin サーバーを強制的に再起動します。
- サーバーのステータス:JADX AI MCP Plugin サーバーのステータスを確認します。
カスタムポートで実行中の JADX AI MCP Plugin に接続するには、次のように --jadx-port オプションを使用します。
uv run jadx_mcp_server.py --jadx-port 8652
JADX AI MCP Plugin が別のマシン(JADX はリモート VM 上、MCP サーバーはローカルホスト上など)で実行されている場合は、--jadx-host オプションを使用します。
# Connect to JADX plugin on a remote host
uv run jadx_mcp_server.py --jadx-host 192.168.1.100 --jadx-port 8650
CLI リファレンス — フラグについて
接続は 2 つあり、それぞれに独自のホスト/ポートがあります。
┌─────────────┐ --host / --port ┌──────────────────┐ --jadx-host / --jadx-port ┌──────────────────┐
│ LLM Client │ ◄──────────────────► │ jadx-mcp-server │ ──────────────────────────► │ JADX-GUI Plugin │
│ (Claude, │ Where the MCP server │ │ Where the MCP server looks │ (jadx-ai-mcp) │
│ Codex..) │ LISTENS for clients │ │ for the JADX plugin │ │
└─────────────┘ └──────────────────┘ └──────────────────┘
| フラグ | デフォルト | 制御する内容 |
|---|---|---|
--http | オフ | stdio の代わりに HTTP トランスポートを使用します |
--host | 127.0.0.1 | MCP サーバーがリッスンする場所(LLM クライアント用のバインドアドレス) |
--port | 8651 | MCP サーバーがリッスンするポート |
--jadx-host | 127.0.0.1 | JADX プラグインの場所(接続先の JADX-GUI マシン) |
--jadx-port | 8650 | JADX プラグインが使用するポート |
使用例
シナリオ 1 — すべて同じマシン上で実行する場合(最も一般的):
# Default: MCP server on localhost:8651, connects to JADX plugin on localhost:8650
uv run jadx_mcp_server.py --http
シナリオ 2 — Docker コンテナーまたは WSL(MCP サーバーにホストネットワークからアクセス可能):
# MCP server listens on ALL interfaces so the host can reach it
# JADX plugin is still on the same machine
uv run jadx_mcp_server.py --http --host 0.0.0.0
シナリオ 3 — JADX-GUI を別のマシン(リモート VM など)で実行する場合:
# MCP server runs locally, but connects to JADX plugin on a remote machine
uv run jadx_mcp_server.py --http --jadx-host 192.168.1.100
シナリオ 4 — すべて別々のマシンで実行する完全なリモート構成:
# MCP server listens on all interfaces on port 9999
# JADX plugin is on a different machine at 192.168.1.100:8652
uv run jadx_mcp_server.py --http --host 0.0.0.0 --port 9999 --jadx-host 192.168.1.100 --jadx-port 8652
カスタム jadx ポートを使用する場合の Claude 用 MCP 設定は次のとおりです。
{
"mcpServers": {
"jadx-mcp-server": {
"command": "/path/to/uv",
"args": [
"--directory",
"/path/to/jadx-mcp-server/",
"run",
"jadx_mcp_server.py",
"--jadx-port",
"8652"
]
}
}
}
試してみましょう
- jadx-gui を実行し、任意の .apk ファイルを読み込みます

- claude を起動します。ハンマーのシンボルが表示されていることを確認してください

hammerシンボルをクリックすると、次のような画面が表示されます。

- 次のプロンプトを実行します。
fetch currently selected class and perform quick sast on it

- プロンプトが表示されたら、アクセスを許可します。

- ハックしましょう!

このプラグインを使うと、GUI と内部プロジェクトモデルを完全に制御し、LLM とのより深い連携を実現できます。たとえば、次のことが可能です。
- 選択したクラスを MCP にエクスポートする
- Claude による自動分析を実行する
- 提案をインラインで受け取る
トラブルシューティング
コントリビューター向けの注意事項
-
JADX-AI-MCP 関連のファイルは、このリポジトリにあります。
-
jadx-mcp-server 関連のファイルはこちらにあります。
バグ、問題、機能の提案、パフォーマンスの問題、一般的な質問、ドキュメントの問題を報告する場合
-
該当するテンプレートを使用して、Issue を作成してください。
-
Claude Desktop Client でテスト済みです。他の AI への対応は近日中にテストする予定です。
🙏 クレジット
このプロジェクトは、@skylot が作成・保守している、素晴らしいオープンソースの Android デコンパイラーである JADX のプラグインです。コアとなるデコンパイルロジックはすべて、JADX の開発者に帰属します。このプロジェクトでは、AI 機能を備えた MCP サーバーに対応するための拡張のみを行っています。
参照およびクレジット表記のため、jadx の元の README.md をこのリポジトリに含めています。
この MCP サーバーは、JADX-GUI の拡張性と、素晴らしい Android リバースエンジニアリングコミュニティのおかげで実現しました。
また、Debian ベースの Linux 向けに Claude デスクトップ版を開発してくださった @aaddrick に心より感謝します。
最後に、Model Context Protocol を開発した @anthropics と @FastMCP チームに感謝します。
そのほか、このプロジェクトの依存関係となり、実現を支えてくれたすべてのオープンソースプロジェクトに心より感謝します。
依存関係
このプロジェクトでは、次の優れたライブラリを使用しています。
-
プラグイン - Java
- Javalin - https://javalin.io/ - Apache 2.0 License
- SLF4J - https://slf4j.org/ - MIT License
- org.w3c.dom - https://mvnrepository.com/artifact/org.w3c.dom - W3C Software and Document License
-
MCP サーバー - Python
- FastMCP - https://github.com/jlowin/fastmcp - Apache 2.0 License
- httpx - https://www.python-httpx.org - BSD-3-Clause(「BSD ライセンス」)
📄 ライセンス
JADX-AI-MCP および関連するすべてのプロジェクトは、元の JADX リポジトリから Apache 2.0 License を継承しています。
⚖️ 法的警告
免責事項
ツール jadx-ai-mcp と jadx_mcp_server は、教育、研究、および倫理的なセキュリティ評価のみを目的としています。これらのツールは、明示または黙示を問わず、いかなる保証もなく「現状のまま」提供されます。これらのツールの使用が、適用されるすべての法律、規制、および倫理ガイドラインに準拠していることを確認する責任は、ユーザーのみが負います。
jadx-ai-mcp または jadx_mcp_server を使用することで、自身が所有するアプリケーションや分析の明示的な許可を得ているアプリケーションなど、テストを許可された環境でのみこれらを使用することに同意したものとみなされます。許可されていないリバースエンジニアリング、知的財産権の侵害、または悪意のある活動にこれらのツールを悪用することは、固く禁じられています。
jadx-ai-mcp および jadx_mcp_server の開発者は、これらのツールの使用または誤用によって生じる損害、データ損失、法的責任、その他の結果について責任を負いません。ユーザーは自身の行為と、その使用によって生じたあらゆる影響について、全責任を負うものとします。
責任を持って使用してください。知的財産を尊重してください。倫理的なハッキングの実践に従ってください。
🙌 貢献またはサポート
- 役に立ちましたか?⭐️を付けてください
- アイデアがありますか?issueを作成するか、PRを送ってください
- このプロジェクトを基に何か作りましたか?DMを送るか、私にメンションしてください。READMEに追加します!
- 私の活動を気に入って、継続を応援してくださいますか?このプロジェクトをスポンサーしてください。
リバースエンジニアリングとAIコミュニティのために、❤️を込めて作りました。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。