Skip to main content
Glama

Install an APK

install_apk

Installs a local APK on one Android device via adb, with optional device serial, replacement flag, and timeout. Returns INSTALL_FAILED_* details when installation fails.

Instructions

Install a local APK on one device via adb install. Fails with INSTALL_FAILED_* details from the device when the package cannot be installed.

Input Schema

NameRequiredDescriptionDefault
deviceNoDevice serial from list_devices; optional when exactly one device is connected.
replaceNoPass -r to replace an already installed package (default false).
apk_pathYesPath to the APK on the host machine (not on the device).
timeout_msNoInstall timeout in milliseconds (default 120000; large APKs are slow).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.6.0

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare the safety profile (not read-only, not idempotent, not destructive), so the bar is lower. The description still adds real behavioral value by disclosing the failure mode: issues surface as INSTALL_FAILED_* codes from the device. It does not cover whether `replace` preserves or wipes existing app data, which is the main remaining gap.

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 tight sentences with zero filler; the core action is front-loaded and the failure behavior follows immediately. Nothing here could be cut without losing information.

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 single-device install tool with full parameter coverage and annotations carrying the safety profile, the description covers purpose and the notable failure path. Since there is no output schema, the agent would benefit from a note on what a successful return looks like, but the INSTALL_FAILED_* disclosure covers the most important return behavior.

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 all four parameters (device, replace, apk_path, timeout_ms) are already documented, including defaults and the host-vs-device path distinction. The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: installs a local APK via `adb install`, and clarifies it operates on one device. This distinguishes it well from adjacent tools like push_file (which moves bytes without installing) or launch_package (which runs an already-installed app). It stops short of explicitly naming a sibling, so a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites (e.g., device connected, output of list_devices needed), and no routing to alternatives such as push_file. The phrase 'Install a local APK on one device' implies context but does not instruct the agent when this tool is the right choice.

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