Android Pentesting MCP Server for APK analysis, component enumeration, deep link discovery, intent fuzzing, and runtime monitoring via ADB and JADX decompilation.
APAIA provides 32 tools with mostly complete schemas and descriptions, but quality is inconsistent. Strengths: all tools have descriptions (10-200+ chars), input schemas are present with type definitions, and naming follows verb_noun conventions (list_*, pull_*, send_*, etc.). Weaknesses: descriptions vary widely in actionability (some are 15 chars, others 300+); many parameters lack detailed constraints or format guidance; output schemas are not documented; error handling is minimal; no tool annotations (readOnlyHint/destructiveHint); security-sensitive tools (poc_bruteforce, poc_intent_fuzzer) lack permission gates or dry-run patterns. The POC tools are particularly concerning, they perform destructive actions (brute-force login, fuzzing) without confirmation or audit trails. Composition is reasonable (tools chain well via package/device params), but the server lacks production-grade safeguards.
App version, SDK, paths, debuggable flag.
Scan the decoded AndroidManifest.xml for security misconfigurations: debuggable, allowBackup, cleartext traffic, exported components without permissions, dangerous permissions, grantUriPermissions abuse, testOnly flag, and more. Returns a severity-ranked report (CRITICAL / HIGH / MEDIUM / INFO). Requires jadx_decompile to have run first.
Capture device logcat output for a specified duration.
Device OS, arch, SELinux, root status.
Dump the UI hierarchy as XML.
Decompile a pulled APK with jadx. mode='manifest_only' is fast (~5s, enough for component recon). mode='full' decompiles Java source (slow, needed for jadx_search/jadx_read_file).
POC tools (poc_bruteforce, poc_fuzz_deeplinks, poc_intent_fuzzer) lack confirmation/dry-run patterns and permission gates. Destructive actions should support confirmation before execution to prevent accidental misuse by agents.
Output schemas are not documented for any tool. LLMs cannot plan downstream calls or extract required fields without knowing response structure. Document return types for all tools.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. Agents cannot distinguish safe read-only tools from destructive ones without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Return the decoded AndroidManifest.xml. Requires jadx_decompile to have run.
List decompiled source and resource files. Filter by path prefix or extension.
Read a specific decompiled file. Use jadx_list_files first to find the path.
Grep across all decompiled Java sources. Find hardcoded secrets, API keys, URLs, crypto, SQL, WebView flags, exported method calls, etc. Requires mode=full decompilation.
Show which packages have been pulled/decompiled in the work directory.
List files in an app's data directory.
Content providers with authorities, export status, permissions. Uses manifest if available, falls back to dumpsys.
List deep link URI schemes and intent filter data from manifest. Requires jadx_decompile, falls back to dumpsys.
List all connected Android devices/emulators.
List exported components parsed from the decoded AndroidManifest.xml. Far more reliable than dumpsys. Requires jadx_decompile (manifest_only is enough).
List installed packages (all|system|third-party|enabled|disabled). Optional keyword filter.
Permissions declared in manifest and granted at runtime.
Open a URI on the device via am start VIEW intent.
Proof-of-concept login bruteforce tool. Automates UI interaction to attempt multiple password attempts against a login form.
Proof-of-concept deep link fuzzer. Tests multiple payloads against a deep link URI template.
Proof-of-concept intent fuzzer. Sends intents with varying extra values to a component.
Proof-of-concept content provider query tool. Queries a content provider URI.
Pull the installed APK(s) from device to local work dir. Handles split APKs. Required before jadx_decompile.
Pull a file from an app's data directory to local filesystem.
Send an intent via adb am start/broadcast/startservice. Prefix extra values with 'int:'/'bool:'/'long:' to cast types.
Take a screenshot of the device screen.
Clear the current text field.
Type text on the device.
Send a key event to the device.
Swipe gesture on screen.
Tap a screen coordinate.
Error handling is minimal. Tools return fmt_error() but do not categorize errors as retryable, user-fixable, or fatal. Agents cannot determine recovery strategy.
Parameter descriptions lack format constraints and ranges. E.g., 'max_chars' in jadx_read_file has no min/max bounds; 'delay_seconds' in POC tools has no range guidance. Add explicit constraints to prevent invalid LLM inputs.