mobile-device-mcp
Servidor MCP para controle de dispositivos móveis com IA — 26 ferramentas para capturas de tela, inspeção de UI, interação por toque e análise visual por IA. Suporta Anthropic Claude e Google Gemini.
Documentação
mobile-device-mcp
Servidor MCP que dá aos assistentes de codificação com IA (Claude Code, Cursor, Windsurf) a capacidade de ver e interagir com dispositivos móveis. 49 ferramentas para capturas de tela, inspeção de UI, interação por toque, análise visual com IA, inspeção da árvore de widgets Flutter, gravação de vídeo e geração de testes.
Assistentes de IA podem ler seu código, mas não conseguem ver seu celular. Isso resolve esse problema.
Por Que Este?
| Recurso | mobile-device-mcp | mobile-next/mobile-mcp | appium/appium-mcp |
|---|---|---|---|
| Total de ferramentas | 49 | 20 | ~15 |
| Configuração | npx (30 seg) | npx | Requer servidor Appium |
| Análise visual com IA | 12 ferramentas (Claude + Gemini) | Nenhuma | Localização baseada em visão |
| Árvore de widgets Flutter | 10 ferramentas (Dart VM Service) | Nenhuma | Nenhuma |
| Localização inteligente de elementos | 4 níveis (busca local <1ms) | Somente árvore de acessibilidade | XPath/seletores |
| Aplicativo complementar (árvore de UI 23x mais rápida) | Sim | Não | Não |
| Gravação de vídeo | Sim | Não | Não |
| Geração de scripts de teste | TS, Python, JSON | Não | Somente Java/TestNG |
| Suporte a simulador iOS | Sim | Sim | Sim |
| Dispositivo iOS real | Planejado | Sim | Sim |
| Compressão de captura de tela | 89% (251KB->28KB) | Nenhuma | 50-80% |
| IA multi-provedor | Claude + Gemini | N/D | Provedor único |
| Preço | Grátis + Pro (₹499/mês) | Grátis | Grátis |
O Problema
Desenvolvedores web têm DevTools de navegador, Playwright e Puppeteer — assistentes de IA podem clicar, tirar capturas de tela e verificar correções. Desenvolvedores mobile? Eles ficam presos tirando capturas de tela manualmente, copiando logs e descrevendo o que está na tela. Eles são middleware humano entre a IA e o dispositivo.
O Que Isso Faz
Developer: "The login button doesn't work"
Without this tool: With this tool:
1. Manually screenshot 1. AI calls take_screenshot -> sees the screen
2. Paste into AI chat 2. AI calls smart_tap("login button") -> taps it
3. AI guesses what's wrong 3. AI calls verify_screen("error message shown") -> sees result
4. Apply fix, rebuild 4. AI calls visual_diff -> confirms fix worked
5. Repeat 4-5 times 5. Done.
Início Rápido
Instalação
npx mobile-device-mcp
Não é necessária instalação global. Executa diretamente via npx.
Pré-requisitos
- Node.js 18+
- Dispositivo/emulador Android conectado via ADB
- ADB instalado (Android SDK Platform Tools)
Configuração (única vez, 30 segundos)
-
Obtenha uma chave do Google AI (nível gratuito disponível): aistudio.google.com/apikey
-
Adicione
.mcp.jsonà raiz do seu projeto:
macOS / Linux:
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key"
}
}
}
}
Windows:
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "cmd",
"args": ["/c", "npx", "-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key"
}
}
}
}
Com chave de licença Pro (após comprar o Pro):
macOS / Linux (Pro)
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key",
"MOBILE_MCP_LICENSE_KEY": "MDMCP-XXXXX-XXXXX-XXXXX-XXXXX"
}
}
}
}
Windows (Pro)
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "cmd",
"args": ["/c", "npx", "-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key",
"MOBILE_MCP_LICENSE_KEY": "MDMCP-XXXXX-XXXXX-XXXXX-XXXXX"
}
}
}
}
- Abra seu assistente de codificação com IA a partir desse diretório. É isso.
O servidor inicia e para automaticamente — você nunca o executa manualmente. Seu assistente de IA o gerencia como um processo em segundo plano via protocolo MCP.
Verifique se Funciona
Claude Code: digite /mcp — você deve ver mobile-device: Connected
Cursor: verifique o painel MCP nas configurações
Depois é só conversar com seu celular:
You: "Open my app, tap the login button, type test@email.com in the email field"
AI: [takes screenshot -> sees the screen -> smart_tap("login button") -> smart_type("email field", "test@email.com")]
You: "Find all the bugs on this screen"
AI: [analyze_screen -> inspects layout, checks for overflow, missing labels, broken states]
You: "Navigate to settings and verify dark mode works"
AI: [smart_tap("settings") -> take_screenshot -> smart_tap("dark mode toggle") -> visual_diff -> reports result]
Sem scripts de teste. Sem capturas de tela manuais. Apenas descreva o que você quer em linguagem simples.
Funciona com Qualquer Assistente de Codificação com IA
| Ferramenta | Arquivo de configuração | Documentação |
|---|---|---|
| Claude Code | .mcp.json na raiz do projeto | claude.ai/docs |
| Cursor | .cursor/mcp.json | cursor.com/docs |
| VS Code + Copilot | Configurações MCP | code.visualstudio.com |
| Windsurf | Configurações MCP | windsurf.com |
Todos usam a mesma configuração JSON — basta colocá-la no arquivo correto para seu editor.
Adicione a Qualquer Projeto
Copie .mcp.json para qualquer projeto mobile — Flutter, React Native, Kotlin, Swift — e seu assistente de IA ganha superpoderes de dispositivo nesse diretório. Não é necessária instalação global.
Grátis vs Pro
Grátis (14 ferramentas) — sem necessidade de chave de licença
| Ferramenta | O que faz |
|---|---|
list_devices | Lista todos os dispositivos/emuladores Android conectados |
get_device_info | Modelo, fabricante, versão do Android, nível do SDK |
get_screen_size | Resolução da tela em pixels |
take_screenshot | Captura de tela (PNG ou JPEG, qualidade e redimensionamento configuráveis) |
get_ui_elements | Obtém a árvore de elementos de acessibilidade/UI como JSON estruturado |
tap | Toque em coordenadas |
double_tap | Toque duplo em coordenadas |
long_press | Toque longo em coordenadas |
swipe | Deslizar entre dois pontos |
type_text | Digitar texto no campo focado |
press_key | Pressionar uma tecla (início, voltar, enter, volume, etc.) |
list_apps | Listar aplicativos instalados |
get_current_app | Obter o aplicativo em primeiro plano |
get_logs | Obter entradas do logcat com filtragem |
Pro (35 ferramentas adicionais) — ₹499/mês
Obter Licença Pro — desbloqueie todas as 49 ferramentas. Após o pagamento, você receberá sua chave de licença por e-mail em até 1 hora. Adicione-a ao seu .mcp.json:
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key",
"MOBILE_MCP_LICENSE_KEY": "your-license-key"
}
}
}
}
Análise Visual com IA (12 ferramentas)
Use visão de IA (Claude ou Gemini) para entender o que está na tela.
| Ferramenta | O que faz |
|---|---|
analyze_screen | A IA descreve a tela: nome do aplicativo, tipo de tela, elementos interativos, texto visível, sugestões |
find_element | Encontra um elemento de UI por descrição: "o botão de login", "campo de entrada de e-mail" |
smart_tap | Encontra um elemento por descrição e toca nele em uma única etapa |
smart_type | Encontra um campo de entrada por descrição, foca nele e digita texto |
suggest_actions | Planeja ações para atingir um objetivo: "entrar no aplicativo", "adicionar item ao carrinho" |
visual_diff | Compara a tela atual com uma captura de tela anterior — o que mudou? |
extract_text | Extrai todo o texto visível da tela (OCR com IA) |
verify_screen | Verifica uma afirmação: "o login foi bem-sucedido", "a mensagem de erro está aparecendo" |
wait_for_settle | Aguarda até a tela parar de mudar |
wait_for_element | Aguarda um elemento específico aparecer na tela |
handle_popup | Detecta e dispensa popups, diálogos, solicitações de permissão |
fill_form | Preenche vários campos de formulário em uma única etapa |
Árvore de Widgets Flutter (10 ferramentas)
Conecta-se a aplicativos Flutter em execução via Dart VM Service Protocol. Mapeia cada widget para sua localização no código-fonte (file:line).
| Ferramenta | O que faz |
|---|---|
flutter_connect | Descobre e conecta-se a um aplicativo Flutter em execução no dispositivo |
flutter_disconnect | Desconecta do aplicativo Flutter e limpa recursos |
flutter_get_widget_tree | Obtém a árvore de widgets completa (resumida ou detalhada) |
flutter_get_widget_details | Obtém propriedades detalhadas de um widget específico por ID |
flutter_find_widget | Pesquisa a árvore de widgets por tipo, texto ou descrição |
flutter_get_source_map | Mapeia cada widget para sua localização no código-fonte (arquivo:linha:coluna) |
flutter_screenshot_widget | Captura de tela de um widget específico isoladamente |
flutter_debug_paint | Alterna a sobreposição de depuração (mostra limites e preenchimento dos widgets) |
flutter_hot_reload | Hot reload do aplicativo Flutter (preserva o estado) |
flutter_hot_restart | Hot restart do aplicativo Flutter (reinicia o estado) |
Simulador iOS (4 ferramentas)
Somente macOS. Controla simuladores iOS via xcrun simctl.
| Ferramenta | O que faz |
|---|---|
ios_list_simulators | Lista simuladores iOS disponíveis |
ios_boot_simulator | Inicia um simulador por nome ou UDID |
ios_shutdown_simulator | Desliga um simulador em execução |
ios_screenshot | Captura de tela de um simulador |
Gravação de Vídeo (2 ferramentas)
| Ferramenta | O que faz |
|---|---|
record_screen | Inicia a gravação da tela do dispositivo |
stop_recording | Para a gravação e salva o vídeo |
Geração de Testes (3 ferramentas)
| Ferramenta | O que faz |
|---|---|
start_test_recording | Inicia a gravação das suas chamadas de ferramentas MCP |
stop_test_recording | Para a gravação e gera um script de teste |
get_recorded_actions | Obtém as ações gravadas como TypeScript, Python ou JSON |
Gerenciamento de Aplicativos (4 ferramentas)
| Ferramenta | O que faz |
|---|---|
launch_app | Inicia um aplicativo pelo nome do pacote |
stop_app | Força a parada de um aplicativo |
install_app | Instala um APK |
uninstall_app | Desinstala um aplicativo |
Desempenho
O servidor é otimizado para minimizar latência e custos de tokens de IA:
- Busca de elementos em 4 níveis: aplicativo complementar (instantâneo) -> correspondência de texto local (<1ms) -> IA em cache -> IA nova.
smart_tapé 35x mais rápido que chamadas de IA ingênuas (205ms vs 7,6s). - Aplicativo complementar: aplicativo Android baseado em AccessibilityService fornece árvore de UI em 105ms (23x mais rápido que os 2448ms do UIAutomator). Instala automaticamente no primeiro uso.
- Compressão de captura de tela: ferramentas de IA comprimem automaticamente para JPEG q=60, 400w — 89% menor (251KB -> 28KB) sem perda de qualidade para IA.
- Captura paralela: captura de tela + árvore de UI obtidas simultaneamente via
Promise.all(). - Cache TTL: cache de 5 segundos evita chamadas ADB redundantes para uso rápido de ferramentas.
Variáveis de Ambiente
| Variável | Descrição | Padrão |
|---|---|---|
GOOGLE_API_KEY ou GEMINI_API_KEY | Chave da API do Google para visão Gemini (recomendado) | -- |
ANTHROPIC_API_KEY | Chave da API da Anthropic para visão Claude | -- |
MOBILE_MCP_LICENSE_KEY | Chave de licença para desbloquear ferramentas Pro | -- |
MCP_AI_PROVIDER | Força provedor de IA: "anthropic" ou "google" | Detecção automática |
MCP_AI_MODEL | Substitui o modelo de IA | gemini-2.5-flash / claude-sonnet-4-20250514 |
MCP_ADB_PATH | Caminho personalizado do binário ADB | Descoberta automática |
MCP_DEFAULT_DEVICE | Serial padrão do dispositivo | Descoberta automática |
MCP_SCREENSHOT_FORMAT | "png" ou "jpeg" | jpeg |
MCP_SCREENSHOT_QUALITY | Qualidade JPEG (1-100) | 80 |
MCP_SCREENSHOT_MAX_WIDTH | Redimensiona capturas de tela para esta largura máxima | 720 |
Arquitetura
src/
|-- index.ts # CLI entry point (auto-discovery, env config)
|-- server.ts # MCP server factory
|-- license.ts # License validation and tier gating
|-- types.ts # Shared interfaces
|-- drivers/android/ # ADB driver (DeviceDriver implementation)
| |-- adb.ts # Low-level ADB command wrapper
| |-- companion-client.ts # TCP client for companion app
| +-- index.ts # AndroidDriver class (4-strategy UI element retrieval)
|-- drivers/flutter/ # Dart VM Service driver
| |-- index.ts # FlutterDriver (discovery, inspection, source mapping, hot reload)
| +-- vm-service.ts # JSON-RPC 2.0 WebSocket client (DDS redirect handling)
|-- drivers/ios/ # iOS Simulator driver (macOS only)
| |-- index.ts # IOSSimulatorDriver via xcrun simctl
| +-- simctl.ts # Low-level simctl command wrapper
|-- tools/ # MCP tool registrations (free + pro gating)
| |-- device-tools.ts # Device management
| |-- screen-tools.ts # Screenshots & UI inspection
| |-- interaction-tools.ts # Touch, type, keys
| |-- app-tools.ts # App management
| |-- log-tools.ts # Logcat
| |-- ai-tools.ts # AI-powered tools
| |-- flutter-tools.ts # Flutter widget inspection
| |-- ios-tools.ts # iOS simulator tools
| |-- video-tools.ts # Screen recording
| +-- recording-tools.ts # Test generation
|-- recording/ # Test script generation
| |-- recorder.ts # ActionRecorder (records MCP tool calls)
| +-- generator.ts # TestGenerator (TypeScript/Python/JSON output)
|-- ai/ # AI visual analysis engine
| |-- client.ts # Multi-provider client (Anthropic + Google)
| |-- prompts.ts # System prompts & UI element summarizer
| |-- analyzer.ts # ScreenAnalyzer orchestrator (caching, parallel capture)
| +-- element-search.ts # Local element search (text/alias matching, no AI needed)
+-- utils/
|-- discovery.ts # ADB auto-discovery
+-- image.ts # PNG parsing, JPEG compression, bilinear resize
companion-app/ # Android companion app (Kotlin)
# AccessibilityService + TCP JSON-RPC for fast UI tree
Roadmap
- Suporte a dispositivo físico iOS
- Orquestração multi-dispositivo
- Integração CI/CD
- Suporte a fazenda de dispositivos em nuvem
Testado Em
- Dispositivos: Pixel 8 (Android 16), série Samsung Galaxy, emuladores Android
- Aplicativos: Telegram, Instagram, Spotify, WhatsApp, YouTube, Chrome, Configurações e aplicativos Flutter
- Provedores de IA: Google Gemini 2.5 Flash, Anthropic Claude
- Plataformas: Windows 11, macOS (simuladores iOS)
- Conexão: ADB via USB e sem fio
Licença
- Grátis para indivíduos e uso não comercial
- Uso comercial requer licença paga
- Converte para Apache 2.0 em 23 de março de 2030
Consulte LICENSE para os termos completos.