MCP Server for iOS Simulator

Um servidor MCP que permite que LLMs interajam com simuladores iOS por meio de comandos em linguagem natural.

Documentação

📱 MCP Server for iOS Simulator

MCP Server

Um servidor Model Context Protocol (MCP) que permite que LLMs interajam com simuladores iOS por meio de comandos em linguagem natural.

ℹ️ Visão Geral

Este servidor MCP fornece uma ponte entre Modelos de Linguagem de Grande Porte (LLMs) e simuladores iOS, oferecendo controle abrangente por meio de comandos em linguagem natural. Veja o que ele pode fazer:

Para uso detalhado, consulte as seções Guia de Instalação e Comandos Suportados. Você pode usar este servidor tanto por integração MCP direta quanto como uma biblioteca independente.

Consulte a seção Arquitetura para entender como os componentes trabalham juntos para permitir o controle por linguagem natural dos simuladores iOS.

demo

🎮 Controle do Simulador

  • Criar e gerenciar sessões de simulador
  • Inicializar, desligar e monitorar estados do simulador
  • Listar simuladores disponíveis e em execução
  • Focar janelas do simulador

📱 Gerenciamento de Aplicativos

  • Instalar e gerenciar aplicativos iOS
  • Iniciar, encerrar e desinstalar aplicativos
  • Monitorar estados de aplicativos e verificar instalações
  • Gerenciar permissões e configurações de aplicativos

🖱️ Interação com UI e Testes

  • Interagir com a interface do simulador
  • Executar ações de toque, deslize e pressionamento de botão
  • Inserir texto e sequências de teclas
  • Acessar elementos de acessibilidade para testes de UI
  • Gravar vídeos de interações com a interface

🛠️ Desenvolvimento e Depuração

  • Capturar capturas de tela e logs do sistema
  • Depurar aplicativos em tempo real
  • Monitorar e analisar logs de falhas
  • Instalar bibliotecas dinâmicas e gerenciar dados de aplicativos

⚡ Recursos Avançados

  • Funcionalidades adicionais incluem:
    • Simulação de localização
    • Injeção de mídia
    • Tratamento de esquemas de URL
    • Gerenciamento de banco de dados de contatos
    • Operações de chaveiro

Para uso detalhado, consulte as seções Guia de Instalação e Comandos Suportados. Você pode usar este servidor tanto por integração MCP direta quanto como uma biblioteca independente.

Consulte a seção Arquitetura para entender como os componentes trabalham juntos para permitir o controle por linguagem natural dos simuladores iOS.

📋 Requisitos

  • macOS: Necessário para suporte ao simulador iOS
  • Node.js: v20.0.0 ou superior
  • Homebrew: Necessário para instalar dependências
  • XCode: Com simuladores iOS instalados

🚀 Instalação

A maneira mais fácil de instalar este servidor é através do Cline:

  1. Basta pedir ao Cline:
Add this mcp to cline https://github.com/InditexTech/mcp-server-simulator-ios-idb
  1. O Cline cuidará do processo de instalação automaticamente, incluindo gerenciamento de dependências e configuração.

Alternativamente, você pode instalá-lo 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

O processo de instalação automaticamente:

  1. Verificará se você está executando macOS
  2. Instalará o idb-companion via Homebrew
  3. Instalará o fb-idb via pip no ambiente virtual

Nota: Certifique-se de manter o ambiente virtual ativado enquanto usa o servidor. Se você fechar o terminal e voltar mais tarde, precisará reativar o ambiente virtual com o comando source venv/bin/activate antes de executar npm start.

🔌 Integração MCP

Para usar este servidor com Claude ou outros assistentes LLM:

  1. Adicione o servidor às suas configurações MCP no Claude Desktop:
{
  "mcpServers": {
    "ios-simulator": {
      "command": "node",
      "args": ["/path/to/mcp-server-simulator-ios-idb/dist/index.js"],
      "env": {}
    }
  }
}
  1. O LLM agora pode usar comandos em linguagem natural para controlar simuladores 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

Você também pode usar este pacote como uma biblioteca em seus próprios projetos:

🔰 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 Avançado

Você também pode usar os componentes individuais diretamente:

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);

🏗️ Estrutura do Projeto

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 Suportados

O NLParser suporta os seguintes comandos em linguagem natural:

🎮 Gerenciamento de Simulador

ComandoDescriçãoExemplo
Criar sessãoCria uma nova sessão de simulador"criar sessão", "criar simulador iPhone 12"
Encerrar sessãoEncerra a sessão atual"encerrar sessão", "fechar simulador"
Listar simuladoresLista simuladores disponíveis"listar simuladores", "mostrar simuladores"
Listar simuladores iniciadosLista simuladores em execução"listar simuladores iniciados", "mostrar simuladores em execução"
Iniciar simuladorInicia um simulador por UDID"iniciar simulador 5A321B8F-4D85-4267-9F79-2F5C91D142C2"
Desligar simuladorDesliga um simulador"desligar simulador 5A321B8F-4D85-4267-9F79-2F5C91D142C2"
Focar simuladorTraz a janela do simulador para frente"focar simulador", "trazer simulador para frente"
Listar sessões do simuladorLista sessões ativas do simulador"listar sessões do simulador", "mostrar sessões ativas"

📱 Gerenciamento de Aplicativos

ComandoDescriçãoExemplo
Instalar aplicativoInstala um aplicativo no simulador"instalar aplicativo /caminho/para/app.ipa"
Iniciar aplicativoInicia um aplicativo no simulador"iniciar aplicativo com.example.app"
Encerrar aplicativoEncerra um aplicativo em execução"encerrar aplicativo com.example.app"
Desinstalar aplicativoDesinstala um aplicativo"desinstalar aplicativo com.example.app"
Listar aplicativosLista aplicativos instalados"listar aplicativos", "mostrar aplicativos instalados"
Verificar se aplicativo está instaladoVerifica se um aplicativo está instalado"o aplicativo com.example.app está instalado"

🖱️ Interação com UI

ComandoDescriçãoExemplo
TocarToca em coordenadas específicas"tocar em 100, 200"
DeslizarExecuta um gesto de deslize"deslizar de 100, 200 para 300, 400"
Pressionar botãoPressiona um botão do dispositivo"pressionar botão HOME", "pressionar botão SIRI"
Inserir textoDigita texto"inserir texto Olá Mundo"
Pressionar teclaPressiona uma tecla por código"pressionar tecla 4"
Pressionar sequência de teclasPressiona uma sequência de teclas"pressionar sequência de teclas 4 5 6"

♿ Acessibilidade

ComandoDescriçãoExemplo
Descrever elementosLista todos os elementos de acessibilidade"descrever todos os elementos", "mostrar elementos de acessibilidade"
Descrever pontoDescreve o elemento em coordenadas"descrever ponto 100, 200", "o que há em 150, 300"

📸 Captura e Logs

ComandoDescriçãoExemplo
Tirar captura de telaCaptura uma captura de tela"tirar captura de tela", "capturar tela"
Gravar vídeoGrava atividade da tela"gravar vídeo /caminho/saida.mp4"
Parar gravaçãoPara a gravação de vídeo"parar gravação", "parar gravação de vídeo"
Obter logsRecupera logs do sistema ou do aplicativo"obter logs", "obter logs para com.example.app"

🐛 Depuração

ComandoDescriçãoExemplo
Iniciar depuraçãoInicia uma sessão de depuração"depurar aplicativo com.example.app", "iniciar depuração com.example.app"
Parar depuraçãoPara uma sessão de depuração"parar depuração", "encerrar sessão de depuração"
Status da depuraçãoObtém o status da sessão de depuração"status da depuração", "mostrar informações de depuração"

💥 Logs de Falhas

ComandoDescriçãoExemplo
Listar logs de falhasLista logs de falhas disponíveis"listar logs de falhas", "mostrar logs de falhas"
Mostrar log de falhaMostra o conteúdo de um log de falha"mostrar log de falha crash_2023-01-01"
Excluir logs de falhasExclui logs de falhas"excluir logs de falhas", "limpar logs de falhas"

🔧 Comandos Adicionais

ComandoDescriçãoExemplo
Instalar dylibInstala uma biblioteca dinâmica"instalar dylib /caminho/para/biblioteca.dylib"
Abrir URLAbre uma URL no simulador"abrir url https://example.com"
Limpar chaveiroLimpa o chaveiro do simulador"limpar chaveiro"
Definir localizaçãoDefine a localização do simulador"definir localização 37.7749, -122.4194"
Adicionar mídiaAdiciona mídia ao rolo da câmera"adicionar mídia /caminho/para/imagem.jpg"
Aprovar permissõesAprova permissões do aplicativo"aprovar permissões com.example.app fotos câmera"
Atualizar contatosAtualiza o banco de dados de contatos"atualizar contatos /caminho/para/contatos.sqlite"

A interface suporta todos os comandos disponíveis na ferramenta CLI idb, fornecendo um conjunto abrangente de operações para automação de simuladores iOS.

🔍 Arquitetura

O servidor consiste em três componentes principais:

  1. IDBManager: Componente de baixo nível que interage diretamente com simuladores iOS através do idb.
  2. NLParser: Componente que interpreta instruções em linguagem natural e as converte em comandos estruturados.
  3. MCPOrchestrator: Componente central que coordena interações entre o parser e o IDBManager.

Esses componentes são conectados através de adaptadores:

  • ParserToOrchestrator: Converte resultados do parser em comandos do orquestrador.
  • OrchestratorToIDB: Traduz comandos do orquestrador em chamadas do IDBManager.

🔌 Integração MCP

Para usar este servidor com o Model Context Protocol:

  1. Adicione o servidor às suas configurações MCP:
{
  "mcpServers": {
    "ios-simulator": {
      "command": "node",
      "args": ["/path/to/mcp-server-simulator-ios-idb/dist/index.js"],
      "env": {}
    }
  }
}
  1. Conecte-se ao servidor no seu aplicativo LLM:
const result = await useMcpTool({
  serverName: "ios-simulator",
  toolName: "process-instruction",
  arguments: {
    instruction: "create simulator session"
  }
});

🙏 Agradecimentos

Este projeto não seria possível sem facebook/idb, que fornece os recursos subjacentes de controle do simulador iOS. Estendemos nossa sincera gratidão à equipe do Facebook/Meta e a todos os contribuidores do projeto idb por criar e manter uma ferramenta tão poderosa e confiável.

📄 Licença

Esta ferramenta está disponível como código aberto sob os termos da Apache-2.0.