Skip to main content
Glama

act

Destructive

Do one thing on the phone yourself, then wait until the screen settles. Prefer element numbers from observe over coordinates; tap_text taps the element whose text contains text. Typing goes into the focused field (tap it first) and works in any language. "the screen did not change" means the action probably missed - observe again. Read without touching the screen: installed (apps), notifications (the shade), clipboard, app_info (version, installer, running), crashes (recent app crashes and ANRs), health (running, booted, network exit, last check). For a whole goal, prefer run: it does all the steps for you.

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": {
      "device": "<device>",
      "action": "<action>"
    },
    "name": "act"
  }
}

Input Schema

NameRequiredDescriptionDefault
xNox in screenshot pixels (tap, long_press, swipe start)
yNoy in screenshot pixels
msNoswipe / long_press duration in ms
x2Noswipe end x
y2Noswipe end y
textNotype: the text; key: home|back|recents|enter|tab|del|menu; scroll: down|up; open_app/close_app/app_info/crashes: package; open_url: https://...; tap_text/wait_text: text on screen; settings: wifi|bluetooth|display|sound|apps|location|about|battery|...; intent: a URI to view (geo:, tel:, https:...) or JSON {action,data,package,component,extras}; clipboard_set: the text
actionYesone of: tap long_press swipe scroll tap_text wait_text type key open_app close_app open_url intent settings clipboard_set notifications_open notifications_close notifications_clear | read: installed notifications clipboard app_info crashes health
deviceYesDevice from devices: its name, its label from the dashboard (e.g. "Pixel 7 #3") or its number
elementNoelement number from the last observe (tap, long_press)
timeoutNowait_text: seconds to wait, up to 120

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / action / description
      Previous value: -"one of: tap long_press swipe scroll tap_text wait_text type key open_app close_app open_url installed intent settings clipboard_set notifications_open notifications_close notifications_clear"New value: +"one of: tap long_press swipe scroll tap_text wait_text type key open_app close_app open_url intent settings clipboard_set notifications_open notifications_close notifications_clear | read: installed notifications clipboard app_info crashes health"
    • changedInput schema / properties / device / description
      Previous value: -"Device from devices (op=list): its name, its label from the dashboard (e.g. \"Anna IG\" or \"Pixel 7 #3\") or its number"New value: +"Device from devices: its name, its label from the dashboard (e.g. \"Pixel 7 #3\") or its number"
    • changedInput schema / properties / text / description
      Previous value: -"type: the text; key: home|back|recents|enter|tab|del|menu; scroll: down|up; open_app/close_app: package; open_url: https://...; tap_text/wait_text: text on screen; settings: wifi|bluetooth|display|sound|apps|location|about|battery|...; intent: a URI to view (geo:, tel:, https:...) or JSON {action,data,package,component,extras}; clipboard_set: the text"New value: +"type: the text; key: home|back|recents|enter|tab|del|menu; scroll: down|up; open_app/close_app/app_info/crashes: package; open_url: https://...; tap_text/wait_text: text on screen; settings: wifi|bluetooth|display|sound|apps|location|about|battery|...; intent: a URI to view (geo:, tel:, https:...) or JSON {action,data,package,component,extras}; clipboard_set: the text"
  2. Changed1 schema field changed
    • changedInput schema / properties / device / description
      Previous value: -"Device name from devices (op=list), e.g. dev_04f2"New value: +"Device from devices (op=list): its name, its label from the dashboard (e.g. \"Anna IG\" or \"Pixel 7 #3\") or its number"
  3. Changed10 schema fields changed
    • addedInput schema / properties / action / description
      Added value: +"one of: tap long_press swipe scroll tap_text wait_text type key open_app close_app open_url installed intent settings clipboard_set notifications_open notifications_close notifications_clear"
    • addedInput schema / properties / device / description
      Added value: +"Device name from devices (op=list), e.g. dev_04f2"
    • addedInput schema / properties / element
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "element number from the last observe (tap, long_press)",
      +  "title": "Element"
      +}
    • addedInput schema / properties / ms / description
      Added value: +"swipe / long_press duration in ms"
    • addedInput schema / properties / text / description
      Added value: +"type: the text; key: home|back|recents|enter|tab|del|menu; scroll: down|up; open_app/close_app: package; open_url: https://...; tap_text/wait_text: text on screen; settings: wifi|bluetooth|display|sound|apps|location|about|battery|...; intent: a URI to view (geo:, tel:, https:...) or JSON {action,data,package,component,extras}; clipboard_set: the text"
    • addedInput schema / properties / timeout / description
      Added value: +"wait_text: seconds to wait, up to 120"
    • addedInput schema / properties / x / description
      Added value: +"x in screenshot pixels (tap, long_press, swipe start)"
    • addedInput schema / properties / x2 / description
      Added value: +"swipe end x"
    • addedInput schema / properties / y / description
      Added value: +"y in screenshot pixels"
    • addedInput schema / properties / y2 / description
      Added value: +"swipe end y"
  4. First observed

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructive=true, openWorld=true and non-idempotent, so the safety profile is covered. The description adds real behavioral context the annotations cannot: the call blocks until the screen settles, a no-change result is a probable miss, and read actions (installed/notifications/clipboard/app_info/crashes/health) do not touch the UI. It does not discuss permissions or what a destructive action can actually break.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph covering failure handling, input preference, and a full read-action list. The read-action enumeration and the action names largely duplicate the `action` and `text` schema descriptions, so several clauses do not earn their place; no structure is used to separate routing advice from action documentation.

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 21-action dispatcher with 10 parameters, the description covers the critical unknowns: blocking/settle behavior, failure interpretation, focus requirement for typing, and the read-only action subset. An output schema exists, so return values need not be explained, and defaults for ms/timeout are handled by the schema.

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 coverage is 100%, so the schema already documents every parameter, including the per-action `text` mapping and coordinate meanings. The description adds only marginal extra meaning, chiefly that `tap_text` matches elements whose text *contains* the string (substring, not exact) and that `element` comes from the last `observe`. Baseline 3 applies when the schema carries the detail.

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 opening sentence is vague ("Do one thing on the phone yourself"), but the body makes the scope concrete: a single device action drawn from a named action set, plus read-only variants. It distinguishes itself from siblings explicitly, telling the agent to use `observe` for element numbers and `run` for a whole goal.

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

Usage Guidelines5/5

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

It gives explicit routing rules: prefer `element` from the last `observe` over raw coordinates, use `run` when the task is a multi-step goal, and re-`observe` when the screen did not change. It also states a prerequisite ordering for typing (tap the field first).

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.