Skip to main content
Glama

install_apk

Destructive

Installs or reinstalls an APK from an allowed server directory onto an Android device, optionally targeting a device by serial while preserving app data.

Instructions

Install (or reinstall, keeping data) an APK from the allowed APK directory.

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": {
      "apk_path": "<apk_path>"
    },
    "name": "install_apk"
  }
}

Input Schema

NameRequiredDescriptionDefault
serialNo
apk_pathYesFile name or path of an .apk inside the server's APK directory.

Output Schema

NameRequiredDescriptionDefault
apkYes
serialYes
sha256Yes
dry_runYes
installedYes
size_bytesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=false, yet the description adds genuinely new context: a reinstall preserves existing app data, and the APK source is restricted to the server's allowed APK directory. It stops short of describing failure modes or device-state requirements.

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?

A single tight sentence with the action front-loaded and the parenthetical clarification placed where it is most useful. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema and annotations cover return values and the safety profile, so the description need not explain those. However, for a destructive mutation on a device it omits prerequisites (online device, APK already present in the directory) and what happens on failure, leaving an agent to infer them.

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 50%, so the serial parameter's meaning (device serial from list_devices, optional with a single online device) is fully carried by the schema. The description adds nothing about apk_path beyond a vague restatement of the 'allowed APK directory' constraint, so 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 and resource ('Install ... an APK') plus scope ('from the allowed APK directory'), which is unambiguous. It does not name a sibling or explicitly separate itself from flow-alternatives like launch_app, so it falls just short of 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 or when-not-to-use guidance, no prerequisite such as a device being online or listed via list_devices, and no note on whether the app must be launched afterwards. Usage is only implied by the tool's name and purpose.

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