Skip to content
Expo Agent Kit

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_status

Is the phone connected? Device, OS, screen size, SDK.

No parameters.

app_snapshot

Compact outline of the visible screen with stable refs like [e3]. Cheaper than screenshots.

ParamTypeDescription
maxLinesnumberDefault 400

app_screenshot

JPEG of the visible screen. saveTo writes a file (no image tokens); fullScroll captures a whole page.

ParamTypeDescription
maxWidthnumberPixels, default 400 (up to the device's real pixels)
qualitynumber0–1, default 0.6
saveTostringFile path to save instead of returning the image
area"auto" | "window"Visible screen (default) or whole window
fullScrollbooleanCapture the main scroll view's whole content as one tall image

app_layout

Element positions (dp) and font sizes, for alignment and overflow checks.

ParamTypeDescription
limitnumberMax elements, default 250

Act

app_tap

Press a button or pressable. Returns only what changed, plus new errors and failed requests.

ParamTypeDescription
refstringRef from the last snapshot, e.g. "e4" (stable between snapshots)
testIDstringThe element's testID prop
textstringVisible label or placeholder (exact match first, then contains)
longbooleanLong-press
snapshotbooleanReport what changed afterwards (default true)
fullbooleanReturn the full screen instead of a diff

app_type

Fill an input (replaces by default).

ParamTypeDescription
refstringRef from the last snapshot, e.g. "e4" (stable between snapshots)
testIDstringThe element's testID prop
textstringVisible label or placeholder (exact match first, then contains)
valuestringText to enter
appendbooleanKeep the existing text
submitbooleanFire onSubmitEditing (enter)
snapshotbooleanReport what changed afterwards (default true)
fullbooleanReturn 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.

ParamTypeDescription
stepsarray[{action:"tap"|"type"|"scroll"|"toggle"|"navigate"|"wait"|"dismiss_keyboard", …that tool's args}]
snapshotbooleanReport what changed afterwards (default true)
fullbooleanReturn the full screen instead of a diff

app_scroll

Scroll a list or ScrollView (the first one on screen if no target).

ParamTypeDescription
refstringRef from the last snapshot, e.g. "e4" (stable between snapshots)
testIDstringThe element's testID prop
textstringVisible label or placeholder (exact match first, then contains)
direction"down" | "up" | "left" | "right" | "top" | "bottom"Default down
amountnumberPixels, default ~70% of the screen
snapshotbooleanReport what changed afterwards (default true)
fullbooleanReturn the full screen instead of a diff

app_toggle

Flip a Switch, or set it with value.

ParamTypeDescription
refstringRef from the last snapshot, e.g. "e4" (stable between snapshots)
testIDstringThe element's testID prop
textstringVisible label or placeholder (exact match first, then contains)
valuebooleanDesired state
snapshotbooleanReport what changed afterwards (default true)
fullbooleanReturn the full screen instead of a diff

app_navigate

Open an expo-router path or a deep link.

ParamTypeDescription
pathstringe.g. "/settings"
replacebooleanReplace instead of push (keeps the stack shallow)
snapshotbooleanReport what changed afterwards (default true)
fullbooleanReturn the full screen instead of a diff

app_wait

Wait until text or a testID appears (or disappears). Cheaper than polling.

ParamTypeDescription
textstringText to wait for
testIDstringtestID to wait for
gonebooleanWait for it to disappear
timeoutnumberms, default 5000, max 30000

app_dismiss_keyboard

Hide the on-screen keyboard.

No parameters.

Debug

app_logs

Console logs and JS errors captured in the app (cursor-based).

ParamTypeDescription
level"log" | "info" | "warn" | "error" | "debug""error" = errors only, "warn" = warnings and errors
searchstringSubstring filter
sincenumberOnly entries after this cursor
limitnumberDefault 50
clearbooleanClear the buffer

app_network

fetch / XHR requests with status, timing and truncated bodies.

ParamTypeDescription
failedOnlybooleanOnly failures
searchstringSubstring of the URL
sincenumberCursor
limitnumberDefault 30
bodiesbooleanInclude request/response bodies

app_eval

Run JavaScript inside the app (dev only). bridge and RN are in scope.

ParamTypeDescription
codestringExpression, 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.

ParamTypeDescription
keystringOne of the keys above
repeatnumber1–20 presses