Skip to main content
Glama

Press Button

mobile_press_button
Destructive

Press buttons on mobile devices to navigate interfaces, control volume, or execute commands during automated testing or interaction workflows.

Instructions

Press a button on device

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
buttonYesThe button to press. Supported buttons: BACK (android only), HOME, VOLUME_UP, VOLUME_DOWN, ENTER, DPAD_CENTER (android tv only), DPAD_UP (android tv only), DPAD_DOWN (android tv only), DPAD_LEFT (android tv only), DPAD_RIGHT (android tv only)

Implementation Reference

  • The handler function for the mobile_press_button tool. It requires a device/robot to be selected and calls the pressButton method on it with the provided button argument.
    async ({ button }) => {
    	requireRobot();
    	await robot!.pressButton(button);
    	return `Pressed the button: ${button}`;
    }
  • Zod input schema for the tool, defining the 'button' parameter as a string with description of supported buttons.
    {
    	button: z.string().describe("The button to press. Supported buttons: BACK (android only), HOME, VOLUME_UP, VOLUME_DOWN, ENTER, DPAD_CENTER (android tv only), DPAD_UP (android tv only), DPAD_DOWN (android tv only), DPAD_LEFT (android tv only), DPAD_RIGHT (android tv only)"),
    },
  • src/server.ts:314-325 (registration)
    Registration of the mobile_press_button tool using the custom tool() helper function, which internally registers it with the MCP server.
    tool(
    	"mobile_press_button",
    	"Press a button on device",
    	{
    		button: z.string().describe("The button to press. Supported buttons: BACK (android only), HOME, VOLUME_UP, VOLUME_DOWN, ENTER, DPAD_CENTER (android tv only), DPAD_UP (android tv only), DPAD_DOWN (android tv only), DPAD_LEFT (android tv only), DPAD_RIGHT (android tv only)"),
    	},
    	async ({ button }) => {
    		requireRobot();
    		await robot!.pressButton(button);
    		return `Pressed the button: ${button}`;
    	}
    );

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv1.0.0
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / device
      Added value: +{
      +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "button"
      -]New value: +[
      +  "device",
      +  "button"
      +]
  2. First observed

TDQS

C2.9/5.0
Behavior2/5

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

The destructiveHint annotation is present, but the description adds no behavioral context beyond restating the action. It does not mention potential side effects like navigation changes or platform-specific behavior, which would be valuable despite the annotation.

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, concise sentence with no unnecessary words. It is front-loaded and to the point, though it could be slightly more informative without losing brevity.

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?

The rich schema and destructiveHint annotation help compensate for the sparse description. However, it lacks contextual cues to differentiate from sibling input tools and does not explicitly state that it handles hardware/device buttons, relying on the schema for that distinction.

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% and includes detailed descriptions for both parameters, including a list of supported buttons and a reference to mobile_list_available_devices. The tool description itself adds no parameter semantics, so the baseline score of 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?

The description states 'Press a button on device', which is a clear verb+resource. However, it does not explicitly distinguish from sibling input tools like clicking on screen or typing keys, so it is clear but lacks strong differentiation.

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 guidance on when to use this tool versus alternatives. No mention of platform limitations or use cases is provided, leaving the agent to infer from the schema.

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