app_record
This tool on every surface: CLI · MCP · Python · JavaScript · Go · Java · .NET
Record the screen to a video: start, stop with a path to save it, or omit the action to ask whether a recording is running. The saved file is checked by what it holds — its frame count and duration, read from its own header — and a recorder that could not finish is reported, not saved as if it had. Android records a frame only when the screen changes, so a still screen is one frame; that is not a failure. One recording per device; ending the session finishes and discards it. A real iPhone records WebDriverAgent's screen stream, about ten frames a second at full size.
Changes the device, the app or the session: readOnlyHint is false.
Arguments
| Name | Type | Required | What it is |
|---|---|---|---|
action | string: start, stop | start or stop. Omit to ask whether a recording is running. | |
device | string | Device serial to target, e.g. "emulator-5554". Omit when only one device is running. | |
driver | string: uiautomator2, uiautomator, wda | Driver to use: "uiautomator2" (default for Android; fast, installs a server APK on first use), "uiautomator" (Android, installs nothing, slower, cannot type), or "wda" (WebDriverAgent: iOS simulators and iPhones). | |
path | string | Where to save the video, on stop — an .mp4 on this machine. | |
return_data | boolean | On stop without a path: return the video, base64, instead of saving it — for a daemon on another machine; the CLI and pipe ask for it and save it where the caller said. |
Examples
Each is the arguments of a tools/call request; the first is shown whole.
Start recording the screen
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "app_record",
"arguments": {
"action": "start"
}
}
}
On an Android 15 emulator the answer's text was:
recording — stop it with action "stop" and a path
Stop, and save the video
{
"action": "stop",
"path": "flow.mp4"
}
On an Android 15 emulator the answer's text was:
saved …/flow.mp4: 54 frames, 1.605s of video, recorded over 1.705s