Skip to main content
Glama
MarwanDevSpace

mcp-flutter-apk-injector

mcp-flutter-apk-injector

mcp-flutter-apk-injector Banner

npm version License: MIT Node.js Model Context Protocol Hermes+ Engine GitHub Repository mcp-flutter-apk-injector MCP server

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 .so library 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

decompile_apk

Core

destructive: true

Decodes APK into Smali, resources, assets, and manifest; auto-installs AGENTS.md into workspace.

analyze_injection_surface

Core

readOnly: true, idempotent: true

Static audit: scans components, native .so libraries, anti-debugging, root checks, SSL pinning, packers, and multi-DEX.

synthesize_flutter_payload

Core

destructive: true

Compiles Flutter project into platform native libraries (libflutter.so, libapp.so) and assets.

inject_flutter_runtime_and_smali

Core

destructive: true

Injects Flutter runtime, native libraries, and generated Smali bootstrap classes (activity_overlay, etc.).

patch_manifest_and_config

Core

destructive: true

Mutates AndroidManifest.xml in-place (activities, Application subclass, hardware acceleration, permissions).

recompile_align_and_sign

Core

destructive: true

Rebuilds with apktool, 4-byte zipaligns, and cryptographically signs with apksigner (v1-v4).

get_agent_context

Agent

readOnly: true, idempotent: true

Inspects Hermes+ persona, embedded rules, registered skills, and live session state.

update_agent_memory

Agent

destructive: true

Records discovered hooks, notes, and patch history into memory and .mcp_memory/session_state.json.

query_memory_graph

Agent

readOnly: true, idempotent: true

Searches and ranks recorded patches, security findings, native libraries, and multi-DEX roots.


🎮 The 4 Flutter Injection Modes

Mode

Target Hook

Architectural Description

activity_overlay (Preferred)

FlutterOverlayActivity

Launches a dedicated Activity extending FlutterActivity reusing a pre-warmed cached engine.

direct_application_hook

Application.onCreate()

Hooks directly into host Application lifecycle (and optional attachBaseContext), preserving host initialization.

headless_engine

BackgroundFlutterEngine

Runs headless FlutterEngine in background for data channels, telemetry, or headless compute.

view_tree_injection (Experimental)

Launcher onCreate()

Attaches programmatic FlutterView directly over the host activity decor view.


⚡ 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-install AGENTS.md.

  • /inject: Execute Flutter runtime payload and Smali bytecode injection.

  • /patch: Configure AndroidManifest.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@latest

MCP 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+ والتثبيت التلقائي في التطبيقات

  1. المرجع المعماري الرئيسي (HERMES.md): يحدد القواعد الصارمة لحساب سجلات Smali (.locals + params = .registers) وتوزيع مكتبات .so وتجاوز آليات الحماية.

  2. العقد الشامل للوكلاء (AGENTS.md): عقد موحد متوافق مع كافة بيئات التطوير (Antigravity, Cursor, Claude, Gemini, Windsurf).

  3. التثبيت التلقائي لعقد مساحة العمل: عند استدعاء أداة decompile_apk أو inject_flutter_runtime_and_smali، يقوم الخادم تلقائياً بإنشاء وتثبيت ملف AGENTS.md داخل المجلد الجذري للتطبيق المستهدف لضمان استمرارية السياق الهندسي لأي وكيل ذكاء اصطناعي.


🛠️ الأدوات الـ 9 الاحترافية (Glama 5.0/5.0 Tier A+)

اسم الأداة

النوع

الخصائص

الوظيفة الهندسية

decompile_apk

أساسية

تعديل (destructive)

تفكيك الـ APK إلى Smali وموارد ومكتبات مع التثبيت التلقائي لـ AGENTS.md.

analyze_injection_surface

أساسية

قراءة فقط (readOnly)

فحص الكلاسات، مكتبات .so لكل معمارية، مكافحة الـ Debug، الروت، وتثبيت الشهادات.

synthesize_flutter_payload

أساسية

تعديل (destructive)

تجميع مشروع Flutter إلى مكتبات أصلية وأصول مخصصة لمعماريات الهدف.

inject_flutter_runtime_and_smali

أساسية

تعديل (destructive)

زرع محرك Flutter وشفرات Smali التمهيدية وموازنة سجلات الـ Stack.

patch_manifest_and_config

أساسية

تعديل (destructive)

تعديل AndroidManifest.xml (الأنشطة، كلاس التطبيق، التسريع البرمجي، التصاريح).

recompile_align_and_sign

أساسية

تعديل (destructive)

إعادة البناء بـ apktool، المحاذاة بـ zipalign، والتوقيع الرقمي بـ apksigner.

get_agent_context

وكيل

قراءة فقط (readOnly)

قراءة هوية Hermes+، القواعد، المهارات، وحالة الذاكرة الحية.

update_agent_memory

وكيل

تعديل (destructive)

حفظ الملاحظات وسجلات الترقيع في الذاكرة الحية وملف .mcp_memory/session_state.json.

query_memory_graph

وكيل

قراءة فقط (readOnly)

البحث المصنف في سجلات الترقيع والنتائج الأمنية والمكتبات الأصلية.


💻 متطلبات النظام والتطوير

  • 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 / الترخيص

MIT License © 2026 Marwan (MarwanDevSpace)

Available Tools

9 tools
analyze_injection_surfaceAnalyze APK integration surfaceA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceDirYesPath to decompiled APK workspace root directory containing AndroidManifest.xml and Smali structures produced by decompile_apk

Output Schema

ParametersJSON Schema
NameRequiredDescription
luaModsYesDetected Lua asset paths.
multiDexYesMulti-DEX architecture and Smali root layout analysis.
warningsYesCompatibility warnings that require review before mutation.
packageNameYesManifest package identity.
assetScriptsYesCandidate script-like asset paths.
workspaceDirYesAnalyzed decoded APK workspace.
entryActivitiesYesManifest activities and their resolved Smali paths.
existingFlutterYesWhether Flutter embedding classes were detected.
jniLoadingHooksYesEvidence strings for detected JNI library loading calls.
nativeLibrariesYesDetected native .so libraries grouped by ABI architecture.
applicationClassYesDeclared application class, when present.
manifestSecurityYesManifest security configuration and attack surface audit.
securityAnalysisYesDeep bytecode security audit (root, anti-debug, emulator, ssl pinning, obfuscator).
existingNativeAbisYesNative ABI directories detected in the target.
existingApplicationYesWhether the manifest declares an application class.
applicationClassPathYesResolved application Smali path, when available.
existingFlutterClassesYesDetected existing Flutter class paths.
recommendedPatchPointsYesSuggested host integration points.
automatedChainSuggestionsYesSuggested next pipeline actions.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 workspaceA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
apkPathYesAbsolute path to target source .apk file to decompile
outputDirYesDestination directory path where decompiled Smali code, resources, assets, and AndroidManifest.xml will be extracted
decompileSourcesNoWhether to disassemble DEX files into Smali code (default: true). Set false for resource/asset-only disassembly

Output Schema

ParametersJSON Schema
NameRequiredDescription
fileCountYesNumber of extracted workspace files.
smaliRootYesPrimary Smali root, when source decoding was enabled.
sourceApkYesAbsolute path to the input APK that was read.
targetAbisYesNative ABI directories detected in the workspace.
packageNameYesPackage name parsed from AndroidManifest.xml.
mainActivityYesResolved launcher activity, when present.
manifestPathYesAbsolute path to decoded AndroidManifest.xml.
workspaceDirYesAbsolute path to the decoded workspace.
hasNativeLibsYesWhether the decoded workspace contains native libraries.
minSdkVersionYesDeclared minimum Android API level.
applicationClassYesDeclared application class, when present.
targetSdkVersionYesDeclared target Android API level.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 memoryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdNoOptional session ID to fetch context for. If omitted, the default active singleton session state is retrieved

Output Schema

ParametersJSON Schema
NameRequiredDescription
skillsYesAvailable agent skill sheets.
personaYesHermes+ identity and engineering principles.
sessionMemoryYesActive session memory snapshot including target metadata, patch logs, and telemetry.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 workspaceA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
engineIdNoOptional cached FlutterEngine identifier stored in FlutterEngineCache (defaults to 'injected_flutter_engine')
payloadDirYesPath to synthesized Flutter payload directory produced by synthesize_flutter_payload containing lib/ native libraries (libflutter.so, libapp.so) and assets/
workspaceDirYesPath to decompiled APK workspace root directory produced by decompile_apk (modified in-place)
injectionModeYesInjection 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)
methodChannelBridgeNoOptional MethodChannel bridge config for two-way communication between target Android Smali host and injected Flutter Dart layer
attachBaseContextHookNoInject engine init into attachBaseContext(Context) as well as onCreate() for early initialization
nativeLibraryFallbackNoWrap System.loadLibrary call in defensive try-catch blocks to prevent UnsatisfiedLinkError crashes on missing ABIs

Output Schema

ParametersJSON Schema
NameRequiredDescription
engineIdYesFlutterEngineCache identifier used by generated code.
warningsYesCompatibility and follow-up warnings.
copiedLibsYesNumber of copied native library files.
copiedAssetsYesNumber of copied Flutter asset files.
workspaceDirYesMutated decoded APK workspace.
injectionModeYesApplied Flutter integration mode.
methodChannelNoConfigured method-channel bridge, when requested.
modifiedFilesYesWorkspace files created or changed by the operation.
generatedClassesYesGenerated Smali class descriptors.
launchActivityNameYesResolved activity associated with the selected integration mode.

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 configurationA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
largeHeapNoSet android:largeHeap='true' in application element to increase RAM heap allocation
workspaceDirYesPath to decompiled APK workspace root directory containing AndroidManifest.xml (modified in-place)
extractNativeLibsNoSet android:extractNativeLibs in application element for legacy native library extraction
hardwareAcceleratedNoSet android:hardwareAccelerated='true' in application element for GPU hardware rendering
usesCleartextTrafficNoSet android:usesCleartextTraffic='true' in application tag to allow unencrypted HTTP traffic
additionalPermissionsNoList of additional Android permissions to inject into AndroidManifest.xml (e.g. ['android.permission.INTERNET', 'android.permission.WAKE_LOCK'])
customApplicationClassNoFully qualified class name of injected Application subclass (e.g. 'com.example.injected.InjectedApplication')

Output Schema

ParametersJSON Schema
NameRequiredDescription
validationYesPost-patch manifest validation result.
workspaceDirYesMutated decoded APK workspace.
addedActivitiesYesActivity class names added during the patch.
applicationClassYesApplication class after the patch.
patchedPermissionsYesPermissions added during the patch.
usesCleartextTrafficYesReported cleartext-traffic configuration request.
addedApplicationMetadataYesApplication metadata keys added during the patch.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 graphA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesCase-insensitive search string matching package names, launcher activities, patch history details, security markers, native libraries, or agent notes

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYesOriginal query search string.
resultsYesRanked list of matching memory graph elements.
matchesCountYesTotal number of matching memory graph nodes found.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 outputA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceDirYesPath to decompiled APK workspace root directory containing modified Smali, assets, and AndroidManifest.xml
outputApkPathYesDestination file path for final recompiled, 4-byte aligned, and cryptographically signed APK
keystoreConfigNoOptional signing keystore configuration. If omitted, an auto-generated debug keystore is used

Output Schema

ParametersJSON Schema
NameRequiredDescription
alignedYesWhether zipalign completed successfully.
verifiedYesWhether apksigner verification completed successfully.
sizeBytesYesFinal APK byte size.
keystorePathYesKeystore used for signing, when available.
outputApkPathYesAbsolute path to the signed output APK.
signingSchemeYesDetected APK signature schemes.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 payloadA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
buildModeNoFlutter build mode target: 'release' (AOT production build), 'profile' (AOT performance build), 'debug' (JIT build)release
outputDirNoOptional custom directory path to write synthesized payload artifacts (defaults to system temp dir)
targetAbisNoTarget native CPU architectures to build payload binaries for (default: ['arm64-v8a', 'armeabi-v7a'])
flutterProjectPathYesPath to source Flutter project root containing pubspec.yaml and lib/main.dart

Output Schema

ParametersJSON Schema
NameRequiredDescription
abisYesABIs successfully emitted into the payload.
filesYesPayload-relative artifact paths grouped by type.
warningsYesBuild or artifact-completeness warnings.
buildModeYesFlutter build mode used.
payloadDirYesAbsolute directory containing synthesized payload artifacts.
appSizeBytesYesExtracted libapp.so size, when available.
engineVersionYesDetected Flutter engine/version identifier, when available.

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 telemetryA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoEngineer or agent observation note to append to the active session memory log (deduplicated automatically)
patchTypeNoCategory of applied patch (e.g. 'smali_insert', 'smali_create', 'manifest_edit', 'asset_mod', 'security_bypass')
packageNameNoTarget Android application package identifier (e.g. 'com.example.targetapp')
patchDetailsNoDescriptive summary of the applied modification (paired with patchType to record a verified entry in patchHistory)
workspaceDirNoAbsolute or relative path to target decompiled APK workspace directory containing AndroidManifest.xml and Smali files
entryActivityNoFully qualified class name of launcher/main entry Activity (e.g. 'com.example.targetapp.MainActivity')
applicationClassNoFully qualified class name of Android Application subclass (e.g. 'com.example.targetapp.MainApplication')

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYesStatus of the memory state update operation.
updatedMemoryYesComplete updated session memory state after applying modifications and persisting to disk.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 4 tool updatesv0.1.4
    • Changedanalyze_injection_surface5 fields changed
      • addedOutput schema / properties / manifestSecurity
        Added 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"
        +}
      • addedOutput schema / properties / multiDex
        Added 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"
        +}
      • addedOutput schema / properties / nativeLibraries
        Added value: +{
        +  "additionalProperties": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "description": "Detected native .so libraries grouped by ABI architecture.",
        +  "type": "object"
        +}
      • addedOutput schema / properties / securityAnalysis
        Added 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"
        +}
      • changedOutput schema / required
        Previous 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"
        +]
    • Changedget_agent_context2 fields changed
      • changedInput schema / properties / sessionId / description
        Previous 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"
      • changedOutput 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"
        +}
    • Changedquery_memory_graph3 fields changed
      • changedInput schema / properties / query / description
        Previous 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"
      • addedInput schema / properties / query / minLength
        Added value: +1
      • changedOutput 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"
        +}
    • Changedupdate_agent_memory8 fields changed
      • changedInput schema / properties / applicationClass / description
        Previous value: -"Application class name"New value: +"Fully qualified class name of Android Application subclass (e.g. 'com.example.targetapp.MainApplication')"
      • changedInput schema / properties / entryActivity / description
        Previous value: -"Launcher/Entry Activity name"New value: +"Fully qualified class name of launcher/main entry Activity (e.g. 'com.example.targetapp.MainActivity')"
      • changedInput schema / properties / note / description
        Previous 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)"
      • changedInput schema / properties / packageName / description
        Previous value: -"Target Android package name"New value: +"Target Android application package identifier (e.g. 'com.example.targetapp')"
      • changedInput schema / properties / patchDetails / description
        Previous value: -"Description of patch applied"New value: +"Descriptive summary of the applied modification (paired with patchType to record a verified entry in patchHistory)"
      • changedInput schema / properties / patchType / description
        Previous 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')"
      • changedInput schema / properties / workspaceDir / description
        Previous value: -"Decompiled APK workspace path"New value: +"Absolute or relative path to target decompiled APK workspace directory containing AndroidManifest.xml and Smali files"
      • changedOutput 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"
        +}
  2. 9 tool updatesv0.1.3
    • Changedanalyze_injection_surface2 fields changed
      • addedInput schema / properties / workspaceDir / description
        Added value: +"Path to decompiled APK workspace root directory containing AndroidManifest.xml and Smali structures produced by decompile_apk"
      • changedOutput 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"
        +}
    • Changeddecompile_apk4 fields changed
      • addedInput schema / properties / apkPath / description
        Added value: +"Absolute path to target source .apk file to decompile"
      • addedInput schema / properties / decompileSources / description
        Added value: +"Whether to disassemble DEX files into Smali code (default: true). Set false for resource/asset-only disassembly"
      • addedInput schema / properties / outputDir / description
        Added value: +"Destination directory path where decompiled Smali code, resources, assets, and AndroidManifest.xml will be extracted"
      • changedOutput 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"
        +}
    • Addedget_agent_context
    • Changedinject_flutter_runtime_and_smali12 fields changed
      • addedInput schema / properties / attachBaseContextHook
        Added value: +{
        +  "description": "Inject engine init into attachBaseContext(Context) as well as onCreate() for early initialization",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / engineId / description
        Added value: +"Optional cached FlutterEngine identifier stored in FlutterEngineCache (defaults to 'injected_flutter_engine')"
      • addedInput schema / properties / injectionMode / description
        Added 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)"
      • changedInput schema / properties / injectionMode / enum
        Previous value: -[
        -  "activity_overlay",
        -  "view_tree_injection",
        -  "headless_engine"
        -]New value: +[
        +  "activity_overlay",
        +  "view_tree_injection",
        +  "headless_engine",
        +  "direct_application_hook"
        +]
      • addedInput schema / properties / methodChannelBridge / description
        Added value: +"Optional MethodChannel bridge config for two-way communication between target Android Smali host and injected Flutter Dart layer"
      • addedInput schema / properties / methodChannelBridge / properties / channelName / description
        Added value: +"Name of two-way Flutter MethodChannel identifier for Smali<->Dart communication"
      • addedInput schema / properties / methodChannelBridge / properties / handlerClass / description
        Added value: +"Optional custom Smali handler class name to process incoming MethodChannel calls"
      • addedInput schema / properties / methodChannelBridge / properties / methodWhitelist / description
        Added value: +"Optional whitelist of method names allowed over the MethodChannel bridge"
      • addedInput schema / properties / nativeLibraryFallback
        Added value: +{
        +  "description": "Wrap System.loadLibrary call in defensive try-catch blocks to prevent UnsatisfiedLinkError crashes on missing ABIs",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / payloadDir / description
        Added value: +"Path to synthesized Flutter payload directory produced by synthesize_flutter_payload containing lib/ native libraries (libflutter.so, libapp.so) and assets/"
      • addedInput schema / properties / workspaceDir / description
        Added value: +"Path to decompiled APK workspace root directory produced by decompile_apk (modified in-place)"
      • changedOutput 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"
        +}
    • Changedpatch_manifest_and_config8 fields changed
      • addedInput schema / properties / additionalPermissions / description
        Added value: +"List of additional Android permissions to inject into AndroidManifest.xml (e.g. ['android.permission.INTERNET', 'android.permission.WAKE_LOCK'])"
      • addedInput schema / properties / customApplicationClass / description
        Added value: +"Fully qualified class name of injected Application subclass (e.g. 'com.example.injected.InjectedApplication')"
      • addedInput schema / properties / extractNativeLibs
        Added value: +{
        +  "description": "Set android:extractNativeLibs in application element for legacy native library extraction",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / hardwareAccelerated
        Added value: +{
        +  "description": "Set android:hardwareAccelerated='true' in application element for GPU hardware rendering",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / largeHeap
        Added value: +{
        +  "description": "Set android:largeHeap='true' in application element to increase RAM heap allocation",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / usesCleartextTraffic / description
        Added value: +"Set android:usesCleartextTraffic='true' in application tag to allow unencrypted HTTP traffic"
      • addedInput schema / properties / workspaceDir / description
        Added value: +"Path to decompiled APK workspace root directory containing AndroidManifest.xml (modified in-place)"
      • changedOutput 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"
        +}
    • Addedquery_memory_graph
    • Changedrecompile_align_and_sign9 fields changed
      • addedInput schema / properties / keystoreConfig / description
        Added value: +"Optional signing keystore configuration. If omitted, an auto-generated debug keystore is used"
      • addedInput schema / properties / keystoreConfig / properties / cn / description
        Added value: +"Common Name (CN) owner string for self-signed debug certificate"
      • addedInput schema / properties / keystoreConfig / properties / keyAlias / description
        Added value: +"Private key alias name inside signing keystore"
      • addedInput schema / properties / keystoreConfig / properties / keyPass / description
        Added value: +"Password for specific private key alias"
      • addedInput schema / properties / keystoreConfig / properties / keystorePass / description
        Added value: +"Keystore password for signing keystore access"
      • addedInput schema / properties / keystoreConfig / properties / keystorePath / description
        Added value: +"Path to custom JKS/PKCS12 signing keystore file (auto-generates debug keystore if omitted)"
      • addedInput schema / properties / outputApkPath / description
        Added value: +"Destination file path for final recompiled, 4-byte aligned, and cryptographically signed APK"
      • addedInput schema / properties / workspaceDir / description
        Added value: +"Path to decompiled APK workspace root directory containing modified Smali, assets, and AndroidManifest.xml"
      • changedOutput 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"
        +}
    • Changedsynthesize_flutter_payload6 fields changed
      • addedInput schema / properties / buildMode / description
        Added value: +"Flutter build mode target: 'release' (AOT production build), 'profile' (AOT performance build), 'debug' (JIT build)"
      • addedInput schema / properties / flutterProjectPath / description
        Added value: +"Path to source Flutter project root containing pubspec.yaml and lib/main.dart"
      • changedInput schema / properties / outputDir / description
        Previous value: -"Override payload output directory"New value: +"Optional custom directory path to write synthesized payload artifacts (defaults to system temp dir)"
      • addedInput schema / properties / targetAbis / description
        Added value: +"Target native CPU architectures to build payload binaries for (default: ['arm64-v8a', 'armeabi-v7a'])"
      • addedInput schema / properties / targetAbis / items / description
        Added value: +"Target Android Native ABI architecture (e.g. 'arm64-v8a' for modern 64-bit devices)"
      • changedOutput 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"
        +}
    • Addedupdate_agent_memory
  3. 6 tool updatesv0.1.2
    • First observedanalyze_injection_surface
    • First observeddecompile_apk
    • First observedinject_flutter_runtime_and_smali
    • First observedpatch_manifest_and_config
    • First observedrecompile_align_and_sign
    • First observedsynthesize_flutter_payload

TDQS

A4.6/5.0

Scored across 9 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides 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
    -
  • A
    license
    A
    quality
    F
    maintenance
    A 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.
    8
    74
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for Android APK triage, providing tools to parse APK headers, list DEX classes, and decode AndroidManifest.xml using apktool or androguard backends.
    5
    1
    MIT