Expo MCP Server
expo-mcp
MCP-Server für die Automatisierung von Expo/React Native-Apps mit Maestro-Integration.
Funktionen
Sitzungsbasierte Architektur:
start_sessionstartet Expo, bindet ein Gerät und erwirbt ein Lease – keine manuelle Geräte-ID-Verwaltung erforderlichGeräte-Lease mit TTL: 2-Minuten-Lease, das bei jedem Aufruf eines Gerätetools automatisch verlängert wird; läuft nach Inaktivität ab, damit andere Instanzen das Gerät nutzen können
Instanzübergreifende Koordination: Mehrere MCP-Instanzen können gleichzeitig ohne Gerätekonflikte ausgeführt werden
Expo Dev Server Management: Starten/Stoppen/Neuladen des Expo-Entwicklungsservers
Maestro-Integration: Umfassende UI-Automatisierungstools (Tippen, Eingabe, Screenshot, etc.)
Installation
Als Claude Code Plugin (Empfohlen)
Zwei Befehle, dann neu starten:
# 1. Install the plugin. Just dismiss the "Expo App Directory" prompt
# (or leave it empty) — the next step configures it for you.
/plugin marketplace add DaveDev42/expo-mcp
/plugin install expo-mcp --scope project
# 2. One-shot installer. Runs environment checks, auto-detects the Expo
# app directory, and writes the userConfig directly into
# .claude/settings.json. No /plugin UI round-trip needed.
/expo-mcp:install # auto-detect
/expo-mcp:install apps/mobile # monorepo: pass the path explicitlyStarten Sie danach Claude Code neu und alle Tools, Agents und Skills sind bereit.
Installer-Flags:
/expo-mcp:install apps/mobile --global # write to ~/.claude/settings.json
/expo-mcp:install --scaffold-maestro # also create a starter maestro/
/expo-mcp:install --skip-doctor # skip prerequisite checksDer Installer führt gebündelte Node-Skripte (doctor.mjs, detect-app-dir.mjs, scaffold-maestro.mjs) aus dem Plugin-Verzeichnis aus. Claude Code wird Sie beim ersten Ausführen jedes Skripts um Bestätigung bitten – bestätigen Sie diese, um fortzufahren.
Wenn Sie die Skripte lieber vorab bestätigen möchten (ohne Abfragen), fügen Sie dies zu .claude/settings.local.json in Ihrem Projekt hinzu – ersetzen Sie dabei <PATH> durch den absoluten Pfad, den Claude Code beim ersten Ausführen jedes Skripts anzeigt:
{
"permissions": {
"allow": [
"Bash(node <PATH>/doctor.mjs:*)",
"Bash(node <PATH>/detect-app-dir.mjs:*)",
"Bash(node <PATH>/scaffold-maestro.mjs:*)"
]
}
}Die Installation des Plugins richtet automatisch Folgendes ein:
Den
expoMCP-Server (kein manuelles.mcp.jsonerforderlich)Einen QA-Agenten (
qa) für automatisiertes Testen mobiler AppsEinen Flow-Writer-Agenten (
flow-writer) zum Erstellen von Maestro YAML-Test-FlowsEinen Nutzungsleitfaden-Skill (
/expo-guide) mit Tool-Referenz und Best PracticesEinen Validierungs-Hook, der bei QA-PASS-Urteilen ohne Ausführungsnachweis warnt
Nur als MCP-Server
Dieses Projekt wird nur über GitHub vertrieben (der Name expo-mcp auf npm gehört zu einem anderen, unabhängigen Paket – verwenden Sie es nicht). Führen Sie es über die GitHub-Referenz aus:
npx -y github:DaveDev42/expo-mcpVerwendung mit Claude Code
Manuelle MCP-Einrichtung
Falls Sie das Plugin nicht verwenden, fügen Sie dies zu Ihrer .mcp.json hinzu:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp"]
}
}
}Monorepo-Einrichtung
Verwenden Sie ein Positionsargument, um das App-Verzeichnis anzugeben:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "apps/mobile"]
}
}
}Spezifisches Gerät
Fixieren Sie einen bestimmten Simulator oder Emulator mit --device-id:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "--device-id=6D192F60-1234-5678-ABCD-000000000000"]
}
}
}Tool-Filterung
Schließen Sie bestimmte Tools mit --exclude-tools aus:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "apps/mobile", "--exclude-tools=list_devices"]
}
}
}Oder stellen Sie nur bestimmte Tools mit --tools bereit:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "--tools=start_session,stop_session,take_screenshot"]
}
}
}CLI-Referenz
Usage: expo-mcp [app-dir] [options]
Arguments:
app-dir Path to Expo app directory (default: cwd)
Options:
--device-id=<id> Specific device to use (iOS simulator UUID or Android serial)
--exclude-tools=tool1,tool2 Exclude specific tools from the MCP server
--tools=tool1,tool2 Only expose specific tools
-h, --help Show help message
-v, --version Show version numberSchnellstart
# 1. Start session (launches Expo + binds device + acquires lease)
start_session({ target: "ios-simulator" })
# 2. Use tools directly (no device_id needed!)
take_screenshot()
tap_on({ text: "Login" })
input_text({ text: "hello@example.com" })
press_key({ key: "Enter" })
scroll({ direction: "down" })
swipe({ direction: "left" })
# 3. Run Maestro flows
run_maestro_flow({ flow_yaml: "- assertVisible: Welcome" })
check_maestro_flow_syntax({ flow_yaml: "- tap: Login" })
# 4. Reload app after code changes
reload_app()
# 5. Check logs if needed
get_logs({ level: "error" })
# 6. Stop session when done
stop_session()Plugin-Funktionen
Wenn Sie das Plugin als Claude Code-Plugin installieren, erhalten Sie diese zusätzlichen Funktionen:
QA-Agent
Delegieren Sie mobiles QA-Testing an den qa-Agenten. Er testet Ihre App systematisch auf einem Simulator/Emulator mit strengen Nachweisanforderungen – keine Urteile, die nur auf Code-Reviews basieren.
# In Claude Code, delegate to the QA agent:
"Test the login flow on iOS simulator" → delegates to qa agentDer Agent folgt einer strukturierten Methodik: App starten → UI untersuchen → interagieren → verifizieren → berichten mit PASS/FAIL/INCONCLUSIVE-Urteil.
Flow-Writer-Agent
Der flow-writer-Agent untersucht die Live-App und erstellt Maestro YAML-Test-Flows:
# Ask the flow writer to create a test flow:
"Write a Maestro flow for the onboarding sequence" → delegates to flow-writer agentEr validiert die Syntax, führt den Flow aus, um sicherzustellen, dass er funktioniert, und schreibt die .yaml-Datei in Ihr Projekt.
Nutzungsleitfaden
Greifen Sie mit /expo-guide auf die Tool-Referenz und Best Practices zu:
/expo-guide # Full guide
/expo-guide session # Session lifecycle
/expo-guide debugging # Debugging tipsTools
Lebenszyklus-Tools
Tool | Beschreibung |
| Sitzungsstatus abrufen (Serverstatus, Geräteinfo, verbleibende Lease-Zeit) |
| Expo-Server starten, Gerät verbinden und Geräte-Lease erwerben |
| Expo-Server stoppen und alle Ressourcen freigeben |
| App auf dem verbundenen Gerät neu laden (Hot Reload) |
| Metro-Bundler-Logs abrufen (filterbar nach Ebene und Quelle) |
| Taste drücken (Enter, Backspace, Home, Lock, Tab, Lautstärke hoch/runter) |
| Bildschirm in eine Richtung scrollen (Standard: nach unten) |
| Wischen nach Richtung oder präzisen Start-/Endkoordinaten |
start_session Optionen
Option | Typ | Beschreibung | ||
|
|
|
| Zielplattform zum Starten |
| string | Spezifisches Gerät (iOS UUID oder Android-Seriennummer). Wird automatisch erkannt, falls weggelassen | ||
|
|
|
| Verbindungsmodus |
| number | Server-Port (Standard: 8081, wird automatisch erhöht, falls belegt) | ||
| boolean | Metro-Bundler-Cache leeren | ||
| boolean | Entwicklungsmodus (Standard: true) | ||
| boolean | JavaScript minimieren | ||
| number | Maximale Metro-Worker | ||
| boolean | Offline-Modus | ||
| string | Benutzerdefiniertes URI-Schema | ||
| string | Name des iOS-Simulators (z. B. "iPhone 16 Pro") | ||
| boolean | Simulator-Status vor dem Start bereinigen (Standard: false) | ||
| object | Maestro-Flow nach dem Laden der App ausführen ( |
Maestro-Tools
Alle Maestro-Tools funktionieren automatisch, sobald eine Sitzung aktiv ist – die device_id wird aus der Sitzung injiziert:
Tool | Beschreibung |
| Bildschirm aufnehmen (automatisch für LLM-Kontext skaliert) |
| Auf UI-Element tippen (nach Text, ID oder Koordinaten) |
| Text in das fokussierte Feld eingeben |
| Zurück-Taste drücken |
| Maestro YAML-Flow inline ausführen |
| Maestro-Flow-Dateien aus dem Projektverzeichnis ausführen |
| Maestro YAML-Flow-Syntax validieren, ohne sie auszuführen |
| UI-Elementbaum des aktuellen Bildschirms abrufen |
| Alle verfügbaren Geräte auflisten (funktioniert ohne aktive Sitzung) |
Hinweis: Gerätetools erfordern eine aktive Sitzung. Rufen Sie zuerst
start_sessionauf.list_devicesundcheck_maestro_flow_syntaxkönnen jederzeit aufgerufen werden.
Geräte-Lease-System
Das Geräte-Lease verhindert, dass eine MCP-Instanz ein Gerät unbegrenzt belegt:
Erwerben:
start_sessionerwirbt ein 2-Minuten-Geräte-LeaseAutomatische Verlängerung: Jeder Aufruf eines Gerätetools (
take_screenshot,tap_onusw.) setzt den 2-Minuten-Timer zurückAblauf: Wenn 2 Minuten lang kein Gerätetool aufgerufen wird, läuft das Lease ab und das Gerät wird verfügbar
Erneutes Erwerben: Rufen Sie
start_sessionerneut auf, um es wieder zu erwerben (Server bleibt aktiv, kein Neustart erforderlich)Prüfung:
get_session_statuszeigt die verbleibende Lease-Zeit an
Mehrere MCP-Instanzen koordinieren sich über eine dateibasierte Registrierung (/tmp/expo-mcp/instances/), sodass zwei Instanzen nicht gleichzeitig dasselbe Gerät beanspruchen können.
Umgebungsvariablen
Variable | Beschreibung | Standard |
| Pfad zum Expo-App-Verzeichnis (CLI-Positionsargument hat Vorrang) | Aktuelles Arbeitsverzeichnis |
| Pfad zur Maestro CLI |
|
| Kommagetrennte Liste der bereitzustellenden Tools ( | Alle Tools |
| Kommagetrennte Liste der auszuschließenden Tools ( | Keine |
| Maximale Anzahl der im Speicher zu behaltenden Log-Zeilen | 400 |
| Expo-Authentifizierungstoken (nur erforderlich, wenn der Offline-Modus deaktiviert ist) | Keine |
Funktionsweise
Sitzungsstart:
start_sessionstartet den Expo-Dev-Server, wartet auf die Geräteverbindung und erwirbt ein LeaseGerätebindung: Die verbundene Geräte-ID wird mit einer 2-minütigen TTL in der Sitzung gespeichert
Automatische Injektion: Alle Maestro-Gerätetools verwenden automatisch die Geräte-ID der Sitzung
Lease-Verlängerung: Jeder Aufruf eines Gerätetools setzt den Lease-Timer zurück
Sitzungsende:
stop_sessionbereinigt alles, oder das Lease läuft nach Inaktivität ab
Nicht-interaktive Umgebungen (CI/CD, KI-Agenten)
Dieser MCP-Server aktiviert automatisch den --offline-Modus, wenn er in CI-Umgebungen (CI=1) ausgeführt wird. Dies ermöglicht es der App, ohne ein EXPO_TOKEN zu funktionieren.
Was der Offline-Modus bewirkt
Überspringt die Expo-Server-Kommunikation (Manifest-Signierung)
Beeinflusst NICHT die Netzwerkfunktionen Ihrer App (API-Aufrufe, Fetch usw.)
Der Tunnel-Modus (
--tunnel) ist im Offline-Modus nicht verfügbar
Falls Sie Expo-Account-Funktionen benötigen
Für Funktionen, die eine Expo-Authentifizierung erfordern, deaktivieren Sie den Offline-Modus und geben Sie ein EXPO_TOKEN an:
{
"mcpServers": {
"expo": {
"env": {
"EXPO_TOKEN": "your-token-here"
}
}
}
}Rufen Sie dann start_session mit offline: false auf:
start_session({ target: "ios-simulator", offline: false })Anforderungen
Node.js >= 18
Xcode (für iOS-Simulator)
Android Studio (für Android-Emulator)
Maestro CLI (für UI-Automatisierung)
Lizenz
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DaveDev42/expo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server