[GH-ISSUE #7768] [Bug] JADX provider: the required jadx-headless-mcp 0.7.1 JAR cannot be obtained - the upstream package was renamed in v1.x #4636

Open
opened 2026-10-31 00:51:41 +00:00 by bsakaguchi · 1 comment
Owner

Originally created by @EasonSpirit on GitHub (Oct 28, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/7768

Summary

rea doctor asks for REA_JADX_MCP_JAR to point at a jadx-headless-mcp 0.7.1 JAR containing com/atxx/jhmcp/JadxSession.class, com/atxx/jhmcp/SessionHolder.class and io/modelcontextprotocol/kotlin/sdk/server/Server.class.

That artifact is not obtainable from any public source today:

  • npm jadx-headless-mcp tops out at 0.7.0, and the 0.7.0 tarball contains only cli.js / package.json / README.md / LICENSE — no JAR.
  • GitHub releases (Samael-Z/jadx-headless-mcp) has no v0.7.1: v0.7.0 ships per-platform native binaries (jadx-mcp.exe, jadx-headless-mcp-windows-x86_64.zip), and the first JAR appears at v1.0.1.
  • v1.x JARs (jadx-headless-mcp-v2.jar, e.g. 1.4.0) contain different packages — com/zin/jadxheadless/mcp/*, com/zin/jadxheadless/jadx/JadxService$Session.class — so doctor rejects them.
  • Maven Central returns 0 results for g:com.atxx, and there is no published artifact matching the expected class layout.

So the Android-APK capability is effectively unconfigurable: the only JARs that exist have the old-installed-version's classes removed.

Environment

  • magpie-independent: rea-agents 6.8.0 (npm), Windows 11 x64
  • Node 26.12.1, full JDK 21 (Temurin 21.0.12.1) present
  • Client: OpenCode (~/.config/opencode/opencode.json), MCP registered and state: aligned
  • GHIDRA_INSTALL_DIR works fine (ghidra: healthy), so this is isolated to the JADX provider
  • Observed 2026-10-28

What happens

$env:REA_JADX_MCP_JAR = "D:\tools\jadx-headless-mcp-v2.jar"
rea doctor --json
{
  "name": "jadx",
  "classification": "config_drift",
  "detail": "REA_JADX_MCP_JAR D:\\tools\\jadx-headless-mcp-v2.jar does not contain the required metadata bridge classes: com/atxx/jhmcp/JadxSession.class, com/atxx/jhmcp/SessionHolder.class, io/modelcontextprotocol/kotlin/sdk/server/Server.class. Set REA_JADX_MCP_JAR to the absolute path of a caller-supplied jadx-headless-mcp 0.7.1 JAR."
}

Evidence

GitHub releases (all of them)

v1.4.0  → jadx-headless-mcp-v2.jar (67.8 MB)
v1.1.1  → jadx-headless-mcp-v2.jar
v1.1.0  → jadx-headless-mcp-v2.jar
v1.0.1  → jadx-headless-mcp-v2.jar
v0.7.0  → jadx-headless-mcp-{linux,macos,windows}-*.{zip,tar.gz}   (native binaries, no JAR)
v0.6.0 … v0.1.0

No v0.7.1 tag or release exists (/tags also returns only v0.7.0 for the 0.7 line).

The v1.4.0 JAR's actual layout

com/zin/jadxheadless/mcp/StdioMcpServer.class
com/zin/jadxheadless/mcp/McpToolServer.class
com/zin/jadxheadless/jadx/JadxService$Session.class

No com/atxx/jhmcp/* and no io/modelcontextprotocol/kotlin/sdk/server/Server.class.

npm

npm view jadx-headless-mcp version   → 0.7.0
npm pack jadx-headless-mcp@0.7.0     → package/{LICENSE,cli.js,package.json,README.md}

Impact

The Android-APK provider (inspect_android_package and the Android tools) cannot be enabled on any fresh machine, even with a full JDK. rea doctor classifies it config_drift with a remediation the user cannot follow, and it keeps environment_healthy: false in the audit.

Note JDK 21 is present here and Ghidra works, so the JDK half of the prerequisite is satisfied.

Suggested fix

Any of these would unblock it:

  1. Accept the renamed v1.x JAR — detect com/zin/jadxheadless/ as an alternative bridge layout and route to it (or add a version/layout probe instead of a fixed class list).
  2. Relax the class check to what is actually invoked, if the v1.x MCP server surface is compatible.
  3. Point the docs at a real artifact — state explicitly which release and asset to download (jadx-headless-mcp-v2.jar from v1.x), if 0.7.1 was an internal build and the v1.x JAR is the supported path after all. Right now the message names a version that has never been published publicly.
  4. If the native jadx-mcp.exe (v0.7.0) is supported, document that path — but the provider currently expects a JAR, not an executable.

Optionally: print the observed bridge packages the JAR does contain, alongside the expected ones, so the mismatch is actionable (right now the user must unpack the JAR to find out it is com/zin/...).

Notes

  • Filed from a real setup after following the documented REA_JADX_MCP_JAR instruction; both the 0.7.0 native package and the 1.4.0 JAR were downloaded and inspected.
  • The expected class list was taken verbatim from rea doctor output, so it reflects REA 6.8.0's check, not a guess.
Originally created by @EasonSpirit on GitHub (Oct 28, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/7768 ## Summary `rea doctor` asks for `REA_JADX_MCP_JAR` to point at a **`jadx-headless-mcp 0.7.1` JAR** containing `com/atxx/jhmcp/JadxSession.class`, `com/atxx/jhmcp/SessionHolder.class` and `io/modelcontextprotocol/kotlin/sdk/server/Server.class`. That artifact is not obtainable from any public source today: - **npm** `jadx-headless-mcp` tops out at **0.7.0**, and the 0.7.0 tarball contains only `cli.js` / `package.json` / `README.md` / `LICENSE` — **no JAR**. - **GitHub releases** (`Samael-Z/jadx-headless-mcp`) has **no v0.7.1**: v0.7.0 ships per-platform **native binaries** (`jadx-mcp.exe`, `jadx-headless-mcp-windows-x86_64.zip`), and the first JAR appears at **v1.0.1**. - **v1.x JARs** (`jadx-headless-mcp-v2.jar`, e.g. 1.4.0) contain **different packages** — `com/zin/jadxheadless/mcp/*`, `com/zin/jadxheadless/jadx/JadxService$Session.class` — so doctor rejects them. - **Maven Central** returns 0 results for `g:com.atxx`, and there is no published artifact matching the expected class layout. So the Android-APK capability is effectively unconfigurable: the only JARs that exist have the old-installed-version's classes removed. ## Environment - magpie-independent: **rea-agents 6.8.0** (npm), Windows 11 x64 - Node **26.12.1**, full JDK 21 (Temurin 21.0.12.1) present - Client: OpenCode (`~/.config/opencode/opencode.json`), MCP registered and `state: aligned` - `GHIDRA_INSTALL_DIR` works fine (`ghidra: healthy`), so this is isolated to the JADX provider - Observed 2026-10-28 ## What happens ```powershell $env:REA_JADX_MCP_JAR = "D:\tools\jadx-headless-mcp-v2.jar" rea doctor --json ``` ```json { "name": "jadx", "classification": "config_drift", "detail": "REA_JADX_MCP_JAR D:\\tools\\jadx-headless-mcp-v2.jar does not contain the required metadata bridge classes: com/atxx/jhmcp/JadxSession.class, com/atxx/jhmcp/SessionHolder.class, io/modelcontextprotocol/kotlin/sdk/server/Server.class. Set REA_JADX_MCP_JAR to the absolute path of a caller-supplied jadx-headless-mcp 0.7.1 JAR." } ``` ## Evidence ### GitHub releases (all of them) ``` v1.4.0 → jadx-headless-mcp-v2.jar (67.8 MB) v1.1.1 → jadx-headless-mcp-v2.jar v1.1.0 → jadx-headless-mcp-v2.jar v1.0.1 → jadx-headless-mcp-v2.jar v0.7.0 → jadx-headless-mcp-{linux,macos,windows}-*.{zip,tar.gz} (native binaries, no JAR) v0.6.0 … v0.1.0 ``` No `v0.7.1` tag or release exists (`/tags` also returns only `v0.7.0` for the 0.7 line). ### The v1.4.0 JAR's actual layout ```text com/zin/jadxheadless/mcp/StdioMcpServer.class com/zin/jadxheadless/mcp/McpToolServer.class com/zin/jadxheadless/jadx/JadxService$Session.class ``` No `com/atxx/jhmcp/*` and no `io/modelcontextprotocol/kotlin/sdk/server/Server.class`. ### npm ``` npm view jadx-headless-mcp version → 0.7.0 npm pack jadx-headless-mcp@0.7.0 → package/{LICENSE,cli.js,package.json,README.md} ``` ## Impact The Android-APK provider (`inspect_android_package` and the Android tools) cannot be enabled on any fresh machine, even with a full JDK. `rea doctor` classifies it `config_drift` with a remediation the user cannot follow, and it keeps `environment_healthy: false` in the audit. Note JDK 21 *is* present here and Ghidra works, so the JDK half of the prerequisite is satisfied. ## Suggested fix Any of these would unblock it: 1. **Accept the renamed v1.x JAR** — detect `com/zin/jadxheadless/` as an alternative bridge layout and route to it (or add a version/layout probe instead of a fixed class list). 2. **Relax the class check** to what is actually invoked, if the v1.x MCP server surface is compatible. 3. **Point the docs at a real artifact** — state explicitly which release and asset to download (`jadx-headless-mcp-v2.jar` from v1.x), if `0.7.1` was an internal build and the v1.x JAR is the supported path after all. Right now the message names a version that has never been published publicly. 4. If the native `jadx-mcp.exe` (v0.7.0) is supported, document that path — but the provider currently expects a JAR, not an executable. Optionally: print the *observed* bridge packages the JAR does contain, alongside the expected ones, so the mismatch is actionable (right now the user must unpack the JAR to find out it is `com/zin/...`). ## Notes - Filed from a real setup after following the documented `REA_JADX_MCP_JAR` instruction; both the 0.7.0 native package and the 1.4.0 JAR were downloaded and inspected. - The expected class list was taken verbatim from `rea doctor` output, so it reflects REA 6.8.0's check, not a guess.
Author
Owner

@hsaki11 commented on GitHub (Oct 29, 2026):

The documented source for this JAR is
https://github.com/1013503897/jadx-headless-mcp/releases/download/v0.7.1/jadx-headless-mcp-0.7.1-all.jar
(see docs/android-analysis.md). I downloaded it and its SHA-256 matches the
pinned value (6e5eacf500b64292bfb73c49797c1958f6ee44646e43e868039ae7feb573ff75).
It contains com/atxx/jhmcp/JadxSession.class, com/atxx/jhmcp/SessionHolder.class
and io/modelcontextprotocol/kotlin/sdk/server/Server.class, so the doctor
check should pass with it.

The searched repository, Samael-Z/jadx-headless-mcp, has no v0.7.1 release,
which may be why it looked unobtainable. It might help if the doctor message
for this case included that download URL or a link to the docs.

<!-- gh-comment-id:6486518029 --> @hsaki11 commented on GitHub (Oct 29, 2026): The documented source for this JAR is https://github.com/1013503897/jadx-headless-mcp/releases/download/v0.7.1/jadx-headless-mcp-0.7.1-all.jar (see docs/android-analysis.md). I downloaded it and its SHA-256 matches the pinned value (6e5eacf500b64292bfb73c49797c1958f6ee44646e43e868039ae7feb573ff75). It contains com/atxx/jhmcp/JadxSession.class, com/atxx/jhmcp/SessionHolder.class and io/modelcontextprotocol/kotlin/sdk/server/Server.class, so the doctor check should pass with it. The searched repository, Samael-Z/jadx-headless-mcp, has no v0.7.1 release, which may be why it looked unobtainable. It might help if the doctor message for this case included that download URL or a link to the docs.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#4636
No description provided.