phantom-mcp
phantom-mcp
MCP-сервер, который позволяет Claude Code видеть и управлять iOS-симуляторами, Android-эмуляторами и реальными устройствами. 24 инструмента для тестирования мобильных приложений, не покидая терминал.
Claude может делать скриншоты, читать экран, нажимать, прокручивать, заполнять поля, проверять утверждения, записывать видео — автоматически, на iOS и Android.
Отчет о тестировании со скриншотами генерируется автоматически после каждой сессии тестирования.
Архитектура
Claude Code
| MCP protocol (stdio)
v
Phantom (Node.js TypeScript)
| |
v v
iOS Android
xcrun simctl ADB
WebDriverAgent UIAutomator
(localhost:8100) (adb shell)
| |
v v
Simulateur / iPhone Emulateur / DeviceRelated MCP server: mobile-device-mcp
Предварительные требования
Инструмент | Требуется для | Как проверить |
macOS 13+ | всего | - |
Xcode 15+ | iOS |
|
Node.js 18+ | всего |
|
Appium 3+ | iOS (WDA) |
|
xcuitest driver | iOS (WDA) |
|
Android SDK | Android |
|
Установка
Вариант А — npm (рекомендуется)
# 1. Installer le package
npm install -g phantom-mcp
# 2. Installer Appium + driver iOS
npm install -g appium
appium driver install xcuitest
# 3. Enregistrer dans Claude Code
claude mcp add -s user phantom -- npx phantom-mcpВариант Б — из исходного кода
git clone https://github.com/nthimpulse/phantom-mcp.git
cd phantom-mcp
npm install
npm run build
claude mcp add -s user phantom -- node "$(pwd)/build/index.js"24 инструмента
Управление устройствами
Инструмент | Описание |
| Список всех устройств (iOS-симуляторы + Android-эмуляторы + реальные устройства) |
| Выбор активного устройства. Автоматический запуск, если выключено. Автоматическая подготовка устройства (отключается через skip_setup) |
| Приведение устройства в чистое состояние: очистка буфера обмена / переопределение строки состояния / скрытие клавиатуры / принудительный QWERTY для iOS |
Наблюдение
Инструмент | Описание |
| Снимок экрана активного устройства |
| Дерево доступности с индексом [N] для каждого элемента |
| Ожидание появления элемента (с тайм-аутом) |
| Прокрутка до появления элемента |
Утверждения (Assertions)
Инструмент | Описание |
| Проверка, что текст ЕСТЬ на экране |
| Проверка, что текста НЕТ на экране |
Взаимодействие
Инструмент | Описание |
| Нажатие (по индексу, координатам или тексту). Автоматическое скрытие клавиатуры, если цель перекрыта |
| Длительное нажатие (контекстные меню) |
| Ввод текста с опцией очистки и опцией проверки для повторного чтения значения после ввода |
| Свайп (вверх/вниз/влево/вправо) |
| Закрытие программной клавиатуры (ничего не делает, если не видна) |
Навигация
Инструмент | Описание |
| Открытие URL / deep link |
Действия с устройством
Инструмент | Описание |
| Имитация встряхивания |
| Изменение ориентации (портретная/альбомная) |
| Запуск/остановка записи видео |
Жизненный цикл приложения
Инструмент | Описание |
| Запуск приложения по bundle ID / package name |
| Закрытие приложения |
Анализ и автоматизация (Уровень 3)
Инструмент | Описание |
| Аудит доступности: отсутствующие метки, слишком маленькие области нажатия, изображения без замещающего текста |
| Автоматический отчет о тестировании: start для начала отслеживания, end для генерации markdown. Каждое действие отслеживается автоматически. |
| Сравнение двух скриншотов попиксельно для обнаружения визуальных регрессий |
| Выполнение одного и того же действия на нескольких устройствах одной командой |
Автоматическая работа
Выбор устройства
Phantom никогда не загружает устройство автоматически. Он просит вас выбрать:
Если активно только 1 устройство, он использует его автоматически
Если их несколько, он просит выбрать с помощью
set_deviceЕсли ни одного, он показывает список доступных устройств
Автозапуск WDA (iOS)
WebDriverAgent запускается автоматически при первом использовании инструмента iOS, которому он нужен. Первый запуск ~60-90 секунд (сборка Xcode), затем мгновенно.
ADB multi-device (Android)
Все команды ADB нацелены на устройство, выбранное через -s <serial>. Никакой путаницы при работе с несколькими устройствами.
Ввод текста (совместимость с AZERTY)
Ввод использует pbcopy + Cmd+V (вставка) вместо виртуальной клавиатуры. Это происходит мгновенно и работает на всех раскладках клавиатуры (AZERTY, QWERTY и т.д.).
Автоматический отчет о тестировании
Каждое действие (tap, type, swipe, assert...) автоматически записывается со скриншотом. В конце теста в /tmp/phantom-report-xxx/ генерируется отчет в формате markdown.
Безопасность
Все системные команды проходят через
execFile(без оболочки)Входные данные проверяются регулярными выражениями: bundle IDs, UDIDs, package names, AVD names, URLs
Предикаты iOS экранированы (защита от инъекций)
Текст Android экранирован для оболочки устройства
Ноль
as any, нольexec()shell
Конфигурация
Опциональные переменные окружения:
PHANTOM_WDA_PATH— путь к WebDriverAgent (по умолчанию: ~/.appium/...)PHANTOM_WDA_URL— URL WDA (по умолчанию: http://localhost:8100)
Вклад в проект
См. CONTRIBUTING.md для локальной настройки, шаблона добавления нового инструмента, соглашений об именовании и рабочего процесса PR.
См. также:
docs/LIMITATIONS.md — известные ограничения + обходные пути
docs/PATTERNS.md — практические рецепты (DatePicker iOS, нижние листы и т.д.)
docs/FEATURE_REQUESTS.md — функции, приоритетные для следующих версий
docs/CHANGES_2026-04-30.md — примечания к выпуску v2.3.0
Устранение неполадок
WDA постоянно падает
MobAI или другой инструмент использует порт 8100.
lsof -i :8100
pkill -f "MobAI""Нет доступных устройств"
xcrun simctl list devices available # iOS
adb devices -l # AndroidWDA не запускается
cd ~/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent
xcodebuild -project WebDriverAgent.xcodeproj \
-scheme WebDriverAgentRunner \
-destination "platform=iOS Simulator,name=iPhone 17 Pro" \
testADB не найден
ls ~/Library/Android/sdk/platform-tools/adbСтруктура проекта
phantom/
src/
index.ts Point d'entree MCP (24 tools)
platforms/
types.ts Interfaces communes
ios/
simctl.ts Wrapper xcrun simctl
wda.ts Client WDA + auto-launch
android/
adb.ts Wrapper ADB complet
tools/ 24 tools (21 fichiers)
utils/
device-manager.ts Detection + routing multi-device
xml.ts Parser XML partage
docs/
README.md Ce fichier
TUTORIAL.md Tuto pas-a-pas
FLOWS.md Exemples de flows de testMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityFmaintenanceAn MCP server that provides comprehensive tools for managing iOS simulators, including device control, app lifecycle management, and UI automation. It enables developers to boot devices, install apps, capture screenshots, and simulate user interactions through natural language commands.3MIT
- AlicenseAqualityDmaintenanceMCP server that gives AI coding assistants the ability to see and interact with mobile devices. 49 tools for Android/iOS — AI-powered visual analysis (Claude + Gemini), smart tap/type by description, Flutter widget tree inspection, video recording, and test script generation. 4-tier element search with <1ms local matching. Free tier included, zero setup via npx.49793Business Source 1.1
- Alicense-qualityDmaintenanceMCP server for cross-platform mobile automation (iOS/Android) using accessibility trees and screenshots, enabling agents to interact with apps on simulators, emulators, and physical devices.7Apache 2.0
- Alicense-qualityDmaintenanceAn MCP server for mobile automation that enables LLMs to interact with Android and iOS devices through screenshot, tap, swipe, log analysis, and app lifecycle management.242MIT
Related MCP Connectors
MCP server for Appcircle mobile CI/CD platform.
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nthImpulse/phantom-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server