phantom-mcp
phantom-mcp
Servidor MCP que permite a Claude Code ver y controlar simuladores de iOS, emuladores de Android y dispositivos reales. 22 herramientas para probar aplicaciones móviles sin salir de la terminal.
Claude puede tomar capturas de pantalla, leer la pantalla, tocar, deslizar, rellenar campos, verificar aserciones, grabar videos — automáticamente, en iOS y Android.
Se genera un informe de prueba con capturas de pantalla automáticamente en cada sesión de prueba.
Arquitectura
Claude Code
| MCP protocol (stdio)
v
Phantom (Node.js TypeScript)
| |
v v
iOS Android
xcrun simctl ADB
WebDriverAgent UIAutomator
(localhost:8100) (adb shell)
| |
v v
Simulateur / iPhone Emulateur / DeviceRequisitos previos
Herramienta | Requerido para | Cómo verificar |
macOS 13+ | todo | - |
Xcode 15+ | iOS |
|
Node.js 18+ | todo |
|
Appium 3+ | iOS (WDA) |
|
xcuitest driver | iOS (WDA) |
|
Android SDK | Android |
|
Instalación
Opción A — npm (recomendado)
# 1. Installer le package
npm install -g phantom-mcp
# 2. Installer Appium + driver iOS
npm install -g appium
appium driver install xcuitest
# 3. Enregistrer dans Claude Code
claude mcp add -s user phantom -- npx phantom-mcpOpción B — desde las fuentes
git clone https://github.com/nthimpulse/phantom-mcp.git
cd phantom-mcp
npm install
npm run build
claude mcp add -s user phantom -- node "$(pwd)/build/index.js"Las 22 herramientas
Gestión de dispositivos
Herramienta | Descripción |
| Lista todos los dispositivos (simuladores iOS + emuladores Android + dispositivos reales) |
| Selecciona el dispositivo activo. Arranca automáticamente si está apagado |
Observación
Herramienta | Descripción |
| Captura la pantalla del dispositivo activo |
| Árbol de accesibilidad con índice [N] para cada elemento |
| Espera a que aparezca un elemento (con tiempo de espera) |
| Desplaza hasta encontrar un elemento |
Aserciones
Herramienta | Descripción |
| Verifica que un texto ESTÁ en la pantalla |
| Verifica que un texto NO ESTÁ en la pantalla |
Interacción
Herramienta | Descripción |
| Toca (por índice, coordenadas o texto) |
| Pulsación larga (menús contextuales) |
| Entrada de texto con opción de limpiar |
| Deslizar (arriba/abajo/izquierda/derecha) |
Navegación
Herramienta | Descripción |
| Abre una URL / enlace profundo |
Acciones del dispositivo
Herramienta | Descripción |
| Simula una sacudida |
| Cambia la orientación (vertical/horizontal) |
| Inicia/detiene la grabación de video |
Ciclo de vida de la aplicación
Herramienta | Descripción |
| Inicia una aplicación por ID de paquete / nombre de paquete |
| Cierra una aplicación |
Análisis y Automatización (Nivel 3)
Herramienta | Descripción |
| Auditoría de accesibilidad: etiquetas faltantes, objetivos táctiles demasiado pequeños, imágenes sin texto alternativo |
| Informe de prueba automático: start para comenzar el seguimiento, end para generar el markdown. Cada acción se rastrea automáticamente. |
| Compara dos capturas de pantalla píxel por píxel para detectar regresiones visuales |
| Ejecuta la misma acción en varios dispositivos en un solo comando |
Funcionamiento automático
Selección de dispositivo
Phantom nunca arranca un dispositivo automáticamente. Te pide que elijas:
Si solo hay 1 dispositivo activo, lo usa automáticamente
Si hay varios, te pide que elijas con
set_deviceSi no hay ninguno, te muestra la lista de dispositivos disponibles
Auto-lanzamiento de WDA (iOS)
WebDriverAgent se inicia automáticamente con la primera herramienta de iOS que lo necesite. El primer lanzamiento tarda ~60-90s (compilación de Xcode), luego es instantáneo.
ADB multidispositivo (Android)
Todos los comandos ADB se dirigen al dispositivo seleccionado mediante -s <serial>. Sin confusión multidispositivo.
Entrada de texto (compatible con AZERTY)
La entrada utiliza pbcopy + Cmd+V (pegar) en lugar del teclado virtual. Es instantáneo y funciona en todos los diseños de teclado (AZERTY, QWERTY, etc.).
Informe de prueba automático
Cada acción (tocar, escribir, deslizar, afirmar...) se registra automáticamente con una captura de pantalla. Al final de la prueba, se genera un informe markdown en /tmp/phantom-report-xxx/.
Seguridad
Todos los comandos del sistema pasan por
execFile(sin shell)Entradas validadas por regex: IDs de paquete, UDIDs, nombres de paquete, nombres de AVD, URLs
Predicados de iOS escapados (anti-inyección)
Texto de Android escapado para el shell del dispositivo
Cero
as any, ceroexec()shell
Configuración
Variables de entorno opcionales:
PHANTOM_WDA_PATH— ruta a WebDriverAgent (predeterminado: ~/.appium/...)PHANTOM_WDA_URL— URL de WDA (predeterminado: http://localhost:8100)
Solución de problemas
WDA se bloquea en bucle
MobAI u otra herramienta está utilizando el puerto 8100.
lsof -i :8100
pkill -f "MobAI""Ningún dispositivo disponible"
xcrun simctl list devices available # iOS
adb devices -l # AndroidWDA no arranca
cd ~/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent
xcodebuild -project WebDriverAgent.xcodeproj \
-scheme WebDriverAgentRunner \
-destination "platform=iOS Simulator,name=iPhone 17 Pro" \
testADB no encontrado
ls ~/Library/Android/sdk/platform-tools/adbEstructura del proyecto
phantom/
src/
index.ts Point d'entree MCP (22 tools)
platforms/
types.ts Interfaces communes
ios/
simctl.ts Wrapper xcrun simctl
wda.ts Client WDA + auto-launch
android/
adb.ts Wrapper ADB complet
tools/ 22 tools (19 fichiers)
utils/
device-manager.ts Detection + routing multi-device
xml.ts Parser XML partage
docs/
README.md Ce fichier
TUTORIAL.md Tuto pas-a-pas
FLOWS.md Exemples de flows de testThis server cannot be installed
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/nthImpulse/phantom-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server