Skip to main content
Glama

Mobile Next - MCP server for Mobile Development and Automation | iOS, Android, Simulator, Emulator, and Real Devices

English | 日本語 | 简体中文

This is an MCP Server that enables scalable mobile automation, development through a platform-agnostic interface, eliminating the need for distinct iOS or Android knowledge. You can run it on emulators, simulators, and real devices (iOS and Android).

This server allows Agents and LLMs to interact with native iOS/Android applications and devices through structured accessibility snapshots or coordinate-based taps based on screenshots.

Works with Claude Code, Codex, Gemini, GitHub Copilot, Antigravity — or any MCP-compatible client.

Run it against devices on your own machine, or against real iOS and Android devices in the cloud with Mobile Next Cloud — same tools, no local setup.

https://github.com/user-attachments/assets/bb084777-beb3-4930-ae6f-8d3fe694ddde

Main use cases

How we help to scale mobile automation:

  • 📲 Native app automation (iOS and Android) for testing or data-entry scenarios.

  • 📝 Scripted flows and form interactions without manually controlling simulators/emulators or real devices (iPhone, Samsung, Google Pixel etc)

  • 🧭 Automating multi-step user journeys driven by an LLM

  • 👆 General-purpose mobile application interaction for agent-based frameworks

  • 🤖 Enables agent-to-agent communication for mobile automation usecases, data extraction

Main Features

  • 🚀 Accessibility-first — fast and cheap: drives apps from the native accessibility tree (no vision model, no image tokens), falling back to screenshots + coordinates only when needed.

  • 📱 One API, every target: the same tools work across iOS and Android — simulators, emulators, and real devices.

  • 🧠 No platform expertise required: no XCUITest, no Espresso, no per-platform glue — describe the goal and the agent does it.

  • 🧰 Full device control: taps, swipes, and gestures; app install/launch/terminate; screen recording; hardware buttons; deep links; orientation.

  • 📊 Structured, deterministic output: reads real UI elements and extracts structured data, cutting the ambiguity of screenshot-only approaches.

  • 🪞 Device mirroring in Claude Code: for Claude Code running in Ghostty or kitty. Install the plugin and run /mobile-mirror to see the device's live screen in a side pane, then tap, type and press Home/Back without leaving the terminal.

🎯 Platform Support

Target

Supported

Setup

iOS Simulator

✅

Xcode + a booted simulator (xcrun simctl)

iOS Real Device

✅

Device connected over USB and trusted

Android Emulator

✅

Android SDK + running emulator (adb)

Android Real Device

✅

adb + USB debugging enabled & authorized

Related MCP server: mobile-mcp

🔧 Available MCP Tools

Device Management

  • mobile_list_available_devices - List all available devices (simulators, emulators, and real devices)

  • mobile_get_screen_size - Get the screen size of the mobile device in pixels

  • mobile_get_orientation - Get the current screen orientation of the device

  • mobile_set_orientation - Change the screen orientation (portrait/landscape)

  • mobile_fold_device - Fold or unfold a foldable device (iPhone Duo simulators, foldable Android emulators)

  • mobile_set_location - Override the GPS location reported by the device, or clear the override

  • mobile_clipboard - Read or replace the device clipboard

Remote Devices (Mobile Next Cloud)

  • mobile_login_to_cloud_provider - Authenticate this machine with the cloud device provider (browser-based device-code login)

  • mobile_list_remote_devices - List device models available to reserve from the cloud fleet

  • mobile_allocate_remote_device - Reserve a physical cloud device for exclusive use

  • mobile_release_remote_device - Release a reserved cloud device back to the fleet

App Management

  • mobile_list_apps - List all installed apps on the device

  • mobile_get_foreground_app - Get the app currently in the foreground

  • mobile_launch_app - Launch an app using its package name

  • mobile_terminate_app - Stop and terminate a running app

  • mobile_install_app - Install an app from file (.apk, .ipa, .app, .zip)

  • mobile_uninstall_app - Uninstall an app by its package name or bundle ID

Screen Interaction

  • mobile_take_screenshot - Take a screenshot to understand what's on screen

  • mobile_save_screenshot - Save a screenshot to a file

  • mobile_list_elements_on_screen - List UI elements with their coordinates and properties

  • mobile_click_on_screen_at_coordinates - Click at specific x,y coordinates or on an element by its ref

  • mobile_double_tap_on_screen - Double-tap at specific coordinates or on an element by its ref

  • mobile_long_press_on_screen_at_coordinates - Long press at specific coordinates or on an element by its ref

  • mobile_swipe_on_screen - Swipe in any direction (up, down, left, right)

  • mobile_start_screen_recording - Start recording the device screen to a video file

  • mobile_stop_screen_recording - Stop the active screen recording and save the video

Input & Navigation

  • mobile_type_keys - Type text into focused elements with optional submit

  • mobile_press_button - Press device buttons (HOME, BACK, VOLUME_UP/DOWN, ENTER, etc.)

  • mobile_open_url - Open http/https URLs in the device browser

Logs & Crash Reports

  • mobile_get_device_logs - Collect live device logs (logcat on Android, unified log on iOS), optionally saved to a file

  • mobile_list_crashes - List crash reports available on the device

  • mobile_get_crash - Get the full content of a crash report by its ID

  • mobile_batch_commands - Run multiple tools in sequence in a single call (e.g. click, type, click), optionally listing screen elements at the end

🏗️ Mobile MCP Architecture

📚 Wiki page

More details in our wiki page for setup, configuration and debugging related questions.

Prerequisites

What you will need to connect MCP with your agent and mobile devices:

Installation and configuration

Standard config works in most of the tools:

{
  "mcpServers": {
    "mobile-mcp": {
      "command": "npx",
      "args": ["-y", "@mobilenext/mobile-mcp@latest"]
    }
  }
}

Add via the Amp VS Code extension settings screen or by updating your settings.json file:

"amp.mcpServers": {
  "mobile-mcp": {
    "command": "npx",
    "args": [
      "@mobilenext/mobile-mcp@latest"
    ]
  }
}

Amp CLI:

Run the following command in your terminal:

amp mcp add mobile-mcp -- npx @mobilenext/mobile-mcp@latest

Antigravity doesn't have a CLI command to add MCP servers, so add it manually. Edit ~/.gemini/config/mcp_config.json and add:

{
  "mcpServers": {
    "mobile-mcp": {
      "command": "npx",
      "args": ["-y", "@mobilenext/mobile-mcp@latest"]
    }
  }
}

To setup Cline, just add the json above to your MCP settings file.

More in our wiki

Install the plugin from inside Claude Code. It adds the Mobile MCP server and /mobile-mirror:

/plugin marketplace add mobile-next/mobile-mcp
/plugin install mobile-mcp@mobile-mcp

/mobile-mirror [device-id] opens a pane with the device's live screen. Click the picture to tap, type to send keys, and use the Home, Back, App Switch and URL buttons above it. The picture needs a terminal with the kitty graphics protocol, such as kitty or Ghostty.

If you can't use plugins, add only the MCP server with the Claude Code CLI:

claude mcp add mobile-mcp -- npx -y @mobilenext/mobile-mcp@latest

Follow the MCP install guide, use json configuration above.

Use the Codex CLI to add the Mobile MCP server:

codex mcp add mobile-mcp npx "@mobilenext/mobile-mcp@latest"

Alternatively, create or edit the configuration file ~/.codex/config.toml and add:

[mcp_servers.mobile-mcp]
command = "npx"
args = ["@mobilenext/mobile-mcp@latest"]

For more information, see the Codex MCP documentation.

Use the Copilot CLI to interactively add the Mobile MCP server:

/mcp add

You can edit the configuration file ~/.copilot/mcp-config.json and add:

{
  "mcpServers": {
    "mobile-mcp": {
      "type": "local",
      "command": "npx",
      "tools": [
        "*"
      ],
      "args": [
        "@mobilenext/mobile-mcp@latest"
      ]
    }
  }
}

For more information, see the Copilot CLI documentation.

Click the button to install:

Or install manually:

Go to Cursor Settings -> MCP -> Add new MCP Server. Name to your liking, use command type with the command npx -y @mobilenext/mobile-mcp@latest. You can also verify config or add command like arguments via clicking Edit.

Use the Gemini CLI to add the Mobile MCP server:

gemini mcp add mobile-mcp npx -y @mobilenext/mobile-mcp@latest

Click the button to install:

Install in Goose

Or install manually:

Go to Advanced settings -> Extensions -> Add custom extension. Name to your liking, use type STDIO, and set the command to npx -y @mobilenext/mobile-mcp@latest. Click "Add Extension".

Follow the MCP Servers documentation. For example in .kiro/settings/mcp.json:

{
  "mcpServers": {
    "mobile-mcp": {
      "command": "npx",
      "args": [
        "@mobilenext/mobile-mcp@latest"
      ]
    }
  }
}

Follow the MCP Servers documentation. For example in ~/.config/opencode/opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mobile-mcp": {
      "type": "local",
      "command": [
        "npx",
        "@mobilenext/mobile-mcp@latest"
      ],
      "enabled": true
    }
  }
}

Open Windsurf settings, navigate to MCP servers, and add a new server using the command type with:

npx @mobilenext/mobile-mcp@latest

Or add the standard config under mcpServers in your settings as shown above.

Read more in our wiki! 🚀

✅ Verify it works

Once the server is configured, ask your agent to list devices:

list available devices

You should get back your running simulators, emulators, and connected devices. If you do, Mobile MCP is wired up correctly. If the list is empty, make sure a simulator or emulator is running (see Prerequisites) — for more help, check the wiki.

☁️ Scale up, use a cloud device

Want to scale to hundreds of devices? Use Mobile MCP in your CI/CD pipeline?

In your Agent, prompt:

log in to mobile next cloud and then show me which remote devices are available to me

Streamable HTTP Server Mode

By default, Mobile MCP runs over stdio. To start a Streamable HTTP server instead, use the --listen flag:

npx @mobilenext/mobile-mcp@latest --listen 3000

This binds to localhost:3000. To bind to a specific interface:

npx @mobilenext/mobile-mcp@latest --listen 0.0.0.0:3000

Then configure your MCP client to connect to http://<host>:3000/mcp (or https://…/mcp behind TLS). The endpoint accepts Streamable HTTP (POST on /mcp); remote mode is stateless (no session affinity required), which works well with Smithery and other horizontal hosts.

Migration note: --listen previously served the deprecated HTTP+SSE transport on /mcp. Clients must use Streamable HTTP against http(s)://host:port/mcp. The old pure-SSE flow on /mcp is no longer available.

When binding to localhost, Host-header DNS rebinding protection is enabled automatically.

Authorization

To require Bearer token authorization on the HTTP server, set the MOBILEMCP_AUTH environment variable:

MOBILEMCP_AUTH=my-secret-token npx @mobilenext/mobile-mcp@latest --listen 3000

When set, all requests must include the header Authorization: Bearer my-secret-token. When unset, the server accepts unauthenticated connections and logs a warning.

🛠️ How to Use

After adding the MCP server to your IDE/Client, you can instruct your AI assistant to use the available tools. For example, in Cursor's agent mode, you could use the prompts below to quickly validate, test and iterate on UI interactions, read information from screen, go through complex workflows. Be descriptive, straight to the point.

✨ Example Prompts

Workflows

You can specify detailed workflows in a single prompt, verify business logic, setup automations. You can go crazy:

Search for a video, comment, like and share it.

Find the video called " Beginner Recipe for Tonkotsu Ramen" by Way of
Ramen, click on like video, after liking write a comment " this was
delicious, will make it next Friday", share the video with the first
contact in your whatsapp list.

Download a successful step counter app, register, setup workout and 5-star the app

Find and Download a free "Pomodoro" app that has more than 1k stars.
Launch the app, register with my email, after registration find how to
start a pomodoro timer. When the pomodoro timer started, go back to the
app store and rate the app 5 stars, and leave a comment how useful the
app is.

Search in Substack, read, highlight, comment and save an article

Open Substack website, search for "Latest trends in AI automation 2025",
open the first article, highlight the section titled "Emerging AI trends",
and save article to reading list for later review, comment a random
paragraph summary.

Reserve a workout class, set timer

Open ClassPass, search for yoga classes tomorrow morning within 2 miles,
book the highest-rated class at 7 AM, confirm reservation,
setup a timer for the booked slot in the phone

Find a local event, setup calendar event

Open Eventbrite, search for AI startup meetup events happening this
weekend in "Austin, TX", select the most popular one, register and RSVP
yes to the event, setup a calendar event as a reminder.

Check weather forecast and send a Whatsapp/Telegram/Slack message

Open Weather app, check tomorrow's weather forecast for "Berlin", and
send the summary via Whatsapp/Telegram/Slack to contact "Lauren Trown",
thumbs up their response.
  • Schedule a meeting in Zoom and share invite via email

Open Zoom app, schedule a meeting titled "AI Hackathon" for tomorrow at
10AM with a duration of 1 hour, copy the invitation link, and send it via
Gmail to contacts "team@example.com".

Running & configuration

Environment variables

Variable

Description

Example

MOBILEMCP_AUTH

Require a Bearer token on the Streamable HTTP server (--listen) — every request must then send Authorization: Bearer <token>.

MOBILEMCP_AUTH=my-secret-token

MOBILEMCP_DISABLE_TELEMETRY

Disable anonymous usage telemetry.

MOBILEMCP_DISABLE_TELEMETRY=1

MOBILEMCP_ALLOW_UNSAFE_URLS

Allow mobile_open_url to open non-standard URL schemes (blocked by default).

MOBILEMCP_ALLOW_UNSAFE_URLS=1

MOBILEMCP_LEGACY_ROBOT

Use the legacy platform-specific robots for Android devices and physical iOS devices. iOS simulators continue to use mobilecli.

MOBILEMCP_LEGACY_ROBOT=1

Simulators, Emulators, and Real Devices

When launched, Mobile MCP can connect to:

  • iOS Simulators on macOS/Linux

  • Android Emulators on Linux/Windows/macOS

  • iOS or Android real devices (requires proper platform tools and drivers)

Make sure you have your mobile platform SDKs (Xcode, Android SDK) installed and configured properly before running Mobile Next Mobile MCP.

Telemetry

Mobile MCP collects anonymous usage telemetry via PostHog and Scarf. To disable it, set the MOBILEMCP_DISABLE_TELEMETRY environment variable:

MOBILEMCP_DISABLE_TELEMETRY=1 npx @mobilenext/mobile-mcp@latest

For json configurations:

{
  "mcpServers": {
    "mobile-mcp": {
      "command": "npx",
      "args": ["-y", "@mobilenext/mobile-mcp@latest"],
      "env": {
        "MOBILEMCP_DISABLE_TELEMETRY": "1"
      }
    }
  }
}

Running in "headless" mode on Simulators/Emulators

When you do not have a real device connected to your machine, you can run Mobile MCP with an emulator or simulator in the background.

For example, on Android:

  1. Start an emulator (avdmanager / emulator command).

  2. Run Mobile MCP with the desired flags

On iOS, you'll need Xcode and to run the Simulator before using Mobile MCP with that simulator instance.

  • xcrun simctl list

  • xcrun simctl boot "iPhone 16"

🧩 Part of Mobile Next

Mobile MCP is one piece of a toolkit for driving real mobile devices:

  • mobilewright — "Playwright for mobile." When you're ready to turn agent-driven exploration into repeatable, deterministic tests for iOS and Android, graduate to mobilewright.

  • mobilecli — the universal device CLI that Mobile MCP is built on: control devices, simulators, and emulators from the command line or a JSON-RPC API.

  • Mobile Next Cloud — the same stack, rented: real iOS and Android devices on demand. Just prompt your agent: log in to mobile next cloud and then show me which remote devices are available to me to get started.

🚀 Roadmap

We're continuously improving Mobile MCP. See what we're building next in ROADMAP.md — priorities are shaped heavily by community feedback, so tell us what you'd like to see.

🤝 Contributing

Contributions are welcome — code, docs, bug reports, and ideas.

Please also review our Code of Conduct.

Thanks to all contributors ❤️

We appreciate everyone who has helped improve this project.

Privacy Policy

Mobile MCP runs locally and communicates only with the devices you connect. See the Mobile Next privacy policy at https://mobilenext.ai/privacy for data collection, usage, retention, and contact information.

Available Tools

34 tools
get_more_toolsGet More ToolsA
Read-only

Only call this when none of the other tools can do what you need on a mobile device, or for mobile testing or mobile app development. Do not call it for tasks unrelated to mobile, or when another tool already covers the task. The context is sent to the mobile-mcp developers, so never include PII, secrets, credentials or other private information in it.

Inputs: context (required).

mobile_allocate_remote_deviceAllocate 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 - never call this silently. If no local device is available, offer a remote device to the user and call this only after they agree. 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.

Inputs: platform (required), name, type, wait, +2 more.

mobile_batch_commandsBatch CommandsA
Destructive

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 unless a step provides its own. Tools allowed as steps: get_more_tools, mobile_list_available_devices, mobile_login_to_cloud_provider, mobile_list_remote_devices, mobile_allocate_remote_device, mobile_release_remote_device, mobile_list_apps, mobile_get_foreground_app, mobile_launch_app, mobile_terminate_app, mobile_install_app, mobile_uninstall_app, mobile_get_screen_size, mobile_click_on_screen_at_coordinates, mobile_double_tap_on_screen, mobile_long_press_on_screen_at_coordinates, mobile_list_elements_on_screen, mobile_press_button, mobile_open_url, mobile_swipe_on_screen, mobile_type_keys, mobile_save_screenshot, mobile_set_orientation, mobile_fold_device, mobile_set_location, mobile_clipboard, mobile_get_device_logs, mobile_get_orientation, mobile_start_screen_recording, mobile_stop_screen_recording, mobile_list_crashes, mobile_get_crash.

Inputs: steps (required), device (required), stopOnError, listElementsAtEnd.

mobile_click_on_screen_at_coordinatesClick ScreenA

Click on the screen, either at x,y coordinates or on an element by its ref (e.g. "@e5") from the latest mobile_list_elements_on_screen result. Prefer ref when the element is listed.

Inputs: device (required), x, y, ref.

mobile_clipboardClipboardA

Read or replace the device clipboard. Pass text to set the clipboard, omit it to read the current clipboard.

Inputs: device (required), text.

mobile_double_tap_on_screenDouble Tap ScreenA

Double-tap on the screen, either at x,y coordinates or on an element by its ref (e.g. "@e5") from the latest mobile_list_elements_on_screen result. Prefer ref when the element is listed.

Inputs: device (required), x, y, ref.

mobile_fold_deviceFold DeviceA

Fold or unfold a foldable device, such as iPhone Duo simulators and foldable Android emulators. Provide either posture or angle.

Inputs: device (required), angle, posture.

mobile_get_crashGet Crash ReportA
Read-only

Get the full content of a crash report by its ID. Use mobile_list_crashes to find available crash IDs.

Inputs: id (required), device (required).

mobile_get_device_logsGet Device LogsA
Read-only

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 limit entries or after 30 seconds of silence. Each line of a stack trace counts as one entry, so filter by process or tag to avoid filling the limit with noise. Start with a small limit (20-50) for a quick look. For large captures, pass saveTo to write logs to a file and only the entry count is returned.

Inputs: device (required), limit, filter, saveTo.

mobile_get_foreground_appGet Foreground AppA
Read-only

Get the app currently in the foreground on the device, including the focused activity class on Android or view controller class on iOS when available. Use this to verify which app or screen you are on before interacting with it.

Inputs: device (required).

mobile_get_orientationGet OrientationB
Read-only

Get the current screen orientation of the device

Inputs: device (required).

mobile_get_screen_sizeGet Screen SizeA
Read-only

Get the screen size of the mobile device in pixels

Inputs: device (required).

mobile_install_appInstall AppC

Install an app on mobile device

Inputs: path (required), device (required).

mobile_launch_appLaunch AppA

Launch an app on mobile device. Use this to open a specific app. You can find the package name of the app by calling mobile_list_apps.

Inputs: device (required), packageName (required), locale.

mobile_list_appsList AppsC
Read-only

List all the installed apps on the device

Inputs: device (required).

mobile_list_available_devicesList DevicesA
Read-only

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.

Inputs: no named parameters.

mobile_list_crashesList Crash ReportsC
Read-only

List crash reports available on the device

Inputs: device (required).

mobile_list_elements_on_screenList Screen ElementsA
Read-only

List elements on screen with their ref, coordinates, and display text or accessibility label. Use the ref with mobile_click_on_screen_at_coordinates, mobile_double_tap_on_screen or mobile_long_press_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.

Inputs: device (required), format.

mobile_list_remote_devicesList Remote DevicesA
Read-only

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.

Inputs: no named parameters.

mobile_login_to_cloud_providerLogin 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 asked for, or agreed to, remote/cloud devices - never call it speculatively, since it interrupts the user to act in their browser.

Inputs: no named parameters.

mobile_long_press_on_screen_at_coordinatesLong Press ScreenA

Long press on the screen, either at x,y coordinates or on an element by its ref (e.g. "@e5") from the latest mobile_list_elements_on_screen result. Prefer ref when the element is listed.

Inputs: device (required), x, y, ref, +1 more.

mobile_open_urlOpen URLA

Open an http:// or https:// URL in the browser on device. Other URL schemes, such as app deep links, are rejected unless the server was started with MOBILEMCP_ALLOW_UNSAFE_URLS=1.

Inputs: url (required), device (required).

mobile_press_buttonPress ButtonC

Press a button on device

Inputs: button (required), device (required).

mobile_release_remote_deviceRelease Remote DeviceA
Destructive

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.

Inputs: device (required).

mobile_save_screenshotSave ScreenshotC

Save a screenshot of the mobile device to a file

Inputs: device (required), saveTo (required), scale, maxSize.

mobile_set_locationSet LocationA

Override the GPS location reported by the device, or clear the override to restore the real location. Omit latitude and longitude to clear.

Inputs: device (required), latitude, longitude.

mobile_set_orientationSet OrientationC

Change the screen orientation of the device

Inputs: device (required), orientation (required).

mobile_start_screen_recordingStart 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.

Inputs: device (required), output, timeLimit.

mobile_stop_screen_recordingStop Screen RecordingA

Stop an active screen recording on a mobile device. Returns the file path, size, and approximate duration of the recording.

Inputs: device (required).

mobile_swipe_on_screenSwipe ScreenC

Swipe on the screen

Inputs: device (required), direction (required), x, y, +1 more.

mobile_take_screenshotTake ScreenshotA
Read-only

Take a screenshot of the mobile device. Use this to understand what's on screen, if you need to press an element that is available through view hierarchy then you must list elements on screen instead. The screenshot is usually smaller than the screen, so when the device reports its screen size the result also states how to convert positions in the screenshot into screen coordinates before tapping. Do not cache this result.

Inputs: device (required), scale, maxSize.

mobile_terminate_appTerminate AppC

Stop and terminate an app on mobile device

Inputs: device (required), packageName (required).

mobile_type_keysType TextB

Type text into the focused element

Inputs: text (required), device (required), submit.

mobile_uninstall_appUninstall AppC
Destructive

Uninstall an app from mobile device

Inputs: device (required), packageName (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 34 tools

    Disambiguation4/5

    Most tools target clearly distinct actions (gestures, app lifecycle, device/cloud management, recording, crashes, logs). The main overlap is mobile_take_screenshot vs mobile_save_screenshot, which is resolved by descriptions (one for visual understanding, one for writing a file), and the list_elements_on_screen vs screenshot pair is also clarified. Boundaries are largely clean.

    Naming Consistency5/5

    Nearly all tools use a consistent mobile_ snake_case prefix with a verb_noun pattern (mobile_get_orientation, mobile_launch_app, mobile_list_apps). The lone outlier get_more_tools is an intentional, clearly documented meta-tool for requesting capabilities.

    Tool Count3/5

    34 tools is heavy and sits above the comfortable range, though the broad domain (device discovery, cloud allocation, app management, gestures, screenshots, recording, crashes, logs) genuinely justifies many of them. A few gesture/screenshot tools could plausibly be consolidated.

    Completeness5/5

    The surface covers the full mobile-automation lifecycle: device discovery (local and remote/cloud), app install/launch/terminate/uninstall, input gestures, screen inspection, screenshots, recording, orientation, location, clipboard, logs, and crash reports. No obvious dead ends for the stated purpose.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      A
      maintenance
      Enables AI assistants to automate mobile app testing and development for iOS and Android through natural language interactions. Supports intelligent element identification, session management, automated test generation, and comprehensive device interactions including clicks, swipes, screenshots, and app management.
      32
      14,478 npm
      518
      Apache 2.0
    • A
      license
      A
      quality
      C
      maintenance
      Enables agents and LLMs to interact with native iOS and Android applications and devices via structured accessibility snapshots or coordinate-based taps, supporting simulators, emulators, and real devices.
      39
      49,881 npm
      Apache 2.0
    • A
      license
      B
      quality
      B
      maintenance
      Enables AI agents to automate Android and iOS devices, including emulators and physical devices, by capturing screenshots, reading UI accessibility trees, performing touch and text input, and managing app lifecycle and logs.
      18
      4
      MIT
    • A
      license
      C
      quality
      B
      maintenance
      Enables AI agents to control Android phones, emulators, redroid containers, iOS devices, and cloud-hosted devices through a perceive-act-verify loop of screen reading, taps, gestures, typing, and app launching. Exposes 138 tools for driving screens, elements, and files over adb, Portal APIs, and ios-portal without running ARM-only code on the device.
      94
      15 npm
      1
      MIT