Skip to main content
Glama

act

Runs ordered Android UI automation steps in one call, batching taps, typing, swipes, waits, and app actions; stops at the first failure unless optional is set, then returns the screen.

Instructions

Run steps in order in ONE call; batch everything you can. Stops at the first failure (optional:true skips if missing). Returns the screen. Target (tap/long_press/type/wait_*): ref | x,y | text (also content-desc; exact, else contains; '/re/' = regex) | id | desc, + below/above/leftOf/rightOf/childOf/containsChild:, index:n, checked/enabled/selected/focused:bool. x,y may be '50%'. Ops: tap, long_press{ms}, type{value, field?=its label, submit?, append?} (no target = focused), scroll{dir:down|up|left|right, until?:target, max?}, swipe{x1,y1,x2,y2,ms?}, key{key:back|home|enter|recents|delete|tab|}, wait_for{target, timeout?=5000}, wait_gone{target, timeout?}, wait_idle{quietMs?=300, timeout?}, sleep{ms}, launch{package, args?:{k: v}}, stop_app{package}, clear_app{package} (wipes data), install_app{path, grant?}, uninstall_app{package}, open_link{url, package?}, permissions{package, grant?:[CAMERA..]|'all', revoke?}, logs{package?, level?=W, since?=60s, lines?=50}, apps{filter?}, screenshot{name} (name or path; saved, not shown), observe, hide_keyboard, repeat{times? | while?:{visible|notVisible: target}, steps}, run_flow{file? | steps?, vars?, when?:{visible|notVisible: target | true: '${!!X}'}}: subflow (file relative to the flow), skipped if when fails.

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

Input Schema

NameRequiredDescriptionDefault
stepsYes
observe_afterNodefault true

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.3/5.0
Behavior5/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 so extensively: execution order, first-failure stopping, optional-step skipping, return value, timeout defaults, subflow skipping, and destructive behavior like clear_app wiping data. It also clarifies that screenshots are saved rather than shown.

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?

The description is dense but appropriately so for a large DSL-style action tool. It is front-loaded with purpose and failure behavior, then organized into target selectors and operations, with no obvious filler.

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?

Given the tool's complexity, the absence of annotations, and the loose input schema, the description covers most critical behavior and operation semantics. The main gaps are the unexplained observe_after parameter and a very terse statement of the return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only requires steps with a generic op field and leaves operation-specific properties unconstrained, so the description adds substantial meaning by enumerating operations, target selector syntax, and many operation-specific arguments. It does not mention the observe_after parameter, leaving a small semantic gap.

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 a specific action: run ordered steps in a single call and batch aggressively. The multi-step, one-call purpose is clear, but sibling differentiation is only implied; it does not explicitly explain when to use this tool versus observe, screenshot, or flow.

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?

It gives clear usage context by saying to batch everything into one call and that execution stops at the first failure, with optional steps skipped if missing. Conditional run_flow behavior is also documented. It stops short of naming when not to use this tool or explicitly routing to sibling tools.

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

Deploy Server

Other Tools