Tap, swipe, type and read the screen on iOS and Android, real or simulated.
- Started in our test
- ★ 10K GitHub stars
- 20.1K downloads a week
- Last commit 26 Oct 2026
At a glance
Mobile MCP, from Mobile Next, gives one set of tools for every phone target: iOS simulators, Android emulators and real devices over USB. It reads the native accessibility tree to find elements, so most steps cost text rather than screenshots, and it falls back to a screenshot and coordinates when an app hides its structure.
Beyond taps and typing it installs and launches apps, pulls device logs and crash reports, records the screen and can run several actions in one call. It is a good fit for exploring an app or checking a flow before you turn it into a proper test.
- Made by
- Mobile Next
- Licence
- Apache-2.0
- Latest version
- 1.0.14 (26 Oct 2026)
- npm package
- @mobilenext/mobile-mcp
- GitHub stars
- 10K
- Downloads
- 20.1K a week
- Last commit
- 26 Oct 2026
- Tools
- 34
- Runs on
- Your computer
Our check: We ran this exact config on 27 Oct 2026: it started and answered with 34 tools.
What's in the pod: its tools
We found 34 tools when we started it on 27 Oct 2026. 12 only read. The rest can change things, so keep your app's "ask before each tool call" setting on for them.
How we tested it: Started @mobilenext/mobile-mcp 1.0.14 with no phone, simulator or emulator attached. It lists its tools on its own; calling them needs a device.
Changes things22 tools · Can create, edit, send or delete.
| Tool | What it is for |
|---|---|
mobile_allocate_remote_device | Reserves a cloud device for your use. |
mobile_batch_commands | Runs several actions in one call, such as tap, type, tap, and can list the screen at the end. |
mobile_click_on_screen_at_coordinates | Taps a point, or an element by its ref from the last element list. |
mobile_clipboard | Reads or replaces the device clipboard. |
mobile_double_tap_on_screen | Double-taps a point or an element. |
mobile_fold_device | Folds or unfolds a foldable simulator or emulator. |
mobile_install_app | Installs an app from an .apk, .ipa, .app or .zip file. |
mobile_launch_app | Opens an app by package name or bundle ID. |
mobile_login_to_cloud_provider | Signs this machine in to Mobile Next Cloud, the paid service that rents real devices. |
mobile_long_press_on_screen_at_coordinates | Presses and holds a point or an element. |
mobile_open_url | Opens a web address in the device browser. Other link types are blocked unless you allow them. |
mobile_press_button | Presses a device button such as Home, Back, volume or Enter. |
mobile_release_remote_device | Hands a reserved cloud device back. |
mobile_save_screenshot | Saves a screenshot to a file on your computer. |
mobile_set_location | Fakes the GPS position, or clears the fake one. |
mobile_set_orientation | Rotates the device to portrait or landscape. |
mobile_start_screen_recording | Starts recording the screen to a video file. |
mobile_stop_screen_recording | Stops the recording and returns where the video was saved. |
mobile_swipe_on_screen | Swipes up, down, left or right. |
mobile_terminate_app | Stops a running app. |
mobile_type_keys | Types text into the focused field, optionally submitting it. |
mobile_uninstall_app | Removes an app. |
Only reads12 tools · Looks things up and changes nothing.
| Tool | What it is for |
|---|---|
get_more_tools | Asks the server for extra tools when none of the listed ones fits the task. |
mobile_get_crash | Returns one crash report in full. |
mobile_get_device_logs | Collects live logs (logcat on Android, the unified log on iOS). |
mobile_get_foreground_app | Says which app (and which screen of it) is in front. |
mobile_get_orientation | Says whether the device is in portrait or landscape. |
mobile_get_screen_size | Returns the screen size in pixels. |
mobile_list_apps | Lists the installed apps. |
mobile_list_available_devices | Lists the phones, simulators and emulators it can reach, iOS and Android together. |
mobile_list_crashes | Lists the crash reports on the device. |
mobile_list_elements_on_screen | Reads the on-screen elements with their labels, coordinates and a short ref the tap tools accept. |
mobile_list_remote_devices | Lists the device models you can reserve in Mobile Next Cloud. |
mobile_take_screenshot | Returns a screenshot of the device so the model can see the screen. |
Grouped and described by us. The README on GitHub lists the inputs each tool takes.
How clearly it describes its tools to your assistant
- Tools with a description
- 34 of 34
- Say if they change things
- 34 of 34
- Context it takes, at least
- ~3,000 tokens
Every tool says whether it only reads or can change things, so a client can ask before the risky ones.
From the tool list it sent us. The token figure counts names, descriptions and input names; the full schemas your client loads add more.
Set it up
Pick your app for the exact snippet and where it goes.
Where it goes: claude_desktop_config.json (Settings → Developer → Edit Config)
{
"mcpServers": {
"mobile-mcp": {
"command": "npx",
"args": [
"-y",
"@mobilenext/mobile-mcp@latest"
]
}
}
}Where it goes: Your terminal, in the project folder
claude mcp add-json mobile-mcp '{"command":"npx","args":["-y","@mobilenext/mobile-mcp@latest"]}'Where it goes: ~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
"mcpServers": {
"mobile-mcp": {
"command": "npx",
"args": [
"-y",
"@mobilenext/mobile-mcp@latest"
]
}
}
}Where it goes: .vscode/mcp.json in your project
{
"servers": {
"mobile-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@mobilenext/mobile-mcp@latest"
]
}
}
}Where it goes: ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"mobile-mcp": {
"command": "npx",
"args": [
"-y",
"@mobilenext/mobile-mcp@latest"
]
}
}
}Where it goes: Not supported
ChatGPT only connects to remote servers by URL. This one runs on your computer, so use Claude, Cursor or VS Code.
Set "MOBILEMCP_DISABLE_TELEMETRY": "1" in env to switch off its anonymous usage reporting.
New to this? See the setup guides for Claude Code, Cursor, Claude Desktop and ChatGPT.
Settings
Names are exactly as the project spells them. Required ones are marked.
| Setting | What it does |
|---|---|
MOBILEMCP_DISABLE_TELEMETRYEnvironment variable | Turns off the anonymous usage reporting (PostHog and Scarf) it sends by default.1 |
MOBILEMCP_ALLOW_UNSAFE_URLSEnvironment variable | Lets mobile_open_url open deep links and other non-web URL schemes, which are blocked by default.1 |
--listenCommand line flag | Serves it over streamable HTTP on a port instead of stdio, for clients that connect by URL.--listen 3000 |
MOBILEMCP_AUTHEnvironment variable | Requires a bearer token on the HTTP server started with --listen. Set it whenever the port is reachable by anyone else.my-secret-token |
MOBILEMCP_LEGACY_ROBOTEnvironment variable | Falls back to the older per-platform drivers for Android and real iPhones, if the default one misbehaves on your setup.1 |
What it can touch
It can read
- The screen and accessibility tree of the device
- Installed apps, device logs and crash reports
- The device clipboard
It can change
- Anything in an app it taps and types into, including sending messages or buying things
- Apps it installs or removes
- Device settings such as orientation and the reported location
- Video and screenshot files it saves on your computer
Safer setup: Point it at a simulator or emulator with a test account, not your own phone, and do not leave payment details signed in on the device it controls.
Before you start
- Node.js 20 or newer
- For iOS: Xcode command line tools and a booted simulator (or a trusted device)
- For Android: Android platform tools (adb) and a running emulator or a device with USB debugging on
If it does not work
- mobile_list_available_devices comes back empty
- Boot a simulator first (xcrun simctl boot "iPhone 16") or start an Android emulator, and check that adb devices or xcrun simctl list shows it.
- A real Android phone is not found
- Turn on USB debugging in Developer options, plug it in and accept the prompt on the phone, then confirm it appears in adb devices.
- The agent keeps taking screenshots and runs out of context
- Ask it to use mobile_list_elements_on_screen first. The element list is text and much cheaper than an image.
- Deep links will not open
- They are blocked by default. Set MOBILEMCP_ALLOW_UNSAFE_URLS=1 in env if you need them.
Peas in a pod: similar servers
How Mobile MCP lines up against other agent helpers and desktop control servers on the shelf.
| Server | Tools | Runs on | Licence | Stars |
|---|---|---|---|---|
| Mobile MCP | 34 | Your computer | Apache-2.0 | 10K |
| Container Use | 15 | Your computer | – | 4.1K |
| Sequential Thinking | 1 | Your computer | – | 91.6K |
| Windows-MCP | 21 | Your computer | MIT | 10.4K |
Questions
Do I need a Mac?
Only for iOS. Android emulators and devices work on Linux, Windows and macOS.
Is it free?
The server is open source under Apache-2.0. Mobile Next Cloud, the hosted real-device service its cloud tools connect to, is a paid extra.
How is it different from XcodeBuildMCP?
XcodeBuildMCP builds and runs your iOS project. Mobile MCP operates apps that are already installed, on iOS and Android alike.
Can I turn a session into an automated test?
The makers suggest asking the agent to write the flow as a Mobilewright test, their open source testing library, so it runs the same way in CI.
Something wrong on this page? Tell us.
