run_steps
Batch sequential UI actions (tap, type, swipe, wait) into one call to eliminate per-gesture round-trips for fast flows like login and form filling.
Instructions
Execute an ordered batch of UI actions in ONE call via the native backend (idb/mobilecli, sub-second; Maestro fallback per step). Eliminates per-gesture MCP round-trips for fast continuous flows (login, navigation, form fill). Step actions: tap {x,y} · tapText {text|id} · type {text,submit} · key · swipe · waitFor {text,timeoutMs} · assertVisible {text} · waitMs · screenshot. Prefer waitFor over waitMs to act the instant the UI is ready instead of sleeping. WebView note: web-rendered text is invisible to tapText — use tap {x,y} for it; type uses real keystrokes so React onChange fires. Stops at the first failed step unless stopOnError:false. bundleId is only needed for the Maestro fallback (auto-detected otherwise). When to use: pick run_steps for >2 known sequential gestures (login, navigation, form fill); use run_flow for Maestro assertions/conditionals/loops/retries; use the individual gesture tools (tap_on, swipe, …) for a single exploratory action.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Simulator / device UDID (from device_list) | |
| bundleId | No | App bundle id for Maestro fallbacks (auto-detected from the foreground app if omitted). | |
| steps | Yes | Ordered list of actions to perform. | |
| stopOnError | No | Stop at the first failed step (default true). false = run all and report each. | |
| stepDelayMs | No | Optional fixed delay inserted after every step (default 0). |