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
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.

🎮 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:
- Basta pedir ao Cline:
Add this mcp to cline https://github.com/InditexTech/mcp-server-simulator-ios-idb
- 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:
- Verificará se você está executando macOS
- Instalará o idb-companion via Homebrew
- 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:
- 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": {}
}
}
}
- 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
| Comando | Descrição | Exemplo |
|---|---|---|
| Criar sessão | Cria uma nova sessão de simulador | "criar sessão", "criar simulador iPhone 12" |
| Encerrar sessão | Encerra a sessão atual | "encerrar sessão", "fechar simulador" |
| Listar simuladores | Lista simuladores disponíveis | "listar simuladores", "mostrar simuladores" |
| Listar simuladores iniciados | Lista simuladores em execução | "listar simuladores iniciados", "mostrar simuladores em execução" |
| Iniciar simulador | Inicia um simulador por UDID | "iniciar simulador 5A321B8F-4D85-4267-9F79-2F5C91D142C2" |
| Desligar simulador | Desliga um simulador | "desligar simulador 5A321B8F-4D85-4267-9F79-2F5C91D142C2" |
| Focar simulador | Traz a janela do simulador para frente | "focar simulador", "trazer simulador para frente" |
| Listar sessões do simulador | Lista sessões ativas do simulador | "listar sessões do simulador", "mostrar sessões ativas" |
📱 Gerenciamento de Aplicativos
| Comando | Descrição | Exemplo |
|---|---|---|
| Instalar aplicativo | Instala um aplicativo no simulador | "instalar aplicativo /caminho/para/app.ipa" |
| Iniciar aplicativo | Inicia um aplicativo no simulador | "iniciar aplicativo com.example.app" |
| Encerrar aplicativo | Encerra um aplicativo em execução | "encerrar aplicativo com.example.app" |
| Desinstalar aplicativo | Desinstala um aplicativo | "desinstalar aplicativo com.example.app" |
| Listar aplicativos | Lista aplicativos instalados | "listar aplicativos", "mostrar aplicativos instalados" |
| Verificar se aplicativo está instalado | Verifica se um aplicativo está instalado | "o aplicativo com.example.app está instalado" |
🖱️ Interação com UI
| Comando | Descrição | Exemplo |
|---|---|---|
| Tocar | Toca em coordenadas específicas | "tocar em 100, 200" |
| Deslizar | Executa um gesto de deslize | "deslizar de 100, 200 para 300, 400" |
| Pressionar botão | Pressiona um botão do dispositivo | "pressionar botão HOME", "pressionar botão SIRI" |
| Inserir texto | Digita texto | "inserir texto Olá Mundo" |
| Pressionar tecla | Pressiona uma tecla por código | "pressionar tecla 4" |
| Pressionar sequência de teclas | Pressiona uma sequência de teclas | "pressionar sequência de teclas 4 5 6" |
♿ Acessibilidade
| Comando | Descrição | Exemplo |
|---|---|---|
| Descrever elementos | Lista todos os elementos de acessibilidade | "descrever todos os elementos", "mostrar elementos de acessibilidade" |
| Descrever ponto | Descreve o elemento em coordenadas | "descrever ponto 100, 200", "o que há em 150, 300" |
📸 Captura e Logs
| Comando | Descrição | Exemplo |
|---|---|---|
| Tirar captura de tela | Captura uma captura de tela | "tirar captura de tela", "capturar tela" |
| Gravar vídeo | Grava atividade da tela | "gravar vídeo /caminho/saida.mp4" |
| Parar gravação | Para a gravação de vídeo | "parar gravação", "parar gravação de vídeo" |
| Obter logs | Recupera logs do sistema ou do aplicativo | "obter logs", "obter logs para com.example.app" |
🐛 Depuração
| Comando | Descrição | Exemplo |
|---|---|---|
| Iniciar depuração | Inicia uma sessão de depuração | "depurar aplicativo com.example.app", "iniciar depuração com.example.app" |
| Parar depuração | Para uma sessão de depuração | "parar depuração", "encerrar sessão de depuração" |
| Status da depuração | Obtém o status da sessão de depuração | "status da depuração", "mostrar informações de depuração" |
💥 Logs de Falhas
| Comando | Descrição | Exemplo |
|---|---|---|
| Listar logs de falhas | Lista logs de falhas disponíveis | "listar logs de falhas", "mostrar logs de falhas" |
| Mostrar log de falha | Mostra o conteúdo de um log de falha | "mostrar log de falha crash_2023-01-01" |
| Excluir logs de falhas | Exclui logs de falhas | "excluir logs de falhas", "limpar logs de falhas" |
🔧 Comandos Adicionais
| Comando | Descrição | Exemplo |
|---|---|---|
| Instalar dylib | Instala uma biblioteca dinâmica | "instalar dylib /caminho/para/biblioteca.dylib" |
| Abrir URL | Abre uma URL no simulador | "abrir url https://example.com" |
| Limpar chaveiro | Limpa o chaveiro do simulador | "limpar chaveiro" |
| Definir localização | Define a localização do simulador | "definir localização 37.7749, -122.4194" |
| Adicionar mídia | Adiciona mídia ao rolo da câmera | "adicionar mídia /caminho/para/imagem.jpg" |
| Aprovar permissões | Aprova permissões do aplicativo | "aprovar permissões com.example.app fotos câmera" |
| Atualizar contatos | Atualiza 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:
- IDBManager: Componente de baixo nível que interage diretamente com simuladores iOS através do idb.
- NLParser: Componente que interpreta instruções em linguagem natural e as converte em comandos estruturados.
- 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:
- 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": {}
}
}
}
- 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.