Listing the elements returns coordinates together with their text and accessibility properties, so taps aim at what the screen exposes rather than at pixels measured off a screenshot — no vision model, and no image tokens on every step.
Device automation for iOS and Android: local devices, simulators and emulators driven through the native accessibility tree, falling back to screenshots and coordinates only when it has to. Twenty-four tools cover devices, apps, screen interaction, input and crash reports.
- Devices, simulators and emulators listed, and screen size and orientation read and set (`mobile_list_available_devices`, `mobile_get_screen_size`, `mobile_get_orientation`, `mobile_set_orientation`)
- Apps listed, installed from an `.apk`, `.ipa`, `.app` or `.zip`, launched, terminated and uninstalled (`mobile_list_apps`, `mobile_install_app`, `mobile_launch_app`, `mobile_terminate_app`, `mobile_uninstall_app`)
- On-screen elements listed with their coordinates and properties, read from the accessibility tree rather than from pixels (`mobile_list_elements_on_screen`)
- Taps, double taps, long presses, swipes in any direction, hardware buttons such as HOME and BACK, typed text with an optional submit, and URLs opened (`mobile_click_on_screen_at_coordinates`, `mobile_double_tap_on_screen`, `mobile_long_press_on_screen_at_coordinates`, `mobile_swipe_on_screen`, `mobile_press_button`, `mobile_type_keys`, `mobile_open_url`)
- Screenshots taken or saved to a path, and screen recording started and stopped as a video file (`mobile_take_screenshot`, `mobile_save_screenshot`, `mobile_start_screen_recording`, `mobile_stop_screen_recording`)
- Crash reports listed and read in full off the device itself (`mobile_list_crashes`, `mobile_get_crash`)
Node.js 20 or newer, npx, Xcode command line tools and the Android platform tools, and something to drive — a simulator, an emulator or an attached phone. Real iOS devices need more: go-ios, WebDriverAgent installed on the device, and a device tunnel; simulators and Android need none of that. It can also run as an SSE server, where `MOBILEMCP_AUTH` makes every request carry a bearer token. `mobile_open_url` refuses non-standard URL schemes unless `MOBILEMCP_ALLOW_UNSAFE_URLS` is set, and `MOBILEMCP_DISABLE_TELEMETRY` turns off anonymous usage reporting.
One command — npx -y @mobilenext/mobile-mcp@latest
