Command Palette

Search for a command to run...

UnylyUnyly
Browse all

Open Mobile

FreeNot checked

An MCP server for mobile automation that enables LLMs to interact with Android and iOS devices through screenshot, tap, swipe, log analysis, and app lifecycle m

GitHubEmbed

About

An MCP server for mobile automation that enables LLMs to interact with Android and iOS devices through screenshot, tap, swipe, log analysis, and app lifecycle management.

README

An open-source Model Context Protocol (MCP) server for mobile automation. Give any LLM eyes and hands on a real Android or iOS device — screenshot, tap, swipe, read logs, and verify your app without writing test code.

Works with Claude Code, Claude Desktop, Cursor, and any other MCP-compatible client.

Features

  • Perception: Screenshots, semantic UI hierarchy, OCR, element finder, layout health analysis.
  • Interaction: Tap, swipe, type, pinch, rotate, long-press, hardware key presses.
  • Logging: Per-app Android log filtering via PID (pass deviceId + packageId to eliminate system noise). Background log watching via wait_for_log.
  • Environment: Metro bundler management, app lifecycle, deep links, screen recording, locale switching.
  • Text Input: Unicode/Cyrillic/CJK/Emoji support via ADB Keyboard with automatic keyboard restore.

Prerequisites

  1. Node.js (v18+)

  2. ADB installed and in PATH (for Android).

  3. Maestro (required for iOS; fallback for Android input).

    • Mac/Linux: curl -Ls "https://get.maestro.mobile.dev" | bash

    • Windows:

      powershell -Command "iwr -useb https://get.maestro.mobile.dev | iex"
      
  4. (Optional) ADB Keyboard — only needed for non-ASCII input (Unicode, Cyrillic, Emoji).

    • Download from GitHub and install: adb install ADBKeyboard.apk.

Configuration

macOS / Linux

{
  "mcpServers": {
    "open-mobile-mcp": {
      "command": "npx",
      "args": ["open-mobile-mcp"]
    }
  }
}

Windows

{
  "mcpServers": {
    "open-mobile-mcp": {
      "command": "npx",
      "args": ["open-mobile-mcp"],
      "env": {
        "MAESTRO_HOME": "C:\\Users\\YOUR_USER\\.maestro",
        "PATH": "C:\\Users\\YOUR_USER\\.maestro\\maestro\\bin;C:\\Windows\\system32;C:\\Windows;..."
      }
    }
  }
}

Note: On Windows, explicitly setting MAESTRO_HOME and PATH is often required for maestro to be found.

Running from source
git clone https://github.com/xzaleksey/open-mobile-mcp.git
cd open-mobile-mcp
npm install && npm run build

Then use "command": "node", "args": ["/path/to/open-mobile-mcp/build/index.js"] in your MCP config.

Tools

Perception

Tool Platform Description
device_list Android/iOS List connected emulators and simulators
get_viewport Android/iOS Screenshot (~800px wide). Use originalWidth/originalHeight for tap coordinates — the image is scaled down, tapping at image pixels will miss.
get_semantic_hierarchy Android/iOS Pruned UI tree as JSON
get_screen_text Android/iOS OCR via Tesseract.js (default eng)
configure_ocr Android/iOS Set default OCR language (e.g. eng+fra)
find_element Android/iOS Find elements by testId, text, or contentDescription
wait_for_element Android/iOS Poll until element appears (default 20s)
get_element_image Android/iOS Cropped screenshot of a specific element
capture_diff Compare two base64 screenshots, returns diff %
analyze_layout_health Android/iOS Detect deep nesting and layout performance issues

Interaction

Tool Platform Description
tap_on_element Android/iOS Recommended — find + tap by selector. Note: text matching is exact; emoji prefixes (e.g. 🇫🇷 French A2) break text matching — check get_semantic_hierarchy for exact text first.
device_tap Android/iOS Raw coordinate tap. Must use original device pixels, not screenshot pixels.
device_swipe Android/iOS Swipe by coordinates
device_type Android/iOS Type text (handles Unicode)
device_pinch Android Two-finger pinch/zoom
device_rotate_gesture Android Two-finger rotation
device_press_key Android/iOS Hardware keys: back, home, recents, enter, delete, volume_up, volume_down, power, tab, search, space, menu, dpad_*. Also accepts raw Android keycodes.

Environment & Logs

Tool Platform Description
manage_bundler Android/iOS Start/stop/restart Metro. Pass deviceId + packageId for PID-based Android log filtering.
manage_platform_logs Android/iOS Manual control over adb logcat / xcrun capture. Pass deviceId + packageId for per-app filtering.
get_bundler_logs Android/iOS Recent Metro/Android/iOS logs. Returns [status] line — if buffer is empty, capture may not be running.
stream_errors Android/iOS Recent error/exception lines across all sources
get_network_logs Android/iOS Network logcat lines. For iOS, filters the internal log capture buffer (enable via manage_platform_logs).
wait_for_log Android/iOS Block until a log pattern matches. See subagent pattern below.
manage_app_lifecycle Android/iOS Launch, stop, install, or uninstall apps
open_deep_link Android/iOS Open a URL or deep link
clear_app_data Android/iOS Reset app to fresh-install state
get_app_info Android Version, permissions, install date
start_recording / stop_recording Android/iOS Screen recording to .mp4 (Android uses screenrecord, iOS uses simctl io).
run_maestro_flow Android/iOS Run a Maestro YAML flow
run_doctor Run npx expo-doctor
install_deps Run npx expo install <packages>

wait_for_log — Background Subagent Pattern

wait_for_log blocks until a pattern appears in the log buffer. Calling it directly in the main agent freezes the conversation. Always delegate it to a background subagent in Claude Code:

// Step 1 — spawn the watcher BEFORE the action that will trigger the log
// (In Claude Code, use Agent tool with run_in_background: true)
// Subagent prompt: "Call wait_for_log with pattern 'route: /home', timeout 60000. Report the result."

// Step 2 — perform the action in the main agent
tap_on_element({ selector: "Home", strategy: "text" });

// Step 3 — main agent continues freely; gets notified when subagent finishes

License

MIT

from github.com/xzaleksey/open-mobile-mcp

Install Open Mobile in Claude Desktop, Claude Code & Cursor

Recommended · one command, every IDE
unyly install open-mobile-mcp

Installs into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.

First time? Get the CLI: curl -fsSL https://unyly.org/install | sh

Or configure manually

Run in your terminal:

claude mcp add open-mobile-mcp -- npx -y open-mobile-mcp

FAQ

Is Open Mobile MCP free?

Yes, Open Mobile MCP is free — one-click install via Unyly at no cost.

Does Open Mobile need an API key?

No, Open Mobile runs without API keys or environment variables.

Is Open Mobile hosted or self-hosted?

Self-hosted: the server runs locally on your machine via the install command above.

How do I install Open Mobile in Claude Desktop, Claude Code or Cursor?

Open Open Mobile on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.

Related MCPs

Compare Open Mobile with

Not sure what to pick?

Find your stack in 60 seconds

Author?

Embed badge for your README

Browse similar

All development MCPs