mobile-device-mcp
Servidor MCP para control de dispositivos móviles impulsado por IA — 26 herramientas para capturas de pantalla, inspección de interfaz de usuario, interacción táctil y análisis visual con IA. Compatible con Anthropic Claude y Google Gemini.
Documentación
mobile-device-mcp
Servidor MCP que brinda a los asistentes de codificación con IA (Claude Code, Cursor, Windsurf) la capacidad de ver e interactuar con dispositivos móviles. 49 herramientas para capturas de pantalla, inspección de UI, interacción táctil, análisis visual impulsado por IA, inspección del árbol de widgets de Flutter, grabación de video y generación de pruebas.
Los asistentes de IA pueden leer tu código pero no pueden ver tu teléfono. Esto lo soluciona.
¿Por qué este?
| Característica | mobile-device-mcp | mobile-next/mobile-mcp | appium/appium-mcp |
|---|---|---|---|
| Total de herramientas | 49 | 20 | ~15 |
| Configuración | npx (30 seg) | npx | Requiere servidor Appium |
| Análisis visual con IA | 12 herramientas (Claude + Gemini) | Ninguno | Búsqueda basada en visión |
| Árbol de widgets de Flutter | 10 herramientas (Dart VM Service) | Ninguno | Ninguno |
| Búsqueda inteligente de elementos | 4 niveles (búsqueda local <1ms) | Solo árbol de accesibilidad | XPath/selectores |
| Aplicación complementaria (árbol de UI 23x más rápido) | Sí | No | No |
| Grabación de video | Sí | No | No |
| Generación de scripts de prueba | TS, Python, JSON | No | Solo Java/TestNG |
| Soporte de simulador iOS | Sí | Sí | Sí |
| Dispositivo iOS real | Planificado | Sí | Sí |
| Compresión de capturas de pantalla | 89% (251KB->28KB) | Ninguna | 50-80% |
| IA de múltiples proveedores | Claude + Gemini | N/D | Proveedor único |
| Precio | Gratis + Pro (₹499/mes) | Gratis | Gratis |
El problema
Los desarrolladores web tienen DevTools del navegador, Playwright y Puppeteer: los asistentes de IA pueden hacer clic, tomar capturas de pantalla y verificar correcciones. ¿Desarrolladores móviles? Están atascados tomando capturas de pantalla manualmente, copiando registros y describiendo lo que hay en pantalla. Son middleware humano entre la IA y el dispositivo.
Qué hace esto
Developer: "The login button doesn't work"
Without this tool: With this tool:
1. Manually screenshot 1. AI calls take_screenshot -> sees the screen
2. Paste into AI chat 2. AI calls smart_tap("login button") -> taps it
3. AI guesses what's wrong 3. AI calls verify_screen("error message shown") -> sees result
4. Apply fix, rebuild 4. AI calls visual_diff -> confirms fix worked
5. Repeat 4-5 times 5. Done.
Inicio rápido
Instalación
npx mobile-device-mcp
No se necesita instalación global. Se ejecuta directamente mediante npx.
Requisitos previos
- Node.js 18+
- Dispositivo/emulador Android conectado mediante ADB
- ADB instalado (Android SDK Platform Tools)
Configuración (una vez, 30 segundos)
-
Obtén una clave de Google AI (nivel gratuito disponible): aistudio.google.com/apikey
-
Agrega
.mcp.jsona la raíz de tu proyecto:
macOS / Linux:
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key"
}
}
}
}
Windows:
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "cmd",
"args": ["/c", "npx", "-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key"
}
}
}
}
Con clave de licencia Pro (después de comprar Pro):
macOS / Linux (Pro)
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key",
"MOBILE_MCP_LICENSE_KEY": "MDMCP-XXXXX-XXXXX-XXXXX-XXXXX"
}
}
}
}
Windows (Pro)
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "cmd",
"args": ["/c", "npx", "-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key",
"MOBILE_MCP_LICENSE_KEY": "MDMCP-XXXXX-XXXXX-XXXXX-XXXXX"
}
}
}
}
- Abre tu asistente de codificación con IA desde ese directorio. Eso es todo.
El servidor se inicia y se detiene automáticamente: nunca lo ejecutas manualmente. Tu asistente de IA lo gestiona como un proceso en segundo plano mediante el protocolo MCP.
Verifica que funciona
Claude Code: escribe /mcp -- deberías ver mobile-device: Connected
Cursor: revisa el panel de MCP en la configuración
Luego simplemente habla con tu teléfono:
You: "Open my app, tap the login button, type test@email.com in the email field"
AI: [takes screenshot -> sees the screen -> smart_tap("login button") -> smart_type("email field", "test@email.com")]
You: "Find all the bugs on this screen"
AI: [analyze_screen -> inspects layout, checks for overflow, missing labels, broken states]
You: "Navigate to settings and verify dark mode works"
AI: [smart_tap("settings") -> take_screenshot -> smart_tap("dark mode toggle") -> visual_diff -> reports result]
Sin scripts de prueba. Sin capturas de pantalla manuales. Solo describe lo que quieres en lenguaje natural.
Funciona con cualquier asistente de codificación con IA
| Herramienta | Archivo de configuración | Documentación |
|---|---|---|
| Claude Code | .mcp.json en la raíz del proyecto | claude.ai/docs |
| Cursor | .cursor/mcp.json | cursor.com/docs |
| VS Code + Copilot | Configuración de MCP | code.visualstudio.com |
| Windsurf | Configuración de MCP | windsurf.com |
Todos usan la misma configuración JSON: solo colócala en el archivo correcto para tu editor.
Úsalo en cualquier proyecto
Copia .mcp.json en cualquier proyecto móvil (Flutter, React Native, Kotlin, Swift) y tu asistente de IA obtiene superpoderes de dispositivo en ese directorio. No se necesita instalación global.
Gratis vs Pro
Gratis (14 herramientas) -- no se necesita clave de licencia
| Herramienta | Qué hace |
|---|---|
list_devices | Lista todos los dispositivos/emuladores Android conectados |
get_device_info | Modelo, fabricante, versión de Android, nivel de SDK |
get_screen_size | Resolución de pantalla en píxeles |
take_screenshot | Capturar captura de pantalla (PNG o JPEG, calidad y redimensionamiento configurables) |
get_ui_elements | Obtener el árbol de elementos de accesibilidad/UI como JSON estructurado |
tap | Tocar en coordenadas |
double_tap | Doble toque en coordenadas |
long_press | Pulsación larga en coordenadas |
swipe | Deslizar entre dos puntos |
type_text | Escribir texto en el campo enfocado |
press_key | Pulsar una tecla (inicio, atrás, enter, volumen, etc.) |
list_apps | Listar aplicaciones instaladas |
get_current_app | Obtener la aplicación en primer plano |
get_logs | Obtener entradas de logcat con filtrado |
Pro (35 herramientas adicionales) -- ₹499/mes
Obtén la licencia Pro -- desbloquea las 49 herramientas. Después del pago, recibirás tu clave de licencia por correo electrónico en 1 hora. Agrégala a tu .mcp.json:
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key",
"MOBILE_MCP_LICENSE_KEY": "your-license-key"
}
}
}
}
Análisis visual con IA (12 herramientas)
Usa la visión de IA (Claude o Gemini) para entender lo que hay en pantalla.
| Herramienta | Qué hace |
|---|---|
analyze_screen | La IA describe la pantalla: nombre de la aplicación, tipo de pantalla, elementos interactivos, texto visible, sugerencias |
find_element | Encuentra un elemento de UI por descripción: "el botón de inicio de sesión", "campo de entrada de correo electrónico" |
smart_tap | Encuentra un elemento por descripción y tócalo en un solo paso |
smart_type | Encuentra un campo de entrada por descripción, enfócalo y escribe texto |
suggest_actions | Planifica acciones para lograr un objetivo: "iniciar sesión en la aplicación", "agregar artículo al carrito" |
visual_diff | Compara la pantalla actual con una captura anterior: ¿qué cambió? |
extract_text | Extrae todo el texto visible de la pantalla (OCR impulsado por IA) |
verify_screen | Verifica una afirmación: "el inicio de sesión fue exitoso", "se muestra un mensaje de error" |
wait_for_settle | Espera hasta que la pantalla deje de cambiar |
wait_for_element | Espera a que aparezca un elemento específico en pantalla |
handle_popup | Detecta y descarta ventanas emergentes, diálogos, solicitudes de permisos |
fill_form | Rellena múltiples campos de formulario en un solo paso |
Árbol de widgets de Flutter (10 herramientas)
Conéctate a aplicaciones Flutter en ejecución mediante el Protocolo de Servicio de Dart VM. Mapea cada widget a su ubicación en el código fuente (file:line).
| Herramienta | Qué hace |
|---|---|
flutter_connect | Descubre y conéctate a una aplicación Flutter en ejecución en el dispositivo |
flutter_disconnect | Desconéctate de la aplicación Flutter y limpia los recursos |
flutter_get_widget_tree | Obtén el árbol de widgets completo (resumen o detallado) |
flutter_get_widget_details | Obtén propiedades detalladas de un widget específico por ID |
flutter_find_widget | Busca en el árbol de widgets por tipo, texto o descripción |
flutter_get_source_map | Mapea cada widget a su ubicación en el código fuente (archivo:línea:columna) |
flutter_screenshot_widget | Captura de pantalla de un widget específico de forma aislada |
flutter_debug_paint | Alternar superposición de pintura de depuración (muestra límites y relleno de widgets) |
flutter_hot_reload | Recarga en caliente la aplicación Flutter (conserva el estado) |
flutter_hot_restart | Reinicia en caliente la aplicación Flutter (restablece el estado) |
Simulador iOS (4 herramientas)
Solo macOS. Controla simuladores iOS mediante xcrun simctl.
| Herramienta | Qué hace |
|---|---|
ios_list_simulators | Lista los simuladores iOS disponibles |
ios_boot_simulator | Inicia un simulador por nombre o UDID |
ios_shutdown_simulator | Apaga un simulador en ejecución |
ios_screenshot | Toma una captura de pantalla de un simulador |
Grabación de video (2 herramientas)
| Herramienta | Qué hace |
|---|---|
record_screen | Inicia la grabación de la pantalla del dispositivo |
stop_recording | Detén la grabación y guarda el video |
Generación de pruebas (3 herramientas)
| Herramienta | Qué hace |
|---|---|
start_test_recording | Inicia la grabación de tus llamadas a herramientas MCP |
stop_test_recording | Detén la grabación y genera un script de prueba |
get_recorded_actions | Obtén las acciones grabadas como TypeScript, Python o JSON |
Gestión de aplicaciones (4 herramientas)
| Herramienta | Qué hace |
|---|---|
launch_app | Inicia una aplicación por nombre de paquete |
stop_app | Detén forzosamente una aplicación |
install_app | Instala un APK |
uninstall_app | Desinstala una aplicación |
Rendimiento
El servidor está optimizado para minimizar la latencia y los costos de tokens de IA:
- Búsqueda de elementos en 4 niveles: aplicación complementaria (instantánea) -> coincidencia de texto local (<1ms) -> IA en caché -> IA nueva.
smart_tapes 35 veces más rápida que las llamadas de IA ingenuas (205 ms vs 7,6 s). - Aplicación complementaria: la aplicación Android basada en AccessibilityService proporciona el árbol de UI en 105 ms (23 veces más rápido que los 2448 ms de UIAutomator). Se instala automáticamente en el primer uso.
- Compresión de capturas de pantalla: las herramientas de IA comprimen automáticamente a JPEG q=60, 400w -- 89% más pequeñas (251KB -> 28KB) sin pérdida de calidad de IA.
- Captura en paralelo: captura de pantalla + árbol de UI obtenidos simultáneamente mediante
Promise.all(). - Caché TTL: caché de 5 segundos evita llamadas ADB redundantes para el uso rápido de herramientas.
Variables de entorno
| Variable | Descripción | Predeterminado |
|---|---|---|
GOOGLE_API_KEY o GEMINI_API_KEY | Clave de API de Google para visión de Gemini (recomendada) | -- |
ANTHROPIC_API_KEY | Clave de API de Anthropic para visión de Claude | -- |
MOBILE_MCP_LICENSE_KEY | Clave de licencia para desbloquear herramientas Pro | -- |
MCP_AI_PROVIDER | Forzar proveedor de IA: "anthropic" o "google" | Auto-detectado |
MCP_AI_MODEL | Anular modelo de IA | gemini-2.5-flash / claude-sonnet-4-20250514 |
MCP_ADB_PATH | Ruta personalizada del binario ADB | Auto-descubierto |
MCP_DEFAULT_DEVICE | Serial de dispositivo predeterminado | Auto-descubierto |
MCP_SCREENSHOT_FORMAT | "png" o "jpeg" | jpeg |
MCP_SCREENSHOT_QUALITY | Calidad JPEG (1-100) | 80 |
MCP_SCREENSHOT_MAX_WIDTH | Redimensionar capturas de pantalla a este ancho máximo | 720 |
Arquitectura
src/
|-- index.ts # CLI entry point (auto-discovery, env config)
|-- server.ts # MCP server factory
|-- license.ts # License validation and tier gating
|-- types.ts # Shared interfaces
|-- drivers/android/ # ADB driver (DeviceDriver implementation)
| |-- adb.ts # Low-level ADB command wrapper
| |-- companion-client.ts # TCP client for companion app
| +-- index.ts # AndroidDriver class (4-strategy UI element retrieval)
|-- drivers/flutter/ # Dart VM Service driver
| |-- index.ts # FlutterDriver (discovery, inspection, source mapping, hot reload)
| +-- vm-service.ts # JSON-RPC 2.0 WebSocket client (DDS redirect handling)
|-- drivers/ios/ # iOS Simulator driver (macOS only)
| |-- index.ts # IOSSimulatorDriver via xcrun simctl
| +-- simctl.ts # Low-level simctl command wrapper
|-- tools/ # MCP tool registrations (free + pro gating)
| |-- device-tools.ts # Device management
| |-- screen-tools.ts # Screenshots & UI inspection
| |-- interaction-tools.ts # Touch, type, keys
| |-- app-tools.ts # App management
| |-- log-tools.ts # Logcat
| |-- ai-tools.ts # AI-powered tools
| |-- flutter-tools.ts # Flutter widget inspection
| |-- ios-tools.ts # iOS simulator tools
| |-- video-tools.ts # Screen recording
| +-- recording-tools.ts # Test generation
|-- recording/ # Test script generation
| |-- recorder.ts # ActionRecorder (records MCP tool calls)
| +-- generator.ts # TestGenerator (TypeScript/Python/JSON output)
|-- ai/ # AI visual analysis engine
| |-- client.ts # Multi-provider client (Anthropic + Google)
| |-- prompts.ts # System prompts & UI element summarizer
| |-- analyzer.ts # ScreenAnalyzer orchestrator (caching, parallel capture)
| +-- element-search.ts # Local element search (text/alias matching, no AI needed)
+-- utils/
|-- discovery.ts # ADB auto-discovery
+-- image.ts # PNG parsing, JPEG compression, bilinear resize
companion-app/ # Android companion app (Kotlin)
# AccessibilityService + TCP JSON-RPC for fast UI tree
Hoja de ruta
- Soporte para dispositivos iOS físicos
- Orquestación de múltiples dispositivos
- Integración CI/CD
- Soporte para granjas de dispositivos en la nube
Probado en
- Dispositivos: Pixel 8 (Android 16), serie Samsung Galaxy, emuladores Android
- Aplicaciones: Telegram, Instagram, Spotify, WhatsApp, YouTube, Chrome, Configuración y aplicaciones Flutter
- Proveedores de IA: Google Gemini 2.5 Flash, Anthropic Claude
- Plataformas: Windows 11, macOS (simuladores iOS)
- Conexión: ADB por USB e inalámbrico
Licencia
- Gratis para uso individual y no comercial
- El uso comercial requiere una licencia de pago
- Se convierte a Apache 2.0 el 23 de marzo de 2030
Consulta LICENSE para conocer los términos completos.