xcsimctl

Gestiona simuladores de Xcode.

Documentación

Servidor MCP SimCtl

Un servidor de Protocolo de Contexto de Modelo (MCP) que proporciona acceso estructurado a la gestión del Simulador de iOS mediante comandos xcrun simctl.

Instalación

Método 1: Usando uvx

  1. Requisitos previos:

    • Python 3.13+
    • Xcode con herramientas de línea de comandos instaladas
    • uvx: curl -LsSf https://astral.sh/uv/install.sh | sh
  2. Ejecutar directamente con uvx:

    uvx simctl-mcp-server
    

Método 2: Instalación de desarrollo local

  1. Requisitos previos:

    • Python 3.13+
    • Xcode con herramientas de línea de comandos instaladas
  2. Clonar e instalar:

    git clone https://github.com/nzrsky/simctl-mcp-server
    cd simctl-mcp-server
    pip install .
    
  3. Ejecutar el servidor:

    simctl-mcp-server
    

Método 3: Compilar desde el código fuente

  1. Compilar el paquete:
    python -m build --wheel
    pip install dist/simctl_mcp_server-0.1.0-py3-none-any.whl
    

Configuración

Para Claude Desktop

Añade a tu ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "simctl": {
      "command": "simctl-mcp-server",
      "args": [],
      "env": {}
    }
  }
}

O si usas uvx:

{
  "mcpServers": {
    "simctl": {
      "command": "uvx",
      "args": ["simctl-mcp-server"],
      "env": {}
    }
  }
}

Para VS Code con la extensión MCP

  1. Instala la extensión MCP desde el marketplace de VS Code
  2. Añade la configuración del servidor a la configuración de VS Code (settings.json):
{
  "mcp.servers": {
    "simctl": {
      "command": "simctl-mcp-server",
      "args": [],
      "env": {}
    }
  }
}

O si usas uvx:

{
  "mcp.servers": {
    "simctl": {
      "command": "uvx",
      "args": ["simctl-mcp-server"],
      "env": {}
    }
  }
}
  1. Reinicia VS Code para cargar el servidor MCP
  2. Usa la paleta de comandos (Cmd+Shift+P) y busca comandos "MCP" para interactuar con las herramientas del simulador

Para otros clientes MCP

El servidor se ejecuta en stdio, por lo que puedes invocarlo directamente:

Con el paquete instalado:

simctl-mcp-server

Con uvx:

uvx simctl-mcp-server

Herramientas disponibles

Gestión de dispositivos

  • simctl_list_devices - Lista todos los simuladores y sus estados
  • simctl_boot_device - Inicia un simulador
  • simctl_shutdown_device - Apaga un simulador
  • simctl_create_device - Crea un nuevo simulador
  • simctl_delete_device - Elimina simuladores

Gestión de aplicaciones

  • simctl_install_app - Instala una aplicación (paquete .app o .ipa)
  • simctl_launch_app - Lanza una aplicación con opciones
  • simctl_terminate_app - Termina una aplicación en ejecución

Medios y capturas de pantalla

  • simctl_screenshot - Toma capturas de pantalla
  • simctl_record_video - Graba video (inicia la grabación)

Pruebas y desarrollo

  • simctl_push_notification - Envía notificaciones push
  • simctl_privacy_control - Gestiona permisos de aplicaciones
  • simctl_set_location - Establece ubicación/GPS del dispositivo
  • simctl_status_bar_override - Sobrescribe la apariencia de la barra de estado
  • simctl_ui_appearance - Controla el modo claro/oscuro

Ejemplos de uso

Operaciones básicas de dispositivos

# List all devices
"List all available iOS simulators"

# Boot a specific device
"Boot the iPhone 15 Pro simulator"

# Create a new simulator
"Create a new iPhone 14 simulator named 'Test Device' with iOS 17.0"

Pruebas de aplicaciones

# Install and launch an app
"Install MyApp.app on the booted simulator and launch it"

# Take a screenshot
"Take a screenshot of the current simulator and save it to ~/Desktop/screenshot.png"

# Send a push notification
"Send a push notification with title 'Hello' and body 'Test message' to com.example.myapp"

Configuración de pruebas de UI

# Set up a controlled testing environment
"Set the simulator to dark mode, override the status bar to show full battery and strong WiFi, and set the time to 9:41 AM"

# Grant permissions for testing
"Grant photo library access to com.example.myapp on the booted simulator"

Pruebas de ubicación

# Set specific location
"Set the simulator location to Apple Park (37.334606, -122.009102)"

# Clear location
"Clear the simulated location on the booted device"

Manejo de errores

El servidor incluye un manejo integral de errores:

  • Fallos de comandos: Devuelve mensajes de error detallados de simctl
  • Xcode faltante: Detecta cuando xcrun simctl no está disponible
  • Parámetros inválidos: Valida los parámetros de entrada antes de la ejecución
  • Operaciones de archivos: Maneja archivos temporales para notificaciones push de forma segura

Consideraciones de seguridad

  • El servidor solo expone operaciones de lectura y gestión del simulador
  • Sin acceso al sistema de archivos del host más allá de las rutas de aplicaciones especificadas
  • Los payloads de notificaciones push se validan en cuanto a su estructura
  • Los cambios de permisos de privacidad son explícitos y se registran

Notas de desarrollo

  • Construido específicamente para flujos de trabajo de desarrollo de iOS
  • Optimizado para tareas comunes de gestión de simuladores
  • Análisis de salida estructurada para respuestas JSON
  • Soporte para operaciones individuales y por lotes
  • Compatible con funciones del simulador de Xcode 15+