Перейти к основному содержанию

Конфигурация

На этой странице документированы все параметры конфигурации для сервера WebdriverIO MCP.

Конфигурация сервера MCP​

Сервер MCP настраивается через конфигурационные файлы Claude Desktop или Claude Code.

Базовая конфигурация​

macOS​

Редактируйте ~/Library/Application Support/Claude/claude_desktop_config.json:

{
"mcpServers": {
"wdio-mcp": {
"command": "npx",
"args": ["-y", "@wdio/mcp"]
}
}
}

Windows​

Редактируйте %APPDATA%\Claude\claude_desktop_config.json:

{
"mcpServers": {
"wdio-mcp": {
"command": "npx",
"args": ["-y", "@wdio/mcp"]
}
}
}

Claude Code​

Редактируйте .claude/settings.json вашего проекта:

{
"mcpServers": {
"wdio-mcp": {
"command": "npx",
"args": ["-y", "@wdio/mcp"]
}
}
}

Переменные окружения​

Настройте соединение с сервером Appium и другие параметры через переменные окружения.

Соединение с Appium​

ПеременнаяТипПо умолчаниюОписание
APPIUM_URLstring127.0.0.1Хост сервера Appium
APPIUM_URL_PORTnumber4723Порт сервера Appium
APPIUM_PATHstring/Путь сервера Appium

Пример с переменными окружения​

{
"mcpServers": {
"wdio-mcp": {
"command": "npx",
"args": ["-y", "@wdio/mcp"],
"env": {
"APPIUM_URL": "192.168.1.100",
"APPIUM_URL_PORT": "4724",
"APPIUM_PATH": "/wd/hub"
}
}
}
}

Опции сессии браузера​

Опции, доступные при запуске сессии браузера через инструмент start_browser.

headless​

  • Тип: boolean
  • Обязательно: Нет
  • По умолчанию: false

Запуск Chrome в режиме без интерфейса (без видимого окна браузера). Полезно для сред CI/CD или когда вам не нужно видеть браузер.

windowWidth​

  • Тип: number
  • Обязательно: Нет
  • По умолчанию: 1920
  • Диапазон: 400 - 3840

Начальная ширина окна браузера в пикселях.

windowHeight​

  • Тип: number
  • Обязательно: Нет
  • По умолчанию: 1080
  • Диапазон: 400 - 2160

Начальная высота окна браузера в пикселях.

  • Тип: string
  • Обязательно: Нет

URL для перехода сразу после запуска браузера. Это эффективнее, чем вызов start_browser с последующим вызовом navigate.

Пример: Запуск браузера и переход за один вызов:

Start Chrome and navigate to https://webdriver.io

Опции мобильной сессии​

Опции, доступные при запуске сессии мобильного приложения через инструмент start_app_session.

Опции платформы​

platform​

  • Тип: string
  • Обязательно: Да
  • Значения: iOS | Android

Мобильная платформа для автоматизации.

platformVersion​

  • Тип: string
  • Обязательно: Нет

Версия ОС устройства/симулятора/эмулятора (например, 17.0 для iOS, 14 для Android).

automationName​

  • Тип: string
  • Обязательно: Нет
  • Значения: XCUITest (iOS), UiAutomator2 | Espresso (Android)

Драйвер автоматизации для использования. По умолчанию XCUITest для iOS и UiAutomator2 для Android.

Опции устройства​

deviceName​

  • Тип: string
  • Обязательно: Да

Имя устройства, симулятора или эмулятора для использования.

Примеры:

  • iOS Simulator: iPhone 15 Pro, iPad Air (5th generation)
  • Android Emulator: Pixel 7, Nexus 5X
  • Реальное устройство: Имя устройства, как показано в вашей системе

udid​

  • Тип: string
  • Обязательно: Нет (Требуется для реальных устройств iOS)

Уникальный идентификатор устройства. Требуется для реальных устройств iOS (40-символьный идентификатор) и рекомендуется для реальных устройств Android.

Как найти UDID:

  • iOS: Подключите устройство, откройте Finder/iTunes, нажмите на устройство → Серийный номер (нажмите, чтобы увидеть UDID)
  • Android: Выполните команду adb devices в терминале

Опции приложения​

appPath​

  • Тип: string
  • Обязательно: Нет*

Путь к файлу приложения для установки и запуска.

Поддерживаемые форматы:

  • iOS Simulator: директория .app
  • iOS Real Device: файл .ipa
  • Android: файл .apk

*Должен быть предоставлен либо appPath, либо noReset: true для подключения к уже запущенному приложению.

appWaitActivity​

  • Тип: string
  • Обязательно: Нет (Только для Android)

Активность, которую нужно дождаться при запуске приложения. Если не указано, используется основная активность приложения.

Пример: com.example.app.MainActivity

Опции состояния сессии​

noReset​

  • Тип: boolean
  • Обязательно: Нет
  • По умолчанию: false

Сохранять состояние приложения между сессиями. Когда true:

  • Данные приложения сохраняются (состояние входа, предпочтения и т.д.)
  • Сессия будет отсоединяться, а не закрываться (приложение продолжает работать)
  • Полезно для тестирования пользовательских путей в нескольких сессиях
  • Можно использовать без appPath для подключения к уже запущенному приложению

fullReset​

  • Тип: boolean
  • Обязательно: Нет
  • По умолчанию: true

Полностью сбросить приложение перед сессией. Когда true:

  • iOS: Удаляет и переустанавливает приложение
  • Android: Очищает данные и кэш приложения
  • Полезно для начала с чистого состояния

Установите fullReset: false с noReset: true для полного сохранения состояния приложения.

Таймаут сессии​

newCommandTimeout​

  • Тип: number
  • Обязательно: Нет
  • По умолчанию: 60

Сколько времени (в секундах) Appium будет ждать новой команды, прежде чем предположить, что клиент вышел, и завершить сессию. Увеличьте это значение для более длительных сессий отладки.

Примеры:

  • 60 - По умолчанию, подходит для большинства автоматизаций
  • 300 - 5 минут, для отладки или более медленных операций
  • 600 - 10 минут, для очень длительных тестов

Опции автоматической обработки​

autoGrantPermissions​

  • Тип: boolean
  • Обязательно: Нет
  • По умолчанию: true

Автоматически предоставлять разрешения приложению при установке/запуске. Когда true:

  • Разрешения на камеру, микрофон, местоположение и т.д. предоставляются автоматически
  • Не требуется ручная обработка диалогов разрешений
  • Оптимизирует автоматизацию, избегая всплывающих окон разрешений
Только для Android

Эта опция в основном влияет на Android. Разрешения iOS должны обрабатываться иначе из-за системных ограничений.

autoAcceptAlerts​

  • Тип: boolean
  • Обязательно: Нет
  • По умолчанию: true

Автоматически принимать системные предупреждения (диалоги), которые появляются во время автоматизации.

Примеры автоматически принимаемых предупреждений:

  • "Разрешить уведомления?"
  • "Приложение хочет получить доступ к вашему местоположению"
  • "Разрешить приложению доступ к фотографиям?"

autoDismissAlerts​

  • Тип: boolean
  • Обязательно: Нет
  • По умолчанию: false

Отклонять (отменять) системные предупреждения вместо их принятия. Имеет приоритет над autoAcceptAlerts при установке в true.

Переопределение сервера Appium​

Вы можете переопределить соединение с сервером Appium для каждой сессии:

appiumHost​

  • Тип: string
  • Обязательно: Нет

Хост сервера Appium. Переопределяет переменную окружения APPIUM_URL.

appiumPort​

  • Тип: number
  • Обязательно: Нет

Порт сервера Appium. Переопределяет переменную окружения APPIUM_URL_PORT.

appiumPath​

  • Тип: string
  • Обязательно: Нет

Путь сервера Appium. Переопределяет переменную окружения APPIUM_PATH.


Опции обнаружения элементов​

Опции для инструмента get_visible_elements.

elementType​

  • Тип: string
  • Обязательно: Нет
  • По умолчанию: interactable
  • Значения: interactable | visual | all

Тип возвращаемых элементов:

  • interactable: Кнопки, ссылки, поля ввода и другие кликабельные элементы
  • visual: Изображения, SVG и визуальные элементы
  • all: И интерактивные, и визуальные элементы

inViewportOnly​

  • Тип: boolean
  • Обязательно: Нет
  • По умолчанию: true

Возвращать только элементы, которые видны в текущей области просмотра. При false возвращает все элементы в иерархии представления (полезно для поиска элементов за пределами экрана).

includeContainers​

  • Тип: boolean
  • Обязательно: Нет
  • По умолчанию: false

Включать элементы-контейнеры/макеты в результаты. При true:

Включаемые контейнеры Android:

  • ViewGroup, FrameLayout, LinearLayout
  • RelativeLayout, ConstraintLayout
  • ScrollView, RecyclerView

Включаемые контейнеры iOS:

  • View, StackView, CollectionView
  • ScrollView, TableView

Полезно для отладки проблем с макетом или понимания иерархии представления.

includeBounds​

  • Тип: boolean
  • Обязательно: Нет
  • По умолчанию: false

Включать границы/координаты элементов (x, y, ширина, высота) в ответе. Установите true для:

  • Взаимодействия на основе координат
  • Отладки макета
  • Позиционирования визуальных элементов

Опции пагинации​

Для больших страниц с множеством элементов используйте пагинацию для уменьшения использования токенов:

limit​

  • Тип: number
  • Обязательно: Нет
  • По умолчанию: 0 (без ограничений)

Максимальное количество возвращаемых элементов.

offset​

  • Тип: number
  • Обязательно: Нет
  • По умолчанию: 0

Количество элементов, которые нужно пропустить перед возвратом результатов.

Пример: Получить элементы 21-40:

Get visible elements with limit 20 and offset 20

Опции дерева доступности​

Опции для инструмента get_accessibility (только для браузера).

limit​

  • Тип: number
  • Обязательно: Нет
  • По умолчанию: 100

Максимальное количество возвращаемых узлов. Используйте 0 для неограниченного количества (не рекомендуется для больших страниц).

offset​

  • Тип: number
  • Обязательно: Нет
  • По умолчанию: 0

Количество узлов, которые нужно пропустить для пагинации.

roles​

  • Тип: string[]
  • Обязательно: Нет
  • По умолчанию: Все роли

Фильтрация по определенным ролям доступности.

Общие роли: button, link, textbox, checkbox, radio, heading, img, listitem

Пример: Получить только кнопки и ссылки:

Get accessibility tree filtered to button and link roles

namedOnly​

  • Тип: boolean
  • Обязательно: Нет
  • По умолчанию: true

Возвращать только узлы, которые имеют имя/метку. Фильтрует анонимные контейнеры и уменьшает шум в результатах.


Опции снимков экрана​

Опции для инструмента take_screenshot.

outputPath​

  • Тип: string
  • Обязательно: Нет

Путь для сохранения файла скриншота. Если не указано, возвращает данные изображения в формате base64.

Автоматическая оптимизация​

Скриншоты автоматически обрабатываются для оптимизации потребления LLM:

ОптимизацияЗначениеОписание
Максимальный размер2000pxИзображения больше 2000px масштабируются
Максимальный размер файла1MBИзображения сжимаются до размера менее 1MB
ФорматPNG/JPEGPNG с максимальным сжатием; JPEG при необходимости для размера

Эта оптимизация гарантирует, что скриншоты могут быть эффективно обработаны без превышения лимитов токенов.


Поведение сессии​

Типы сессий​

Сервер MCP отслеживает типы сессий для предоставления соответствующих инструментов и поведения:

ТипОписаниеАвтоматическое отсоединение
browserСессия браузера ChromeНет
iosСессия приложения iOSДа (если noReset: true или нет appPath)
androidСессия приложения AndroidДа (если noReset: true или нет appPath)

Модель одной сессии​

Сервер MCP работает с моделью одной сессии:

  • Одновременно может быть активна только одна сессия браузера ИЛИ приложения
  • Запуск новой сессии закроет/отсоединит текущую сессию
  • Состояние сессии поддерживается глобально для всех вызовов инструментов

Отсоединение и закрытие​

Действиеdetach: false (Закрытие)detach: true (Отсоединение)
БраузерПолностью закрывает ChromeОставляет Chrome запущенным, отключает WebDriver
Мобильное приложениеЗавершает приложениеОставляет приложение запущенным в текущем состоянии
ПрименениеЧистое состояние для следующей сессииСохранение состояния, ручная проверка

Соображения по производительности​

Сервер MCP оптимизирован для эффективного общения с LLM с использованием формата TOON (Token-Oriented Object Notation), который минимизирует использование токенов при отправке данных в Claude.

Автоматизация браузера​

  • Режим без интерфейса быстрее, но не отображает визуальные элементы
  • Меньшие размеры окна сокращают время захвата скриншота
  • Обнаружение элементов оптимизировано с помощью единого выполнения скрипта
  • Оптимизация скриншотов сохраняет изображения менее 1МБ для эффективной обработки
  • inViewportOnly: true (по умолчанию) фильтрует только видимые элементы

Мобильная автоматизация​

  • Парсинг исходного кода XML страницы использует только 2 HTTP-вызова (против 600+ для традиционных запросов элементов)
  • Селекторы идентификаторов доступности самые быстрые и надежные
  • Селекторы XPath самые медленные - используйте только в крайнем случае
  • inViewportOnly: true (по умолчанию) значительно уменьшает количество элементов
  • Пагинация (limit и offset) уменьшает использование токенов для экранов с множеством элементов
  • includeBounds: false (по умолчанию) опускает данные о координатах, если они не нужны

Советы по использованию токенов​

НастройкаВлияние
inViewportOnly: trueФильтрует элементы вне экрана, уменьшая размер ответа
includeContainers: falseИсключает элементы макета (ViewGroup и т.д.)
includeBounds: falseОпускает данные x/y/ширина/высота
limit с пагинациейОбрабатывайте элементы партиями вместо всех сразу
namedOnly: true (доступность)Фильтрует анонимные узлы

Настройка сервера Appium​

Перед использованием мобильной автоматизации убедитесь, что Appium правильно настроен.

Базовая настройка​

# Установка Appium глобально
npm install -g appium

# Установка драйверов
appium driver install xcuitest # iOS
appium driver install uiautomator2 # Android

# Запуск сервера
appium

Пользовательская конфигурация сервера​

# Запуск с пользовательским хостом и портом
appium --address 0.0.0.0 --port 4724

# Запуск с логированием
appium --log-level debug

# Запуск с определенным базовым путем
appium --base-path /wd/hub

Проверка установки​

# Проверка установленных драйверов
appium driver list --installed

# Проверка версии Appium
appium --version

# Проверка соединения
curl http://localhost:4723/status

Устранение проблем с конфигурацией​

Сервер MCP не запускается​

  1. Убедитесь, что npm/npx установлены: npm --version
  2. Попробуйте запустить вручную: npx @wdio/mcp
  3. Проверьте логи Claude Desktop на наличие ошибок

Проблемы с подключением к Appium​

  1. Убедитесь, что Appium запущен: curl http://localhost:4723/status
  2. Проверьте, что переменные окружения соответствуют настройкам сервера Appium
  3. Убедитесь, что брандмауэр разрешает соединения на порту Appium

Сессия не запускается​

  1. Браузер: Убедитесь, что Chrome установлен
  2. iOS: Проверьте, что Xcode и симуляторы доступны
  3. Android: Проверьте ANDROID_HOME и убедитесь, что эмулятор запущен
  4. Просмотрите логи сервера Appium для получения подробных сообщений об ошибках

Тайм-ауты сессии​

Если сессии истекают во время отладки:

  1. Увеличьте newCommandTimeout при запуске сессии
  2. Используйте noReset: true для сохранения состояния между сессиями
  3. Используйте detach: true при закрытии, чтобы приложение продолжало работать

Welcome! How can I help?

WebdriverIO AI Copilot