StaticApkAuditor MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@StaticApkAuditor MCPdecompile /path/to/app.apk and run a security audit"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
StaticApkAuditor MCP
A Model Context Protocol (MCP) server that exposes Apktool-based decompilation plus a suite of custom static-analysis heuristics for Android APK security assessment, through natural-language commands in Claude Code / Claude Desktop.
What this is for
You point it at an APK. It decompiles it, then gives an AI assistant a set of tools to analyze the result — attack surface, permissions, hardcoded secrets, crypto usage, native libraries, business logic candidates — and cross-checks findings from other tools like MobSF. Every call is logged to disk as a markdown report, so you end up with an audit trail, not just a chat transcript.
This is a static-analysis aid, not a complete pentest. Several tools produce candidates for manual/dynamic verification, not confirmed vulnerabilities — this is called out explicitly in tool descriptions and in the built-in prompts. Runtime behavior (race conditions, workflow bypasses, actual data exfiltration) needs dynamic testing (Frida, Burp/mitmproxy, a real device) to confirm.
Related MCP server: GDA-MCP-Server
Quick Start
Assumes Java, Apktool, and Python 3.10+ are already installed (see Prerequisites below if not).
# 1. Set up the project folder
mkdir static-apk-auditor && cd static-apk-auditor
# 2. Create a venv and install the one dependency
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# 3. Sanity check — should hang waiting for stdio input, Ctrl+C to stop
python3 server.py
# 4. Register with Claude Code (adjust paths to your actual location)
claude mcp add static-apk-auditor \
--env APKTOOL_WORK_DIR=$(pwd)/data \
-- $(pwd)/venv/bin/python3 $(pwd)/server.py
# 5. Verify it connected
claude mcp listThen, inside a claude session, in the same folder you ran claude mcp add from (registration defaults to that folder's scope):
/mcp__static-apk-auditor__security_audit
/absolute/path/to/some.apkor just ask in plain language — the model will call decode_apk and the rest of the tools on its own:
Decompile /absolute/path/to/some.apk and give me a quick security triage.See Prompts and Tools below for everything available, or run /mcp in a Claude Code session to browse them interactively.
Project structure
static-apk-auditor/ # your folder can be named anything — this is just an example
├── server.py # the MCP server — single file, FastMCP-based
├── requirements.txt # just "mcp"
├── README.md # this file
├── prompts/
│ ├── security_audit.md # 16-point checklist, OWASP Mobile Top 10 mapping
│ └── mobsf_review.md # MobSF finding validation workflow
├── venv/ # created locally, not part of the repo
└── data/ # created automatically on first decode_apk call
# (this is APKTOOL_WORK_DIR — see Configuration below)Runtime data layout (created automatically)
Every APK you analyze gets its own self-contained folder under APKTOOL_WORK_DIR:
$APKTOOL_WORK_DIR/<apk_filename_without_extension>/
├── source/
│ └── <original>.apk # copy of the APK you pointed the tool at
├── decoded/
│ ├── AndroidManifest.xml
│ ├── smali/, smali_classes2/, ...
│ ├── res/, assets/, lib/
│ └── ... # apktool's decompiled output
├── reports/
│ ├── 20260706_175359_809_decode_apk.md
│ ├── 20260706_175412_112_analyze_manifest.md
│ ├── 20260706_175430_501_check_root_detection.md
│ └── ... # one markdown file per tool call, ever
└── final_reports/
├── 20260706_223500_123_security_audit.md
└── 20260706_224100_456_mobsf_review.md
# the finished, synthesized reports
# (Summary + Detailed Findings + Risk Table),
# saved explicitly via save_final_reportEvery tool call — regardless of which tool, regardless of success or failure — writes a timestamped markdown file to that APK's reports/ folder. This isn't optional per-call logging; it's a decorator (@logged_tool) applied to every registered tool, so nothing calling into this server goes unrecorded. Each report contains the tool name, the parameters it was called with, and its full output.
reports/ and final_reports/ serve different purposes: reports/ is the raw call log (every individual tool invocation, useful for auditing exactly what was checked and when), while final_reports/ holds only the polished, human-readable write-ups — the actual deliverable you'd hand to a developer or client. The security_audit and mobsf_review prompts both end with a mandatory call to save_final_report, which is what populates final_reports/; without that call, the synthesized report only exists in the chat response and isn't persisted anywhere on disk.
Prerequisites
1. Java JDK 8+ (required by Apktool)
# Ubuntu/Debian
sudo apt update && sudo apt install default-jdk
# macOS
brew install openjdk
java -version2. Apktool
# Ubuntu/Debian
sudo apt install apktool
# macOS
brew install apktool
apktool --version3. Python 3.10+
python3 --version4. (Optional) aapt — for full get_apk_info metadata without needing to decode first
brew install aapt # or: brew install --cask android-commandlinetoolsIf aapt isn't installed, get_apk_info falls back to parsing the already-decoded AndroidManifest.xml instead of failing silently.
Installation
git clone <your-repo-or-just-copy-the-files> static-apk-auditor
cd static-apk-auditor
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txtSanity check:
python3 server.py
# Should hang waiting for stdio input (that's normal) — Ctrl+C to stop.Connecting to Claude Code
claude mcp add apktool-pro \
--env APKTOOL_WORK_DIR=/absolute/path/to/static-apk-auditor/data \
-- /absolute/path/to/static-apk-auditor/venv/bin/python3 /absolute/path/to/static-apk-auditor/server.pyVerify:
claude mcp list
claude mcp get apktool-pro # should show "✔ Connected"Note: claude mcp add registers the server scoped to the current directory by default (local scope). If you want it available from any project, add --scope user.
Connecting to Claude Desktop (alternative)
Edit your config file (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"apktool-pro": {
"command": "/absolute/path/to/static-apk-auditor/venv/bin/python3",
"args": ["/absolute/path/to/static-apk-auditor/server.py"],
"env": {
"APKTOOL_WORK_DIR": "/absolute/path/to/static-apk-auditor/data"
}
}
}
}Restart Claude Desktop after saving.
Configuration (environment variables)
Variable | Default | Purpose |
|
| Path to the apktool executable, if not on PATH |
|
| Path to aapt, if not on PATH |
|
| Root folder for all per-APK source/decoded/reports data |
Tools
Core (decompilation & manifest)
Tool | Parameters | Description |
|
| Decompiles an APK with apktool. Output persists under |
|
| Basic metadata: package, version, SDK levels, file size. Uses aapt if available, otherwise falls back to parsing the decoded manifest. |
|
| Rebuilds an APK from a (possibly modified) decoded directory. Output is unsigned — sign separately with |
|
| Installs a system framework APK so apktool can decode system/OEM apps that reference it. |
|
| Parses |
|
| Lists all requested permissions, flags which are classified "dangerous" by the Android permission model. |
|
| Extracts string resources for a given locale. |
|
| Regex search across all decompiled |
Security heuristics
Tool | Parameters | Description |
|
| Lists |
|
| Scans for custom |
|
| Finds |
|
| For React Native / Expo apps: searches |
|
| Scans for root/emulator detection and anti-tampering signatures: su-binary paths, RootBeer/RootTools, SafetyNet, Play Integrity, |
Business logic reconnaissance
Tool | Parameters | Description |
|
| Locates methods/classes whose names suggest sensitive operations (payments, entitlements, roles, discounts, quotas) and shows nearby |
|
| Heuristic: flags sensitive-keyword hits where a local comparison ( |
MobSF report validation
Tool | Parameters | Description |
|
| Loads and normalizes a MobSF static-analysis JSON report ( |
|
| Cross-checks one MobSF finding against your own decompiled output (smali + string resources) to catch false positives. Returns evidence for the model to classify — Confirmed / False Positive / Needs Manual Review — it does not classify on its own. |
Prompts (guided workflows)
Prompts are invoked explicitly as slash commands in Claude Code (/apktool-pro:<name>), unlike tools, which the model calls on its own as needed.
Prompt | Arguments | What it does |
|
| Runs the full 16-point checklist (attack surface, permissions, secrets, crypto, WebView, storage, SSL pinning, task hijacking, root detection, exported receivers/providers, JS bundle, native libs, logging, dependency versions, PendingIntent mutability, business logic) and outputs: Summary → Detailed Findings (with Confidence rating + adb PoC steps) → Risk Table mapped to OWASP Mobile Top 10 (M1–M10). |
|
| Loads a MobSF JSON report, cross-validates every finding against the actual decompiled code, classifies each as Confirmed/False Positive/Needs Manual Review, re-assesses severity independently of MobSF's own rating, and produces a Prioritized Action List of Confirmed findings only. |
|
| Fast pass: exported components + dangerous permissions + obvious hardcoded secrets. For when you don't need the full audit. |
Usage examples
Use decode_apk to decompile /path/to/app.apk/apktool-pro:security_audit apk_path="/path/to/app.apk"Use check_root_detection on the decompiled output/apktool-pro:mobsf_review apk_path="/path/to/app.apk" mobsf_report_path="/path/to/mobsf_report.json"To see all available tools and their exact parameters at any time, run /mcp in a Claude Code session and select apktool-pro.
Getting a MobSF report
If you're running MobSF locally:
# upload the APK, get back a hash
curl -F 'file=@/path/to/app.apk' http://localhost:8000/api/v1/upload \
-H "Authorization: <MOBSF_API_KEY>"
# fetch the JSON report using that hash
curl -X POST http://localhost:8000/api/v1/report_json \
-H "Authorization: <MOBSF_API_KEY>" \
--data "hash=<hash_from_upload>" -o mobsf_report.jsonKnown limitations
Static analysis only. Nothing here executes the app or intercepts real traffic. Business-logic findings and some "confirmed" static findings still need dynamic verification before you treat them as proven.
build_apkoutput is unsigned. Sign withapksignerbefore installing on a device.Regex-based heuristics (
check_ssl_pinning,check_root_detection,map_sensitive_flows, etc.) can miss obfuscated/renamed code and can false-positive on unrelated matches — treat their output as a shortlist to review, not a verdict.install_frameworkis only needed for decoding system/OEM APKs that referenceframework-res.apk; most third-party app analysis won't need it.
Design notes
APKTOOL_WORK_DIRis always respected — every APK gets a persistent, self-contained folder (source/,decoded/,reports/,final_reports/); nothing writes to a throwaway tempdir.get_apk_infofalls back to parsing the decoded manifest ifaaptisn't installed, rather than returning nothing useful.Every tool call is auto-logged (
reports/); finished, synthesized reports are saved separately viasave_final_report(final_reports/).Built on
FastMCPfor straightforward tool/prompt registration.
Legal / responsible use
Only analyze APKs you own or have explicit written permission to test. Decompiled APKs may contain sensitive user data — handle output accordingly and clean up APKTOOL_WORK_DIR after an engagement if it contains client data. This tool does not perform any network exfiltration or active exploitation on its own; PoC commands in security_audit output (e.g. adb shell am start ...) are meant to be run manually against a device/emulator you control.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP server that enables AI assistants to analyze Android APK and iOS IPA files for security issues through natural language conversation, including permission auditing, secret detection, and SDK enumeration.12144MIT
- AlicenseNot gradedqualityBmaintenanceEnables Android APK static analysis in Cursor/Claude via GDA CLI Server, supporting reconnaissance, attack surface scanning, and code decompilation through natural language.11GPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to perform autonomous Android security analysis, including static analysis, dynamic analysis, and Frida instrumentation, powered by MobSF.1MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for analyzing Android APK, DEX, or JAR files via a headless jadx engine, enabling LLM agents to query decompiled code, symbols, call graphs, and more.1GPL 3.0
Related MCP Connectors
Generate SBOMs, scan vulnerabilities, and analyze dependencies from local projects or Git repos.
MCP server for static security analysis of Android source code
Offline methodology engine for authorized penetration testing, CTF, and security research.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/1111laaaddaaa/static-apk-auditor'
If you have feedback or need assistance with the MCP directory API, please join our Discord server