app_screen
This tool on every surface: CLI · MCP · Python · JavaScript · Go · Java · .NET
Read the screen, or make an Android device pretend to be a different one, and optionally report what is wrong with the layout at that size. A flow that works on the screen you happen to have is a flow tested once. Call with no argument to read. Pass a profile to apply it, or "reset" to put the device back — an override is a state left on the device and it outlives this session, so reset when done. Applying a profile invalidates the refs from the previous screen, because nothing is where it was. On iOS the screen is fixed when the simulator is created and cannot be changed while it runs, so this reads only and says which simulator to boot instead. With inspect=true it also reports overflow, touch targets below the platform minimum, text the platform truncated, and tappable elements with nothing to announce — each naming the element and the measurement.
Changes the device, the app or the session: readOnlyHint is false.
Arguments
| Name | Type | Required | What it is |
|---|---|---|---|
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). | |
inspect | boolean | Also report layout findings at this screen. Note that a touch-target finding can be wrong about a working screen: Android's TouchDelegate enlarges a tap area without changing the element's bounds, so treat those as worth looking at rather than as defects. | |
profile | string | A screen profile to apply (Android only), or "reset" to restore the physical screen. Omit to read. The answer always lists the profiles this platform knows. |
Examples
Each is the arguments of a tools/call request; the first is shown whole.
Read the screen: size, density, and the profiles it can pretend to be
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "app_screen",
"arguments": {}
}
}
On an Android 15 emulator the answer's text was:
1080x2400px @420dpi = 411x914dp (sw411dp)
Pretend to be a small phone, and back
{
"profile": "small-phone"
}
On a device

mobium screen small-phone on an Android 15 emulator