Expo MCP Server
expo-mcp
MCP-сервер для автоматизации приложений Expo/React Native с интеграцией Maestro.
Возможности
Архитектура на основе сессий:
start_sessionзапускает Expo, привязывает устройство и получает аренду — никакого ручного управления ID устройстваАренда устройства с TTL: 2-минутная аренда автоматически продлевается при каждом вызове инструмента устройства; истекает после периода бездействия, чтобы другие экземпляры могли использовать устройство
Координация между экземплярами: Несколько экземпляров MCP могут работать одновременно без конфликтов устройств
Управление сервером разработки Expo: Запуск/остановка/перезагрузка сервера разработки Expo
Интеграция с Maestro: Полноценные инструменты автоматизации UI (нажатие, ввод, скриншот и т.д.)
Установка
Как плагин Claude Code (рекомендуется)
Две команды, затем перезапуск:
# 1. Install the plugin. Just dismiss the "Expo App Directory" prompt
# (or leave it empty) — the next step configures it for you.
/plugin marketplace add DaveDev42/expo-mcp
/plugin install expo-mcp --scope project
# 2. One-shot installer. Runs environment checks, auto-detects the Expo
# app directory, and writes the userConfig directly into
# .claude/settings.json. No /plugin UI round-trip needed.
/expo-mcp:install # auto-detect
/expo-mcp:install apps/mobile # monorepo: pass the path explicitlyЗатем перезапустите Claude Code, и все инструменты, агенты и навыки будут готовы.
Флаги установщика:
/expo-mcp:install apps/mobile --global # write to ~/.claude/settings.json
/expo-mcp:install --scaffold-maestro # also create a starter maestro/
/expo-mcp:install --skip-doctor # skip prerequisite checksУстановщик запускает встроенные скрипты Node (doctor.mjs, detect-app-dir.mjs, scaffold-maestro.mjs) из директории плагина. Claude Code предложит вам подтвердить каждый из них при первом запуске — подтвердите их, чтобы продолжить.
Если вы предпочитаете предварительно подтвердить скрипты (без запросов), добавьте это в .claude/settings.local.json в вашем проекте, заменив <PATH> на абсолютный путь, показанный Claude Code при первом запуске каждого скрипта:
{
"permissions": {
"allow": [
"Bash(node <PATH>/doctor.mjs:*)",
"Bash(node <PATH>/detect-app-dir.mjs:*)",
"Bash(node <PATH>/scaffold-maestro.mjs:*)"
]
}
}Установка плагина автоматически настраивает:
MCP-сервер
expo(ручной.mcp.jsonне требуется)QA-агент (
qa) для автоматизированного тестирования мобильных приложенийАгент написания сценариев (
flow-writer) для создания тестовых сценариев Maestro в формате YAMLРуководство по использованию (
/expo-guide) со справочником инструментов и лучшими практикамиХук валидации, который предупреждает о вердиктах QA PASS без доказательств выполнения
Только как MCP-сервер
Этот проект распространяется только через GitHub (имя expo-mcp в npm принадлежит другому, не связанному пакету — не используйте его). Запустите его через ссылку на GitHub:
npx -y github:DaveDev42/expo-mcpИспользование с Claude Code
Ручная настройка MCP
Если вы не используете плагин, добавьте в свой .mcp.json:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp"]
}
}
}Настройка в монорепозитории
Используйте позиционный аргумент для указания директории приложения:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "apps/mobile"]
}
}
}Конкретное устройство
Закрепите определенный симулятор или эмулятор с помощью --device-id:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "--device-id=6D192F60-1234-5678-ABCD-000000000000"]
}
}
}Фильтрация инструментов
Исключите определенные инструменты с помощью --exclude-tools:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "apps/mobile", "--exclude-tools=list_devices"]
}
}
}Или откройте только определенные инструменты с помощью --tools:
{
"mcpServers": {
"expo": {
"command": "npx",
"args": ["-y", "github:DaveDev42/expo-mcp", "--tools=start_session,stop_session,take_screenshot"]
}
}
}Справочник CLI
Usage: expo-mcp [app-dir] [options]
Arguments:
app-dir Path to Expo app directory (default: cwd)
Options:
--device-id=<id> Specific device to use (iOS simulator UUID or Android serial)
--exclude-tools=tool1,tool2 Exclude specific tools from the MCP server
--tools=tool1,tool2 Only expose specific tools
-h, --help Show help message
-v, --version Show version numberБыстрый старт
# 1. Start session (launches Expo + binds device + acquires lease)
start_session({ target: "ios-simulator" })
# 2. Use tools directly (no device_id needed!)
take_screenshot()
tap_on({ text: "Login" })
input_text({ text: "hello@example.com" })
press_key({ key: "Enter" })
scroll({ direction: "down" })
swipe({ direction: "left" })
# 3. Run Maestro flows
run_maestro_flow({ flow_yaml: "- assertVisible: Welcome" })
check_maestro_flow_syntax({ flow_yaml: "- tap: Login" })
# 4. Reload app after code changes
reload_app()
# 5. Check logs if needed
get_logs({ level: "error" })
# 6. Stop session when done
stop_session()Возможности плагина
При установке в качестве плагина Claude Code вы получаете следующие дополнительные возможности:
QA-агент
Делегируйте мобильное QA-тестирование агенту qa. Он систематически тестирует ваше приложение на симуляторе/эмуляторе со строгими требованиями к доказательствам — никаких вердиктов только на основе проверки кода.
# In Claude Code, delegate to the QA agent:
"Test the login flow on iOS simulator" → delegates to qa agentАгент следует структурированной методологии: запуск приложения → проверка UI → взаимодействие → верификация → отчет с вердиктом PASS/FAIL/INCONCLUSIVE.
Агент написания сценариев (Flow Writer)
Агент flow-writer проверяет работающее приложение и создает тестовые сценарии Maestro в формате YAML:
# Ask the flow writer to create a test flow:
"Write a Maestro flow for the onboarding sequence" → delegates to flow-writer agentОн проверяет синтаксис, выполняет сценарий для подтверждения его работоспособности и записывает файл .yaml в ваш проект.
Руководство по использованию
Получите доступ к справочнику инструментов и лучшим практикам через /expo-guide:
/expo-guide # Full guide
/expo-guide session # Session lifecycle
/expo-guide debugging # Debugging tipsИнструменты
Инструменты жизненного цикла
Инструмент | Описание |
| Получить статус сессии (состояние сервера, информация об устройстве, оставшееся время аренды) |
| Запустить сервер Expo, подключить устройство и получить аренду устройства |
| Остановить сервер Expo и освободить все ресурсы |
| «Горячая» перезагрузка приложения на подключенном устройстве |
| Получить логи сборщика Metro (с фильтрацией по уровню и источнику) |
| Нажать клавишу (Enter, Backspace, Home, Lock, Tab, Volume Up/Down) |
| Прокрутить экран в направлении (по умолчанию: вниз) |
| Смахнуть в направлении или по точным начальным/конечным координатам |
Опции start_session
Опция | Тип | Описание | ||
|
|
|
| Целевая платформа для запуска |
| string | Конкретное устройство (UUID iOS или серийный номер Android). Автоматически определяется, если пропущено | ||
|
|
|
| Режим подключения |
| number | Порт сервера (по умолчанию: 8081, автоматически увеличивается, если занят) | ||
| boolean | Очистить кэш сборщика Metro | ||
| boolean | Режим разработки (по умолчанию: true) | ||
| boolean | Минифицировать JavaScript | ||
| number | Максимальное количество воркеров Metro | ||
| boolean | Автономный режим | ||
| string | Пользовательская схема URI | ||
| string | Имя симулятора iOS (например, "iPhone 16 Pro") | ||
| boolean | Очистить состояние симулятора перед запуском (по умолчанию: false) | ||
| object | Запустить сценарий Maestro после загрузки приложения ( |
Инструменты Maestro
Все инструменты Maestro работают автоматически, как только сессия активна — device_id внедряется из сессии:
Инструмент | Описание |
| Сделать скриншот (автоматически изменен размер для контекста LLM) |
| Нажать на элемент UI по тексту, ID или координатам |
| Ввести текст в сфокусированное поле |
| Нажать кнопку «Назад» |
| Запустить сценарий Maestro YAML в строке |
| Запустить файлы сценариев Maestro из директории проекта |
| Проверить синтаксис сценария Maestro YAML без его запуска |
| Получить дерево элементов UI текущего экрана |
| Перечислить все доступные устройства (работает без активной сессии) |
Примечание: Инструменты устройства требуют активной сессии. Сначала вызовите
start_session.list_devicesиcheck_maestro_flow_syntaxможно вызывать в любое время.
Система аренды устройств
Аренда устройства предотвращает ситуацию, когда один экземпляр MCP удерживает устройство бесконечно:
Получение:
start_sessionполучает 2-минутную аренду устройстваАвтопродление: Каждый вызов инструмента устройства (
take_screenshot,tap_onи т.д.) сбрасывает 2-минутный таймерИстечение: Если в течение 2 минут не вызывается ни один инструмент устройства, аренда истекает, и устройство становится доступным
Повторное получение: Вызовите
start_sessionснова, чтобы повторно получить аренду (сервер продолжает работать, перезапуск не требуется)Проверка:
get_session_statusпоказывает оставшееся время аренды
Несколько экземпляров MCP координируются через файловый реестр (/tmp/expo-mcp/instances/), поэтому два экземпляра не могут претендовать на одно и то же устройство одновременно.
Переменные окружения
Переменная | Описание | По умолчанию |
| Путь к директории приложения Expo (позиционный аргумент CLI имеет приоритет) | Текущая рабочая директория |
| Путь к Maestro CLI |
|
| Список инструментов через запятую для открытия ( | Все инструменты |
| Список инструментов через запятую для исключения ( | Нет |
| Максимальное количество строк логов в памяти | 400 |
| Токен аутентификации Expo (нужен только если отключен автономный режим) | Нет |
Как это работает
Запуск сессии:
start_sessionзапускает сервер разработки Expo, ожидает подключения устройства и получает арендуПривязка устройства: ID подключенного устройства сохраняется в сессии с TTL 2 минуты
Автоматическое внедрение: Все инструменты устройства Maestro автоматически используют ID устройства из сессии
Продление аренды: Каждый вызов инструмента устройства сбрасывает таймер аренды
Завершение сессии:
stop_sessionочищает все, или аренда истекает после бездействия
Неинтерактивные среды (CI/CD, AI-агенты)
Этот MCP-сервер автоматически включает режим --offline при запуске в средах CI (CI=1). Это позволяет приложению работать без необходимости наличия EXPO_TOKEN.
Что делает автономный режим
Пропускает обмен данными с сервером Expo (подпись манифеста)
НЕ влияет на сетевые функции вашего приложения (API-запросы, fetch и т.д.)
Режим туннеля (
--tunnel) недоступен в автономном режиме
Если вам нужны функции учетной записи Expo
Для функций, требующих аутентификации Expo, отключите автономный режим и предоставьте EXPO_TOKEN:
{
"mcpServers": {
"expo": {
"env": {
"EXPO_TOKEN": "your-token-here"
}
}
}
}Затем вызовите start_session с offline: false:
start_session({ target: "ios-simulator", offline: false })Требования
Node.js >= 18
Xcode (для симулятора iOS)
Android Studio (для эмулятора Android)
Maestro CLI (для автоматизации UI)
Лицензия
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/DaveDev42/expo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server