Skip to main content
Glama

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_session inicia 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 explicitly

Luego 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 checks

El 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.json manual)

  • Un agente de QA (qa) para pruebas automatizadas de aplicaciones móviles

  • Un agente de escritura de flujos (flow-writer) para crear flujos de prueba YAML de Maestro

  • Una guía de uso (/expo-guide) con referencia de herramientas y mejores prácticas

  • Un 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-mcp

Uso 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 number

Inicio 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 agent

El 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 agent

Valida 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 tips

Herramientas

Herramientas de ciclo de vida

Herramienta

Descripción

get_session_status

Obtener estado de la sesión (estado del servidor, información del dispositivo, tiempo restante de arrendamiento)

start_session

Iniciar servidor Expo, conectar dispositivo y adquirir arrendamiento de dispositivo

stop_session

Detener servidor Expo y liberar todos los recursos

reload_app

Recarga en caliente la aplicación en el dispositivo conectado

get_logs

Obtener registros del empaquetador Metro (filtrables por nivel y fuente)

press_key

Presionar una tecla (Enter, Backspace, Home, Lock, Tab, Volume Up/Down)

scroll

Desplazar la pantalla en una dirección (predeterminado: abajo)

swipe

Deslizar por dirección o coordenadas precisas de inicio/fin

Opciones de start_session

Opción

Tipo

Descripción

target

ios-simulator

android-emulator

web-browser

Plataforma de destino para iniciar

device_id

string

Dispositivo específico (UUID de iOS o serie de Android). Detectado automáticamente si se omite

host

lan

tunnel

localhost

Modo de conexión

port

number

Puerto del servidor (predeterminado: 8081, se incrementa automáticamente si está ocupado)

clear

boolean

Limpiar caché del empaquetador Metro

dev

boolean

Modo de desarrollo (predeterminado: true)

minify

boolean

Minificar JavaScript

max_workers

number

Trabajadores máximos de Metro

offline

boolean

Modo sin conexión

scheme

string

Esquema URI personalizado

simulator_name

string

Nombre del simulador de iOS (ej. "iPhone 16 Pro")

clean_state

boolean

Limpiar estado del simulador antes de iniciar (predeterminado: false)

auto_login

object

Ejecutar un flujo de Maestro después de que la aplicación cargue ({ flow_file: "path/to/flow.yaml" })

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

take_screenshot

Capturar pantalla (redimensionada automáticamente para contexto LLM)

tap_on

Tocar elemento de la interfaz por texto, id o coordenadas

input_text

Escribir texto en el campo enfocado

back

Presionar botón atrás

run_maestro_flow

Ejecutar flujo YAML de Maestro en línea

run_maestro_flow_files

Ejecutar archivos de flujo de Maestro desde el directorio del proyecto

check_maestro_flow_syntax

Validar sintaxis de flujo YAML de Maestro sin ejecutarlo

inspect_view_hierarchy

Obtener árbol de elementos de la interfaz de la pantalla actual

list_devices

Listar todos los dispositivos disponibles (funciona sin sesión activa)

Nota: Las herramientas de dispositivo requieren una sesión activa. Llama a start_session primero. list_devices y check_maestro_flow_syntax pueden llamarse en cualquier momento.

Sistema de arrendamiento de dispositivos

El arrendamiento de dispositivos evita que una instancia de MCP retenga un dispositivo indefinidamente:

  1. Adquirir: start_session adquiere un arrendamiento de dispositivo de 2 minutos

  2. Renovación automática: Cada llamada a la herramienta de dispositivo (take_screenshot, tap_on, etc.) reinicia el temporizador de 2 minutos

  3. Expirar: Si no se llama a ninguna herramienta de dispositivo durante 2 minutos, el arrendamiento expira y el dispositivo queda disponible

  4. Re-adquirir: Llama a start_session de nuevo para re-adquirir (el servidor permanece en ejecución, no se necesita reinicio)

  5. Verificar: get_session_status muestra 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

EXPO_APP_DIR

Ruta al directorio de la aplicación Expo (el argumento posicional de CLI tiene prioridad)

Directorio de trabajo actual

MAESTRO_CLI_PATH

Ruta a la CLI de Maestro

~/.maestro/bin/maestro

ESSENTIAL_TOOLS

Lista separada por comas de herramientas a exponer (--tools tiene prioridad)

Todas las herramientas

EXCLUDE_TOOLS

Lista separada por comas de herramientas a excluir (--exclude-tools tiene prioridad)

Ninguna

LOG_BUFFER_SIZE

Líneas de registro máximas a mantener en memoria

400

EXPO_TOKEN

Token de autenticación de Expo (solo necesario si el modo sin conexión está desactivado)

Ninguno

Cómo funciona

  1. Inicio de sesión: start_session inicia el servidor de desarrollo de Expo, espera la conexión del dispositivo y adquiere un arrendamiento

  2. Vinculación de dispositivo: El ID del dispositivo conectado se almacena en la sesión con un TTL de 2 minutos

  3. Inyección automática: Todas las herramientas de dispositivo de Maestro usan automáticamente el ID de dispositivo de la sesión

  4. Renovación de arrendamiento: Cada llamada a la herramienta de dispositivo reinicia el temporizador de arrendamiento

  5. Fin de sesión: stop_session limpia 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

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
<1hResponse time
0dRelease cycle
3Releases (12mo)

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