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

MCP Server

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.

demo

🎮 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:

  1. Simplemente pídele a Cline:
Add this mcp to cline https://github.com/InditexTech/mcp-server-simulator-ios-idb
  1. 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:

  1. Verificará si estás ejecutando macOS
  2. Instalará idb-companion mediante Homebrew
  3. 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:

  1. 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": {}
    }
  }
}
  1. 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

ComandoDescripciónEjemplo
Crear sesiónCrea una nueva sesión de simulador"create session", "create simulator iPhone 12"
Terminar sesiónTermina la sesión actual"terminate session", "close simulator"
Listar simuladoresLista los simuladores disponibles"list simulators", "show simulators"
Listar simuladores iniciadosLista los simuladores en ejecución"list booted simulators", "show running simulators"
Iniciar simuladorInicia un simulador por UDID"boot simulator 5A321B8F-4D85-4267-9F79-2F5C91D142C2"
Apagar simuladorApaga un simulador"shutdown simulator 5A321B8F-4D85-4267-9F79-2F5C91D142C2"
Enfocar simuladorTrae la ventana del simulador al frente"focus simulator", "bring simulator to front"
Listar sesiones de simuladorLista las sesiones activas del simulador"list simulator sessions", "show active sessions"

📱 Gestión de aplicaciones

ComandoDescripciónEjemplo
Instalar aplicaciónInstala una aplicación en el simulador"install app /path/to/app.ipa"
Iniciar aplicaciónInicia una aplicación en el simulador"launch app com.example.app"
Terminar aplicaciónTermina una aplicación en ejecución"terminate app com.example.app"
Desinstalar aplicaciónDesinstala una aplicación"uninstall app com.example.app"
Listar aplicacionesLista las aplicaciones instaladas"list apps", "show installed apps"
Verificar si la aplicación está instaladaVerifica si una aplicación está instalada"is app com.example.app installed"

🖱️ Interacción con la interfaz

ComandoDescripciónEjemplo
TocarToca en coordenadas específicas"tap at 100, 200"
DeslizarRealiza un gesto de deslizamiento"swipe from 100, 200 to 300, 400"
Pulsar botónPulsa un botón del dispositivo"press button HOME", "press button SIRI"
Ingresar textoEscribe texto"input text Hello World"
Pulsar teclaPulsa una tecla por código"press key 4"
Pulsar secuencia de teclasPulsa una secuencia de teclas"press key sequence 4 5 6"

♿ Accesibilidad

ComandoDescripciónEjemplo
Describir elementosLista todos los elementos de accesibilidad"describe all elements", "show accessibility elements"
Describir puntoDescribe el elemento en coordenadas"describe point 100, 200", "what's at 150, 300"

📸 Captura y registros

ComandoDescripciónEjemplo
Tomar captura de pantallaCaptura una captura de pantalla"take screenshot", "capture screen"
Grabar videoGraba la actividad de la pantalla"record video /path/output.mp4"
Detener grabaciónDetiene la grabación de video"stop recording", "stop video recording"
Obtener registrosRecupera registros del sistema o de la aplicación"get logs", "get logs for com.example.app"

🐛 Depuración

ComandoDescripciónEjemplo
Iniciar depuraciónInicia una sesión de depuración"debug app com.example.app", "start debug com.example.app"
Detener depuraciónDetiene una sesión de depuración"stop debug", "terminate debug session"
Estado de depuraciónObtiene el estado de la sesión de depuración"debug status", "show debug info"

💥 Registros de fallos

ComandoDescripciónEjemplo
Listar registros de fallosLista los registros de fallos disponibles"list crash logs", "show crash logs"
Mostrar registro de falloMuestra el contenido de un registro de fallo"show crash log crash_2023-01-01"
Eliminar registros de fallosElimina registros de fallos"delete crash logs", "clear crash logs"

🔧 Comandos adicionales

ComandoDescripciónEjemplo
Instalar dylibInstala una biblioteca dinámica"install dylib /path/to/library.dylib"
Abrir URLAbre una URL en el simulador"open url https://example.com"
Limpiar llaveroLimpia el llavero del simulador"clear keychain"
Establecer ubicaciónEstablece la ubicación del simulador"set location 37.7749, -122.4194"
Agregar mediosAgrega medios al carrete de la cámara"add media /path/to/image.jpg"
Aprobar permisosAprueba permisos de la aplicación"approve permissions com.example.app photos camera"
Actualizar contactosActualiza 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:

  1. IDBManager: Componente de bajo nivel que interactúa directamente con los simuladores de iOS a través de idb.
  2. NLParser: Componente que interpreta instrucciones en lenguaje natural y las convierte en comandos estructurados.
  3. 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:

  1. 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": {}
    }
  }
}
  1. 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.