Expo MCP Server
expo-mcp
Servidor MCP para la automatización de aplicaciones Expo/React Native con integración de Maestro.
Características
Arquitectura basada en sesiones:
start_sessioninicia Expo, vincula un dispositivo y adquiere un arrendamiento; sin gestión manual de ID de dispositivo.Arrendamiento de dispositivo con TTL: Arrendamiento de 2 minutos renovado automáticamente en cada llamada a la herramienta de dispositivo; expira tras la inactividad para que otras instancias puedan usar el dispositivo.
Coordinación entre instancias: Múltiples instancias de MCP pueden ejecutarse simultáneamente sin conflictos de dispositivos.
Gestión del servidor de desarrollo de Expo: Iniciar/detener/recargar el servidor de desarrollo de Expo.
Integración con Maestro: Herramientas completas de automatización de interfaz de usuario (toque, entrada, captura de pantalla, etc.).
Instalación
Como plugin de Claude Code (Recomendado)
Dos comandos, luego reinicia:
# 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 explicitlyLuego reinicia Claude Code y todas las herramientas, agentes y habilidades estarán listos.
Flags del instalador:
/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 checksEl instalador ejecuta scripts de Node empaquetados (doctor.mjs, detect-app-dir.mjs, scaffold-maestro.mjs) desde el directorio del plugin. Claude Code te pedirá que apruebes cada uno la primera vez que se ejecute; aprúebalos para continuar.
Si prefieres preaprobar los scripts (sin avisos), añade esto a .claude/settings.local.json en tu proyecto, reemplazando <PATH> con la ruta absoluta mostrada por Claude Code la primera vez que se ejecuta cada script:
{
"permissions": {
"allow": [
"Bash(node <PATH>/doctor.mjs:*)",
"Bash(node <PATH>/detect-app-dir.mjs:*)",
"Bash(node <PATH>/scaffold-maestro.mjs:*)"
]
}
}La instalación del plugin configura automáticamente:
El servidor MCP
expo(no se necesita.mcp.jsonmanual)Un agente de QA (
qa) para pruebas automatizadas de aplicaciones móvilesUn agente de escritura de flujos (
flow-writer) para crear flujos de prueba YAML de MaestroUna guía de uso (
/expo-guide) con referencia de herramientas y mejores prácticasUn hook de validación que advierte sobre veredictos de QA PASS sin evidencia de ejecución
Solo como servidor MCP
Este proyecto se distribuye solo a través de GitHub (el nombre expo-mcp en npm pertenece a un paquete diferente y no relacionado; no lo uses). Ejecútalo mediante la referencia de GitHub:
npx -y github:DaveDev42/expo-mcpUso con Claude Code
Configuración manual de MCP
Si no usas el plugin, añade a tu .mcp.json:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp"]
}
}
}Configuración de Monorepo
Usa un argumento posicional para especificar el directorio de la aplicación:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "apps/mobile"]
}
}
}Dispositivo específico
Fija un simulador o emulador específico con --device-id:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "--device-id=6D192F60-1234-5678-ABCD-000000000000"]
}
}
}Filtrado de herramientas
Excluye herramientas específicas con --exclude-tools:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "apps/mobile", "--exclude-tools=list_devices"]
}
}
}O expón solo herramientas específicas con --tools:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "--tools=start_session,stop_session,take_screenshot"]
}
}
}Referencia de CLI
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 numberInicio rápido
# 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()Características del plugin
Cuando se instala como plugin de Claude Code, obtienes estas características adicionales:
Agente de QA
Delega las pruebas de QA móvil al agente qa. Prueba sistemáticamente tu aplicación en un simulador/emulador con requisitos estrictos de evidencia; sin veredictos basados solo en revisión de código.
# In Claude Code, delegate to the QA agent:
"Test the login flow on iOS simulator" → delegates to qa agentEl agente sigue una metodología estructurada: iniciar aplicación → inspeccionar interfaz de usuario → interactuar → verificar → informar con veredicto PASS/FAIL/INCONCLUSIVE.
Agente de escritura de flujos
El agente flow-writer inspecciona la aplicación en vivo y crea flujos de prueba YAML de Maestro:
# Ask the flow writer to create a test flow:
"Write a Maestro flow for the onboarding sequence" → delegates to flow-writer agentValida la sintaxis, ejecuta el flujo para verificar que funciona y escribe el archivo .yaml en tu proyecto.
Guía de uso
Accede a la referencia de herramientas y mejores prácticas con /expo-guide:
/expo-guide # Full guide
/expo-guide session # Session lifecycle
/expo-guide debugging # Debugging tipsHerramientas
Herramientas de ciclo de vida
Herramienta | Descripción |
| Obtener estado de la sesión (estado del servidor, información del dispositivo, tiempo restante de arrendamiento) |
| Iniciar servidor Expo, conectar dispositivo y adquirir arrendamiento de dispositivo |
| Detener servidor Expo y liberar todos los recursos |
| Recarga en caliente la aplicación en el dispositivo conectado |
| Obtener registros del empaquetador Metro (filtrables por nivel y fuente) |
| Presionar una tecla (Enter, Backspace, Home, Lock, Tab, Volume Up/Down) |
| Desplazar la pantalla en una dirección (predeterminado: abajo) |
| Deslizar por dirección o coordenadas precisas de inicio/fin |
Opciones de start_session
Opción | Tipo | Descripción | ||
|
|
|
| Plataforma de destino para iniciar |
| string | Dispositivo específico (UUID de iOS o serie de Android). Detectado automáticamente si se omite | ||
|
|
|
| Modo de conexión |
| number | Puerto del servidor (predeterminado: 8081, se incrementa automáticamente si está ocupado) | ||
| boolean | Limpiar caché del empaquetador Metro | ||
| boolean | Modo de desarrollo (predeterminado: true) | ||
| boolean | Minificar JavaScript | ||
| number | Trabajadores máximos de Metro | ||
| boolean | Modo sin conexión | ||
| string | Esquema URI personalizado | ||
| string | Nombre del simulador de iOS (ej. "iPhone 16 Pro") | ||
| boolean | Limpiar estado del simulador antes de iniciar (predeterminado: false) | ||
| object | Ejecutar un flujo de Maestro después de que la aplicación cargue ( |
Herramientas de Maestro
Todas las herramientas de Maestro funcionan automáticamente una vez que una sesión está activa; el device_id se inyecta desde la sesión:
Herramienta | Descripción |
| Capturar pantalla (redimensionada automáticamente para contexto LLM) |
| Tocar elemento de la interfaz por texto, id o coordenadas |
| Escribir texto en el campo enfocado |
| Presionar botón atrás |
| Ejecutar flujo YAML de Maestro en línea |
| Ejecutar archivos de flujo de Maestro desde el directorio del proyecto |
| Validar sintaxis de flujo YAML de Maestro sin ejecutarlo |
| Obtener árbol de elementos de la interfaz de la pantalla actual |
| Listar todos los dispositivos disponibles (funciona sin sesión activa) |
Nota: Las herramientas de dispositivo requieren una sesión activa. Llama a
start_sessionprimero.list_devicesycheck_maestro_flow_syntaxpueden llamarse en cualquier momento.
Sistema de arrendamiento de dispositivos
El arrendamiento de dispositivos evita que una instancia de MCP retenga un dispositivo indefinidamente:
Adquirir:
start_sessionadquiere un arrendamiento de dispositivo de 2 minutosRenovación automática: Cada llamada a la herramienta de dispositivo (
take_screenshot,tap_on, etc.) reinicia el temporizador de 2 minutosExpirar: Si no se llama a ninguna herramienta de dispositivo durante 2 minutos, el arrendamiento expira y el dispositivo queda disponible
Re-adquirir: Llama a
start_sessionde nuevo para re-adquirir (el servidor permanece en ejecución, no se necesita reinicio)Verificar:
get_session_statusmuestra el tiempo de arrendamiento restante
Varias instancias de MCP se coordinan a través de un registro basado en archivos (/tmp/expo-mcp/instances/), por lo que dos instancias no pueden reclamar el mismo dispositivo simultáneamente.
Variables de entorno
Variable | Descripción | Predeterminado |
| Ruta al directorio de la aplicación Expo (el argumento posicional de CLI tiene prioridad) | Directorio de trabajo actual |
| Ruta a la CLI de Maestro |
|
| Lista separada por comas de herramientas a exponer ( | Todas las herramientas |
| Lista separada por comas de herramientas a excluir ( | Ninguna |
| Líneas de registro máximas a mantener en memoria | 400 |
| Token de autenticación de Expo (solo necesario si el modo sin conexión está desactivado) | Ninguno |
Cómo funciona
Inicio de sesión:
start_sessioninicia el servidor de desarrollo de Expo, espera la conexión del dispositivo y adquiere un arrendamientoVinculación de dispositivo: El ID del dispositivo conectado se almacena en la sesión con un TTL de 2 minutos
Inyección automática: Todas las herramientas de dispositivo de Maestro usan automáticamente el ID de dispositivo de la sesión
Renovación de arrendamiento: Cada llamada a la herramienta de dispositivo reinicia el temporizador de arrendamiento
Fin de sesión:
stop_sessionlimpia todo, o el arrendamiento expira tras la inactividad
Entornos no interactivos (CI/CD, Agentes de IA)
Este servidor MCP habilita automáticamente el modo --offline cuando se ejecuta en entornos CI (CI=1). Esto permite que la aplicación funcione sin requerir un EXPO_TOKEN.
Qué hace el modo sin conexión
Omite la comunicación con el servidor de Expo (firma de manifiesto)
NO afecta las características de red de tu aplicación (llamadas API, fetch, etc.)
El modo túnel (
--tunnel) no está disponible en modo sin conexión
Si necesitas características de cuenta de Expo
Para características que requieren autenticación de Expo, desactiva el modo sin conexión y proporciona EXPO_TOKEN:
{
"mcpServers": {
"expo": {
"env": {
"EXPO_TOKEN": "your-token-here"
}
}
}
}Luego llama a start_session con offline: false:
start_session({ target: "ios-simulator", offline: false })Requisitos
Node.js >= 18
Xcode (para simulador de iOS)
Android Studio (para emulador de Android)
Maestro CLI (para automatización de interfaz de usuario)
Licencia
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