Ir al contenido
angel.library

Mobile MCP — controlar iOS y Android desde el agente

Mobile MCP es para apps nativas lo que Playwright MCP es para el navegador: le da al agente las manos y los ojos para manejar un teléfono. Puede listar dispositivos, abrir apps, tocar botones, escribir, deslizar, sacar capturas, grabar video y leer los logs del sistema, en iOS y Android, sobre simuladores, emuladores o dispositivos físicos conectados por USB.

Un MCP (Model Context Protocol) es el estándar abierto con el que un agente como Claude Code o Codex se conecta a herramientas externas: el servidor expone funciones con nombre y descripción, y el modelo decide cuándo llamarlas. Ver MCP en Claude Code.

Lo mantiene Mobile Next (licencia Apache-2.0, unas 9.000 estrellas en GitHub).

El servidor intenta primero leer el árbol de accesibilidad nativo: la lista estructurada de elementos (botones, campos, textos) con sus etiquetas y coordenadas. Es rápido, barato en tokens y determinista. Cuando una pantalla no expone ese árbol (un juego, un canvas, una vista personalizada), recurre a capturas de pantalla y toques por coordenadas, que dependen de que el modelo interprete la imagen.

Por debajo usa mobilecli, la CLI de dispositivos del mismo equipo, apoyada en las herramientas de Xcode en iOS y en adb en Android.

  • Node.js 20+.
  • iOS: Xcode command line tools y un simulador arrancado (xcrun simctl), o un iPhone conectado por USB y marcado como de confianza.
  • Android: Android Platform Tools (adb) y un emulador en marcha, o un dispositivo con depuración USB activada.
  • Un cliente compatible con MCP.

Como plugin (incluye además el comando /mobile-mirror):

/plugin marketplace add mobile-next/mobile-mcp
/plugin install mobile-mcp@mobile-mcp

Sin plugins:

Ventana de terminal
claude mcp add mobile-mcp -- npx -y @mobilenext/mobile-mcp@latest
Ventana de terminal
codex mcp add mobile-mcp npx "@mobilenext/mobile-mcp@latest"

O en ~/.codex/config.toml (ver MCP en Codex):

[mcp_servers.mobile-mcp]
command = "npx"
args = ["@mobilenext/mobile-mcp@latest"]
Ventana de terminal
gemini mcp add mobile-mcp npx -y @mobilenext/mobile-mcp@latest

Cursor Settings → MCP → Add new MCP Server, tipo command, con npx -y @mobilenext/mobile-mcp@latest. El README también trae un botón de instalación en un clic.

Sirve para Claude Desktop, Cline, Kiro, Windsurf y la mayoría de clientes:

{
"mcpServers": {
"mobile-mcp": {
"command": "npx",
"args": ["-y", "@mobilenext/mobile-mcp@latest"]
}
}
}

Pídele al agente “list available devices”. Si la lista sale vacía, arranca antes un simulador o emulador.

Para compartir un servidor entre máquinas o correrlo en un equipo con los dispositivos conectados:

Ventana de terminal
MOBILEMCP_AUTH=un-token-largo npx @mobilenext/mobile-mcp@latest --listen 3000

El cliente se conecta a http://<host>:3000/mcp con ese token como Bearer.

GrupoHerramientaQué hace
Dispositivomobile_list_available_devicesLista simuladores, emuladores y dispositivos reales
Dispositivomobile_get_screen_sizeTamaño de pantalla en píxeles
Dispositivomobile_get_orientation / mobile_set_orientationLeer o cambiar vertical/horizontal
Dispositivomobile_fold_devicePlegar o desplegar un dispositivo plegable
Dispositivomobile_set_locationSimular o limpiar la ubicación GPS
Dispositivomobile_clipboardLeer o reemplazar el portapapeles
Appsmobile_list_appsApps instaladas
Appsmobile_get_foreground_appApp en primer plano
Appsmobile_launch_app / mobile_terminate_appAbrir o cerrar una app por paquete o bundle ID
Appsmobile_install_app / mobile_uninstall_appInstalar .apk, .ipa, .app o .zip, o desinstalar
Pantallamobile_take_screenshot / mobile_save_screenshotCaptura al modelo o a un archivo
Pantallamobile_list_elements_on_screenElementos de la UI con coordenadas y propiedades
Pantallamobile_click_on_screen_at_coordinatesTocar en x,y o sobre una referencia de elemento
Pantallamobile_double_tap_on_screenDoble toque
Pantallamobile_long_press_on_screen_at_coordinatesPulsación larga
Pantallamobile_swipe_on_screenDeslizar arriba, abajo, izquierda o derecha
Pantallamobile_start_screen_recording / mobile_stop_screen_recordingGrabar la pantalla en video
Entradamobile_type_keysEscribir texto, con envío opcional
Entradamobile_press_buttonHOME, BACK, VOLUME_UP/DOWN, ENTER…
Entradamobile_open_urlAbrir una URL http/https en el navegador del dispositivo
Logsmobile_get_device_logslogcat (Android) o unified log (iOS)
Logsmobile_list_crashes / mobile_get_crashInformes de cierre inesperado
Lotemobile_batch_commandsVarias herramientas en una sola llamada
Nubemobile_login_to_cloud_provider, mobile_list_remote_devices, mobile_allocate_remote_device, mobile_release_remote_deviceReservar dispositivos reales en Mobile Next Cloud (servicio aparte)

mobile_batch_commands importa más de lo que parece: cada llamada a una herramienta es un viaje de ida y vuelta con el modelo, así que agrupar «tocar, escribir, enviar, listar elementos» en una sola llamada reduce latencia y tokens.

Abre la app en el simulador de iPhone, entra con usuario demo@example.com,
ve a Ajustes y confirma que el interruptor de notificaciones está activado.
Saca una captura al final.
Instala ./build/app-debug.apk en el emulador Android, ábrela, completa el
onboarding y, si la app se cierra, trae el último crash y los logs de logcat.
Gira el dispositivo a horizontal en la pantalla de checkout y dime si algún
botón queda fuera de la pantalla.
  • Verificar un cambio de UI en móvil sin salir del agente: el agente modifica el código, recompila, abre la app y comprueba el resultado.
  • Reproducir bugs que dependen de orientación, ubicación o un flujo largo de pantallas, y recoger logs y crashes en el mismo paso.
  • Exploración y smoke tests de una build nueva antes de pasarla a QA.

Para una suite de regresión que corra en cada PR conviene algo determinista: el mismo equipo publica mobilewright para tests móviles reproducibles, y frameworks como e2e combinan pasos de IA con aserciones fijas.

  • Un iPhone real exige más preparación (conexión por USB, marcar el equipo como de confianza). Empieza por el simulador.
  • Cuando el agente cae a capturas de pantalla, cada paso cuesta más tokens y es menos fiable. Las apps con buenas etiquetas de accesibilidad se automatizan mucho mejor, lo cual es un incentivo más para cuidarlas.
  • mobile_open_url bloquea esquemas no estándar (deep links propios) salvo que actives MOBILEMCP_ALLOW_UNSAFE_URLS.