MCP Server for iOS Simulator
Un servidor MCP que permite a los LLMs interactuar con simuladores de iOS mediante comandos en lenguaje natural.
Documentación
📱 MCP Server para iOS Simulator
Un servidor de Model Context Protocol (MCP) que permite a los LLMs interactuar con simuladores de iOS mediante comandos en lenguaje natural.
ℹ️ Descripción general
Este servidor MCP proporciona un puente entre Modelos de Lenguaje de Gran Tamaño (LLMs) y simuladores de iOS, ofreciendo un control integral mediante comandos en lenguaje natural. Esto es lo que puede hacer:
Para un uso detallado, consulta las secciones de Guía de instalación y Comandos compatibles. Puedes usar este servidor mediante integración directa con MCP o como una biblioteca independiente.
Consulta la sección de Arquitectura para entender cómo los componentes trabajan juntos para habilitar el control en lenguaje natural de los simuladores de iOS.

🎮 Control del simulador
- Crear y gestionar sesiones de simulador
- Iniciar, apagar y monitorear estados del simulador
- Listar simuladores disponibles y en ejecución
- Enfocar ventanas del simulador
📱 Gestión de aplicaciones
- Instalar y gestionar aplicaciones de iOS
- Iniciar, terminar y desinstalar aplicaciones
- Monitorear estados de aplicaciones y verificar instalaciones
- Manejar permisos y configuraciones de aplicaciones
🖱️ Interacción con la interfaz y pruebas
- Interactuar con la interfaz del simulador
- Ejecutar acciones de toque, deslizamiento y pulsación de botones
- Ingresar texto y secuencias de teclas
- Acceder a elementos de accesibilidad para pruebas de interfaz
- Grabar videos de interacciones con la interfaz
🛠️ Desarrollo y depuración
- Capturar capturas de pantalla y registros del sistema
- Depurar aplicaciones en tiempo real
- Monitorear y analizar registros de fallos
- Instalar bibliotecas dinámicas y gestionar datos de aplicaciones
⚡ Funciones avanzadas
- Funcionalidad adicional que incluye:
- Simulación de ubicación
- Inyección de medios
- Manejo de esquemas de URL
- Gestión de base de datos de contactos
- Operaciones de llavero
Para un uso detallado, consulta las secciones de Guía de instalación y Comandos compatibles. Puedes usar este servidor mediante integración directa con MCP o como una biblioteca independiente.
Consulta la sección de Arquitectura para entender cómo los componentes trabajan juntos para habilitar el control en lenguaje natural de los simuladores de iOS.
📋 Requisitos
- macOS: Requerido para soporte de simuladores de iOS
- Node.js: v20.0.0 o superior
- Homebrew: Requerido para instalar dependencias
- XCode: Con simuladores de iOS instalados
🚀 Instalación
La forma más fácil de instalar este servidor es a través de Cline:
- Simplemente pídele a Cline:
Add this mcp to cline https://github.com/InditexTech/mcp-server-simulator-ios-idb
- Cline se encargará del proceso de instalación automáticamente, incluida la gestión de dependencias y la configuración.
Alternativamente, puedes instalarlo manualmente:
# Clone the repository
git clone https://github.com/InditexTech/mcp-server-simulator-ios-idb.git
cd mcp-server-simulator-ios-idb
# Create and activate Python virtual environment
python3 -m venv venv
source venv/bin/activate # On Unix/macOS
# Install dependencies
npm install
# Build the project
npm run build
# Start the project
npm start
# Run tests
npm test
El proceso de instalación automáticamente:
- Verificará si estás ejecutando macOS
- Instalará idb-companion mediante Homebrew
- Instalará fb-idb mediante pip en el entorno virtual
Nota: Asegúrate de mantener el entorno virtual activado mientras usas el servidor. Si cierras tu terminal y vuelves más tarde, deberás reactivar el entorno virtual con el comando source venv/bin/activate antes de ejecutar npm start.
🔌 Integración MCP
Para usar este servidor con Claude u otros asistentes LLM:
- Agrega el servidor a tu configuración de MCP en Claude Desktop:
{
"mcpServers": {
"ios-simulator": {
"command": "node",
"args": ["/path/to/mcp-server-simulator-ios-idb/dist/index.js"],
"env": {}
}
}
}
- El LLM ahora puede usar comandos en lenguaje natural para controlar simuladores de iOS:
create a simulator session with iPhone 14
install app /path/to/my-app.ipa
launch app com.example.myapp
tap at 100, 200
take a screenshot
📚 Uso como biblioteca
También puedes usar este paquete como biblioteca en tus propios proyectos:
🔰 Uso básico
import { createMCPServer } from 'mcp-server-simulator-ios-idb';
async function main() {
// Create an instance of the MCP server
const { orchestrator } = createMCPServer();
// Process natural language commands
// Create a simulator session
const sessionResult = await orchestrator.processInstruction('create session');
console.log(`Session created: ${sessionResult.data}`);
// Interact with the simulator
await orchestrator.processInstruction('tap at 100, 200');
// Capture a screenshot
const screenshotResult = await orchestrator.processInstruction('take screenshot');
console.log(`Screenshot saved at: ${screenshotResult.data}`);
}
main().catch(console.error);
🚀 Uso avanzado
También puedes usar los componentes individuales directamente:
import {
IDBManager,
NLParser,
MCPOrchestrator,
ParserToOrchestrator,
OrchestratorToIDB
} from 'mcp-server-simulator-ios-idb';
// Create instances
const idbManager = new IDBManager();
const parser = new NLParser();
const orchestrator = new MCPOrchestrator(parser, idbManager);
// Use the components directly
const sessionId = await idbManager.createSimulatorSession({
deviceName: 'iPhone 12',
platformVersion: '15.0'
});
await idbManager.tap(sessionId, 100, 200);
🏗️ Estructura del proyecto
mcp-server-simulator-ios-idb/
├── src/ # Source code
│ ├── adapters/ # Adapter components
│ ├── idb/ # IDB manager implementation
│ ├── mcp/ # MCP server implementation
│ ├── orchestrator/ # Command orchestrator
│ ├── parser/ # Natural language parser
│ └── index.ts # Main entry point
├── types/ # TypeScript type definitions
├── scripts/ # Installation scripts
├── package.json # Project configuration
└── tsconfig.json # TypeScript configuration
🎯 Comandos compatibles
El NLParser admite los siguientes comandos en lenguaje natural:
🎮 Gestión del simulador
| Comando | Descripción | Ejemplo |
|---|---|---|
| Crear sesión | Crea una nueva sesión de simulador | "create session", "create simulator iPhone 12" |
| Terminar sesión | Termina la sesión actual | "terminate session", "close simulator" |
| Listar simuladores | Lista los simuladores disponibles | "list simulators", "show simulators" |
| Listar simuladores iniciados | Lista los simuladores en ejecución | "list booted simulators", "show running simulators" |
| Iniciar simulador | Inicia un simulador por UDID | "boot simulator 5A321B8F-4D85-4267-9F79-2F5C91D142C2" |
| Apagar simulador | Apaga un simulador | "shutdown simulator 5A321B8F-4D85-4267-9F79-2F5C91D142C2" |
| Enfocar simulador | Trae la ventana del simulador al frente | "focus simulator", "bring simulator to front" |
| Listar sesiones de simulador | Lista las sesiones activas del simulador | "list simulator sessions", "show active sessions" |
📱 Gestión de aplicaciones
| Comando | Descripción | Ejemplo |
|---|---|---|
| Instalar aplicación | Instala una aplicación en el simulador | "install app /path/to/app.ipa" |
| Iniciar aplicación | Inicia una aplicación en el simulador | "launch app com.example.app" |
| Terminar aplicación | Termina una aplicación en ejecución | "terminate app com.example.app" |
| Desinstalar aplicación | Desinstala una aplicación | "uninstall app com.example.app" |
| Listar aplicaciones | Lista las aplicaciones instaladas | "list apps", "show installed apps" |
| Verificar si la aplicación está instalada | Verifica si una aplicación está instalada | "is app com.example.app installed" |
🖱️ Interacción con la interfaz
| Comando | Descripción | Ejemplo |
|---|---|---|
| Tocar | Toca en coordenadas específicas | "tap at 100, 200" |
| Deslizar | Realiza un gesto de deslizamiento | "swipe from 100, 200 to 300, 400" |
| Pulsar botón | Pulsa un botón del dispositivo | "press button HOME", "press button SIRI" |
| Ingresar texto | Escribe texto | "input text Hello World" |
| Pulsar tecla | Pulsa una tecla por código | "press key 4" |
| Pulsar secuencia de teclas | Pulsa una secuencia de teclas | "press key sequence 4 5 6" |
♿ Accesibilidad
| Comando | Descripción | Ejemplo |
|---|---|---|
| Describir elementos | Lista todos los elementos de accesibilidad | "describe all elements", "show accessibility elements" |
| Describir punto | Describe el elemento en coordenadas | "describe point 100, 200", "what's at 150, 300" |
📸 Captura y registros
| Comando | Descripción | Ejemplo |
|---|---|---|
| Tomar captura de pantalla | Captura una captura de pantalla | "take screenshot", "capture screen" |
| Grabar video | Graba la actividad de la pantalla | "record video /path/output.mp4" |
| Detener grabación | Detiene la grabación de video | "stop recording", "stop video recording" |
| Obtener registros | Recupera registros del sistema o de la aplicación | "get logs", "get logs for com.example.app" |
🐛 Depuración
| Comando | Descripción | Ejemplo |
|---|---|---|
| Iniciar depuración | Inicia una sesión de depuración | "debug app com.example.app", "start debug com.example.app" |
| Detener depuración | Detiene una sesión de depuración | "stop debug", "terminate debug session" |
| Estado de depuración | Obtiene el estado de la sesión de depuración | "debug status", "show debug info" |
💥 Registros de fallos
| Comando | Descripción | Ejemplo |
|---|---|---|
| Listar registros de fallos | Lista los registros de fallos disponibles | "list crash logs", "show crash logs" |
| Mostrar registro de fallo | Muestra el contenido de un registro de fallo | "show crash log crash_2023-01-01" |
| Eliminar registros de fallos | Elimina registros de fallos | "delete crash logs", "clear crash logs" |
🔧 Comandos adicionales
| Comando | Descripción | Ejemplo |
|---|---|---|
| Instalar dylib | Instala una biblioteca dinámica | "install dylib /path/to/library.dylib" |
| Abrir URL | Abre una URL en el simulador | "open url https://example.com" |
| Limpiar llavero | Limpia el llavero del simulador | "clear keychain" |
| Establecer ubicación | Establece la ubicación del simulador | "set location 37.7749, -122.4194" |
| Agregar medios | Agrega medios al carrete de la cámara | "add media /path/to/image.jpg" |
| Aprobar permisos | Aprueba permisos de la aplicación | "approve permissions com.example.app photos camera" |
| Actualizar contactos | Actualiza la base de datos de contactos | "update contacts /path/to/contacts.sqlite" |
La interfaz admite todos los comandos disponibles en la herramienta CLI de idb, proporcionando un conjunto integral de operaciones para la automatización de simuladores de iOS.
🔍 Arquitectura
El servidor consta de tres componentes principales:
- IDBManager: Componente de bajo nivel que interactúa directamente con los simuladores de iOS a través de idb.
- NLParser: Componente que interpreta instrucciones en lenguaje natural y las convierte en comandos estructurados.
- MCPOrchestrator: Componente central que coordina las interacciones entre el analizador y el IDBManager.
Estos componentes están conectados mediante adaptadores:
- ParserToOrchestrator: Convierte los resultados del analizador en comandos del orquestador.
- OrchestratorToIDB: Traduce los comandos del orquestador en llamadas al IDBManager.
🔌 Integración MCP
Para usar este servidor con el Model Context Protocol:
- Agrega el servidor a tu configuración de MCP:
{
"mcpServers": {
"ios-simulator": {
"command": "node",
"args": ["/path/to/mcp-server-simulator-ios-idb/dist/index.js"],
"env": {}
}
}
}
- Conéctate al servidor en tu aplicación LLM:
const result = await useMcpTool({
serverName: "ios-simulator",
toolName: "process-instruction",
arguments: {
instruction: "create simulator session"
}
});
🙏 Agradecimientos
Este proyecto no sería posible sin facebook/idb, que proporciona las capacidades subyacentes de control de simuladores de iOS. Extendemos nuestro sincero agradecimiento al equipo de Facebook/Meta y a todos los contribuyentes del proyecto idb por crear y mantener una herramienta tan potente y confiable.
📄 Licencia
Esta herramienta está disponible como código abierto bajo los términos de Apache-2.0.