Skip to main content
Glama
xzaleksey

open-mobile-mcp

by xzaleksey

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PATHNoThe system PATH, including the directory containing Maestro binaries. Often required on Windows.
MAESTRO_HOMENoThe home directory for Maestro. Required on Windows to ensure Maestro binaries are found.

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

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
device_listA

List connected active Android emulators and iOS simulators.

get_viewportA

Capture screenshot of a device. Returns the image (resized to ~800px width for efficiency) and metadata with both resized and original dimensions. Use originalWidth/originalHeight for coordinate calculations when tapping. For Android, if logicalWidth/Height are provided, they represent the UI coordinate system which may differ from the physical screenshot pixels.

get_semantic_hierarchyC

Get pruned, semantic UI hierarchy as JSON.

capture_diffA

Compare two base64 images and return diff percentage.

tap_on_elementA

🥇 RECOMMENDED: Tap on a UI element by selector. Finds the element and taps its center automatically. Prefer over device_tap. If observing a log triggered by this tap, spawn the wait_for_log subagent BEFORE tapping. NOTE: text matching is exact — if an element renders with an emoji prefix (e.g. '🇫🇷 French A2'), passing 'French A2' will fail. Use get_semantic_hierarchy first to see the exact text, or use contentDescription/testId strategy instead.

device_tapA

⚠️ Low-level: Tap at raw screen coordinates. Prefer tap_on_element for reliability. Use coordinates from the physical screenshot (originalWidth/originalHeight). On Android, this tool automatically scales coordinates if a display override (logical resolution) is detected.

device_typeC

Type text into the device.

device_swipeA

⚠️ Low-level: Swipe from (x1,y1) to (x2,y2). Use this for custom gestures or when you need precise swipe control. Use coordinates from the physical screenshot (originalWidth/originalHeight). On Android, this tool automatically scales coordinates if a display override (logical resolution) is detected.

analyze_layout_healthC

Analyze the UI layout for performance or health issues (e.g. deep nesting).

device_pinchA

Perform a pinch gesture (two-finger zoom) on the device. Use 'out' to zoom in (fingers spread apart) and 'in' to zoom out (fingers come together). Works on real Android phones (no root needed) via UIAutomation MotionEvent injection.

device_press_keyB

Press a hardware or system key. Also accepts raw Android keycodes as numbers.

device_rotate_gestureA

Perform a two-finger rotation gesture (e.g. to rotate a map or image). Positive degrees = clockwise. Android only (uses UIAutomation, no root needed).

clear_app_dataA

Clear all data and cache for an app (equivalent to Settings → App → Clear Data). Resets the app to a fresh-install state. Useful for testing onboarding or reproducing first-launch bugs.

get_app_infoA

Get version, install date, SDK target, data directory, and granted/denied permissions for an installed app. Android only.

start_recordingC

Start screen recording on the device. Use an absolute path for localPath when stopping to ensure you can find the file.

stop_recordingA

Stop screen recording and save the file. Use an absolute path for localPath to ensure you can find the file.

run_maestro_flowC

Run a complex Maestro flow via YAML.

manage_bundlerB

Start, stop, or restart the Metro bundler. Platform logs (Android/iOS) auto-start by default. On Android, pass both deviceId and packageId to enable PID-based log filtering — this captures only your app's logs and eliminates all system/GMS noise.

get_network_logsA

Pull network-related logs from the device. For Android, filters logcat. For iOS, filters the internal log capture buffer (must be running via manage_platform_logs or manage_bundler). For Expo / React Native apps, all console.log output (including fetchApi network traces) is emitted under the 'ReactNativeJS' logcat tag — use filter 'ReactNativeJS' or leave default. For native Android HTTP clients use 'OkHttp'. Note: a recurring warning 'ReconnectingWebSocket: Couldn't connect to ws://:8081/inspector/network' is harmless — it means Metro bundler's DevTools WebSocket is not reachable from the device (Metro not running or port 8081 blocked). The app still works; start Metro via 'npx expo start' or 'npx react-native start' on the same network to silence it.

get_bundler_logsA

Get recent logs from Metro bundler, Android, or iOS. To wait for a specific line, use wait_for_log in a background subagent instead of polling.

wait_for_logA

Block until a log line matching a pattern appears, or timeout. Returns {matched, line, elapsed}.

ALWAYS use via background subagent — never call directly or it blocks the whole conversation:

  1. Spawn background subagent: 'Call wait_for_log(pattern, timeout). Report result.'

  2. Then perform the action (tap/navigate) in the main agent

  3. Main agent continues; subagent notifies when pattern matched

Spawn subagent BEFORE the action that triggers the log, not after.

stream_errorsA

Get recent error logs from Metro, Android, and iOS. To wait for a specific error, use wait_for_log(pattern: 'error|exception') in a background subagent instead of polling.

manage_platform_logsA

Manually start/stop platform log capture (optional - auto-starts with bundler). On Android, pass both deviceId and packageId to enable PID-based filtering — this captures only your app's logs and eliminates all system/GMS noise. Without packageId, falls back to ReactNative/AndroidRuntime tag filtering which may include unrelated system warnings.

run_doctorC

Run npx expo-doctor.

install_depsC

Install dependencies using npx expo install.

manage_app_lifecycleC

Launch, stop, install, or uninstall apps.

open_deep_linkC

Open a deep link or URL on the device.

get_screen_textB

Get all text visible on screen using OCR.

configure_ocrA

Set the default OCR language for the session.

find_elementA

Find UI elements by selector. Returns elements with pre-parsed coordinates (centerX, centerY, left, top, right, bottom, width, height) ready for use. For tapping, prefer tap_on_element which does find+tap in one step.

wait_for_elementC

Wait for a UI element to appear (polls every 1s).

get_element_imageC

Get a cropped screenshot of a specific UI element.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.1/5.0

Scored across 32 tools

Disambiguation3/5

UI interaction tools like tap_on_element, device_tap, and find_element are differentiated by descriptions, but the logging cluster (manage_bundler, manage_platform_logs, get_bundler_logs, get_network_logs, stream_errors, wait_for_log) has substantial overlap in purpose and requires careful reading. get_semantic_hierarchy and get_screen_text also both retrieve visible content, though through different mechanisms.

Naming Consistency3/5

Multiple conventions coexist: get_* for inspection, device_* for low-level actions, manage_* for lifecycle operations, and standalone verb phrases like tap_on_element and wait_for_log. The clusters are internally consistent, but the overall set mixes noun-first device_* names with verb-first action names, and device_list is a noun phrase rather than a verb_noun pattern.

Tool Count2/5

32 tools is a heavy surface for a mobile testing server and exceeds the point where the toolset becomes hard to navigate. Several logging and UI inspection tools could reasonably be consolidated or split into sub-servers, even though most individual tools have a defined purpose.

Completeness4/5

The toolset covers core mobile testing workflows: device management, UI inspection and interaction, gestures, app lifecycle, logging, recording, deep links, and project tooling. Missing orientation control and a few native device actions are minor gaps that can be worked around with existing low-level gestures and commands.

Maintenance

ActivityMaintained
ResponsivenessNo issues