Core API layer for the HexForge reverse engineering workspace, providing MCP server frontend for AI-assisted APK reverse-engineering with support for jadx, apktool, adb, frida, and other reverse-engineering tools
HexForge Gateway exposes 19 well-named, action-verb tools with complete JSON schemas and descriptions. Naming is strong (decompile_apk, decode_apk, build_apk follow verb_noun pattern). Descriptions are detailed and context-aware (e.g., decompile_apk explains it's read-only unlike decode_apk). However, several critical gaps reduce the score: (1) Output schemas are NOT documented, tools return results but the response structure is invisible to LLMs, forcing them to guess what fields exist. (2) Parameter descriptions lack constraint details (e.g., maxResults says 'default/max 200' but doesn't explain what happens if you exceed it). (3) Error handling is absent, no guidance on retryability, user-fixable vs fatal errors, or recovery paths. (4) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE). (5) Workspace parameter is optional with a default, but the interaction between workspace creation and tool execution is underdocumented. These omissions prevent LLMs from reasoning about side effects, chaining calls, and error recovery.
List connected Android devices/emulators. Requires adb on PATH.
Install an APK on a connected device via adb.
Dump and tail the current logcat buffer from a connected device (a snapshot, not a live stream).
Run a shell command on a connected Android device via adb. As powerful as `adb shell` itself - only use against a device you control.
Rebuild an APK from an apktool-decoded (and possibly edited) project directory. The result is unsigned - sign it separately before installing. Requires apktool on PATH.
Send a message to the workspace's AI chat interface.
Decode an APK's resources to editable XML and disassemble code to smali with apktool (unlike jadx, the result can be rebuilt). Requires apktool on PATH.
Output schemas are completely undocumented. Tools return results but LLMs cannot see what fields exist, their types, or how to chain calls. E.g., decompile_apk returns a path but the response structure is invisible.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels marked in metadata (READ_ONLY, WRITE). LLMs cannot reason about side effects or retry safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Decompile an APK to readable Java-like source with jadx, for reading and searching - unlike decode_apk, the output is read-only and cannot be rebuilt into an APK. Output lands under the workspace's jadx output directory. Requires jadx on PATH.
List running processes (or installed apps) on a device via Frida. Requires frida-tools on PATH and a matching frida-server on the device.
Spawn or attach to a process, inject a Frida script, and capture whatever it emits within a bounded time window (this isn't a real interactive Frida session - it runs the script, waits, then stops it). Requires frida-tools + a matching frida-server on the device.
Get an existing workspace by name, or create it if it doesn't exist.
Fingerprint the compiler, packer, obfuscator, and anti-debug/anti-VM techniques used in an APK, via APKiD's YARA rules. Requires apkid on PATH (pip install apkid).
List a directory's immediate contents (or every file beneath it, with recursive) - e.g. to see what decompile_apk or decode_apk produced before reading individual files.
List knowledge entries for a workspace.
List all workspaces.
Read a single file's contents by absolute path - e.g. a decompiled source file from decompile_apk's output, or a manifest from decode_apk's. Fails if the path is a directory (use list_files first) or doesn't exist.
Recursively scan a directory (e.g. jadx/apktool output) for likely hardcoded secrets - AWS/Google API keys, private key headers, Slack/GitHub tokens, JWTs. A curated high-precision starting set, not exhaustive - not a replacement for a maintained secret-scanner on anything that actually matters.
Search a directory tree for a regex pattern - e.g. permission strings in decompiled output.
Summarize arbitrary text (e.g. tool output) using the Gateway's configured AI provider.
Error handling is absent. No guidance on retryability, user-fixable vs fatal errors, or recovery paths. E.g., adb_shell can fail if device is offline, but the tool provides no recovery hint.
Parameter descriptions lack constraint details. E.g., maxResults says 'default/max 200' but doesn't explain behavior if exceeded. timeoutSeconds is capped at 60 but the description doesn't state the cap or why.
Workspace parameter interaction is underdocumented. It's optional with default 'default', but the tool description doesn't explain when/how workspaces are created, whether they persist, or how they affect tool isolation.