Skip to main content
Glama

android_install

Install an already-built APK onto a connected Android device, resolving signature or version conflicts by optionally uninstalling the existing app and granting runtime permissions at install time.

Instructions

Install an already-built APK (no Gradle involved).

Args: project_dir: Gradle root; the APK is found from the module's build outputs. apk: Explicit APK path instead of project_dir. module: App module inside project_dir. variant: Build variant whose APK to install. device: Device serial; defaults to the first physical device. allow_uninstall: On signature/version conflicts, uninstall first (WIPES APP DATA). grant_permissions: Grant all runtime permissions at install time (-g).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
apkNo
deviceNo
moduleNoapp
variantNodebug
project_dirNo
allow_uninstallNo
grant_permissionsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden and does substantive work: it flags the destructive consequence of allow_uninstall with 'WIPES APP DATA', discloses that device 'defaults to the first physical device', and explains grant_permissions via '-g'. The critical side effects are surfaced, though some behaviors (e.g., behavior with no connected device, failure output) go unmentioned.

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?

One front-loaded summary sentence followed by a terse Args block. Every line earns its place: the data-wipe warning, the device default, and the -g flag are all packed in without filler. Slightly list-like formatting, but it is the minimal efficient size for a 7-parameter tool with zero schema descriptions.

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 a 7-parameter mutating tool with no annotations and no output schema, the description covers everything needed to invoke it correctly: all params explained, the destructive side effect called out, and defaults specified. Minor gaps (return value shape, prerequisite of a running device/emulator) keep it from a 5.

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 description coverage is 0%, yet the description documents all 7 parameters with operational meaning: the project_dir vs apk alternation, the 'Gradle root' relationship, the variant/module scoping, device defaulting, and the conflict-resolution semantics of allow_uninstall. This fully compensates for the empty schema.

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?

Opens with a specific verb + resource: 'Install an already-built APK', and immediately disambiguates from the Gradle build lifecycle with '(no Gradle involved)'. In a sibling set containing android_build and android_prepare, this clearly positions the tool as the install step.

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 phrase 'already-built APK (no Gradle involved)' gives clear contextual usage: this is the post-build install step, and the agent should not expect compilation here. It states an exclusion but never names the alternative explicitly (e.g., 'use android_build to compile first'), so selection is clear context rather than explicit routing.

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