Supports Android emulator automation for Expo apps, including launching, UI interaction through Maestro tools (tap, input, screenshots), and view hierarchy inspection.
Provides session-based automation for Expo/React Native development including dev server management (start, stop, reload), device binding, and Metro bundler log access for iOS simulator, Android emulator, and web browser targets.
Supports iOS simulator automation for Expo apps, including launching, UI interaction through Maestro tools (tap, input, screenshots), and view hierarchy inspection.
Enables automation of React Native app development through Expo integration, including hot reloading, device management, and UI testing capabilities.
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
Usage with Claude Code
Add to your .mcp.json:
Quick Start
Tools
Lifecycle Tools
Tool | Description |
| Get session status (server info, device_id) |
| Start Expo server and establish session with device |
| Stop Expo server and end session |
| Hot reload the app on connected device |
| Get Metro bundler logs (filterable by level) |
launch_expo Options
Option | Type | Description |
|
| Device to launch |
|
| Connection mode |
| number | Server port (default: 8081, auto-increments if busy) |
| boolean | Clear Metro bundler cache |
| boolean | Development mode (default: true) |
Maestro Tools
All Maestro tools work automatically once a session is active:
Tool | Description |
| Tap on UI element by text, id, or point |
| Type text into focused field |
| Capture screen (auto-resized for LLM) |
| Get UI element tree |
| Launch app by bundle ID |
| Press back button |
| Run Maestro YAML flow |
Note: Maestro tools require an active session. Call
launch_expofirst.
Environment Variables
Variable | Description | Default |
| Path to Expo app directory | Current working directory |
| Path to Maestro CLI |
|
| Comma-separated list of tools to expose | All tools |
| Max log lines to keep in memory | 400 |
How It Works
Session Creation:
launch_expostarts Expo dev server and waits for device connectionDevice Binding: Once device connects, its ID is stored in the session
Automatic Injection: All Maestro tools automatically use the session's device ID
Session End:
stop_expocleans 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