MCP Hub
Back to servers

Expo MCP Server

A tool for automated Expo and React Native development that combines dev server management with Maestro UI automation for seamless app testing and interaction.

Stars
1
Tools
12
Updated
Dec 29, 2025
Validated
Jan 9, 2026

expo-mcp

MCP server for Expo/React Native app automation with Maestro integration.

Features

  • Session-Based Architecture: Launch Expo and device binds automatically - no manual device ID management
  • Expo Dev Server Management: Start/stop/reload Expo development server
  • Maestro Integration: Full UI automation tools (tap, input, screenshot, etc.)

Installation

npm install -g expo-mcp
# or
npx expo-mcp

Usage with Claude Code

Add to your .mcp.json:

{
  "mcpServers": {
    "expo-mcp": {
      "command": "npx",
      "args": ["-y", "expo-mcp"],
      "env": {
        "EXPO_APP_DIR": "/path/to/your/expo/app"
      }
    }
  }
}

Quick Start

# 1. Start session (launches Expo + binds device automatically)
launch_expo({ target: "ios-simulator" })

# 2. Use Maestro tools directly (no device_id needed!)
take_screenshot()
tap_on({ text: "Login" })
input_text({ text: "hello@example.com" })

# 3. Reload app after code changes
reload_expo()

# 4. Check logs if needed
get_logs({ level: "error" })

# 5. Stop session when done
stop_expo()

Tools

Lifecycle Tools

ToolDescription
app_statusGet session status (server info, device_id)
launch_expoStart Expo server and establish session with device
stop_expoStop Expo server and end session
reload_expoHot reload the app on connected device
get_logsGet Metro bundler logs (filterable by level)

launch_expo Options

OptionTypeDescription
targetios-simulator | android-emulator | web-browserDevice to launch
hostlan | tunnel | localhostConnection mode
portnumberServer port (default: 8081, auto-increments if busy)
clearbooleanClear Metro bundler cache
devbooleanDevelopment mode (default: true)

Maestro Tools

All Maestro tools work automatically once a session is active:

ToolDescription
tap_onTap on UI element by text, id, or point
input_textType text into focused field
take_screenshotCapture screen (auto-resized for LLM)
inspect_view_hierarchyGet UI element tree
launch_appLaunch app by bundle ID
backPress back button
run_flowRun Maestro YAML flow

Note: Maestro tools require an active session. Call launch_expo first.

Environment Variables

VariableDescriptionDefault
EXPO_APP_DIRPath to Expo app directoryCurrent working directory
MAESTRO_CLI_PATHPath to Maestro CLI~/.maestro/bin/maestro
ESSENTIAL_TOOLSComma-separated list of tools to exposeAll tools
LOG_BUFFER_SIZEMax log lines to keep in memory400

How It Works

  1. Session Creation: launch_expo starts Expo dev server and waits for device connection
  2. Device Binding: Once device connects, its ID is stored in the session
  3. Automatic Injection: All Maestro tools automatically use the session's device ID
  4. Session End: stop_expo cleans up everything

This eliminates the need for manual device_id management.

Requirements

  • Node.js >= 18
  • Xcode (for iOS Simulator)
  • Android Studio (for Android Emulator)
  • Maestro CLI (for UI automation)

License

MIT

Reviews

No reviews yet

Sign in to write a review