Skip to main content
Glama

Convert .aab > installable .apk

qa_bundletool

Converts an Android .aab into an installable APK with bundletool, caching artifacts for QA setup; optionally builds a device-specific APK set or installs it with consent.

Instructions

Convert an .aab into an installable APK with bundletool (cached in .swipium/artifacts/) before qa_prepare_target. Default: a universal APK; connectedDevice:true builds a device APK set, install:true installs it (consent-gated). Runs as a job.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "sessionId": "<sessionId>"
    },
    "name": "qa_bundletool"
  }
}

Input Schema

NameRequiredDescriptionDefault
aabNoDefault: the best .aab in the project.
forceNoRebuild even if cached.
deviceNoadb serial (default: session device, else SWIPIUM_DEVICE, else the only one).
approveNo
installNoWith connectedDevice: install-apks on the device (consent-gated).
consentIdNo
sessionIdYes
connectedDeviceNoDevice-specific APK set (--connected-device).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write/non-open-world/non-idempotent profile, and the description adds real context on top: artifacts are cached in .swipium/artifacts/, force controls rebuilds, install is consent-gated, and execution happens as a job. What is not disclosed is how the job's outcome is retrieved (job status polling, which sibling to call), which matters for a job-returning tool.

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 dense clauses with the default behavior leading and the mode-switching flags trailing; no filler, and the workflow anchor is placed early enough to orient the agent.

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?

For an 8-parameter, no-output-schema tool this covers purpose, default behavior, caching, consent, and async execution adequately. The main gap is lifecycle: nothing says where the resulting APK path is reported or which sibling to call to await the job.

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 63%, so baseline is 3. The description adds one genuinely new fact — that the default output is a universal APK — but otherwise restates what the schema already says (connectedDevice builds a device APK set, install is consent-gated, aab defaults to the best .aab), and leaves approve/consentId and force's exact semantics unexplained in both places.

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 a specific verb and transformation ('Convert an .aab into an installable APK'), names the underlying tool (bundletool), and anchors the operation in the workflow ('before qa_prepare_target'), which separates it from the surrounding qa_ build/prepare siblings.

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?

It gives clear ordering guidance relative to qa_prepare_target and spells out which mode to pick via connectedDevice/install, so an agent knows the default path versus the device path. It stops short of saying when not to use this tool (e.g., when a cached APK already exists and force is false, or when qa_build already produced an APK).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.