Mobile Device MCP

Um servidor MCP para interagir com vários dispositivos iOS e Android ao mesmo tempo.

Documentação

Mobile Device MCP

Um servidor MCP que permite que agentes de IA controlem dispositivos iOS e Android (toque, rolagem, digitação, capturas de tela, leitura de árvores de UI e execução de código). Funciona com vários dispositivos ao mesmo tempo.

Como Funciona

Arquitetura em três camadas:

  1. Servidores no dispositivo — Servidores HTTP leves executando em cada dispositivo móvel (UIAutomator no Android, XCUITest no iOS) que expõem a árvore de acessibilidade e aceitam comandos de interação.
  2. Filtro de árvore de UI — Normaliza árvores de UI brutas de ambas as plataformas em uma lista unificada de elementos planos.
  3. Servidor MCP — A interface externa. Gerencia descoberta de dispositivos, inicialização, alocação de portas e encaminha solicitações para servidores no dispositivo.

Os dispositivos são inicializados no primeiro uso — o servidor instala o aplicativo driver, aloca uma porta, inicia o servidor no dispositivo e faz polling até que esteja saudável. Depois disso, todas as chamadas de ferramentas são encaminhadas via HTTP localhost com autenticação por token bearer por dispositivo.

Ferramentas

FerramentaDescrição
list_devicesLista dispositivos iOS e Android disponíveis
screenshotCaptura a tela do dispositivo (JPEG)
uitreeObtém a árvore de elementos de UI como uma lista plana, com busca e limite opcionais. Elementos fora da tela são excluídos, a menos que include_invisible: true
tapToque nas coordenadas da tela
double_tapToque duplo nas coordenadas da tela
long_pressToque longo nas coordenadas da tela (duração configurável)
scrollDeslize das coordenadas iniciais para as finais
type_textDigita texto no elemento focado
press_buttonPressiona um botão de hardware/navegação (home, voltar, enter, volumeUp/Down, dpadUp/Down/Left/Right/Center)
launch_appInicia um aplicativo pelo ID do bundle / nome do pacote
terminate_appForça a parada de um aplicativo
list_appsLista aplicativos instalados
install_appInstala um aplicativo a partir de um arquivo local do host (.apk para Android, .app para simulador iOS, .app/.ipa para dispositivo iOS). Substitui instalações existentes
run_codeExecuta JavaScript em sandbox no dispositivo (veja run_code abaixo)

run_code

Agentes podem passar código que parece UIAutomator ou XCUITest, ambos sendo JavaScript por baixo dos panos. O sandbox restringe (Android) operações Java potencialmente perigosas e permite apenas (iOS) alguns comandos semelhantes a XCUITest

  • Android: Motor Rhino com bindings UIAutomator — uiDevice (clique, deslize, encontre elementos, pressione teclas, leia informações de exibição), By (seletores), Until (condições de espera), console.log()
  • iOS: JavaScriptCore com bindings XCUITest — app (consulte elementos, toque, digite, deslize), springboard, device, openApp(bundleId), sleep(ms), console.log()

Ambas as plataformas matam automaticamente scripts descontrolados (loops infinitos) e criam um sandbox novo por chamada.

Pré-requisitos

  • Node.js 18+ (para execução via npx)
  • Android: Android SDK com adb no PATH
  • Simulador iOS: Xcode com xcrun, simctl
  • Dispositivo iOS Real: Xcode com xcodebuild, devicectl, e iproxy (de libimobiledevice)
  • Compilação a partir do código-fonte: runtime Bun, Gradle (Android), Xcode (iOS)

Instalação

Claude Code

claude mcp add mobile-device-mcp -- npx -y @srmorete/mobile-device-mcp@latest

Ou com portas personalizadas:

claude mcp add mobile-device-mcp -e MDMS_PORT_ANDROID=20000 -e MDMS_PORT_IOS=21000 -- npx -y @srmorete/mobile-device-mcp@latest

Modificando .mcp.json (Cursor, Claude Desktop, etc)

{
  "mcpServers": {
    "mobile-device-mcp": {
      "command": "npx",
      "args": ["-y", "@srmorete/mobile-device-mcp@latest"],
      "env": {
        "MDMS_PORT_ANDROID": "18000",           # optional
        "MDMS_PORT_IOS": "19000"                # optional
      }
    }
  }
}

Compilação a partir do Código-Fonte

git clone <repo-url>
cd mobile-device-mcp
bun install

# Build drivers for both platforms and pack tarball
./scripts/build.sh

O script de compilação compila os drivers no dispositivo (APKs Android via Gradle, pacote de teste iOS via xcodebuild), copia-os para drivers/, e cria um tarball npm.

Para executar localmente durante o desenvolvimento:

bun run start           # Start the MCP server
bun test                # Run the test suite

Configuração

Variável de AmbientePadrãoDescrição
MDMS_PORT_ANDROID18000Porta base para servidores Android no dispositivo
MDMS_PORT_IOS19000Porta base para servidores iOS no dispositivo

As portas são atribuídas sequencialmente — o primeiro dispositivo Android recebe 18000, o segundo recebe 18001, e assim por diante. O mesmo para iOS começando em 19000.

Agradecimentos

O servidor Mobile Device MCP se apoia em gigantes como mobile-mcp e Maestro. Usados como inspiração, mas reformulamos a abordagem atual para ser multi-dispositivo e com suporte nativo/WebView contínuo (especialmente no Android).

Licença

MIT