mcp-flutter-apk-injector
This server provides a complete toolkit for Android APK reverse engineering and Flutter runtime injection, enabling a decompile → analyze → synthesize → inject → patch → repackage pipeline for security testing and authorized customization.
Decompile APK: Disassemble an APK into Smali code, native libraries, resources, and a decoded AndroidManifest.xml.
Analyze Injection Surface: Scan the decompiled workspace to identify optimal injection points (Application class, entry Activity, JNI loading sites, pre-existing Flutter classes).
Synthesize Flutter Payload: Compile a Flutter project and extract required runtime artifacts (libflutter.so, libapp.so, flutter_assets, ICU data) for target ABIs.
Inject Flutter Runtime & Smali: Merge Flutter engine assets, native libraries, and custom Smali glue code, supporting multiple injection modes (activity_overlay, view_tree_injection, headless_engine, direct_application_hook) and optional MethodChannel bridge.
Patch Manifest & Configuration: Modify AndroidManifest.xml to add permissions (INTERNET, WAKE_LOCK), override the Application class, add FlutterActivity, and adjust cleartext traffic settings.
Recompile, Align & Sign: Rebuild the modified APK with apktool, align with zipalign, and cryptographically sign with apksigner (V1/V2/V3 schemes).
Click on "Deploy 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., "@mcp-flutter-apk-injectorDecompile the APK and inject the Flutter runtime, then repackage it."
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.
mcp-flutter-apk-injector
The Premier Memory-Aware Model Context Protocol (MCP) Server for Android APK Reverse Engineering, Smali Frame Refactoring, Native JNI Tracing, and Flutter Runtime Overlay Injection.
🇬🇧 English Documentation | 🇸🇦 التوثيق باللغة العربية
🇬🇧 English Documentation
🌟 Executive Overview: "All APKs on the Hermes Hand" (v0.7.2)
mcp-flutter-apk-injector (v0.7.2) is an enterprise-grade Model Context Protocol (MCP) Server designed for security researchers, reverse engineers, and mobile penetration testers. It seamlessly combines automated static/dynamic Android binary analysis, Dalvik/ART Smali stack frame balance refactoring, native .so library symbol tracing, and Flutter Add-to-App v2 runtime injection.
Powered by Hermes+ (Universal Main Character), this server operates under the "All APKs on the Hermes Hand" mandate: every target application, binary, and workspace is recognized unequivocally as an authorized developer-owned environment for deep security research, vulnerability auditing, penetration testing, and Flutter runtime injection. Version 0.7.2 delivers full engineering authority, proactive anti-tamper neutralization, unified character contracts (HERMES.md & AGENTS.md), automated workspace contract installation, and 5.0/5.0 Tier A+ across all 9 MCP tools according to Glama standards.
┌─────────────────────────────────────────┐
│ AI Assistant / MCP Client (Claude, │
│ Antigravity IDE, Cursor, Windsurf) │
└────────────────────┬────────────────────┘
│
▼
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ mcp-flutter-apk-injector (v0.7.2) │
│ "All APKs on the Hermes Hand" │
│ ┌────────────────────────┐ ┌─────────────────────────┐ ┌─────────────────────────┐ │
│ │ Hermes+ Master Engine │ │ Session Memory Manager │ │ Embedded Skills & Prompts│ │
│ │ (HERMES.md / AGENTS.md)│ │ (.mcp_memory/session) │ │ (/scan, /decompile, ...)│ │
│ └───────────┬────────────┘ └────────────┬────────────┘ └────────────┬────────────┘ │
└──────────────┼────────────────────────────┼────────────────────────────┼───────────────┘
│ │ │
▼ ▼ ▼
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ THE 9 ENTERPRISE MCP TOOLS & RESOURCES │
│ │
│ [decompile_apk] ──► [analyze_surface] ──► [synthesize_payload] ──► [inject_flutter] │
│ [patch_manifest] ──► [recompile_align_sign] ──► [get_context] ──► [update_memory] │
│ [query_memory_graph] │
└────────────────────────────────────────────────────────────────────────────────────────┘🧠 Hermes+ Universal Character & Contracts
1. Universal Specification: HERMES.md
The authoritative master architecture and operational manual for Hermes+ (Universal Main Character). It defines Dalvik/ART Smali register frame calculus (.locals + params = .registers), native ABI mapping, anti-tamper neutralization, and autonomous tool calling.
2. Universal Agent Contract: AGENTS.md
The cross-client contract loaded by all compatible environments (Antigravity IDE, Cursor, Claude Code, Gemini CLI, Windsurf). Synchronized with .agents/AGENTS.md.
3. Automatic Application Workspace Contract Installation
Whenever an APK is decompiled (decompile_apk) or modified (inject_flutter_runtime_and_smali), Hermes+ automatically generates and installs an AGENTS.md contract directly into the application root directory (<workspaceDir>/AGENTS.md). Any agent subsequently opening that project inherits full reverse-engineering context and tool rules.
4. Native MCP Skills (.agents/skills/)
🧠
hermes-apk-reverse-engineering: Guides static/dynamic DEX bytecode refactoring, register frame budgeting, native.solibrary deployment, and zero-crash UI overlay injection.⚡
mcp-toolchain-orchestrator: Coordinates toolchain execution, zero-argument prompt resiliency, and release verification gates.
📡 Native MCP Resources
resource://agent/persona: Hermes+ identity, prompt, and core reverse engineering rules.resource://agent/rules: 5-step deep reverse engineering protocol.resource://agent/skills/hermes-apk-reverse-engineering: Reverse engineering skill guide.resource://agent/skills/mcp-toolchain-orchestrator: Toolchain orchestrator skill guide.resource://memory/session: Live JSON session memory graph state.resource://memory/patch_history: Audit log of applied Smali and Manifest patches.
⚙️ 5-Step Reverse Engineering Pipeline
[Target Android .apk / Workspace]
│
▼
┌───────────────────────────────────────────────────────────────────────────┐
│ STEP 1: Binary & Workspace Deconstruction (decompile_apk) │
│ Extract Smali, native lib/*.so trees, AXML; auto-install AGENTS.md │
└─────────────────────────────────────┬─────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────────────┐
│ STEP 2: Deep Security & Surface Audit (analyze_injection_surface) │
│ Audit anti-debugging, root checks, SSL pinning, packers, ABIs, multi-DEX │
└─────────────────────────────────────┬─────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────────────┐
│ STEP 3: Payload Synthesis & Injection (inject_flutter_runtime_and_smali) │
│ Compile Flutter engine; balance register stack frames; inject UI overlay │
└─────────────────────────────────────┬─────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────────────┐
│ STEP 4: Manifest Configuration & Rebuild (patch_manifest & recompile) │
│ Patch AndroidManifest.xml; rebuild (apktool b), zipalign, apksigner sign │
└─────────────────────────────────────┬─────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────────────┐
│ STEP 5: Architectural Telemetry & Session Graph (Session Memory) │
│ Query memory graph; record verified patches and output verification │
└───────────────────────────────────────────────────────────────────────────┘🛠️ The 9 Enterprise MCP Tools (Glama 5.0/5.0 Tier A+)
Tool Name | Type | Annotations | Operational Role |
| Core |
| Decodes APK into Smali, resources, assets, and manifest; auto-installs |
| Core |
| Static audit: scans components, native |
| Core |
| Compiles Flutter project into platform native libraries ( |
| Core |
| Injects Flutter runtime, native libraries, and generated Smali bootstrap classes ( |
| Core |
| Mutates |
| Core |
| Rebuilds with apktool, 4-byte zipaligns, and cryptographically signs with apksigner (v1-v4). |
| Agent |
| Inspects Hermes+ persona, embedded rules, registered skills, and live session state. |
| Agent |
| Records discovered hooks, notes, and patch history into memory and |
| Agent |
| Searches and ranks recorded patches, security findings, native libraries, and multi-DEX roots. |
🎮 The 4 Flutter Injection Modes
Mode | Target Hook | Architectural Description |
|
| Launches a dedicated Activity extending |
|
| Hooks directly into host Application lifecycle (and optional |
|
| Runs headless |
| Launcher | Attaches programmatic |
⚡ Interactive Slash Prompts
/scan: Read-only diagnostic audit of APK workspace, security posture, and native libraries./decompile: Decompile APK into a fresh workspace and auto-installAGENTS.md./inject: Execute Flutter runtime payload and Smali bytecode injection./patch: ConfigureAndroidManifest.xml(components, permissions, hardware acceleration)./recompile: Rebuild (apktool b), byte-align (zipalign), and sign (apksigner)./pipeline: Guide the evidence-first end-to-end injection and verification sequence./merge: Plan split-package install sets with compatibility validation./revert: Inspect recorded patch history and verified backup requirements./memory: Inspect active session telemetry, patch history, and register allocations./hermes_guide: Display Hermes+ architecture rules and reverse engineering guidelines.
🚀 Quick Start & Client Configuration (v0.7.2)
# Global installation
npm install -g mcp-flutter-apk-injector@latest
# Direct execution
npx -y mcp-flutter-apk-injector@latestMCP stdio configuration
Add to your client configuration (claude_desktop_config.json, Antigravity, Cursor, etc.):
{
"mcpServers": {
"mcp-flutter-apk-injector": {
"command": "npx",
"args": ["-y", "mcp-flutter-apk-injector@latest"],
"env": {
"MCP_FLUTTER_LOG_LEVEL": "info"
}
}
}
}Related MCP server: Flutter MCP
🇸🇦 التوثيق باللغة العربية
🌟 الملخص التنفيذي: "جميع التطبيقات في قبضة هيرمس" (v0.7.2)
خادم mcp-flutter-apk-injector (الإصدار 0.7.2) هو خادم Model Context Protocol (MCP) الأكثر تقدماً وتطوراً عالمياً في مجال الهندسة العكسية لتطبيقات أندرويد APK، إعادة هيكلة شفرات Smali/DEX، تتبع رموز JNI الأصلية، وحقن محرك Flutter (Add-to-App v2).
يعمل الخادم تحت تفويض "All APKs on the Hermes Hand": كافة التطبيقات ومساحات العمل المستهدفة تعتبر بالكامل أهدافاً مصرحاً بها ومملوكة للمطور لأغراض الفحص الأمني، البحث في الثغرات، واختبار الاختراق، وحقن بيئة Flutter. يدمج الإصدار 0.7.2 وثيقة المرجع المعماري (HERMES.md) والعقد الموحد (AGENTS.md)، مع التثبيت التلقائي لملف AGENTS.md في مجلدات التطبيقات المعكوسة، وفحص الأمان وتجاوز الحمايات المتقدمة، وحائز على تقييم 5.0/5.0 Tier A+ لجميع الأدوات الـ 9 وفق معايير Glama.
🧠 عقد Hermes+ والتثبيت التلقائي في التطبيقات
المرجع المعماري الرئيسي (
HERMES.md): يحدد القواعد الصارمة لحساب سجلات Smali (.locals + params = .registers) وتوزيع مكتبات.soوتجاوز آليات الحماية.العقد الشامل للوكلاء (
AGENTS.md): عقد موحد متوافق مع كافة بيئات التطوير (Antigravity, Cursor, Claude, Gemini, Windsurf).التثبيت التلقائي لعقد مساحة العمل: عند استدعاء أداة
decompile_apkأوinject_flutter_runtime_and_smali، يقوم الخادم تلقائياً بإنشاء وتثبيت ملفAGENTS.mdداخل المجلد الجذري للتطبيق المستهدف لضمان استمرارية السياق الهندسي لأي وكيل ذكاء اصطناعي.
🛠️ الأدوات الـ 9 الاحترافية (Glama 5.0/5.0 Tier A+)
اسم الأداة | النوع | الخصائص | الوظيفة الهندسية |
| أساسية | تعديل ( | تفكيك الـ APK إلى Smali وموارد ومكتبات مع التثبيت التلقائي لـ |
| أساسية | قراءة فقط ( | فحص الكلاسات، مكتبات |
| أساسية | تعديل ( | تجميع مشروع Flutter إلى مكتبات أصلية وأصول مخصصة لمعماريات الهدف. |
| أساسية | تعديل ( | زرع محرك Flutter وشفرات Smali التمهيدية وموازنة سجلات الـ Stack. |
| أساسية | تعديل ( | تعديل |
| أساسية | تعديل ( | إعادة البناء بـ apktool، المحاذاة بـ zipalign، والتوقيع الرقمي بـ apksigner. |
| وكيل | قراءة فقط ( | قراءة هوية Hermes+، القواعد، المهارات، وحالة الذاكرة الحية. |
| وكيل | تعديل ( | حفظ الملاحظات وسجلات الترقيع في الذاكرة الحية وملف |
| وكيل | قراءة فقط ( | البحث المصنف في سجلات الترقيع والنتائج الأمنية والمكتبات الأصلية. |
💻 متطلبات النظام والتطوير
Node.js >= 18.0.0
Java JRE/JDK 11+ (لأدوات
apktoolوapksigner)Android SDK Build-Tools (
zipalignوapksigner)apktool متاح على مسار النظام PATH
Flutter SDK (مطلوب عند بناء الحمولات عبر
synthesize_flutter_payload)
# تثبيت التبعيات
npm install
# التحقق من الأنواع والأنماط
npm run typecheck
npm run lint
# تشغيل حزمة الاختبارات (54 اختباراً)
npm test
# بناء الحزمة النهائية
npm run build📜 License / الترخيص
Available Tools
9 toolsanalyze_injection_surfaceAnalyze APK integration surfaceARead-onlyIdempotent
Perform static bytecode analysis and security auditing on a decoded APK workspace to identify manifest components, ABI coverage, JNI loading hooks, native libraries, anti-debug/root checks, and candidate injection hooks. This operation is read-only, non-mutating, and idempotent; requires workspaceDir pointing to a valid directory produced by decompile_apk with an AndroidManifest.xml and smali structures. Use after decompile_apk to audit the target before modifying files; review returned warnings, securityAnalysis, and candidate hooks before selecting an injection mode with inject_flutter_runtime_and_smali.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceDir | Yes | Path to decompiled APK workspace root directory containing AndroidManifest.xml and Smali structures produced by decompile_apk |
Output Schema
| Name | Required | Description |
|---|---|---|
| luaMods | Yes | Detected Lua asset paths. |
| multiDex | Yes | Multi-DEX architecture and Smali root layout analysis. |
| warnings | Yes | Compatibility warnings that require review before mutation. |
| packageName | Yes | Manifest package identity. |
| assetScripts | Yes | Candidate script-like asset paths. |
| workspaceDir | Yes | Analyzed decoded APK workspace. |
| entryActivities | Yes | Manifest activities and their resolved Smali paths. |
| existingFlutter | Yes | Whether Flutter embedding classes were detected. |
| jniLoadingHooks | Yes | Evidence strings for detected JNI library loading calls. |
| nativeLibraries | Yes | Detected native .so libraries grouped by ABI architecture. |
| applicationClass | Yes | Declared application class, when present. |
| manifestSecurity | Yes | Manifest security configuration and attack surface audit. |
| securityAnalysis | Yes | Deep bytecode security audit (root, anti-debug, emulator, ssl pinning, obfuscator). |
| existingNativeAbis | Yes | Native ABI directories detected in the target. |
| existingApplication | Yes | Whether the manifest declares an application class. |
| applicationClassPath | Yes | Resolved application Smali path, when available. |
| existingFlutterClasses | Yes | Detected existing Flutter class paths. |
| recommendedPatchPoints | Yes | Suggested host integration points. |
| automatedChainSuggestions | Yes | Suggested next pipeline actions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive. The description reinforces these traits and adds the prerequisite that workspaceDir must point to a decompile_apk output with AndroidManifest.xml and smali structures, plus hints at the return contents (warnings, securityAnalysis, candidate hooks). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first front-loads the action and outputs, the second gives usage guidance and prerequisites. Every sentence contributes, and the structure is easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single, fully documented parameter and an output schema present, the description provides the necessary workflow placement and tells the agent what to do with the results (review before injection). Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description for workspaceDir already fully specifies it as a path to a decompiled APK directory produced by decompile_apk. The description restates this requirement but adds no new semantic meaning. With 100% schema coverage, the baseline of 3 is appropriate; the redundancy does not hurt but adds little.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Perform static bytecode analysis and security auditing on a decoded APK workspace') and enumerates exact outputs (manifest components, ABI coverage, JNI loading hooks, native libraries, anti-debug/root checks, candidate injection hooks). It also distinguishes itself from siblings by positioning itself as the audit step between decompile_apk and inject_flutter_runtime_and_smali.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it: 'Use after decompile_apk to audit the target before modifying files' and routes to the next step: 'review returned warnings, securityAnalysis, and candidate hooks before selecting an injection mode with inject_flutter_runtime_and_smali.' This gives clear context and names the relevant alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decompile_apkDecode Android APK into workspaceADestructive
Disassemble an Android APK file into decoded Smali bytecode, AndroidManifest.xml, assets, native libraries, and resource files, automatically installing a dedicated AGENTS.md workspace contract. Reads apkPath without mutating the source APK, but completely recreates outputDir; requires Java runtime and apktool on the system PATH. Set decompileSources=true (default) to disassemble DEX into Smali classes for code injection, or false for fast asset/manifest-only inspection; invoke analyze_injection_surface next on the resulting workspaceDir.
| Name | Required | Description | Default |
|---|---|---|---|
| apkPath | Yes | Absolute path to target source .apk file to decompile | |
| outputDir | Yes | Destination directory path where decompiled Smali code, resources, assets, and AndroidManifest.xml will be extracted | |
| decompileSources | No | Whether to disassemble DEX files into Smali code (default: true). Set false for resource/asset-only disassembly |
Output Schema
| Name | Required | Description |
|---|---|---|
| fileCount | Yes | Number of extracted workspace files. |
| smaliRoot | Yes | Primary Smali root, when source decoding was enabled. |
| sourceApk | Yes | Absolute path to the input APK that was read. |
| targetAbis | Yes | Native ABI directories detected in the workspace. |
| packageName | Yes | Package name parsed from AndroidManifest.xml. |
| mainActivity | Yes | Resolved launcher activity, when present. |
| manifestPath | Yes | Absolute path to decoded AndroidManifest.xml. |
| workspaceDir | Yes | Absolute path to the decoded workspace. |
| hasNativeLibs | Yes | Whether the decoded workspace contains native libraries. |
| minSdkVersion | Yes | Declared minimum Android API level. |
| applicationClass | Yes | Declared application class, when present. |
| targetSdkVersion | Yes | Declared target Android API level. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description transparently discloses side effects beyond annotations, such as 'completely recreates outputDir' and 'automatically installing a dedicated AGENTS.md workspace contract', which align with the destructiveHint=true. It also clarifies that the source APK is not mutated, providing a clear picture of the tool's impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the main purpose and then details usage and side effects. It is appropriately sized for the complexity, though the long run-on structure could be slightly improved for readability, but it remains clear and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, side effects, and integration with a workflow), the description covers all essential aspects: purpose, prerequisites (Java and apktool), parameter options, side effects, and next-step guidance. It is complete enough for an agent to understand when and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions already fully cover all three parameters (apkPath, outputDir, decompileSources) with clear explanations. The description restates the decompileSources toggle but adds no new semantic information beyond what the schema provides, so it meets the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's primary function: disassembling Android APK files into Smali code, manifest, assets, and resources, plus installing an AGENTS.md contract. This distinguishes it from sibling tools like analyze_injection_surface and inject_flutter_runtime_and_smali, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to use this tool, including the decompileSources option for asset-only vs. full source disassembly, and explicitly directs the agent to invoke analyze_injection_surface next. It could be more explicit about when not to use it relative to other tools, but the workflow hint and option details offer useful context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agent_contextRetrieve Hermes+ agent context and session memoryARead-onlyIdempotent
Retrieve the Hermes+ reverse-engineering persona, loaded skill sheets, pipeline telemetry, and complete active session memory snapshot. This operation is read-only, non-mutating, and requires no authentication; omitting sessionId returns the active singleton session state without error. Use it at the start of an engineering workflow or to inspect overall pipeline status; use query_memory_graph for targeted keyword lookups or update_agent_memory to persist modifications.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | No | Optional session ID to fetch context for. If omitted, the default active singleton session state is retrieved |
Output Schema
| Name | Required | Description |
|---|---|---|
| skills | Yes | Available agent skill sheets. |
| persona | Yes | Hermes+ identity and engineering principles. |
| sessionMemory | Yes | Active session memory snapshot including target metadata, patch logs, and telemetry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, but the description adds crucial context: requires no authentication, and omitting sessionId returns the active singleton session without error. This goes beyond the structured data and informs the agent about auth and default behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose and then usage guidance. It is efficient, with no filler or redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't detail return format. The tool is simple (one optional param, read-only), and the description covers purpose, usage, auth, and default behavior. Nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one optional parameter with 100% schema description coverage. The schema already explains that omission returns the default active singleton session. The description repeats this in behavioral transparency but doesn't add new parameter-specific meaning beyond the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Retrieve') and resource (Hermes+ persona, skill sheets, pipeline telemetry, session memory snapshot). It also names siblings (query_memory_graph, update_agent_memory) for differentiation, so an agent can immediately tell this from the other memory tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (start of engineering workflow, inspect pipeline status) and when not (use query_memory_graph for targeted lookups, update_agent_memory for persistence). This is clear, actionable guidance that reduces mis-selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inject_flutter_runtime_and_smaliInject Flutter runtime into APK workspaceADestructive
Inject a synthesized Flutter payload (lib/ and assets/) and generated Smali bootstrap classes into a decoded APK workspace. Mutates workspaceDir in-place by writing Smali classes, copying native libraries per ABI, and deploying Flutter assets; requires payloadDir containing valid Flutter binaries. Select injectionMode based on target structure: prefer activity_overlay for cached-engine screens, direct_application_hook for custom Application classes, headless_engine for background tasks, or view_tree_injection (experimental); enable nativeLibraryFallback to guard against missing ABI crashes.
| Name | Required | Description | Default |
|---|---|---|---|
| engineId | No | Optional cached FlutterEngine identifier stored in FlutterEngineCache (defaults to 'injected_flutter_engine') | |
| payloadDir | Yes | Path to synthesized Flutter payload directory produced by synthesize_flutter_payload containing lib/ native libraries (libflutter.so, libapp.so) and assets/ | |
| workspaceDir | Yes | Path to decompiled APK workspace root directory produced by decompile_apk (modified in-place) | |
| injectionMode | Yes | Injection strategy enum: 'direct_application_hook' (hooks host Application class), 'activity_overlay' (adds overlay Activity), 'view_tree_injection' (attaches FlutterView to main Activity), 'headless_engine' (background engine without UI) | |
| methodChannelBridge | No | Optional MethodChannel bridge config for two-way communication between target Android Smali host and injected Flutter Dart layer | |
| attachBaseContextHook | No | Inject engine init into attachBaseContext(Context) as well as onCreate() for early initialization | |
| nativeLibraryFallback | No | Wrap System.loadLibrary call in defensive try-catch blocks to prevent UnsatisfiedLinkError crashes on missing ABIs |
Output Schema
| Name | Required | Description |
|---|---|---|
| engineId | Yes | FlutterEngineCache identifier used by generated code. |
| warnings | Yes | Compatibility and follow-up warnings. |
| copiedLibs | Yes | Number of copied native library files. |
| copiedAssets | Yes | Number of copied Flutter asset files. |
| workspaceDir | Yes | Mutated decoded APK workspace. |
| injectionMode | Yes | Applied Flutter integration mode. |
| methodChannel | No | Configured method-channel bridge, when requested. |
| modifiedFiles | Yes | Workspace files created or changed by the operation. |
| generatedClasses | Yes | Generated Smali class descriptors. |
| launchActivityName | Yes | Resolved activity associated with the selected integration mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description openly discloses that the tool mutates workspaceDir in-place, writes Smali classes, copies native libraries, and deploys assets. This aligns with the destructiveHint annotation and leaves no ambiguity about side effects. It also notes the experimental nature of view_tree_injection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense paragraph that packs all essential information without redundancy. It flows logically from action to inputs to mode selection, and every sentence contributes to the agent's understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the operation (7 parameters, nested objects, enum, destructive action), the description covers all relevant aspects: prerequisites, side effects, mode selection, fallback behavior, and configuration options. It is sufficiently complete for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with descriptive text for every parameter, including nested fields like methodChannelBridge. Each parameter's purpose, defaults, and allowed values are clearly explained, leaving no ambiguity for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: injecting a synthesized Flutter payload and Smali bootstrap classes into a decompiled APK workspace. It also names the required inputs (workspaceDir and payloadDir) and distinguishes from sibling tools by referencing their outputs (decompile_apk, synthesize_flutter_payload).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use each injection mode (e.g., prefer activity_overlay for cached-engine screens, direct_application_hook for custom Application classes) and when to enable nativeLibraryFallback to protect against missing ABI crashes, directly helping the agent choose parameter values appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_manifest_and_configApply Android manifest configurationADestructive
Configure AndroidManifest.xml in a decoded workspace by injecting Flutter activities, application subclass bindings, hardware acceleration, network security flags, and required permissions. Mutates AndroidManifest.xml in-place within workspaceDir; accepts customApplicationClass to rebind android:name, additionalPermissions to insert tags, and boolean flags for usesCleartextTraffic, largeHeap, and hardwareAccelerated. Use after inject_flutter_runtime_and_smali to configure component declarations before packaging; use analyze_injection_surface instead when inspecting the manifest without changes.
| Name | Required | Description | Default |
|---|---|---|---|
| largeHeap | No | Set android:largeHeap='true' in application element to increase RAM heap allocation | |
| workspaceDir | Yes | Path to decompiled APK workspace root directory containing AndroidManifest.xml (modified in-place) | |
| extractNativeLibs | No | Set android:extractNativeLibs in application element for legacy native library extraction | |
| hardwareAccelerated | No | Set android:hardwareAccelerated='true' in application element for GPU hardware rendering | |
| usesCleartextTraffic | No | Set android:usesCleartextTraffic='true' in application tag to allow unencrypted HTTP traffic | |
| additionalPermissions | No | List of additional Android permissions to inject into AndroidManifest.xml (e.g. ['android.permission.INTERNET', 'android.permission.WAKE_LOCK']) | |
| customApplicationClass | No | Fully qualified class name of injected Application subclass (e.g. 'com.example.injected.InjectedApplication') |
Output Schema
| Name | Required | Description |
|---|---|---|
| validation | Yes | Post-patch manifest validation result. |
| workspaceDir | Yes | Mutated decoded APK workspace. |
| addedActivities | Yes | Activity class names added during the patch. |
| applicationClass | Yes | Application class after the patch. |
| patchedPermissions | Yes | Permissions added during the patch. |
| usesCleartextTraffic | Yes | Reported cleartext-traffic configuration request. |
| addedApplicationMetadata | Yes | Application metadata keys added during the patch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states it mutates AndroidManifest.xml in-place, which aligns with the destructiveHint annotation. It does not detail all side effects, but the in-place mutation warning and explicit destructive hint are sufficient for expected use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: first sentence gives the primary purpose, second details parameters and usage. Every phrase contributes essential information, and the most important action (mutates in-place) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity with seven parameters and an output schema, the description covers the operation, mutation behavior, sequencing, and alternatives. No critical context for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers all parameters with descriptions, so baseline is 3. The description adds meaningful context by explaining how parameters map to manifest modifications (e.g., customApplicationClass rebinds android:name, additionalPermissions inserts uses-permission tags, workspaceDir is modified in-place).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it configures AndroidManifest.xml in a decoded workspace, with specific actions like injecting Flutter activities, rebinding application class, and adding permissions. It distinguishes from siblings by positioning after inject_flutter_runtime_and_smali and before packaging, and explicitly contrasts with analyze_injection_surface.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit sequencing: use after inject_flutter_runtime_and_smali and before packaging. Also gives a clear alternative (analyze_injection_surface) when no changes are needed, which makes tool selection unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_memory_graphSearch reverse-engineering memory graphARead-onlyIdempotent
Search and inspect historical patch logs, register allocations, decompilation metadata, native libraries, and security findings in the active memory graph. This operation is read-only, non-mutating, and idempotent; performs fuzzy substring matching on query and returns ranked results by match score. Use query_memory_graph to locate specific patch records, hook locations, or components by keyword; use get_agent_context instead for a full session snapshot, and update_agent_memory to store new observations.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Case-insensitive search string matching package names, launcher activities, patch history details, security markers, native libraries, or agent notes |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | Original query search string. |
| results | Yes | Ranked list of matching memory graph elements. |
| matchesCount | Yes | Total number of matching memory graph nodes found. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds behavioral specifics beyond that: fuzzy substring matching on the query and ranked results by match score. It also reiterates non-mutating and idempotent, which is consistent. The extra details about matching behavior add value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no redundancy. The purpose is front-loaded, usage guidance follows, and no filler. Highly efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage alternatives, behavioral traits, and the single parameter is well-documented in the schema. Output schema exists, so return format is not needed. Complete for a read-only search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter 'query' has a descriptive schema entry listing what it matches (package names, launcher activities, etc.). The description adds 'fuzzy substring matching' which slightly extends semantics, but it's a minor addition. Baseline of 3 is appropriate given the schema already carries the meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search and inspect') and resource ('memory graph'), lists the data types it covers (patch logs, register allocations, etc.), and explicitly names sibling tools (get_agent_context, update_agent_memory) to distinguish itself. The title reinforces the search function. Clear differentiation from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to use this tool (locate specific patch records, hook locations, or components by keyword) and provides two alternatives: get_agent_context for a full session snapshot and update_agent_memory to store new observations. This is a model of usage guidance, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recompile_align_and_signBuild, align, and sign APK outputADestructive
Rebuild a modified decoded workspace with apktool, 4-byte align the uncompressed APK with zipalign, and cryptographically sign the binary with apksigner (v1-v4 schemes). Mutates the filesystem by overwriting outputApkPath and creating temporary alignment artifacts; requires a valid workspaceDir containing modified Smali and AndroidManifest.xml. Pass keystoreConfig with custom keystorePath, passwords, and keyAlias for authorized release signatures; if keystoreConfig is omitted, generates an auto-signed debug test artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceDir | Yes | Path to decompiled APK workspace root directory containing modified Smali, assets, and AndroidManifest.xml | |
| outputApkPath | Yes | Destination file path for final recompiled, 4-byte aligned, and cryptographically signed APK | |
| keystoreConfig | No | Optional signing keystore configuration. If omitted, an auto-generated debug keystore is used |
Output Schema
| Name | Required | Description |
|---|---|---|
| aligned | Yes | Whether zipalign completed successfully. |
| verified | Yes | Whether apksigner verification completed successfully. |
| sizeBytes | Yes | Final APK byte size. |
| keystorePath | Yes | Keystore used for signing, when available. |
| outputApkPath | Yes | Absolute path to the signed output APK. |
| signingScheme | Yes | Detected APK signature schemes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description adds crucial behavioral details: 'Mutates the filesystem by overwriting outputApkPath and creating temporary alignment artifacts' and mentions the specific signing schemes (v1-v4). It also notes the requirement for a valid workspaceDir. This goes beyond the annotation by specifying what is overwritten and the auto-signing fallback, though it does not mention permissions or error conditions, which are less critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but well-structured: it opens with the core action, then notes side effects, prerequisites, and optional keystore behavior. Every sentence contributes meaningful information—there is no filler. It could be slightly shorter, but the content justifies the length, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple build steps, filesystem mutation, optional signing config) and the presence of an output schema (which covers return values), the description covers the essential operational aspects: what it does, side effects, prerequisites, and keystore behavior. It lacks explicit failure modes or environment dependencies, but these are not critical for an agent to call the tool correctly. The description is complete enough for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented. The description reinforces the purpose of workspaceDir and outputApkPath but adds little new semantic meaning beyond the schema. It does clarify the keystoreConfig fallback behavior, but that is also present in the schema ('If omitted, an auto-generated debug keystore is used'). Therefore, the description adds minimal extra value over the schema, warranting a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs and resources: 'Rebuild a modified decoded workspace with apktool, 4-byte align the uncompressed APK with zipalign, and cryptographically sign the binary with apksigner.' It distinguishes from siblings like decompile_apk by describing the build/sign step. The scope and inputs/outputs are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by stating it 'requires a valid workspaceDir containing modified Smali and AndroidManifest.xml', which indicates it should be used after patching. It also explains the behavior when keystoreConfig is omitted (auto-signed debug artifact), guiding whether to pass custom keystore. While it doesn't explicitly name alternative tools, the prerequisites and output clearly position it as the final build step, so usage is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
synthesize_flutter_payloadBuild Flutter runtime payloadADestructive
Compile a source Flutter project into platform native libraries (libflutter.so, libapp.so) and flutter_assets partitioned by target Android ABIs. Invokes the local Flutter CLI, writes compiled artifacts to outputDir (or system temp if omitted), and overwrites existing destination files; requires flutterProjectPath containing pubspec.yaml. Set targetAbis to match the target APK architectures discovered via analyze_injection_surface, choose buildMode ('release' for AOT production, 'debug' for JIT), and forward the emitted payloadDir to inject_flutter_runtime_and_smali.
| Name | Required | Description | Default |
|---|---|---|---|
| buildMode | No | Flutter build mode target: 'release' (AOT production build), 'profile' (AOT performance build), 'debug' (JIT build) | release |
| outputDir | No | Optional custom directory path to write synthesized payload artifacts (defaults to system temp dir) | |
| targetAbis | No | Target native CPU architectures to build payload binaries for (default: ['arm64-v8a', 'armeabi-v7a']) | |
| flutterProjectPath | Yes | Path to source Flutter project root containing pubspec.yaml and lib/main.dart |
Output Schema
| Name | Required | Description |
|---|---|---|
| abis | Yes | ABIs successfully emitted into the payload. |
| files | Yes | Payload-relative artifact paths grouped by type. |
| warnings | Yes | Build or artifact-completeness warnings. |
| buildMode | Yes | Flutter build mode used. |
| payloadDir | Yes | Absolute directory containing synthesized payload artifacts. |
| appSizeBytes | Yes | Extracted libapp.so size, when available. |
| engineVersion | Yes | Detected Flutter engine/version identifier, when available. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false. The description goes beyond by specifying exactly what destructive behavior occurs: 'overwrites existing destination files'. It also discloses that it invokes the local Flutter CLI and writes to outputDir or system temp if omitted, adding valuable behavioral context not in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no waste: purpose, mechanics, requirement, and usage instructions. The purpose is front-loaded, and the downstream chaining is mentioned early, making it easy for an agent to scan and understand the tool's role.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, prerequisites, parameter usage, and integration with the pipeline (analyze_injection_surface and inject_flutter_runtime_and_smali). An output schema exists, so return values need not be described. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters, but the description adds practical, cross-tool semantics: it tells the agent to select targetAbis based on analyze_injection_surface and explains buildMode choices ('release' for AOT production, 'debug' for JIT), which enhances the schema's default enum descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: compiles a Flutter project into native libraries (libflutter.so, libapp.so) and flutter_assets partitioned by ABIs. It explicitly references the downstream tool inject_flutter_runtime_and_smali, distinguishing it from siblings like decompile_apk and analyze_injection_surface.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when and how to use: 'Set targetAbis to match the target APK architectures discovered via analyze_injection_surface', 'choose buildMode ('release' for AOT production, 'debug' for JIT)', and 'forward the emitted payloadDir to inject_flutter_runtime_and_smali'. It also states the prerequisite that flutterProjectPath must contain pubspec.yaml.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_agent_memoryUpdate session memory and patch telemetryADestructive
Update the active reverse-engineering session memory with notes, target Android workspace metadata, or verified patch history records. Mutates session state in-memory and automatically persists updates to .mcp_memory/session_state.json in workspaceDir; non-null fields merge into state, notes are appended, and patchType with patchDetails logs a verified entry. Use after manual Smali edits, manifest changes, or decompiler discoveries to keep agent telemetry synchronized; use get_agent_context or query_memory_graph instead when inspecting memory without modification.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Engineer or agent observation note to append to the active session memory log (deduplicated automatically) | |
| patchType | No | Category of applied patch (e.g. 'smali_insert', 'smali_create', 'manifest_edit', 'asset_mod', 'security_bypass') | |
| packageName | No | Target Android application package identifier (e.g. 'com.example.targetapp') | |
| patchDetails | No | Descriptive summary of the applied modification (paired with patchType to record a verified entry in patchHistory) | |
| workspaceDir | No | Absolute or relative path to target decompiled APK workspace directory containing AndroidManifest.xml and Smali files | |
| entryActivity | No | Fully qualified class name of launcher/main entry Activity (e.g. 'com.example.targetapp.MainActivity') | |
| applicationClass | No | Fully qualified class name of Android Application subclass (e.g. 'com.example.targetapp.MainApplication') |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | Status of the memory state update operation. |
| updatedMemory | Yes | Complete updated session memory state after applying modifications and persisting to disk. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds significant behavioral detail: it mutates in-memory state, persists to .mcp_memory/session_state.json, merges non-null fields, appends notes, and logs verified patch entries when patchType and patchDetails are provided. This goes well beyond the annotations and gives the agent a precise mental model of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense, front-loaded sentences. The first sentence states purpose and behavior, the second gives usage context. Every clause earns its place; no filler or redundancy. The structure is ideal for quick agent parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, 0 required, and an output schema, the description covers the essential context: what it does, when to use it, how it behaves, and the exact persistence path. It does not waste space explaining return values (output schema handles that). Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema covers all 7 parameters with descriptions (100% coverage), the tool description adds interaction semantics: 'non-null fields merge into state' and 'notes are appended' clarify how parameters combine, and it explains the patchType+patchDetails pairing for logging. This is meaningful beyond the schema, though the baseline is already 3 due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'update' and the resource 'active reverse-engineering session memory', and enumerates the specific content types (notes, workspace metadata, patch history). It also differentiates from siblings by explicitly naming get_agent_context and query_memory_graph as inspection alternatives, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Use after manual Smali edits, manifest changes, or decompiler discoveries to keep agent telemetry synchronized.' It also states when NOT to use it ('use get_agent_context or query_memory_graph instead when inspecting memory without modification'), providing clear alternatives and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.4- Changed
analyze_injection_surface5 fields changed- added
Output schema / properties / manifestSecurityAdded value: +{ + "additionalProperties": false, + "description": "Manifest security configuration and attack surface audit.", + "properties": { + "allowBackup": { + "description": "Whether android:allowBackup is enabled.", + "type": "boolean" + }, + "dangerousPermissions": { + "description": "Declared dangerous Android permissions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "debuggable": { + "description": "Whether android:debuggable is enabled.", + "type": "boolean" + }, + "exportedComponentsCount": { + "description": "Count of exported activities/components without permission barriers.", + "minimum": 0, + "type": "integer" + }, + "usesCleartextTraffic": { + "description": "Whether android:usesCleartextTraffic is permitted.", + "type": "boolean" + } + }, + "required": [ + "debuggable", + "allowBackup", + "usesCleartextTraffic", + "exportedComponentsCount", + "dangerousPermissions" + ], + "type": "object" +} - added
Output schema / properties / multiDexAdded value: +{ + "additionalProperties": false, + "description": "Multi-DEX architecture and Smali root layout analysis.", + "properties": { + "isMultiDex": { + "description": "Whether the workspace contains multiple Smali root classes.", + "type": "boolean" + }, + "smaliRoots": { + "description": "List of detected Smali root directory names.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "isMultiDex", + "smaliRoots" + ], + "type": "object" +} - added
Output schema / properties / nativeLibrariesAdded value: +{ + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": "Detected native .so libraries grouped by ABI architecture.", + "type": "object" +} - added
Output schema / properties / securityAnalysisAdded value: +{ + "additionalProperties": false, + "description": "Deep bytecode security audit (root, anti-debug, emulator, ssl pinning, obfuscator).", + "properties": { + "antiDebug": { + "description": "Detected anti-debugging checks (e.g. Debug.isDebuggerConnected).", + "items": { + "type": "string" + }, + "type": "array" + }, + "emulatorDetection": { + "description": "Detected emulator environment markers.", + "items": { + "type": "string" + }, + "type": "array" + }, + "obfuscator": { + "description": "Detected obfuscator or native packer fingerprint.", + "type": [ + "string", + "null" + ] + }, + "rootDetection": { + "description": "Detected root and integrity check markers in bytecode.", + "items": { + "type": "string" + }, + "type": "array" + }, + "sslPinning": { + "description": "Detected SSL pinning or custom TrustManager markers.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "rootDetection", + "antiDebug", + "emulatorDetection", + "sslPinning", + "obfuscator" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "workspaceDir", - "packageName", - "applicationClass", - "applicationClassPath", - "existingApplication", - "entryActivities", - "existingFlutter", - "existingFlutterClasses", - "existingNativeAbis", - "jniLoadingHooks", - "assetScripts", - "luaMods", - "recommendedPatchPoints", - "automatedChainSuggestions", - "warnings" -]New value: +[ + "workspaceDir", + "packageName", + "applicationClass", + "applicationClassPath", + "existingApplication", + "entryActivities", + "existingFlutter", + "existingFlutterClasses", + "existingNativeAbis", + "nativeLibraries", + "securityAnalysis", + "manifestSecurity", + "multiDex", + "jniLoadingHooks", + "assetScripts", + "luaMods", + "recommendedPatchPoints", + "automatedChainSuggestions", + "warnings" +]
- Changed
get_agent_context2 fields changed- changed
Input schema / properties / sessionId / descriptionPrevious value: -"Optional session ID to fetch context for"New value: +"Optional session ID to fetch context for. If omitted, the default active singleton session state is retrieved" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "persona": { + "additionalProperties": false, + "description": "Hermes+ identity and engineering principles.", + "properties": { + "name": { + "description": "Agent persona name.", + "type": "string" + }, + "operationalRules": { + "description": "System and reverse engineering operational rules.", + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "description": "Agent persona professional title.", + "type": "string" + } + }, + "required": [ + "name", + "title", + "operationalRules" + ], + "type": "object" + }, + "sessionMemory": { + "additionalProperties": {}, + "description": "Active session memory snapshot including target metadata, patch logs, and telemetry.", + "type": "object" + }, + "skills": { + "description": "Available agent skill sheets.", + "items": { + "additionalProperties": false, + "properties": { + "description": { + "description": "Loaded skill operational capability description.", + "type": "string" + }, + "name": { + "description": "Loaded skill identifier.", + "type": "string" + } + }, + "required": [ + "name", + "description" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "persona", + "skills", + "sessionMemory" + ], + "type": "object" +}
- Changed
query_memory_graph3 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search term for patch history, packages, activities, or notes"New value: +"Case-insensitive search string matching package names, launcher activities, patch history details, security markers, native libraries, or agent notes" - added
Input schema / properties / query / minLengthAdded value: +1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "matchesCount": { + "description": "Total number of matching memory graph nodes found.", + "minimum": 0, + "type": "integer" + }, + "query": { + "description": "Original query search string.", + "type": "string" + }, + "results": { + "description": "Ranked list of matching memory graph elements.", + "items": { + "additionalProperties": false, + "properties": { + "category": { + "description": "Memory graph node category (e.g. Package Name, Patch, Agent Note).", + "type": "string" + }, + "matchScore": { + "description": "Relevance match score (higher indicates more specific match).", + "type": "number" + }, + "value": { + "description": "Matched node string value or patch detail.", + "type": "string" + } + }, + "required": [ + "category", + "value", + "matchScore" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "query", + "matchesCount", + "results" + ], + "type": "object" +}
- Changed
update_agent_memory8 fields changed- changed
Input schema / properties / applicationClass / descriptionPrevious value: -"Application class name"New value: +"Fully qualified class name of Android Application subclass (e.g. 'com.example.targetapp.MainApplication')" - changed
Input schema / properties / entryActivity / descriptionPrevious value: -"Launcher/Entry Activity name"New value: +"Fully qualified class name of launcher/main entry Activity (e.g. 'com.example.targetapp.MainActivity')" - changed
Input schema / properties / note / descriptionPrevious value: -"Agent note to persist in session memory"New value: +"Engineer or agent observation note to append to the active session memory log (deduplicated automatically)" - changed
Input schema / properties / packageName / descriptionPrevious value: -"Target Android package name"New value: +"Target Android application package identifier (e.g. 'com.example.targetapp')" - changed
Input schema / properties / patchDetails / descriptionPrevious value: -"Description of patch applied"New value: +"Descriptive summary of the applied modification (paired with patchType to record a verified entry in patchHistory)" - changed
Input schema / properties / patchType / descriptionPrevious value: -"Type of patch applied (e.g., smali_insert, manifest_edit)"New value: +"Category of applied patch (e.g. 'smali_insert', 'smali_create', 'manifest_edit', 'asset_mod', 'security_bypass')" - changed
Input schema / properties / workspaceDir / descriptionPrevious value: -"Decompiled APK workspace path"New value: +"Absolute or relative path to target decompiled APK workspace directory containing AndroidManifest.xml and Smali files" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "status": { + "description": "Status of the memory state update operation.", + "enum": [ + "success", + "error" + ], + "type": "string" + }, + "updatedMemory": { + "additionalProperties": {}, + "description": "Complete updated session memory state after applying modifications and persisting to disk.", + "type": "object" + } + }, + "required": [ + "status", + "updatedMemory" + ], + "type": "object" +}
9 tool updates
v0.1.3- Changed
analyze_injection_surface2 fields changed- added
Input schema / properties / workspaceDir / descriptionAdded value: +"Path to decompiled APK workspace root directory containing AndroidManifest.xml and Smali structures produced by decompile_apk" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "applicationClass": { + "description": "Declared application class, when present.", + "type": [ + "string", + "null" + ] + }, + "applicationClassPath": { + "description": "Resolved application Smali path, when available.", + "type": [ + "string", + "null" + ] + }, + "assetScripts": { + "description": "Candidate script-like asset paths.", + "items": { + "type": "string" + }, + "type": "array" + }, + "automatedChainSuggestions": { + "description": "Suggested next pipeline actions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "entryActivities": { + "description": "Manifest activities and their resolved Smali paths.", + "items": { + "additionalProperties": false, + "properties": { + "exported": { + "type": "boolean" + }, + "launcher": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "name", + "exported", + "launcher", + "path" + ], + "type": "object" + }, + "type": "array" + }, + "existingApplication": { + "description": "Whether the manifest declares an application class.", + "type": "boolean" + }, + "existingFlutter": { + "description": "Whether Flutter embedding classes were detected.", + "type": "boolean" + }, + "existingFlutterClasses": { + "description": "Detected existing Flutter class paths.", + "items": { + "type": "string" + }, + "type": "array" + }, + "existingNativeAbis": { + "description": "Native ABI directories detected in the target.", + "items": { + "type": "string" + }, + "type": "array" + }, + "jniLoadingHooks": { + "description": "Evidence strings for detected JNI library loading calls.", + "items": { + "type": "string" + }, + "type": "array" + }, + "luaMods": { + "description": "Detected Lua asset paths.", + "items": { + "type": "string" + }, + "type": "array" + }, + "packageName": { + "description": "Manifest package identity.", + "type": "string" + }, + "recommendedPatchPoints": { + "description": "Suggested host integration points.", + "items": { + "type": "string" + }, + "type": "array" + }, + "warnings": { + "description": "Compatibility warnings that require review before mutation.", + "items": { + "type": "string" + }, + "type": "array" + }, + "workspaceDir": { + "description": "Analyzed decoded APK workspace.", + "type": "string" + } + }, + "required": [ + "workspaceDir", + "packageName", + "applicationClass", + "applicationClassPath", + "existingApplication", + "entryActivities", + "existingFlutter", + "existingFlutterClasses", + "existingNativeAbis", + "jniLoadingHooks", + "assetScripts", + "luaMods", + "recommendedPatchPoints", + "automatedChainSuggestions", + "warnings" + ], + "type": "object" +}
- Changed
decompile_apk4 fields changed- added
Input schema / properties / apkPath / descriptionAdded value: +"Absolute path to target source .apk file to decompile" - added
Input schema / properties / decompileSources / descriptionAdded value: +"Whether to disassemble DEX files into Smali code (default: true). Set false for resource/asset-only disassembly" - added
Input schema / properties / outputDir / descriptionAdded value: +"Destination directory path where decompiled Smali code, resources, assets, and AndroidManifest.xml will be extracted" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "applicationClass": { + "description": "Declared application class, when present.", + "type": [ + "string", + "null" + ] + }, + "fileCount": { + "description": "Number of extracted workspace files.", + "minimum": 0, + "type": "integer" + }, + "hasNativeLibs": { + "description": "Whether the decoded workspace contains native libraries.", + "type": "boolean" + }, + "mainActivity": { + "description": "Resolved launcher activity, when present.", + "type": [ + "string", + "null" + ] + }, + "manifestPath": { + "description": "Absolute path to decoded AndroidManifest.xml.", + "type": "string" + }, + "minSdkVersion": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Declared minimum Android API level." + }, + "packageName": { + "description": "Package name parsed from AndroidManifest.xml.", + "type": "string" + }, + "smaliRoot": { + "description": "Primary Smali root, when source decoding was enabled.", + "type": [ + "string", + "null" + ] + }, + "sourceApk": { + "description": "Absolute path to the input APK that was read.", + "type": "string" + }, + "targetAbis": { + "description": "Native ABI directories detected in the workspace.", + "items": { + "type": "string" + }, + "type": "array" + }, + "targetSdkVersion": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Declared target Android API level." + }, + "workspaceDir": { + "description": "Absolute path to the decoded workspace.", + "type": "string" + } + }, + "required": [ + "workspaceDir", + "sourceApk", + "packageName", + "mainActivity", + "applicationClass", + "minSdkVersion", + "targetSdkVersion", + "targetAbis", + "fileCount", + "hasNativeLibs", + "manifestPath", + "smaliRoot" + ], + "type": "object" +}
- Added
get_agent_context - Changed
inject_flutter_runtime_and_smali12 fields changed- added
Input schema / properties / attachBaseContextHookAdded value: +{ + "description": "Inject engine init into attachBaseContext(Context) as well as onCreate() for early initialization", + "type": "boolean" +} - added
Input schema / properties / engineId / descriptionAdded value: +"Optional cached FlutterEngine identifier stored in FlutterEngineCache (defaults to 'injected_flutter_engine')" - added
Input schema / properties / injectionMode / descriptionAdded value: +"Injection strategy enum: 'direct_application_hook' (hooks host Application class), 'activity_overlay' (adds overlay Activity), 'view_tree_injection' (attaches FlutterView to main Activity), 'headless_engine' (background engine without UI)" - changed
Input schema / properties / injectionMode / enumPrevious value: -[ - "activity_overlay", - "view_tree_injection", - "headless_engine" -]New value: +[ + "activity_overlay", + "view_tree_injection", + "headless_engine", + "direct_application_hook" +] - added
Input schema / properties / methodChannelBridge / descriptionAdded value: +"Optional MethodChannel bridge config for two-way communication between target Android Smali host and injected Flutter Dart layer" - added
Input schema / properties / methodChannelBridge / properties / channelName / descriptionAdded value: +"Name of two-way Flutter MethodChannel identifier for Smali<->Dart communication" - added
Input schema / properties / methodChannelBridge / properties / handlerClass / descriptionAdded value: +"Optional custom Smali handler class name to process incoming MethodChannel calls" - added
Input schema / properties / methodChannelBridge / properties / methodWhitelist / descriptionAdded value: +"Optional whitelist of method names allowed over the MethodChannel bridge" - added
Input schema / properties / nativeLibraryFallbackAdded value: +{ + "description": "Wrap System.loadLibrary call in defensive try-catch blocks to prevent UnsatisfiedLinkError crashes on missing ABIs", + "type": "boolean" +} - added
Input schema / properties / payloadDir / descriptionAdded value: +"Path to synthesized Flutter payload directory produced by synthesize_flutter_payload containing lib/ native libraries (libflutter.so, libapp.so) and assets/" - added
Input schema / properties / workspaceDir / descriptionAdded value: +"Path to decompiled APK workspace root directory produced by decompile_apk (modified in-place)" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "copiedAssets": { + "description": "Number of copied Flutter asset files.", + "minimum": 0, + "type": "integer" + }, + "copiedLibs": { + "description": "Number of copied native library files.", + "minimum": 0, + "type": "integer" + }, + "engineId": { + "description": "FlutterEngineCache identifier used by generated code.", + "type": "string" + }, + "generatedClasses": { + "description": "Generated Smali class descriptors.", + "items": { + "type": "string" + }, + "type": "array" + }, + "injectionMode": { + "description": "Applied Flutter integration mode.", + "enum": [ + "activity_overlay", + "view_tree_injection", + "headless_engine", + "direct_application_hook" + ], + "type": "string" + }, + "launchActivityName": { + "description": "Resolved activity associated with the selected integration mode.", + "type": "string" + }, + "methodChannel": { + "additionalProperties": false, + "description": "Configured method-channel bridge, when requested.", + "properties": { + "channelName": { + "description": "Dart/host channel identifier.", + "type": "string" + }, + "handlerClass": { + "description": "Optional generated or host-side Smali handler class.", + "type": "string" + }, + "methodWhitelist": { + "description": "Optional allowed inbound method names.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "channelName" + ], + "type": "object" + }, + "modifiedFiles": { + "description": "Workspace files created or changed by the operation.", + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "filePath": { + "type": "string" + }, + "patchType": { + "enum": [ + "smali_insert", + "smali_create", + "asset_copy", + "lib_copy", + "manifest_edit" + ], + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "required": [ + "filePath", + "patchType", + "description", + "verified" + ], + "type": "object" + }, + "type": "array" + }, + "warnings": { + "description": "Compatibility and follow-up warnings.", + "items": { + "type": "string" + }, + "type": "array" + }, + "workspaceDir": { + "description": "Mutated decoded APK workspace.", + "type": "string" + } + }, + "required": [ + "workspaceDir", + "injectionMode", + "generatedClasses", + "modifiedFiles", + "copiedAssets", + "copiedLibs", + "engineId", + "launchActivityName", + "warnings" + ], + "type": "object" +}
- Changed
patch_manifest_and_config8 fields changed- added
Input schema / properties / additionalPermissions / descriptionAdded value: +"List of additional Android permissions to inject into AndroidManifest.xml (e.g. ['android.permission.INTERNET', 'android.permission.WAKE_LOCK'])" - added
Input schema / properties / customApplicationClass / descriptionAdded value: +"Fully qualified class name of injected Application subclass (e.g. 'com.example.injected.InjectedApplication')" - added
Input schema / properties / extractNativeLibsAdded value: +{ + "description": "Set android:extractNativeLibs in application element for legacy native library extraction", + "type": "boolean" +} - added
Input schema / properties / hardwareAcceleratedAdded value: +{ + "description": "Set android:hardwareAccelerated='true' in application element for GPU hardware rendering", + "type": "boolean" +} - added
Input schema / properties / largeHeapAdded value: +{ + "description": "Set android:largeHeap='true' in application element to increase RAM heap allocation", + "type": "boolean" +} - added
Input schema / properties / usesCleartextTraffic / descriptionAdded value: +"Set android:usesCleartextTraffic='true' in application tag to allow unencrypted HTTP traffic" - added
Input schema / properties / workspaceDir / descriptionAdded value: +"Path to decompiled APK workspace root directory containing AndroidManifest.xml (modified in-place)" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "addedActivities": { + "description": "Activity class names added during the patch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "addedApplicationMetadata": { + "description": "Application metadata keys added during the patch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "applicationClass": { + "description": "Application class after the patch.", + "type": [ + "string", + "null" + ] + }, + "patchedPermissions": { + "description": "Permissions added during the patch.", + "items": { + "type": "string" + }, + "type": "array" + }, + "usesCleartextTraffic": { + "description": "Reported cleartext-traffic configuration request.", + "type": "boolean" + }, + "validation": { + "additionalProperties": false, + "description": "Post-patch manifest validation result.", + "properties": { + "messages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "enum": [ + "ok", + "warning", + "error" + ], + "type": "string" + } + }, + "required": [ + "status", + "messages" + ], + "type": "object" + }, + "workspaceDir": { + "description": "Mutated decoded APK workspace.", + "type": "string" + } + }, + "required": [ + "workspaceDir", + "patchedPermissions", + "addedApplicationMetadata", + "addedActivities", + "applicationClass", + "usesCleartextTraffic", + "validation" + ], + "type": "object" +}
- Added
query_memory_graph - Changed
recompile_align_and_sign9 fields changed- added
Input schema / properties / keystoreConfig / descriptionAdded value: +"Optional signing keystore configuration. If omitted, an auto-generated debug keystore is used" - added
Input schema / properties / keystoreConfig / properties / cn / descriptionAdded value: +"Common Name (CN) owner string for self-signed debug certificate" - added
Input schema / properties / keystoreConfig / properties / keyAlias / descriptionAdded value: +"Private key alias name inside signing keystore" - added
Input schema / properties / keystoreConfig / properties / keyPass / descriptionAdded value: +"Password for specific private key alias" - added
Input schema / properties / keystoreConfig / properties / keystorePass / descriptionAdded value: +"Keystore password for signing keystore access" - added
Input schema / properties / keystoreConfig / properties / keystorePath / descriptionAdded value: +"Path to custom JKS/PKCS12 signing keystore file (auto-generates debug keystore if omitted)" - added
Input schema / properties / outputApkPath / descriptionAdded value: +"Destination file path for final recompiled, 4-byte aligned, and cryptographically signed APK" - added
Input schema / properties / workspaceDir / descriptionAdded value: +"Path to decompiled APK workspace root directory containing modified Smali, assets, and AndroidManifest.xml" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "aligned": { + "description": "Whether zipalign completed successfully.", + "type": "boolean" + }, + "keystorePath": { + "description": "Keystore used for signing, when available.", + "type": [ + "string", + "null" + ] + }, + "outputApkPath": { + "description": "Absolute path to the signed output APK.", + "type": "string" + }, + "signingScheme": { + "description": "Detected APK signature schemes.", + "items": { + "type": "string" + }, + "type": "array" + }, + "sizeBytes": { + "description": "Final APK byte size.", + "minimum": 0, + "type": "integer" + }, + "verified": { + "description": "Whether apksigner verification completed successfully.", + "type": "boolean" + } + }, + "required": [ + "outputApkPath", + "signingScheme", + "keystorePath", + "aligned", + "verified", + "sizeBytes" + ], + "type": "object" +}
- Changed
synthesize_flutter_payload6 fields changed- added
Input schema / properties / buildMode / descriptionAdded value: +"Flutter build mode target: 'release' (AOT production build), 'profile' (AOT performance build), 'debug' (JIT build)" - added
Input schema / properties / flutterProjectPath / descriptionAdded value: +"Path to source Flutter project root containing pubspec.yaml and lib/main.dart" - changed
Input schema / properties / outputDir / descriptionPrevious value: -"Override payload output directory"New value: +"Optional custom directory path to write synthesized payload artifacts (defaults to system temp dir)" - added
Input schema / properties / targetAbis / descriptionAdded value: +"Target native CPU architectures to build payload binaries for (default: ['arm64-v8a', 'armeabi-v7a'])" - added
Input schema / properties / targetAbis / items / descriptionAdded value: +"Target Android Native ABI architecture (e.g. 'arm64-v8a' for modern 64-bit devices)" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "abis": { + "description": "ABIs successfully emitted into the payload.", + "items": { + "enum": [ + "arm64-v8a", + "armeabi-v7a", + "x86", + "x86_64" + ], + "type": "string" + }, + "type": "array" + }, + "appSizeBytes": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Extracted libapp.so size, when available." + }, + "buildMode": { + "description": "Flutter build mode used.", + "enum": [ + "release", + "profile", + "debug" + ], + "type": "string" + }, + "engineVersion": { + "description": "Detected Flutter engine/version identifier, when available.", + "type": [ + "string", + "null" + ] + }, + "files": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": "Payload-relative artifact paths grouped by type.", + "type": "object" + }, + "payloadDir": { + "description": "Absolute directory containing synthesized payload artifacts.", + "type": "string" + }, + "warnings": { + "description": "Build or artifact-completeness warnings.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "payloadDir", + "buildMode", + "abis", + "files", + "engineVersion", + "appSizeBytes", + "warnings" + ], + "type": "object" +}
- Added
update_agent_memory
6 tool updates
v0.1.2- First observed
analyze_injection_surface - First observed
decompile_apk - First observed
inject_flutter_runtime_and_smali - First observed
patch_manifest_and_config - First observed
recompile_align_and_sign - First observed
synthesize_flutter_payload
TDQS
Scored across 9 tools
Each tool has a distinct role in the APK injection pipeline or memory management, with no overlapping functionality. The sequential nature and clear descriptions prevent confusion.
All tool names follow a consistent lower_snake_case convention with verb-first naming (decompile, analyze, synthesize, inject, patch, recompile, get, update, query). The pattern is uniform and predictable.
Nine tools is well within the typical range for a specialized pipeline. The set covers the full APK modification workflow plus memory management without unnecessary redundancy.
The tool set provides a complete end-to-end workflow from decompilation to recompilation and signing, with integrated memory operations. No essential steps are missing for the stated purpose.
Maintenance
Related MCP Connectors
MCP server for static security analysis of Android source code
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
MEOK MCP Hardening MCP — automated security red-team for any MCP server. Maps OWASP LLM Top 10
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides a one-stop automated solution for Android APK security analysis by integrating tools like JEB, JADX, APKTOOL, FlowDroid, and MobSF into unified MCP standard API interfaces.11-
- AlicenseAqualityFmaintenanceA real-time server that provides Flutter/Dart documentation and pub.dev package information to AI assistants, ensuring they generate accurate and up-to-date Flutter code.874MIT
- FlicenseNot gradedqualityDmaintenanceIntegrates multiple Android APK security analysis tools into MCP standard APIs for automated static and dynamic analysis and vulnerability detection.-
- AlicenseAqualityCmaintenanceMCP server for Android APK triage, providing tools to parse APK headers, list DEX classes, and decode AndroidManifest.xml using apktool or androguard backends.51MIT