The DSL is the primary path and the rest of the surface is built around it — the fast screenshot returns a scale factor precisely because the image was downscaled and coordinates read off it would otherwise land in the wrong place. The debugger half is iOS-only, speaking Swift and ObjC at a paused frame, so Android investigation stops at logs and the UI tree. Read the server's own DSL reference resource before the first automation call: the action set, predicates and failure strategies are documented there rather than in the tool descriptions.
A device automation server for Android and iOS, driving everything through one batched DSL call, with companion tools for device discovery, app lifecycle, stored test cases and a live iOS debug session.
- Devices enumerated with their locality attached: one flag marks a device held by a peer node, another marks a cloud farm device, and the automation tools reach all three while adb and simctl reach only the local ones
- One automation entry point that runs a batch of DSL steps per call — taps, typing, swipes, waits, predicates, assertions and conditional branches — with retry and failure strategy handled server-side
- Screenshots in two grades: a downscaled one for the model, kept at or under 2000px on the long edge and returned with the scale factor to multiply read-off coordinates by, and a full-quality PNG written to disk
- App lifecycle on the device: install from a local .apk or .ipa with resigning inputs for iOS, uninstall, list, and a debug launch that writes logs to a path handed back
- A real iOS debug session — attach by bundle_id or pid, arm breakpoints, step in, over, out or continue, read the stopped thread's stack and frame[0] locals, and evaluate a Swift or ObjC expression at the pause
- Test cases kept as .mob files in a project directory, listed and run against a device with ${name} substitution from supplied parameters
- Device leases for shared hosts, reserved up front under a holder label and released individually or all at once
Node.js 18 or newer, and the MobAI desktop app running on the same machine — the server talks to its HTTP API at 127.0.0.1:8686, and a connection refused here means the app is not up. A connected device, emulator or simulator, with the automation bridge started on it before anything interacts; the iOS bridge can take up to a minute to come up. Cloud devices take the build through the install call, which returns a reference the bridge is then started against. Resigning an iOS build needs a certificate, a key and a provisioning profile. Apache-2.0.
One command — npx -y mobai-mcp
