Opencode - как подключить MCP - playwright - 2026

Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Перейти к:навигация, поиск

Published: 2026-09-08


opencode — это современный открытый AI-ассистент для разработки кода, а MCP (Model Context Protocol) — открытый стандарт, позволяющий подключать к таким ассистентам внешние инструменты и данные. Один из самых востребованных MCP-серверов — Playwright MCP, который даёт AI-агенту возможность управлять настоящим браузером: открывать сайты, кликать по элементам, заполнять формы, делать скриншоты и выполнять произвольный JavaScript. В этой статье подробно, шаг за шагом, разбирается, как подключить Playwright MCP к opencode, как настроить безопасный изолированный профиль браузера, из чего состоит конфигурация, какие инструменты становятся доступны и как использовать их на практике.

Введение

Терминальные AI-ассистенты (агенты) быстро превратились из инструментов, которые только пишут код, в полноценных автономных исполнителей, способных проверять свою работу, читать документацию, запускать тесты и взаимодействовать с внешними сервисами. В центре этой эволюции лежит идея «инструментов как сервиса»: модель обучается вызывать функции, а не просто генерировать текст.

Однако долгое время главным ограничением было взаимодействие с вебом. Модель не может сама открыть браузер, ввести данные в форму авторизации, нажать кнопку и увидеть результат — у неё нет «рук» и «глаз». Именно эту задачу решает связка из двух технологий:

  • opencode — клиент, в котором живёт агент;
  • MCP — протокол, единый язык общения клиента с инструментами;
  • Playwright MCP — сервер, который переводит пожелания агента в реальные действия в браузере.

В 2026 году эта связка стала де-факто стандартом браузерной автоматизации для AI-агентов. Она объединяет лучшее от двух миров: надёжное и быстрое управление браузером от Microsoft Playwright и удобный, единый протокол подключения инструментов от MCP.

Эта статья ставит перед собой несколько целей:

  • объяснить, что такое opencode, MCP и Playwright MCP и как они соотносятся друг с другом;
  • показать точную конфигурацию для подключения Playwright MCP к opencode через файл opencode.json;
  • подробно рассказать про изолированный профиль браузера и почему это важно для безопасности;
  • перечислить все инструменты, которые появляются после подключения;
  • разобрать примеры практического использования;
  • дать обзор параметров конфигурации, способов запуска и сравнение с альтернативами;
  • осветить вопросы безопасности, связанные с паролями и данными браузера;
  • помочь в устранении типичных неполадок.

Что такое opencode

opencode — это открытый кроссплатформенный AI-агент для разработки программного обеспечения. Он работает прямо в терминале, но также доступен как десктопное приложение и расширение для популярных IDE. Он использует большую языковую модель для того, чтобы понимать задачи, планировать действия, редактировать файлы, запускать команды в оболочке и контролировать результат.

Ключевые особенности opencode:

  • работа с любыми языковыми моделями — как облачными (Claude, GPT, Gemini), так и локальными; всего поддерживается более 75 провайдеров;
  • поддержка GitHub Copilot и ChatGPT Plus/Pro через вход в существующие аккаунты;
  • автоматическая загрузка Language Server Protocols (LSP) для корректного понимания кода;
  • параллельные сессии — можно запускать несколько агентов на одном проекте одновременно;
  • шеринг сессий по ссылке для совместной отладки;
  • конфигурация через единый JSON-файл;
  • расширяемость через плагины и MCP-серверы;
  • конфиденциальность по умолчанию — opencode не хранит код и данные пользователя.

Проект публикуется на GitHub под лицензией MIT: репозиторий anomalyco/opencode. По состоянию на 2026 год репозиторий насчитывает около 206 тысяч звёзд, более 950 контрибьюторов и десятки тысяч коммитов, а месячная аудитория пользователей превышает 16 миллионов разработчиков.

Установка opencode на macOS выполняется несколькими способами:

# Установка через официальный скрипт
curl -fsSL https://opencode.ai/install | bash

# Через Homebrew (рекомендуемый способ для macOS)
brew install anomalyco/tap/opencode

# Через npm
npm i -g opencode-ai@latest

Конфигурация opencode по умолчанию находится в нескольких местах, которые имеют разный приоритет:

  • глобальная конфигурация — ~/.config/opencode/opencode.json (например, на macOS и Linux);
  • проектная конфигурация — opencode.json в корне проекта;
  • расширенные каталоги — .opencode/ внутри проекта для агентов, команд, плагинов и навыков.

Все уровни конфигурации объединяются (deep merge) при запуске, при этом проектные настройки переопределяют глобальные для конфликтующих ключей. Подробности о всех возможностях конфигурации описаны в официальной документации: документация по конфигурации opencode.

Одно из главных достоинств opencode — наличие готовых агентов: build (полный доступ, для разработки) и plan (только чтение, для анализа). Агенты можно настраивать, создавать собственные и запрещать или разрешать им конкретные действия — всё это описывается в конфигурации и во фронтматтере файлов агентов.

Со временем пользователи opencode начали подключать к нему всё больше внешних инструментов: серверы перевода и транскрипции, базы данных, генераторы изображений и, конечно, браузерную автоматизацию. Именно для этого и существует MCP.

Что такое MCP (Model Context Protocol)

MCP — Model Context Protocol — это открытый стандарт, разработанный для того, чтобы соединять AI-приложения с внешними системами: файлами, базами данных, сервисами, инструментами и веб-приложениями. Аналогия, которую используют официальные материалы проекта: MCP для AI — это как USB-C для электроники. Вместо того чтобы для каждого сервиса писать собственную интеграцию, один раз реализуется единый интерфейс, и любое AI-приложение, поддерживающее протокол, может подключиться к любому серверу, который его тоже поддерживает.

Архитектура MCP состоит из трёх ключевых ролей:

  • MCP-клиент — AI-приложение (в нашем случае opencode), которое инициирует соединение и вызывает инструменты;
  • MCP-сервер — программа, которая реализует протокол и предоставляет набор инструментов (tools) и данных (resources);
  • инструменты (tools) — именованные функции, которые модель может вызывать; у каждого инструмента есть имя, описание и схема параметров.

Протокол позволяет модели узнавать, какие инструменты доступны, смотреть их описания и схемы аргументов, вызывать их и получать результаты. Причём модель не «угадывает» формат — клиент присылает ей структурированное описание, что радикально снижает количество ошибок.

Через MCP агенты могут:

  • обращаться к локальным файлам и базам данных;
  • отправлять запросы к поисковым системам;
  • генерировать изображения, звук и видео;
  • транскрибировать аудио и видео;
  • управлять браузером;
  • вызывать внутренние корпоративные API;
  • синхронизироваться с планировщиками, почтой и мессенджерами.

Официальный сайт протокола: modelcontextprotocol.io. Протокол поддерживается огромной экосистемой клиентов: Claude, ChatGPT, Visual Studio Code, Cursor, Cline, Codex, Windsurf, Goose, Warp и другими. opencode также является полноценным MCP-клиентом, что делает его совместимым с тысячами уже существующих серверов.

В конфигурации opencode MCP-серверы описываются в секции mcp. Каждый сервер может быть локальным (тип local — запускается через команду) или удалённым (тип remote — подключается по URL). Локальные серверы запускаются с помощью массива command, в который входит имя программы и её аргументы.

Популярные MCP-серверы, которые используются вместе с opencode:

  • Playwright MCP (@playwright/mcp) — браузерная автоматизация;
  • Memory server (@modelcontextprotocol/server-memory) — долговременная память агента в виде графа знаний;
  • Pollinations MCP — генерация изображений, текста, аудио и видео через универсальный шлюз;
  • специализированные серверы для транскрипции видео и работы с YouTube.

Именно Playwright MCP нас интересует в первую очередь, потому что он открывает агенту доступ к настоящему браузеру.

Что такое Playwright MCP

Playwright MCP — это официальный MCP-сервер от команды Microsoft Playwright. Он предоставляет возможности браузерной автоматизации с помощью библиотеки Playwright, но делает их доступными не через обычный API, а через протокол MCP. Сервер позволяет языковым моделям взаимодействовать с веб-страницами через структурированные снимки доступности (accessibility snapshots), обходясь без распознавания скриншотов и без специальных «зрячих» моделей.

Проект живёт в официальном репозитории: microsoft/playwright-mcp. Пакет распространяется через npm как @playwright/mcp. По состоянию на 2026 год репозиторий имеет более 36,9 тысяч звёзд, а пакет — десятки миллионов загрузок и широкую поддержку во всех популярных MCP-клиентах.

Три ключевые особенности Playwright MCP:

  • Быстро и легко — сервер работает через дерево доступности (accessibility tree) страницы, а не через обработку пикселей. Это и быстрее, и намного экономнее по токенам;
  • Удобно для языковых моделей — для работы не нужны vision-модели, всё основано на структурированных данных;
  • Детерминированные инструменты — вызовы инструментов однозначны, в отличие от неоднозначных подходов на скриншотах с координатами.

Требования для запуска минимальны: достаточно Node.js версии 18 и новее. Браузер (по умолчанию Chromium) сервер скачивает сам при первом запуске.

В официальном репозитории Playwright MCP прямо указана конфигурация для подключения к opencode через файл:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "playwright": {
      "type": "local",
      "command": [
        "npx",
        "@playwright/mcp@latest"
      ],
      "enabled": true
    }
  }
}

Эта запись является каноническим способом подключить Playwright MCP к opencode, хотя на практике используется немного другая, более надёжная форма (с флагом -y и указанием @playwright/mcp вместо @playwright/mcp@latest), о которой будет сказано ниже.

Как opencode, MCP и Playwright MCP работают вместе

Чтобы понять, как всё устроено, полезно проследить один полный жизненный цикл запроса. Представим, что пользователь просит агента: «Открой главную страницу opencode.ai, найди заголовок статьи и сделай скриншот».

Цепочка действий выглядит так:

  • Шаг 1. Модель и opencode. Языковая модель без MCP ничего не знает о браузере. Но opencode сообщает модели, что доступен инструмент browser_navigate с параметром url, инструмент browser_snapshot, browser_find и browser_take_screenshot. Модель планирует последовательность вызовов.
  • Шаг 2. opencode → MCP-сервер. opencode (MCP-клиент) отправляет запрос вызова инструмента серверу Playwright MCP по протоколу JSON-RPC (через stdio для локальных серверов).
  • Шаг 3. Playwright MCP управляет браузером. Сервер с помощью Playwright реально открывает браузер, выполняет навигацию, ожидает загрузку страницы.
  • Шаг 4. Обратная связь. Сервер возвращает opencode структурированный результат — например, снимок дерева доступности с текстом и координатами элементов.
  • Шаг 5. Модель принимает решение. Модель анализирует снимок, выбирает нужный элемент, вызывает следующий инструмент для клика или скриншота.
  • Шаг 6. Ответ пользователю. Собранные результаты возвращаются пользователю.

Таким образом, opencode — это «мозг» системы (планирование и рассуждение), MCP — «кабель и разъём» (единый стандарт коммуникации), а Playwright MCP с Playwright — «руки и глаза» (реальное выполнение действий в браузере).

Подготовка к подключению

Перед тем как конфигурировать сервер, нужно убедиться, что окружение готово.

Проверка Node.js

Playwright MCP требует Node.js версии 18 или новее. Проверить версию можно командой:

node --version

Если Node.js не установлен или версия старая, его нужно обновить. На macOS используют Homebrew:

brew install node

Установка opencode

Если opencode ещё не установлен, его ставят так:

curl -fsSL https://opencode.ai/install | bash

или

brew install anomalyco/tap/opencode

Проверка конфигурации

Нужно убедиться, что файл конфигурации существует и открывается для чтения:

ls -la ~/.config/opencode/opencode.json

Если файла нет — его можно создать. В большинстве случаев opencode создаёт глобальный файл конфигурации автоматически при первом запуске.

Ожидание первого запуска

Важно понимать: при первом запуске Playwright MCP (через npx) пакет будет скачан из npm, а затем сервер скачает сам браузер. В зависимости от скорости сети и региона это может занять от тридцати секунд до нескольких минут. Повторные запуски происходят практически мгновенно, так как всё кешируется в системных каталогах:

  • пакет — в кеше npm;
  • браузер — в каталоге ~/Library/Caches/ms-playwright/ на macOS.

Подключение Playwright MCP через файл opencode.json

Теперь — главный раздел статьи: полный процесс подключения.

Где находится файл конфигурации

Глобальная конфигурация opencode лежит в:

~/.config/opencode/opencode.json

Именно в этот файл добавляется блок mcp. Если в файле уже есть секция mcp (например, с другими серверами — memory, pollinations, транскрипция), блок добавляется внутрь неё, а не создаётся заново, иначе предыдущие серверы будут потеряны.

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

Минимальный блок для подключения Playwright MCP выглядит так:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "playwright": {
      "type": "local",
      "command": ["npx", "-y", "@playwright/mcp"],
      "enabled": true,
      "environment": {}
    }
  }
}

Разберём каждое поле:

  • "$schema" — ссылка на JSON-схему конфигурации, чтобы редактор подсвечивал ошибки;
  • "mcp" — корневая секция, в которой описываются все MCP-серверы;
  • "playwright" — произвольное имя сервера (может быть любым, но логично использовать понятное имя);
  • "type": "local" — тип сервера. Локальный — opencode запускает процесс командой и общается с ним по стандартному вводу-выводу (stdio);
  • "command" — массив строк, из которых складывается команда запуска. Обязательно массив, а не строка. Флаг -y говорит npm не задавать вопросов при установке пакета;
  • "enabled": true — сервер активен. Если поставить false, сервер конфигурируется, но не запускается;
  • "environment" — объект с переменными окружения, которые передаются процессу сервера. Пока оставляем пустым.

Отличие от канонической конфигурации из репозитория

В официальном репозитории Playwright MCP указана запись с командой:

"command": ["npx", "@playwright/mcp@latest"]

На практике рабочая конфигурация почти всегда выглядит чуть иначе:

"command": ["npx", "-y", "@playwright/mcp"]

Разница в двух деталях:

  • -y — автоматическое согласие на установку пакета. Без него npx при первом запуске спросит подтверждение, а opencode не умеет отвечать на интерактивные вопросы, и запуск зависнет или упадёт;
  • @playwright/mcp вместо @playwright/mcp@latest — npx при работе с пакетом без указания версии по умолчанию возьмёт последнюю доступную версию. Оба варианта допустимы, но без @latest запись чище. Есть сторонники явной фиксации версии (например, @playwright/mcp@0.0.80) для воспроизводимости, но в большинстве случаев актуальная версия предпочтительнее — в неё попадают исправления и новые инструменты.

Как не потерять уже настроенные серверы

У пользователей opencode часто уже подключены другие MCP-серверы. При добавлении Playwright MCP нужно вписать новый блок внутрь существующей секции mcp. Пример файла с несколькими серверами:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "youtube-transcript": {
      "type": "local",
      "command": ["/path/to/youtube-transcript-mcp"],
      "enabled": true
    },
    "memory": {
      "type": "local",
      "command": ["npx", "-y", "@modelcontextprotocol/server-memory"],
      "enabled": true
    },
    "playwright": {
      "type": "local",
      "command": ["npx", "-y", "@playwright/mcp"],
      "enabled": true,
      "environment": {}
    }
  }
}

Перезапуск opencode

Критическое правило: конфигурация MCP читается один раз при старте opencode и не подгружается на лету. После любого изменения файла opencode.json нужно полностью закрыть и заново запустить opencode. Только после перезапуска новые инструменты станут видны агенту.

Изолированный профиль: конфигурация для безопасности

По умолчанию Playwright MCP работает с постоянным (persistent) профилем браузера — то есть авторизации, cookies и данные сессий сохраняются между запусками на диске. Это удобно, но создаёт риски: если сервер запущен с доступом к профилю, содержащему сохранённые пароли, есть вероятность случайного попадания этих данных в контекст модели.

Для изолированной и безопасной работы используется флаг --isolated, который удерживает профиль браузера в памяти и не сохраняет его на диск. При каждом закрытии браузера всё состояние сессии теряется.

Официальная документация рекомендует именно такой вариант для тестовых сессий. Пример конфигурации с изолированным профилем:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "playwright": {
      "type": "local",
      "command": ["npx", "-y", "@playwright/mcp", "--isolated"],
      "enabled": true,
      "environment": {}
    }
  }
}

Именно эта конфигурация выбрана в этой статье как рекомендованная: она полностью исключает сохранение каких-либо данных браузера на диск и гарантирует, что сервер не «натолкнётся» на личный профиль пользователя.

Постоянный профиль: когда он нужен

Постоянный (persistent) профиль полезен, когда нужно сохранять авторизацию между сессиями — например, для повторяющихся задач, требующих входа в один и тот же сервис. По умолчанию (без флага --isolated) сервер хранит профиль в каталоге вида:

# macOS
~/Library/Caches/ms-playwright/mcp-{channel}-{workspace-hash}

где {workspace-hash} вычисляется из корня рабочей области MCP-клиента. Это означает, что разные проекты автоматически получают разные профили. Однако у постоянного профиля есть ограничение: одновременно с ним может работать только один экземпляр браузера. Для параллельной работы нужно либо запускать каждый дополнительный клиент с флагом --isolated, либо указывать каждому свой --user-data-dir.

Почему изолированный профиль — правильный выбор по умолчанию

Причин несколько:

  • данные не сохраняются на диск — после сессии от профиля не остаётся следов;
  • отсутствует вероятность случайного использования личных аккаунтов и паролей;
  • исключается конфликт нескольких параллельных клиентов, использующих один профиль;
  • предсказуемое поведение: каждая сессия начинается «с чистого листа».

Минус изолированного профиля очевиден: если внутри сессии произошла авторизация, то после закрытия браузера авторизация теряется, и в следующий раз её нужно будет выполнять заново. Для большинства задач автоматизации это не критично, а для безопасности — скорее бонус.

Какие инструменты появляются после подключения

После подключения Playwright MCP в распоряжении агента появляется большой набор инструментов с префиксом browser_. Официальная документация репозитория описывает их детально. Ниже — полный обзор по категориям.

Основные инструменты навигации и просмотра

  • browser_navigate — навигация по URL. Принимает url и открывает страницу;
  • browser_snapshot — снимок страницы через дерево доступности (accessibility snapshot). Возвращает структурированный текст, по которому модель выбирает элементы. Это, по сути, «глаза» агента;
  • browser_navigate_back — возврат к предыдущей странице в истории;
  • browser_tabs — управление вкладками: список, создание, закрытие, выбор;
  • browser_close — закрытие вкладки или всего браузера.

Инструменты взаимодействия с DOM

  • browser_click — клик по элементу (левая/правая/средняя кнопка, двойной клик, модификаторы);
  • browser_type — ввод текста в поле (поддерживает посимвольный ввод через slowly и отправку через submit);
  • browser_fill_form — заполнение сразу нескольких полей формы за один вызов;
  • browser_hover — наведение курсора на элемент;
  • browser_drag — перетаскивание между двумя элементами;
  • browser_drop — «перетаскивание» файлов или данных MIME-типа на элемент;
  • browser_select_option — выбор значения в выпадающем списке (select);
  • browser_press_key — нажатие клавиш клавиатуры;
  • browser_handle_dialog — обработка модальных диалогов (alert, confirm, prompt);
  • browser_file_upload — загрузка одного или нескольких файлов;
  • browser_resize — изменение размера окна браузера;
  • browser_find — поиск текста или регулярного выражения в снимке страницы без получения всего дерева целиком — экономит токены.

Инструменты извлечения данных и диагностики

  • browser_evaluate — выполнение произвольного JavaScript на странице и возврат результата. Фактически даёт полный контроль над страницей;
  • browser_run_code_unsafe — выполнение произвольного кода Playwright в процессе сервера. Помечен как небезопасный (RCE-эквивалент) и должен использоваться осторожно;
  • browser_console_messages — получить консольные сообщения страницы;
  • browser_network_requests — список сетевых запросов страницы;
  • browser_network_request — подробности одного запроса (заголовки, тело);
  • browser_wait_for — ожидание появления или исчезновения текста, либо ожидание заданного времени.

Изображения и запись

  • browser_take_screenshot — скриншот страницы, области или элемента. Поддерживает fullPage (полная страница), scale (CSS или device pixels), тип файла png/jpeg/webp;
  • browser_start_video / browser_stop_video — запись видео действий;
  • browser_start_tracing / browser_stop_tracing — запись трассировки (профайл производительности);
  • browser_start_recording / browser_stop_recording — запись действий пользователя в код Playwright.

Опциональные возможности (caps)

Дополнительные наборы включаются флагом --caps: vision, pdf, config, network, storage, devtools.

Сетевые инструменты (network):

  • browser_route — мокинг сетевых запросов: можно возвращать заранее заданный ответ для URL-паттерна;
  • browser_route_list — список активных маршрутов;
  • browser_unroute — удаление маршрутов;
  • browser_network_state_set — переключение браузера в режим offline/online.

Инструменты хранилища (storage):

  • набор browser_cookie_* — получение, установка, удаление cookies;
  • набор browser_localstorage_* — работа с localStorage;
  • набор browser_sessionstorage_* — работа с sessionStorage;
  • browser_set_storage_state — восстановление состояния из файла;
  • browser_storage_state — сохранение состояния (cookies, localStorage) в файл.

Инструменты DevTools (devtools):

  • browser_highlight — подсветка элемента на странице;
  • browser_hide_highlight — снятие подсветки;
  • browser_annotate — открытие Playwright Dashboard для ручной разметки страницы;
  • browser_resume — продолжение выполнения после паузы.

Возможности PDF:

  • создание и манипуляция PDF-файлами, связанные со страницей.

Все инструменты делятся также по признаку «только чтение» (read-only), что важно для политик безопасности opencode: можно разрешить чтение без права модификации страницы. Например, browser_snapshot и browser_take_screenshot — read-only инструменты, а browser_click и browser_type — изменяющие состояние страницы.

Способы запуска Playwright MCP

Помимо классического локального запуска через npx, Playwright MCP поддерживает несколько других способов подключения.

Локальный запуск через stdio

Это стандартный способ, который описывался выше: opencode запускает процесс командой npx -y @playwright/mcp и общается через стандартный ввод-вывод. Способ по умолчанию, работает на любом MCP-клиенте.

Удалённый сервер по HTTP/SSE

Можно запустить Playwright MCP в виде отдельного сервера с портом и подключаться к нему по HTTP. Это удобно для окружений без дисплея, серверов и контейнеров:

npx @playwright/mcp --port 8931

После этого в конфигурации указывается удалённый endpoint:

{
  "mcp": {
    "playwright": {
      "type": "remote",
      "url": "http://localhost:8931/mcp",
      "enabled": true
    }
  }
}

Такой вариант позволяет держать браузер в одном процессе и подключать к нему несколько клиентов.

Docker

Для контейнерных окружений доступен официальный образ:

mcr.microsoft.com/playwright/mcp

Запуск как одноразового процесса (обратите внимание: Docker-реализация на текущий момент поддерживает только headless Chromium):

{
  "mcp": {
    "playwright": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "-i",
        "--rm",
        "--init",
        "--pull=always",
        "mcr.microsoft.com/playwright/mcp"
      ],
      "enabled": true
    }
  }
}

Подключение к существующему браузеру

Два режима работы с уже запущенным браузером:

  • --cdp-endpoint — подключение через Chrome DevTools Protocol к существующему экземпляру Chromium;
  • browser extension mode (--extension) — расширение Chrome/Edge, которое подключает сервер к текущим вкладкам браузера со всеми сессиями и состоянием. Подходит для задач, где нужно использовать уже авторизованные аккаунты. Требует установки расширения Playwright.

Программное использование

Пакет можно использовать программно через createConnection из @playwright/mcp, создавая сервер внутри собственного Node.js-приложения. Это позволяет встроить браузерную автоматизацию прямо в свои инструменты разработки.

Параметры конфигурации Playwright MCP

Playwright MCP поддерживает множество параметров, которые можно передать через аргументы командной строки, переменные окружения (с префиксом PLAYWRIGHT_MCP_) или через JSON-файл конфигурации (--config).

Группа «Браузер»

  • --browser (chrome, firefox, webkit, msedge) — выбор движка;
  • --headless — запуск в фоновом (headless) режиме, без окна. По умолчанию браузер запускается с окном;
  • --device — эмуляция устройства, например "iPhone 15";
  • --mobile — эмуляция мобильного устройства (легче страница — меньше токенов);
  • --viewport-size — размер окна, например "1280x720";
  • --user-agent — подмена User-Agent;
  • --user-data-dir — путь к каталогу данных браузера (по умолчанию создаётся временный);
  • --isolated — профиль только в памяти, без сохранения на диск;
  • --executable-path — путь к исполняемому файлу браузера;
  • --ignore-https-errors — игнорирование ошибок HTTPS;
  • --no-sandbox / --sandbox — управление песочницей процессов.

Группа «Поведение и таймауты»

  • --timeout-action — таймаут действия (по умолчанию 5000 мс);
  • --timeout-navigation — таймаут навигации (по умолчанию 60000 мс);
  • --timeout-settle — ожидание стабилизации страницы после действия (по умолчанию 500 мс);
  • --test-id-attribute — атрибут для определение test id (по умолчанию data-testid);
  • --console-level — уровень получаемых консольных сообщений;
  • --grant-permissions — выдача разрешений браузерному контексту (геолокация, буфер обмена и т.п.);
  • --snapshot-mode — режим снимков (full/none);
  • --snapshot-boxes — добавление координат элементов в снимки;
  • --output-dir — каталог для выходных файлов;
  • --image-responses — разрешить или скрывать ответы-изображения.

Группа «Сеть и сервер»

  • --host — адрес для привязки сервера (по умолчанию localhost);
  • --port — порт для SSE-транспорта;
  • --allowed-hosts — список хостов, для которых разрешено обслуживание;
  • --allowed-origins — список доверенных origin для браузера;
  • --blocked-origins — список блокируемых origin;
  • --proxy-server — указание прокси-сервера;
  • --proxy-bypass — список доменов в обход прокси;
  • --block-service-workers — блокировка service workers;
  • --cdp-endpoint — CDP endpoint для подключения к существующему браузеру.

Группа «Файлы и секреты»

  • --config — путь к JSON-файлу конфигурации;
  • --secrets — путь к файлу с секретами в формате dotenv (значения секретов заменяются в ответах инструментов, чтобы сенситивные данные не попадали в контекст модели);
  • --init-page — TypeScript-файл, выполняемый на объекте страницы при инициализации;
  • --init-script — JavaScript-скрипт, подключаемый до выполнения скриптов страницы;
  • --storage-state — файл с состоянием хранилища (cookies, localStorage) для изолированных сессий;
  • --save-session — сохранение сессии в каталог выходных файлов;
  • --allow-unrestricted-file-access — разрешить доступ к файлам вне рабочих корней (по умолчанию доступ ограничен рабочей областью).

Важно помнить: сервер Playwright MCP — это не граница безопасности. Официальная документация прямо предупреждает, что настройки вроде allowed-origins и unrestricted-file-access — это удобные предохранители, а не барьеры; настоящую защиту должен обеспечивать клиент (opencode) своими правами доступа.

Практические примеры использования

Рассмотрим несколько реальных сценариев, которые становятся возможны после подключения.

Пример 1. Проверка доступности сайта

Можно попросить агента открыть сайт и проверить, что он отвечает. Агент вызовет browser_navigate, получит заголовок страницы и вернёт его пользователю. Это простейшая проверка работоспособности связки.

Пример 2. Скриншот страницы

Запрос «сделай скриншот главной страницы» приводит к последовательности:

  • browser_navigate с URL;
  • browser_wait_for с ожиданием загрузки (или сразу browser_take_screenshot после навигации);
  • browser_take_screenshot с параметром fullPage (полная страница) или без него.

Скриншот сохраняется в файл, а агенту возвращается путь к нему. Стоит помнить, что модель не может выполнить действие на основе скриншота — для выбора элементов нужен browser_snapshot (дерево доступности). Это прямо указано в описании инструмента browser_take_screenshot.

Пример 3. Автоматизация поиска

Запрос «найди последние новости о MCP на примере новостного сайта» заставит агента:

  • открыть поисковик или новостной сайт через browser_navigate;
  • заполнить поле поиска через browser_type;
  • нажать Enter через browser_press_key с key "Enter";
  • дождаться результатов через browser_wait_for;
  • прочитать выдачу через browser_snapshot или browser_find;
  • вернуть найденные заголовки и ссылки.

Пример 4. Заполнение форм

Для форм с несколькими полями используется browser_fill_form — за один вызов передаётся массив полей с их значениями. Это эффективнее, чем серия одиночных вызовов browser_type.

Пример 5. Анализ сетевых запросов

При изучении одностраничных приложений полезны browser_network_requests и browser_network_request: можно посмотреть, какие API-запросы делает страница, изучить их заголовки и тела ответов. Это незаменимо для реверс-инжиниринга публичных API и отладки.

Пример 6. Выполнение JavaScript на странице

browser_evaluate выполняет произвольный код в контексте страницы. Например, можно извлечь все ссылки, посчитать высоту документа, получить состояние какого-либо объекта. Это даёт практически безграничный контроль над страницей без необходимости визуального поиска элементов.

Пример 7. Мокирование API для тестов

С инструментами browser_route поставщик может перехватывать запросы к конкретным эндпоинтам и возвращать заданные ответы. Это превращает Playwright MCP в удобный инструмент для тестирования фронтенда в изоляции от бэкенда.

Пример 8. Эмуляция мобильного устройства

С параметром --device "iPhone 15" или --mobile страница открывается в эмуляции мобильного браузера. Это позволяет проверять, как сайт выглядит и работает на мобильных устройствах, что ценно для QA.

Таблица инструментов одной строкой

Основные инструменты Playwright MCP
Инструмент Назначение Тип
browser_navigate Открыть страницу по URL Запись
browser_snapshot Получить снимок дерева доступности Чтение
browser_find Найти текст в снимке без полного дерева Чтение
browser_click Клик по элементу Запись
browser_type Ввод текста в поле Запись
browser_fill_form Заполнение нескольких полей формы Запись
browser_hover Наведение курсора Запись
browser_select_option Выбор значения в списке Запись
browser_press_key Нажатие клавиш Запись
browser_handle_dialog Ответ на alert/confirm/prompt Запись
browser_evaluate Выполнение JavaScript Запись
browser_take_screenshot Скриншот страницы/элемента Чтение
browser_wait_for Ожидание события или времени Запись
browser_tabs Управление вкладками Запись
browser_network_requests Список сетевых запросов Чтение
browser_console_messages Консольные сообщения страницы Чтение
browser_route Перехват/мокинг сетевых запросов (ops) Запись
browser_cookie_list Список cookies (ops) Чтение

Набор доступных инструментов зависит от того, какие capabilities включены через --caps. По умолчанию доступен основной набор (core); дополнительные (config, network, storage, devtools, pdf, vision) подключаются явно.

Безопасность: пароли, профили и данные

Вопрос безопасности — отдельная и очень важная тема. Разберём её подробно, как и обещает название статьи.

Официальные гарантии

Playwright MCP — это официальный пакет Microsoft, распространяемый через npm. Это не сторонний скрипт с неизвестным содержимым, а компонент большой экосистемы, который используют тысячи компаний. Пакет поставляется из официального реестра, а его исходный код открыт и рецензируется сообществом на GitHub.

Почему вопрос о паролях возникает не случайно

Любой инструмент, который управляет браузером, по определению имеет дело с данными аутентификации. Понимание того, где могут утечь пароли, критически важно.

Разберём маршрут, который проходит информация в цепочке opencode → MCP → браузер:

  • пользователь просит агента авторизоваться на сайте;
  • агент (модель) вызывает инструмент browser_type и передаёт логин и пароль в параметрах;
  • opencode отправляет этот вызов MCP-серверу;
  • сервер печатает данные в реальном браузере;
  • страница отправляет запросы сайту.

Главный вывод: пароль, который агент печатает в браузере, перед этим находится в контексте языковой модели, а контекст может обрабатываться внешним провайдером модели. Поэтому категорически не рекомендуется вводить через агента настоящие пароли к критически важным аккаунтам. Если задача требует аутентификации, лучше использовать временные аккаунты, одноразовые пароли или сервисные ключи с ограниченными правами.

Что реально отправляется в модель

MCP-сервер сам по себе не отправляет пароли наружу — он работает локально. Опасность возникает только тогда, когда пароль сам передаётся в параметрах инструмента от клиента к серверу, а значит, эти параметры формирует модель, которая может их «запомнить» и потенциально передать провайдеру. Таким образом, ответственность за то, какие секреты попадают в контекст модели, лежит на пользователе.

Риски работы с постоянным профилем

Профиль браузера — отдельная зона риска. Если сервер запущен с постоянным профилем (по умолчанию) и в этом профиле сохранены пароли и cookies, существует вероятность, что при обходе страниц модель «увидит» эти данные через снимки (snapshot) или скрипты. Особенно это актуально при продолжении сессии с `--user-data-dir`, указывающим на каталог с личными данными.

Безопасный подход — изолированный профиль (--isolated), который:

  • создаёт профиль только в памяти;
  • не сохраняет данные на диск;
  • исключает доступ к личным профилям и сохранённым паролям;
  • удаляет всё состояние при закрытии браузера.

Механизм замены секретов (--secrets)

Для снижения риска случайной передачи секретов в ответах инструментов существует файл секретов в формате dotenv. Значения из этого файла заменяются в ответах сервера, чтобы модель не могла случайно увидеть сенситивные данные. Важно понимать: это удобство, а не защита — данные, которые модель сама печатает в браузере, через этот механизм не фильтруются. Официальная документация прямо это предупреждает.

Контроль прав в opencode

opencode позволяет задавать правила разрешений для инструментов. Можно, например, разрешить только read-only инструменты браузера:

{
  "permission": {
    "browser_click": "ask",
    "browser_type": "ask",
    "browser_snapshot": "allow",
    "browser_take_screenshot": "allow"
  }
}

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

Nightmare-сценарий: что НЕ делать

  • не указывать --user-data-dir на каталог реального профиля браузера пользователя;
  • не вводить через агента реальные пароли к сервисам;
  • не давать агенту полный unrestricted file access без необходимости;
  • не запускать --extension браузерное расширение с доступом ко всем вкладкам в ненадёжных окружениях;
  • не игнорировать флаг --isolated, если изоляция нужна.

Итоговая оценка безопасности

Оценка рисков Playwright MCP
Сценарий Оценка
Официальный пакет Microsoft Безопасно
Пакет скачивается из npm и проверяется контрольной суммой Безопасно
Сервер передаёт пароли наружу сам по себе Нет — работает локально
Пароли попадают в контекст модели, если их ввести через агента Риск существует
Постоянный профиль с личными данными Риск утечки данных профиля
Изолированный профиль --isolated Безопасно, рекомендуется
Файл секретов --secrets Снижает риск, но не заменяет осторожность

Проверка подключения: как убедиться, что всё работает

После добавления сервера и перезапуска opencode стоит провести простую проверку.

Проверка через интерфейс opencode

После перезапуска в списке доступных инструментов должны появиться инструменты с префиксом browser_ (browser_navigate, browser_snapshot, browser_take_screenshot и другие). Если они не появились — напоминаем: конфигурация читается только при старте, проверьте перезапуск.

Быстрый тест навигации

Попросите агента открыть простую страницу, например example.com, и вернуть её заголовок. Ожидаемый результат: браузер открывается, страница загружается, заголовок «Example Domain» возвращается в ответ.

Тест скриншота

Запросите скриншот страницы. Появится файл изображения. Важно: сами по себе изображения можно просмотреть только вне модели (модель может и не поддерживать чтение изображений), но факт создания файла говорит, что цепочка работает.

Тест DOM-снимка

Запросите снимок страницы (browser_snapshot). Текстовое описание страницы — лучшее подтверждение того, что A-агент видит структуру DOM.

Тест JavaScript

Через browser_evaluate можно запросить выполнение простого выражения (например, вернуть document.title) и проверить, что возвращается корректный результат.

Важные наблюдения при первом запуске:

  • если браузер запускается с окном (по умолчанию, подобно настоящему окну), это нормально;
  • первый запуск медленнее — скачивается пакет и браузер;
  • headless-режим (--headless) сделает работу незаметной, но без окна.

Сравнение Playwright MCP с альтернативами

Задача браузерной автоматизации решается и другими способами. Сравним.

Прямое использование Playwright/Puppeteer/Selenium

Библиотеки Playwright, Puppeteer и Selenium позволяют писать тесты и скрипты на обычных языках программирования. Минус для AI-агентов: это исключительно программный подход, и агент должен писать, запускать и отлаживать код самостоятельно. Связка через MCP делает то же самое простыми вызовами инструментов, без написания кода.

Screenshot-based инструменты (например, OmniParser, browser-use)

Некоторые инструменты снимают скриншоты и передают их vision-моделям. Такие решения дороже (vision-модель стоит токенов), медленнее и часто менее точны: координаты пикселей неточны, а текст теряется. Playwright MCP использует дерево доступности — структурированные данные, которые модель понимает сразу.

Встроенный агент в IDE

Расширения Codex, Cursor и другие имеют собственные браузерные агенты. Они удобны внутри одной IDE, но не универсальны. MCP-подход работает во всех клиентах одновременно, а это большая гибкость.

Ключевые плюсы Playwright MCP

  • официальный проект Microsoft с открытым кодом;
  • работает во всех популярных MCP-клиентах;
  • не требует vision-модели и не передаёт лишние токены;
  • детерминированные инструменты;
  • богатый API: скриншоты, видео, трассировка, сетевой мокинг, эмуляция устройств;
  • глубокие возможности изоляции профилей.

Ограничения Playwright MCP

  • взаимодействие только через общедоступный снимок доступности;
  • настоящие «глаза» (визуальное распознавание) недоступны без vision-моделей;
  • работа ограничена возможностями браузера и DOM;
  • для простых высоконагруженных сценариев CLI+SKILLS может быть эффективнее по токенам (это прямо отмечено в документации проекта: для современных агентов CLI-подход с SKILLS экономит токены, тогда как MCP лучше для исследовательских процессов с продолжительным контекстом).

Постоянный профиль против изолированного: сравнительная таблица

Постоянный vs изолированный профиль
Критерий Постоянный --isolated
Сохранение авторизаций между сессиями Да Нет
Данные на диске Да Нет
Использование личного профиля Возможно (риск) Исключено
Одновременные клиенты на одном профиле Нет (конфликт) Да
Когда выбирать Долгие рабочие процессы, авторизация Тесты, изоляция, публичные окружения

Устранение неполадок

Разберём типичные проблемы и их решение.

Сервер не запускается или падает при старте

Причины и решения:

  • npx не установлен — проверить: входит ли npx в поставку Node.js. Если Node.js установлен, npx есть;
  • нет сети или закрыт доступ к npm — проверить доступность npm: npx -y @playwright/mcp вручную;
  • нет Node.js 18+ — обновить Node.js;
  • интерактивный запрос npx — добавить флаг -y в команду.

Браузер не запускается

  • установить системные зависимости браузера (на macOS достаточно обычно);
  • проверить, что каталоги Playwright доступны для записи;
  • если нет графического окружения — использовать --headless.

Инструменты не появились после подключения

  • перезапустить opencode полностью — конфигурация не подгружается на лету;
  • проверить, что блок mcp вставлен внутрь существующей секции, а не заменил её;
  • проверить синтаксис JSON — ошибка в файле приведёт к проблемам при старте;
  • проверить логи opencode (команда opencode с --log-level DEBUG или через переменные окружения).

Медленная работа

  • первый запуск всегда медленнее (скачивание);
  • использование --headless ускоряет рендеринг;
  • --device/--mobile уменьшают страницу и экономят токены;
  • запрет загрузки тяжёлых ресурсов через browser_route.

Страница не загружается / таймауты

  • увеличить --timeout-navigation;
  • проверить сеть и наличие доступа к сайту;
  • при самоподписанных сертификатах использовать --ignore-https-errors (осторожно).

Съедается слишком много токенов

  • использовать browser_find вместо полного browser_snapshot;
  • ограничить depth в browser_snapshot;
  • использовать --snapshot-mode none там, где снимки не нужны;
  • отключить ненужные capabilities.

Конфликты нескольких клиентов

  • использовать --isolated или разные --user-data-dir для параллельных сессий.

Лучшие практики

Итоговый набор рекомендаций по работе с Playwright MCP в opencode:

  • всегда использовать изолированный профиль (--isolated) для тестовых и разовых задач;
  • не вводить через агента реальные пароли; использовать временные учётные данные;
  • задавать права доступа в opencode, разрешая только нужные инструменты;
  • для снижения расхода токенов применять browser_find, --mobile, ограничения depth;
  • следить за первым запуском и дать ему время скачать пакет и браузер;
  • при долгой работе с авторизацией использовать постоянный профиль, но с отдельным --user-data-dir, а не с личным каталогом браузера;
  • проверять обновления пакета @playwright/mcp, так как инструменты и флаги активно развиваются;
  • использовать зафиксированные версии в командных скриптах и CI для воспроизводимости;
  • перед запуском в публичных окружениях подключать Docker-вариант с headless Chromium;
  • регулярно чистить временные профили и выходные директории.

Выводы и место Playwright MCP в экосистеме opencode

Playwright MCP закрывает важнейший пробел в возможностях AI-агентов — реальное взаимодействие с вебом. Подключение занимает несколько минут, требует лишь правильно составленного блока в opencode.json и перезапуска. После этого агент получает способность открывать сайты, читать их структуру, кликать, вводить текст, делать скриншоты, анализировать сетевой трафик и выполнять произвольный JavaScript.

В 2026 году связка opencode + Playwright MCP стала одним из самых популярных инструментов категорской браузерной автоматизации благодаря:

  • открытости и надёжности (Microsoft, MIT-лицензия, большое сообщество);
  • эффективности (дерево доступности вместо vision-моделей);
  • широкому набору инструментов;
  • глубокой настройке изоляции и безопасности.

Отдельно подчёркивается важность осознанной работы с безопасностью: профильные данные и пароли требуют осторожного обращения. Изолированный профиль — правильный выбор по умолчанию, а полный контроль прав в opencode позволяет использовать браузер безопасно.

Вместе с другими MCP-серверами (memory, pollinations, транскрипция) Playwright MCP превращает opencode в по-настоящему универсального агента, который не только пишет код, но и проверяет его в реальном окружении, автоматизирует рутину и взаимодействует с веб-сервисами так же естественно, как человек.

Резюме

  • opencode — открытый AI-агент для разработки, работающий в терминале, IDE и настольном приложении;
  • MCP — открытый стандарт подключения внешних инструментов к AI-агентам, аналог «USB-C для ИИ»;
  • Playwright MCP — официальный MCP-сервер Microsoft для браузерной автоматизации через дерево доступности;
  • подключение выполняется добавлением блока mcp в файл ~/.config/opencode/opencode.json с командой npx -y @playwright/mcp;
  • после изменения конфигурации обязателен полный перезапуск opencode;
  • в распоряжении агента появляются десятки инструментов browser_*: навигация, клики, ввод текста, скриншоты, evaluate, сетевые запросы и многое другое;
  • для безопасной работы рекомендуется изолированный профиль (--isolated), который не сохраняет данные на диск;
  • безопасность стоит на первом месте: настоящие пароли через агента вводить не рекомендуется, а права инструментов настраиваются в opencode;
  • сервер поддерживает локальный запуск, удалённый HTTP, Docker и подключение к существующему браузеру;
  • проверка подключения выполняется простой навигацией, скриншотом и снимком DOM;
  • Playwright MCP эффективнее screenshot-подходов, поскольку работает со структурированными данными без vision-моделей.

Ссылки

×
Реклама
← В главную
ИКС 88x31 - Visitor counter