mobile-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MOBILEMCP_AUTH | No | Require a Bearer token on the Streamable HTTP server (`--listen`) — every request must then send `Authorization: Bearer <token>`. | |
| MOBILEMCP_ADB_PATH | No | Path to the `adb` executable used to enrich Android coordinate metadata. If unset, the standard Android SDK locations and PATH are searched. | |
| MOBILEMCP_APP_ALIASES | No | JSON object mapping human-facing app aliases to a package/bundle identifier or an array of identifiers. | |
| MOBILEMCP_OUTPUT_ROOT | No | Restrict screenshot, log, and recording artifacts to a dedicated root directory. Existing files and symbolic-link paths are never overwritten. | |
| MOBILEMCP_LEGACY_ROBOT | No | Use the legacy platform-specific robots for Android devices and physical iOS devices. iOS simulators continue to use `mobilecli`. | |
| MOBILEMCP_ALLOWED_ORIGINS | No | Comma-separated browser origins allowed to call the HTTP endpoint when an `Origin` header is present. | |
| MOBILEMCP_APP_ALIASES_FILE | No | Path to a static JSON app-alias file. It supplements, rather than replaces, current device-locale labels. | |
| MOBILEMCP_ALLOW_UNSAFE_URLS | No | Allow `mobile_open_url` to open non-standard URL schemes (blocked by default). | |
| MOBILEMCP_DISABLE_TELEMETRY | No | Disable anonymous usage telemetry. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| mobile_list_available_devicesA | List all available devices. This includes both physical mobile devices and mobile simulators and emulators. It returns both Android and iOS devices. These are local devices already connected to this machine, ready to use immediately at no cost - for devices from the shared remote cloud fleet, use mobile_list_remote_devices instead. |
| mobile_login_to_cloud_providerA | Start authenticating this machine with the remote device cloud provider. This is required once before mobile_list_remote_devices or mobile_allocate_remote_device will work; if either of those fails with an authentication error, call this tool and then retry. This starts a browser-based device-code login and returns quickly with a URL and a one-time code - it does NOT wait for the login to complete. Show the URL and code to the user verbatim and ask them to open the URL and enter the code in their own browser. The login keeps running in the background after this tool returns; once the user confirms they've completed it, retry the remote devices tool that originally failed. Only call this after the user has explicitly asked to connect to, log into, or use remote/cloud devices - never call it speculatively, since it interrupts the user to act in their browser. |
| mobile_list_remote_devicesA | List the catalog of device models (make, platform, OS version) available to reserve from the remote cloud device fleet. This is different from mobile_list_available_devices, which lists real devices and simulators/emulators already connected to this local machine and ready to use immediately at no cost. Remote devices live in a shared cloud fleet: they are not usable until reserved with mobile_allocate_remote_device, and reserving one may be a limited/billed resource. Requires mobile_login_to_cloud_provider to have been called first; if this fails with an authentication error, call that tool then retry. |
| mobile_allocate_remote_deviceA | Reserve a physical device from the remote cloud fleet for exclusive use, returning a device identifier usable with the other mobile_* tools. Unlike local devices, a remote device is a shared and billed resource borrowed for the session - only call this after the user has explicitly asked to use a remote/cloud device, never speculatively or as a fallback when a local device isn't found. Requires mobile_login_to_cloud_provider to have been called first; if this fails with an authentication error, call that tool then retry. Use mobile_list_remote_devices first to see which names and versions actually exist in the fleet before filtering by them. Release the device with mobile_release_remote_device once the whole task is finished - releasing wipes the device's state, so do not release and reallocate between steps of the same task just to be tidy. |
| mobile_release_remote_deviceA | Release a device previously reserved with mobile_allocate_remote_device back to the remote cloud fleet so it becomes available to others. Releasing is destructive to the device's state: apps installed, files pushed, and any other changes made during this session are lost, and a later mobile_allocate_remote_device call may take time and could return a different physical unit. Only release once the whole task is finished - if there is more work to do on the same device shortly, keep holding it rather than releasing and reallocating. |
| mobile_list_appsA | List apps known by the device backend, including the current device-locale label when available. Use mobile_resolve_app to resolve a human-facing name without guessing. |
| mobile_resolve_appA | Resolve an app by package name or by the app label currently exposed by the device locale. Matching is exact after Unicode/whitespace normalization; ambiguous labels are rejected instead of guessed. |
| mobile_get_foreground_appA | Get the app currently in the foreground on the device. Use this to verify which app or screen you are on before interacting with it. |
| mobile_launch_appA | Launch an app directly without navigating the home screen. Identify it by packageName or by the label in the device's current locale. By default, wait until the requested app is confirmed in the foreground; use mobile_launch_and_ready when a fresh validated screenshot is also needed. |
| mobile_wait_for_appA | Wait until an app is in the foreground and/or an exact visible UI target appears. This is read-only and does not launch, terminate, or otherwise change the app. |
| mobile_launch_and_readyA | Launch an app directly, wait until it is confirmed ready, and return a fresh frame-validated screenshot snapshot for immediate interaction. This is the preferred one-call app entry point for agents. |
| mobile_terminate_appA | Stop and terminate an app on mobile device. Identify it by package name or by its current device-locale label. |
| mobile_restore_previous_appA | Return to the app that was foreground before the last verified app launch or app-link session. The destination is re-observed and old screenshots/refs are not restored. |
| mobile_get_app_capabilitiesA | Inspect the app inventory record used for resolution and launch planning. Reports whether the backend knows the app as installed, enabled, and launchable; unknown fields remain explicit instead of being inferred. |
| mobile_install_appC | Install an app on mobile device |
| mobile_uninstall_appA | Uninstall an app from mobile device |
| mobile_get_screen_sizeA | Get the screen size of the mobile device in pixels |
| mobile_click_on_screen_at_coordinatesA | Click on the screen at x,y coordinates, on an element by its ref (e.g. "@e5"), or on one exact unique target object with text/label/name/identifier/type. Prefer ref or a unique target when the element is listed. Ambiguous targets are rejected. Screenshot coordinates require the snapshotId returned by mobile_take_screenshot; the server validates that the display and geometry have not changed before tapping. |
| mobile_double_tap_on_screenB | Double-tap on the screen at given x,y coordinates. |
| mobile_long_press_on_screen_at_coordinatesA | Long press on the screen at given x,y coordinates. If long pressing on an element, use the mobile_list_elements_on_screen tool to find the coordinates. |
| mobile_list_elements_on_screenA | List elements on screen with their ref, coordinates, and display text or accessibility label. Use the ref with mobile_click_on_screen_at_coordinates. Refs and coordinates stay valid as long as the screen does not change; re-list only after navigation or a layout change. |
| mobile_press_buttonC | Press a button on device |
| mobile_open_urlA | Open a URL in browser on device |
| mobile_ensure_appA | Ensure an app is installed, optionally install it from a local package when it is missing, and optionally launch it with foreground/readiness verification. Use mobile_launch_and_ready when a screenshot snapshot is needed in the same call. |
| mobile_open_app_linkA | Open a URL or app deep link and verify that the requested app becomes foreground. Use packageName or the device-locale appName to bind the expected destination; unknown or dangerous URL schemes remain blocked unless explicitly allowed by MOBILEMCP_ALLOW_UNSAFE_URLS=1. |
| mobile_swipe_on_screenC | Swipe on the screen |
| mobile_type_keysA | Type text into the focused element. Optionally provide a ref or exact target to focus immediately before typing; ambiguous or stale targets are rejected. |
| mobile_save_screenshotB | Save a screenshot of the mobile device to a file |
| mobile_take_screenshotA | Take a screenshot of the mobile device and create a short-lived, frame-validated snapshot. Use the returned snapshotId with mobile_click_on_screen_at_coordinates and coordinateSpace=screenshot when tapping a point read from this image. Do not cache this result beyond the snapshot lifetime. |
| mobile_set_orientationA | Change the screen orientation of the device |
| mobile_set_locationA | Override the GPS location reported by the device, or clear the override to restore the real location. Omit latitude and longitude to clear. |
| mobile_clipboardA | Read or replace the device clipboard. Pass text to set the clipboard, omit it to read the current clipboard. |
| mobile_get_device_logsA | Collect live device logs (logcat on Android, unified log on iOS) as one JSON object per line. Only logs emitted after the call starts are captured, so trigger the behavior you want to observe right before or during the call. Stops after |
| mobile_get_orientationB | Get the current screen orientation of the device |
| mobile_start_screen_recordingA | Start recording the screen of a mobile device. The recording runs in the background until stopped with mobile_stop_screen_recording. Returns the path where the recording will be saved. |
| mobile_stop_screen_recordingA | Stop an active screen recording on a mobile device. Returns the file path, size, and approximate duration of the recording. |
| mobile_list_crashesA | List crash reports available on the device |
| mobile_get_crashA | Get the full content of a crash report by its ID. Use mobile_list_crashes to find available crash IDs. |
| mobile_batch_commandsA | Run multiple tools in sequence in a single call, e.g. click, type, click, type. Use this to fill forms or perform multi-step flows without round-trips. The device argument is applied to every step; all steps must target that same device. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 39 tools
Most tools have clearly distinct purposes, but a few near-overlaps exist among app-launching tools (mobile_launch_app, mobile_launch_and_ready, mobile_ensure_app) and between mobile_take_screenshot and mobile_save_screenshot. Descriptions are detailed enough to disambiguate with care, so agents should rarely misselect.
All tools follow the consistent mobile_verb_noun pattern, with clear verbs like list, get, set, launch, click, swipe, and take. Even compound actions like mobile_launch_and_ready and prepositions like on_screen are used consistently across the set, making the naming predictable and readable.
At 39 tools, this is well above the 25-tool threshold for 'too many' even for a broad mobile automation domain. While each tool has a specific purpose, the sheer number risks overwhelming an agent and suggests some tools could be consolidated (e.g., combining screenshot save/take or merging device listing variants).
The tool set covers the full mobile lifecycle: device discovery/reservation, app management (install, launch, terminate, ensure), UI interaction (clicks, gestures, typing), screenshots, orientation, location, clipboard, logs, crash reports, screen recording, and a batch execution tool. There are no obvious dead ends or missing critical operations for the stated purpose.