Tools reference
17 MCP tools. Target elements by ref (from a snapshot), testID, or visible text. Action tools return only what changed (+ added, - removed, ~ changed) plus new JS errors and failed requests.
Jump to: app_status · app_snapshot · app_screenshot · app_layout · app_tap · app_type · app_batch · app_scroll · app_toggle · app_navigate · app_wait · app_dismiss_keyboard · app_logs · app_network · app_eval · app_reload · device_key
Read
app_snapshot
Compact outline of the visible screen with stable refs like [e3]. Cheaper than screenshots.
| Param | Type | Description |
|---|---|---|
maxLines | number | Default 400 |
app_screenshot
JPEG of the visible screen. saveTo writes a file (no image tokens); fullScroll captures a whole page.
| Param | Type | Description |
|---|---|---|
maxWidth | number | Pixels, default 400 (up to the device's real pixels) |
quality | number | 0–1, default 0.6 |
saveTo | string | File path to save instead of returning the image |
area | "auto" | "window" | Visible screen (default) or whole window |
fullScroll | boolean | Capture the main scroll view's whole content as one tall image |
app_layout
Element positions (dp) and font sizes, for alignment and overflow checks.
| Param | Type | Description |
|---|---|---|
limit | number | Max elements, default 250 |
Act
app_tap
Press a button or pressable. Returns only what changed, plus new errors and failed requests.
| Param | Type | Description |
|---|---|---|
ref | string | Ref from the last snapshot, e.g. "e4" (stable between snapshots) |
testID | string | The element's testID prop |
text | string | Visible label or placeholder (exact match first, then contains) |
long | boolean | Long-press |
snapshot | boolean | Report what changed afterwards (default true) |
full | boolean | Return the full screen instead of a diff |
app_type
Fill an input (replaces by default).
| Param | Type | Description |
|---|---|---|
ref | string | Ref from the last snapshot, e.g. "e4" (stable between snapshots) |
testID | string | The element's testID prop |
text | string | Visible label or placeholder (exact match first, then contains) |
value | string | Text to enter |
append | boolean | Keep the existing text |
submit | boolean | Fire onSubmitEditing (enter) |
snapshot | boolean | Report what changed afterwards (default true) |
full | boolean | Return the full screen instead of a diff |
app_batch
Several taps / types / scrolls / navigations in one call, one result. The fastest way to fill a form.
| Param | Type | Description |
|---|---|---|
steps | array | [{action:"tap"|"type"|"scroll"|"toggle"|"navigate"|"wait"|"dismiss_keyboard", …that tool's args}] |
snapshot | boolean | Report what changed afterwards (default true) |
full | boolean | Return the full screen instead of a diff |
app_scroll
Scroll a list or ScrollView (the first one on screen if no target).
| Param | Type | Description |
|---|---|---|
ref | string | Ref from the last snapshot, e.g. "e4" (stable between snapshots) |
testID | string | The element's testID prop |
text | string | Visible label or placeholder (exact match first, then contains) |
direction | "down" | "up" | "left" | "right" | "top" | "bottom" | Default down |
amount | number | Pixels, default ~70% of the screen |
snapshot | boolean | Report what changed afterwards (default true) |
full | boolean | Return the full screen instead of a diff |
app_toggle
Flip a Switch, or set it with value.
| Param | Type | Description |
|---|---|---|
ref | string | Ref from the last snapshot, e.g. "e4" (stable between snapshots) |
testID | string | The element's testID prop |
text | string | Visible label or placeholder (exact match first, then contains) |
value | boolean | Desired state |
snapshot | boolean | Report what changed afterwards (default true) |
full | boolean | Return the full screen instead of a diff |
app_wait
Wait until text or a testID appears (or disappears). Cheaper than polling.
| Param | Type | Description |
|---|---|---|
text | string | Text to wait for |
testID | string | testID to wait for |
gone | boolean | Wait for it to disappear |
timeout | number | ms, default 5000, max 30000 |
Debug
app_logs
Console logs and JS errors captured in the app (cursor-based).
| Param | Type | Description |
|---|---|---|
level | "log" | "info" | "warn" | "error" | "debug" | "error" = errors only, "warn" = warnings and errors |
search | string | Substring filter |
since | number | Only entries after this cursor |
limit | number | Default 50 |
clear | boolean | Clear the buffer |
app_network
fetch / XHR requests with status, timing and truncated bodies.
| Param | Type | Description |
|---|---|---|
failedOnly | boolean | Only failures |
search | string | Substring of the URL |
since | number | Cursor |
limit | number | Default 30 |
bodies | boolean | Include request/response bodies |
app_eval
Run JavaScript inside the app (dev only). bridge and RN are in scope.
| Param | Type | Description |
|---|---|---|
code | string | Expression, or statements with return |
app_reload
Reload the JS bundle, and say honestly if the app couldn't (e.g. Metro was restarted).
No parameters.
Device
device_key
Hardware keys on Android via adb: volume_up, volume_down, mute, back, home, app_switch, enter, tab, delete, power, menu, escape.
| Param | Type | Description |
|---|---|---|
key | string | One of the keys above |
repeat | number | 1–20 presses |