jadx-mcp-multisession

jadx-mcp-multisession

Enables AI clients to autonomously manage multiple jadx-gui sessions, opening, switching, and closing windows, with automatic startup and plugin compatibility.

Category
访问服务器

README

jadx-mcp-multisession

JADX-MCP 改良版:多会话管理 + 插件版本兼容 + 错误降级

基于 zinja-coder/jadx-mcp-server v3.3.5(Apache-2.0)深度改良,让 AI(如 Kimi Code CLI)能像使用 IDA-MCP 一样自主管理多个 jadx-gui 窗口:无窗口时自动拉起、多窗口间切换、按需关闭,并对上游插件在 Windows 上的多个缺陷做了兼容与降级处理。

┌─────────────┐   MCP(stdio/http)   ┌───────────────────┐   HTTP    ┌──────────────┐
│ AI 客户端     │ ─────────────────► │ jadx-mcp-server    │ ────────► │ jadx-gui 实例 │
│ (Kimi Code)  │ ◄───────────────── │ (Python FastMCP)  │ ◄──────── │  (每窗口一个, │
└─────────────┘                     └───────────────────┘           │   独立端口)   │
        会话管理工具: jadx_open_session / jadx_list_sessions /        └──────────────┘
        jadx_switch_session / jadx_close_session / jadx_get_session_info

✨ 核心特性

特性 说明
🪟 多会话管理 AI 可自行启动 / 列出 / 切换 / 关闭 jadx-gui 窗口(对齐 IDA-MCP 模式)
🚀 自动拉起 jadx-gui 未打开时,jadx_open_session(apk) 自动启动独立窗口并加载 APK
🔌 插件版本兼容 自动适配 jadx-ai-mcp 插件 3.3.x(legacy 参数名)/ 6.x(新参数名),并探测缺失端点
🛡️ 错误降级 get_main_activity_class 对非标准 LAUNCHER 应用本地解析 Manifest 降级;get_strings 尽力降级并输出诊断
🔄 向后兼容 不带 --jadx-sessions-dir 启动时行为与上游 v3.3.5 完全一致
🔍 能力探测 会话启动后自动检测插件参数风格与端点覆盖,异常插件明确告警

📦 目录结构

jadx-mcp-multisession/
├── jadx_mcp_server.py              # MCP server 入口(29 个上游工具 + 5 个会话工具)
├── requirements.txt                # Python 依赖(fastmcp>=3.0.2, httpx, requests)
├── LICENSE                         # Apache-2.0(上游同款)
├── MULTI_SESSION.md                # 多会话改造细节与实测问题修复记录
├── AGENTS.md                       # 开发者/后续 AI 的项目文档(先读这个)
├── src/
│   ├── session_manager.py          # [新增] 会话注册表/端口分配/进程管理/能力探测
│   ├── session_tools.py            # [新增] 5 个 jadx_* MCP 工具的 async 包装
│   ├── PaginationUtils.py          # 分页框架(上游)
│   ├── banner.py                   # 启动横幅(上游)
│   └── server/
│       ├── config.py               # [改造] active 会话路由 + 参数风格自适应
│       └── tools/                  # class/search/resource/refactor/debug/xrefs 工具
├── session-prefs-factory/          # [新增] Java Preferences 文件化实现(多实例端口隔离)
│   ├── src/com/jadxmcp/session/FilePrefsFactory.java
│   └── build.sh                    # 构建脚本(需要 JDK,产出 lib/file-prefs-factory.jar)
├── lib/
│   └── file-prefs-factory.jar      # [新增] 构建产物(Preferences 文件化,端口隔离关键)
└── tests/                          # 集成测试脚本(HTTP stream 模式 + stdio 模式)

🚀 快速开始

前置依赖

组件 说明
jadx-gui 1.5.3+ 含 JRE 的发行包,目录含 jre/lib/jadx-gui-1.5.3-all.jar
jadx-ai-mcp 插件 6.x 放任意 plugins/ 目录(自动探测),6.x 参数与端点最全
Python 3.10+ & uv server 运行环境
JDK(可选) 仅重新构建 file-prefs-factory.jar 时需要

1. 准备环境

# 构建 Preferences 文件化 jar(仓库已带构建产物,可跳过)
bash session-prefs-factory/build.sh
# 输出: <jadx根>/lib/file-prefs-factory.jar

# 安装 Python 依赖
uv sync   # 或 pip install -r requirements.txt

2. 配置 kimi-code(mcp.json)

"jadx": {
  "command": "uv",
  "args": [
    "--directory", "D:\\jadx\\jadx-mcp-server",
    "run", "jadx_mcp_server.py",
    "--jadx-host", "127.0.0.1",
    "--jadx-port", "8650",
    "--jadx-sessions-dir", "D:\\jadx\\jadx-sessions"
  ],
  "startupTimeoutMs": 60000,
  "toolTimeoutMs": 180000
}

--jadx-sessions-dir 是会话模式开关:设置即启用多会话,去掉即完全回到旧版单实例行为。 --jadx-home 默认取 server 目录的父目录(即 jadx 根);--jadx-plugin-jar 可显式指定插件 jar。

3. 使用

AI: 打开这个 APK 分析一下            → jadx_open_session(apk_path)
AI: 现在分析另一个 APK               → jadx_open_session(另一个apk)   (新窗口)
AI: 切回刚才那个窗口                 → jadx_switch_session(session_id)
AI: 有哪些窗口开着?                  → jadx_list_sessions()
AI: 关掉 3 号窗口                     → jadx_close_session(session_id)

🔧 MCP 工具清单

会话管理(新增)

工具 参数 说明
jadx_open_session apk_path: str, port: int=0 启动新会话并打开 APK;port=0 自动分配空闲端口(8650 起)
jadx_list_sessions include_external: bool=False 列出会话+存活状态;可探测手动打开的外部实例
jadx_switch_session session_id: str 切换 active,所有分析工具随后作用于该窗口
jadx_close_session session_id: str 关闭会话(taskkill),active 自动转移
jadx_get_session_info 查看当前 active 会话(含 APK/端口/PID/存活)

分析工具(上游 29 个,路由自动跟随 active 会话)

类/方法:get_class_source get_methods_of_class get_fields_of_class get_smali_of_class get_method_by_name get_main_activity_class get_all_classes 等 搜索:search_classes_by_keyword search_method_by_name 资源:get_android_manifest get_manifest_component get_strings get_resource_file get_all_resource_file_names 引用:get_xrefs_to_class get_xrefs_to_method get_xrefs_to_field 重命名:rename_class rename_method rename_field rename_package rename_variable 调试:debug_get_stack_frames debug_get_threads debug_get_variables

🧪 测试

# 1. 启动 server(HTTP stream 模式,便于 curl/脚本测试)
uv run jadx_mcp_server.py --http --port 9000 --jadx-sessions-dir <会话目录>

# 2. 跑集成测试(需先有测试 APK;脚本内可改路径)
uv run python tests/test_multi_session.py <apk路径>     # 会话开/列/切/关
uv run python tests/test_feedback_fix.py                 # 参数/端点/降级全量验证
uv run python tests/test_stdio_client.py                 # stdio 模式冒烟(kimi-code 同款链路)

测试样本:com.hihonor.id.apk(荣耀账号 86MB/24k 类)、com.heytap.speechassist.apk(OPPO)

⚠️ 已知限制(上游插件缺陷)

限制 表现 对策
Windows 上 get_strings 对字符串在 resources.arsc 内的 APK 不可用 插件按正斜杠精确匹配 arsc 资源名,Windows 实际为反斜杠 → 404 server 尽力降级(分页遍历+读取+校验),失败返回诊断信息与替代方案(如 jadx CLI 反编译资源)
get-resource-file 对 arsc 内部资源存在截胡 bug 遍历到 resources.arsc 时可能返回错误的第一个子文件 server 侧 basename 校验拦截错误数据
get_xrefs_to_method 等业务性 404/400 "Method not found" / "Debugger not attached" 属正常业务响应,非缺陷

📜 许可与致谢

  • 上游 server 与插件均为 Apache-2.0,本项目继承该许可(保留 LICENSE 与上游版权声明)
  • 上游作者:zinja-coder(https://github.com/zinja-coder/jadx-mcp-server)
  • 改良内容:多会话管理、FilePrefsFactory 端口隔离、插件参数/端点兼容、main-activity 与 strings 降级、能力探测

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选