本文作者:杉木@涂鸦智能安全实验室
本文档汇总 JADX-AI-MCP 的架构原理、部署方式及在 Cursor/Claude 中的使用要点,便于后续复现与扩展。
一、JADX-AI-MCP 是什么
JADX-AI-MCP (zinja-coder/jadx-ai-mcp)由两部分组成:
- JADX-AI-MCP 插件(Java):安装在 JADX-GUI 内,在 GUI 进程里启动 HTTP 服务,暴露当前工程的类、方法、资源、Manifest 等接口。
- JADX MCP Server(Python):独立进程,通过 FastMCP 暴露一组 MCP 工具,内部通过 HTTP 请求与 JADX 插件通信;供支持 MCP 的 LLM 客户端(如 Cursor、Claude Desktop)调用。
核心价值:
- 在 IDE/对话中直接"问"当前在 JADX 里打开的 APK:获取当前选中类、搜索类/方法、读 AndroidManifest、做 SAST、查引用(xrefs)等。
- 可结合 AI 做漏洞分析、加固识别、代码解读与重命名建议。
二、架构与原理
2.1 整体架构
┌─────────────────────────────────────────────────────────────────┐
│ MCP 客户端(Cursor / Claude Desktop / LM Studio 等) │
│ - 通过 stdio 与 MCP Server 通信 │
│ - 展示"工具"列表并调用(如 get_android_manifest, get_all_classes)│
└────────────────────────────┬────────────────────────────────────┘
│ MCP 协议 (stdio)
▼
┌─────────────────────────────────────────────────────────────────┐
│ JADX MCP Server(jadx_mcp_server.py,Python) │
│ - 使用 FastMCP 暴露工具(class/search/resource/refactor/debug...) │
│ - 每个工具内部通过 HTTP 请求转发到 JADX 插件 │
└────────────────────────────┬────────────────────────────────────┘
│ HTTP (默认 http://127.0.0.1:8650/)
▼
┌─────────────────────────────────────────────────────────────────┐
│ JADX-AI-MCP 插件(Java,运行在 JADX-GUI 进程内) │
│ - 在 JADX-GUI 内启动 HTTP 服务(默认 8650) │
│ - 提供 REST 接口:/current-class, /class-source, /manifest... │
│ - 直接调用 JADX API 获取当前工程、选中内容、反编译结果等 │
└────────────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ JADX-GUI 当前打开的项目(APK/AAR 等) │
│ - 反编译后的类、方法、资源、AndroidManifest 等 │
└─────────────────────────────────────────────────────────────────┘
要点:
- JADX 端:只负责"当前在 GUI 里打开的项目";插件不实现反编译逻辑,只把 JADX 已有能力通过 HTTP 暴露出去。
- 桥接端:Python MCP Server 不做逆向逻辑,只做"协议转换":MCP 工具调用 → HTTP 请求 → JADX 插件 → JADX API。
- 客户端:用户或 AI 在 Cursor 等环境中调用 MCP 工具,等价于对当前打开的 JADX 工程执行对应操作。
2.2 协议与传输
- MCP:Model Context Protocol,定义"工具"的命名、参数与返回格式;客户端通过 JSON-RPC 调用这些工具。
- JADX 插件 ↔ MCP Server :HTTP,默认
http://127.0.0.1:8650,端口可在 JADX 插件设置中修改,MCP Server 通过-jadx-port与之对齐。 - MCP Server 启动方式 :通常由 Cursor 等客户端通过配置的
command+args以 stdio 方式启动(如uv run jadx_mcp_server.py),与客户端通过标准输入/输出交换 MCP 消息。
2.3 数据流简述
- 用户或 AI 在 Cursor 中发起请求(如"分析当前工程的加固")。
- Cursor 将请求转为对 MCP 工具的调用(如
get_android_manifest、get_main_application_classes_names)。 - JADX MCP Server 收到调用后,向本机 JADX 插件的 HTTP 端口发起请求。
- 插件在 JADX 进程内查询当前工程并返回数据。
- MCP Server 将结果通过 MCP 协议返回给 Cursor,由 AI 或用户继续分析。
前提:JADX-GUI 已启动并打开了目标 APK/AAR,插件才会在 GUI 内启动 HTTP 服务;否则 MCP 工具会报连接失败或超时。
三、项目结构(本机部署参考)
以 JADX 安装根目录为例(如 jadx-1.5.3/),与 MCP 相关的结构如下:
jadx-1.5.3/
├── bin/
│ ├── jadx # 命令行反编译
│ └── jadx-gui # GUI(加载插件后可被 MCP 使用)
├── lib/
│ └── jadx-*-all.jar # JADX 主程序
├── jadx-ai-mcp-6.2.0.jar # 插件 JAR(需通过 jadx plugins 安装)
├── jadx-mcp-server/ # Python MCP 服务端
│ ├── jadx_mcp_server.py
│ ├── requirements.txt
│ └── src/
│ ├── banner.py
│ ├── PaginationUtils.py
│ └── server/
│ ├── config.py # JADX 端口、健康检查
│ └── tools/
│ ├── class_tools.py # 类/方法/字段、当前选中、smali
│ ├── search_tools.py # 按名称/关键字搜索
│ ├── resource_tools.py # Manifest、strings、资源
│ ├── refactor_tools.py # 重命名类/方法/字段/包/变量
│ ├── debug_tools.py # 调试栈帧、线程、变量
│ └── xrefs_tools.py # 类/方法/字段引用
├── .mcp.json # 供 Cursor 等引用的 MCP 配置示例
└── JADX_MCP_配置说明.md # 简要配置说明
- 插件 :需用
jadx plugins --install-jar jadx-ai-mcp-*.jar安装到当前 JADX,或通过 GUI 插件管理安装。 - MCP Server :独立于 JADX,仅需 Python 3.10+ 与 uv(或 pip)安装依赖;通过
uv run jadx_mcp_server.py启动。
四、部署方式
4.1 前置依赖
- JADX :1.5.x 或兼容版本,需支持
jadx plugins命令。 - Java:11+(JADX 要求)。
- Python:3.10+(MCP Server)。
- uv :推荐用于运行 MCP Server(
pip也可,需自行安装 requirements.txt)。
4.2 安装 JADX 插件
从 Releases 下载:
jadx-ai-mcp-<version>.jarjadx-mcp-server-<version>.zip(解压得到jadx-mcp-server/)
在 JADX 安装目录下执行(或将路径改为实际 jar 路径):
bash
./bin/jadx plugins --install-jar /path/to/jadx-ai-mcp-6.2.0.jar
成功后会提示类似:Plugin installed: jadx-ai-mcp:null。也可通过 JADX-GUI 的插件管理界面安装该 jar。

4.3 部署 MCP Server
-
解压
jadx-mcp-server-*.zip到任意目录(如 JADX 同级的jadx-mcp-server/)。 -
进入目录,使用 uv 运行(推荐):首次运行会自动拉取依赖(fastmcp、httpx 等)。若用 pip:
pip install -r requirements.txt后执行python jadx_mcp_server.py。bashcd jadx-mcp-server uv run jadx_mcp_server.py -
若 JADX 插件改用非默认端口,需加参数:
bashuv run jadx_mcp_server.py --jadx-port 8652
4.4 配置 Cursor(或其它 MCP 客户端)
在 Cursor 中添加 MCP Server:
- 方式一:Settings → MCP → Add new MCP server,按界面填写。
- 方式二 :直接编辑
~/.cursor/mcp.json(或项目级配置),增加一个 server 条目。
推荐配置(按实际路径修改):
json
{
"mcpServers": {
"jadx-mcp-server": {
"command": "/path/to/uv",
"args": [
"--directory",
"/path/to/jadx-mcp-server",
"run",
"jadx_mcp_server.py"
]
}
}
}
command:本机uv可执行文件路径(如/Users/xxx/.local/bin/uv)。args中的-directory:必须是 jadx-mcp-server 所在目录的绝对路径。- 若插件端口非 8650,在
args末尾追加:"--jadx-port","8652"。
保存后重启 Cursor 或重新加载 MCP,使配置生效。
4.5 可选:HTTP 模式
若需通过 HTTP 暴露 MCP(例如给非 stdio 客户端用):
bash
uv run jadx_mcp_server.py --http
# 或指定端口
uv run jadx_mcp_server.py --http --port 9999
此时与 Cursor 的 stdio 配置不同,需按客户端文档配置连接方式。
五、使用方式与注意事项
5.1 使用顺序
- 先启动 JADX-GUI 并打开工程 运行
jadx-gui,打开目标 APK/AAR。插件会在 GUI 内启动 HTTP 服务(默认 8650),可在插件设置中查看或修改端口。 - 再在 Cursor 中使用在对话中请求"用 JADX MCP 获取 Manifest""列出所有类""分析加固"等;若 Cursor 已正确加载 jadx-mcp-server,AI 会调用相应 MCP 工具并基于返回结果分析。
5.2 MCP 工具是否对当前对话可用
- 配置:在 Cursor 里配置了 jadx-mcp-server,只表示 Cursor 会启动该 Server 并尝试注入其工具。
- 可见性:某次对话中 AI 是否"能看到"并调用 JADX 的 MCP 工具,由 Cursor 的 MCP 注入逻辑决定;若当前对话未注入,AI 无法主动"连接"或调用这些工具。
- 建议:若一次对话中无法使用 JADX 工具,可尝试新开对话或检查 Cursor MCP 状态;亦可采用"从 JADX 导出工程到磁盘",由 AI 基于导出目录做静态分析"作为补充方案。
5.3 常用 MCP 工具示例(v6.x)
| 类别 | 工具示例 |
|---|---|
| 类/代码 | fetch_current_class, get_class_source, get_all_classes, get_methods_of_class, get_smali_of_class |
| 搜索 | search_method_by_name, search_classes_by_keyword, get_method_by_name |
| 资源 | get_android_manifest, get_strings, get_all_resource_file_names, get_resource_file |
| 主应用 | get_main_activity_class, get_main_application_classes_names, get_main_application_classes_code |
| 重命名 | rename_class, rename_method, rename_field, rename_package, rename_variable |
| 引用 | xrefs_to_class, xrefs_to_method, xrefs_to_field |
| 调试 | debug_get_stack_frames, debug_get_threads, debug_get_variables |
更多工具与参数见 官方 README。
六、小结
- 原理:JADX 插件在 GUI 内提供 HTTP API,Python MCP Server 用 FastMCP 暴露为 MCP 工具并转发请求到插件,从而让 Cursor 等客户端能对"当前在 JADX 中打开的项目"做查询与分析。
- 部署:安装插件到 JADX → 解压并配置 jadx-mcp-server(uv run)→ 在 Cursor 的 MCP 配置中填写 command/args(及可选 jadx-port)。
- 使用:先打开 JADX-GUI 并加载 APK,再在 Cursor 中通过自然语言或显式工具调用进行分析;若当前对话未注入 MCP 工具,可换新对话或改用导出工程目录做分析。
参考
- 项目与文档:zinja-coder/jadx-ai-mcp
- 在线文档:jadx-ai-mcp.readthedocs.io
- JADX 本体:skylot/jadx
与GhidraMCP同样的情况,cursor甚至无法连上jadx的mcp服务,cladue可以直接连上进行分析;

后续使用更新,不知道是不是插件的问题,服务重启后,就很难连上jadx的mcp服务,建议还是通过jadx把项目导出来,然后导入到cursor或者其他代码编辑器,然后再通过调用插件的方式来分析,这样简单点。
漏洞悬赏计划:涂鸦智能安全响应中心(https://src.tuya.com)欢迎白帽子来探索。