Playwright MCP даёт AI-агенту настоящий браузер, которым он управляет: открывает страницу, читает её, кликает, вводит текст, заполняет формы, делает скриншоты. Это собственный сервер Microsoft, построенный на той же библиотеке Playwright, на которой работает значительная часть end-to-end тестов в вебе, и с 39 614 звёзд на GitHub он входит в число самых устанавливаемых MCP server.
При этом он всё ещё на версии 0.0.x и сильно изменился. Флаги, на которые опираются туториалы 2025 года, исчезли, инструменты теперь сгруппированы за --caps, а в 0.0.85 навигация возвращает путь к файлу вместо дерева страницы. Мы прогнали версию 0.0.85, опубликованную 9 ноября 2026 года, через CLI MCP Inspector на macOS 14 ноября 2026 года и посчитали, что она на самом деле предоставляет.
Установка
Нужны Node.js и MCP-клиент. В README и npm указан Node 18 или новее; на playwright.dev — 20 или новее. Берите 20.
Claude Code
claude mcp add playwright npx @playwright/mcp@latest
Codex
codex mcp add playwright npx "@playwright/mcp@latest"
VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'
Claude Desktop, Cursor, Windsurf и большинство остальных принимают тот же JSON. В Cursor он задаётся в Settings, MCP; в Claude Desktop — в claude_desktop_config.json:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
Флаги добавляются в args после имени пакета, например ["@playwright/mcp@latest", "--headless", "--isolated"]. Наш конструктор конфигурации сгенерирует запись для каждого клиента, если вы используете несколько.
Первый запрос, который предлагает playwright.dev, — хорошая проверка: "Navigate to https://demo.playwright.dev/todomvc and add a few todo items." Откроется окно браузера, потому что Playwright MCP по умолчанию запускается с интерфейсом, и вы сможете наблюдать за его работой.
Как он видит страницу
Playwright MCP по умолчанию не отправляет модели скриншоты. Вместо этого он передаёт accessibility-снимок Playwright: YAML-дерево ролей, имён и текста, где каждый элемент, с которым агент может взаимодействовать, помечен ref вида [ref=e5]. Модель читает дерево, выбирает ref и вызывает browser_click с ним. Поэтому это работает с моделями без поддержки зрения и клики попадают в нужный элемент, даже когда вёрстка сдвигается.
Снимки бывают большими. Мы открыли три страницы на версии 0.0.85 и измерили сохранённые файлы снимков:
| Страница | Размер снимка | Ref элементов |
|---|---|---|
| demo.playwright.dev/todomvc | 690 байт | 12 |
| Страница репозитория на GitHub (microsoft/playwright-mcp) | 62 785 байт | 807 |
| Статья в Википедии про MCP | 88 162 байт | 721 |
Та же страница GitHub с --mobile |
54 053 байт | 683 |
Реальная страница разрастается до десятков тысяч символов, и агент, который делает снимок после каждого клика, быстро заполняет свой контекст. Совет из README о том, что мобильные страницы легче, подтвердился на GitHub, где --mobile уменьшил снимок на 14%. Наш мобильный прогон Википедии перенаправился на мобильный сайт и был снят до загрузки, поэтому мы его не учли.
В 0.0.85 помогают две вещи. Во-первых, browser_navigate больше не вставляет всё дерево в ответ. Он выполняет вызов page.goto и возвращает URL, заголовок и ссылку на файл в .playwright-mcp/ в рабочей директории. Агент читает этот файл или вызывает browser_snapshot, когда ему это нужно. Добавьте .playwright-mcp/ в .gitignore, потому что эти файлы накапливаются в проекте. Во-вторых, browser_find ищет в снимке текст или шаблон и возвращает только совпадения, что гораздо дешевле, чем читать 800 ref, чтобы найти одну кнопку.
Инструменты в цифрах
Без дополнительных опций MCP Inspector показал 25 инструментов. Затем мы запустили сервер по одному разу для каждого значения --caps и снова посчитали. Все семь значений были приняты:
| Группа | Как включить | Добавлено инструментов | Что они делают |
|---|---|---|---|
| Core | включена всегда | 24 | Навигация, снимок, поиск, клик, ввод, заполнение форм, перетаскивание, загрузка, диалоги, консоль, журнал сети, скриншот, evaluate, изменение размера |
| Tabs | включена всегда | 1 | browser_tabs: список, открытие, закрытие, выбор |
| Vision | --caps=vision |
6 | Мышь по координатам: клик, перетаскивание, перемещение, колесо |
| DevTools | --caps=devtools |
13 | Трассировки, запись видео, подсветка и аннотирование элементов |
| Storage | --caps=storage |
17 | Cookies, localStorage, sessionStorage, сохранение и загрузка состояния хранилища |
| Testing | --caps=testing |
5 | Генерация локаторов, проверка текста, значений и видимости |
| Network | --caps=network |
4 | Переход в офлайн, маршрутизация и мокирование запросов |
--caps=pdf |
1 | Сохранение страницы в PDF | |
| Config | --caps=config |
1 | Чтение итоговой конфигурации |
Группы объединяются через запятую, например --caps=vision,devtools. Каждая группа — это дополнительные определения инструментов в каждом запросе, поэтому включайте только то, что нужно для задачи.
Один инструмент из набора по умолчанию заслуживает внимания перед установкой: browser_run_code_unsafe. В README его называют «эквивалентом RCE», потому что он выполняет произвольный JavaScript в процессе сервера Playwright на вашей машине, а не в странице. Он входит в список по умолчанию, который мы получили. Если ваш клиент позволяет отключать отдельные инструменты, именно этот стоит выключить, если он вам не нужен.
Флаги, которые действительно важны
В README описано больше пятидесяти опций, каждую из которых также можно задать через переменную окружения PLAYWRIGHT_MCP_. Вот те, что влияют на повседневную работу:
| Флаг | Когда использовать |
|---|---|
--headless |
Вам не нужно смотреть за процессом. По умолчанию браузер запускается с интерфейсом |
--isolated |
Каждая сессия должна начинаться с чистого листа. Профиль хранится в памяти и исчезает при закрытии браузера |
--user-data-dir <path> |
Вы хотите разместить постоянный профиль в выбранном месте |
--storage-state <file> |
Нужна изолированная сессия, которая стартует уже авторизованной, из сохранённого файла cookies |
--browser <name> |
Вам нужен firefox, webkit, msedge или Chrome вместо встроенного Chromium |
--device "iPhone 15" или --mobile |
Вы тестируете мобильные раскладки или хотите уменьшить размер снимков |
--extension |
Агент должен работать с вкладками в вашем собственном Chrome или Edge, где вы уже авторизованы |
--port 8931 |
Сервер должен работать как HTTP-сервис по адресу /mcp, а не запускаться клиентом |
--allowed-origins, --blocked-origins |
Вы хотите ограничить агента определёнными сайтами. Значения разделяются точкой с запятой |
--output-dir <path> |
Скриншоты и снимки должны сохраняться не в рабочую директорию |
--idle-timeout <ms> |
Браузер должен закрываться после простоя. По умолчанию в headless-режиме это один час |
--secrets <file> |
Значения из dotenv-файла должны маскироваться в выводе инструментов |
Несколько флагов из старых руководств больше не существуют. --vision стал --caps=vision. --save-trace и --save-video стали инструментами под --caps=devtools, так что агент сам запускает и останавливает трассировку или запись, когда они нужны.
Используйте свой браузер через расширение
Playwright Extension из Chrome Web Store позволяет серверу управлять вкладками в вашем Chrome или Edge с вашими логинами. Запустите сервер с --extension. При первом подключении откроется страница, где нужно подтвердить доступ и выбрать, какими вкладками или группой вкладок может управлять клиент; если ничего не выбрать, он получит новую пустую вкладку. Каждый клиент владеет своими вкладками и не может трогать чужие. Он может читать cookies, но не может менять состояние браузера целиком.
Чтобы пропустить страницу подтверждения, задайте PLAYWRIGHT_MCP_EXTENSION_TOKEN равным токену со страницы Manage clients в расширении. Делайте так только для клиента, которому доверяете как себе, потому что теперь он действует от вашего имени на всех сайтах, где вы авторизованы.
Запуск как сервиса или в Docker
npx @playwright/mcp@latest --port 8931 запускает долгоживущий сервер, и клиенты подключаются к http://localhost:8931/mcp по URL. README рекомендует это для браузеров с интерфейсом на машинах без дисплея и для рабочих процессов IDE. По умолчанию сервер слушает localhost, и README не описывает аутентификацию для этой точки входа, поэтому не открывайте её через --host 0.0.0.0 в общей сети.
Microsoft также публикует mcr.microsoft.com/playwright/mcp. Он поддерживает только headless Chromium:
{
"mcpServers": {
"playwright": {
"command": "docker",
"args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
}
}
}
Playwright MCP, Chrome DevTools MCP или CLI
Три инструмента сейчас претендуют на роль «пусть агент поработает с браузером», и каждый создан под свою задачу.
| Playwright MCP | Chrome DevTools MCP | Playwright CLI | |
|---|---|---|---|
| Пакет | @playwright/mcp 0.0.85 |
chrome-devtools-mcp 1.13.0 |
@playwright/cli 0.1.24 |
| Звёзды | 39 614 | 55 670 | 15 186 |
| Движок | Playwright | Puppeteer | Playwright |
| Браузеры | Chromium, Chrome, Edge, Firefox, WebKit | Официально Chrome и Chrome for Testing | Chrome, Firefox, WebKit, Edge |
| Сильная сторона | Действия на страницах, сценарии в стиле тестов | Трассировки производительности, Core Web Vitals, Lighthouse, память, консоль с source maps | Та же автоматизация при меньшем расходе контекста |
| Телеметрия | В README об этом ничего | По умолчанию отправляет статистику использования в Google; --no-usage-statistics отключает это |
Chrome DevTools MCP перечисляет 63 инструмента в 13 категориях. Его инструменты производительности записывают трассировку, сообщают LCP, INP и CLS и раскладывают инсайт на составляющие; ещё он запускает Lighthouse и снимает и сравнивает снимки кучи. Это работа с DevTools, которую Playwright MCP на себя не берёт. Обратите внимание на настройки по умолчанию: он отправляет статистику использования в Google, а его инструменты производительности могут отправлять URL трассировок в CrUX API Google, если не передать --no-performance-crux.
Рекомендация самой команды Playwright насчёт её CLI однозначна. CLI со skills «экономнее по токенам», потому что агент выполняет короткие shell-команды и читает снимки из файлов, а не загружает схемы инструментов и полные деревья в контекст. MCP по-прежнему лучше подходит для исследовательской автоматизации, самовосстанавливающихся тестов и долгих автономных прогонов, где сохранять состояние браузера между шагами важнее, чем токены.
Для тестовых наборов есть четвёртый вариант: тестовые агенты Playwright. npx playwright init-agents --loop=claude настраивает планировщика, который исследует ваше приложение и пишет план тестов, генератора, который превращает план в тесты Playwright, и целителя, который перезапускает падающие тесты и правит их. Под капотом они используют инструменты Playwright MCP.
Наша короткая версия: пишите и чините тесты с помощью тестовых агентов, дайте кодинг-агенту проверять собственные изменения UI через CLI, используйте Playwright MCP, когда задача агента — сам браузинг, и подключайте Chrome DevTools MCP, когда вопрос в том, почему страница медленная.
Безопасность
В README прямо сказано, что Playwright MCP "не является границей безопасности". Что это значит на практике:
- Профиль сохраняется. По умолчанию каждое рабочее пространство получает собственный профиль в
~/Library/Caches/ms-playwright/на macOS (~/.cache/ms-playwright/на Linux), и данные для входа остаются там между сессиями. Удалите его, чтобы очистить состояние, или используйте--isolated. - Списки источников — это забор, а не стена.
--allowed-originsи--blocked-originsне применяются к редиректам. Не полагайтесь на них, чтобы удержать агента от посещения сайта. - Маскирование — косметика.
--secretsи--redact-url-paramsскрывают значения в выводе инструментов; в README они названы удобством, а не функцией безопасности. - Страницы общаются с моделью. Всё в снимке — это текст, который читает модель, включая текст, написанный, чтобы ею управлять. Инструменты, которые страница регистрирует через WebMCP, отображаются как инструменты
webmcp_, и playwright.dev советует считать их недоверенным вводом;--no-webmcpотключает их. - Доступ к файлам по умолчанию ограничен. Сервер может читать и записывать только внутри корней вашего рабочего пространства, а URL
file://заблокированы, если вы не передадите--allow-unrestricted-file-access.
Самая безопасная повседневная настройка — --isolated с файлом --storage-state для одного сайта, который нужен агенту, плюс --headless, когда вы убедитесь в надёжности сценария. Подробнее об этих рисках — в разделе Безопасность MCP.
Когда это не работает
| Что вы видите | Причина | Решение |
|---|---|---|
| Браузер не запускается на сервере | Нет дисплея для headed-браузера | Добавьте --headless или запустите сервер с --port, как предлагает README |
| Второй клиент в том же проекте не может запустить браузер | Постоянный профиль поддерживает только один браузер за раз | Используйте --isolated или отдельный --user-data-dir для каждого клиента |
| Агент кликает не туда или не находит элемент | Элемента нет в дереве доступности, например canvas | Включите --caps=vision и дайте агенту использовать координаты |
| Контекст заполняется после нескольких страниц | Полные снимки тяжёлых страниц | Запрашивайте browser_find вместо полных снимков; попробуйте --mobile |
| Старые флаги из туториалов отклоняются | --vision и --save-trace удалены |
Используйте --caps=vision и --caps=devtools |
| HTTP-клиенты отключаются | Таймаут heartbeat в пять секунд | Увеличьте PLAYWRIGHT_MCP_PING_TIMEOUT_MS или задайте 0 |
В git status появляются файлы .playwright-mcp/ |
Файлы снимков и скриншотов сохраняются в рабочую директорию | Добавьте папку в .gitignore или задайте --output-dir |
Прежде чем винить агента, проверьте сервер отдельно: npx @modelcontextprotocol/inspector --cli npx @playwright/mcp@latest --headless --method tools/list должен вывести список инструментов. Об этом инструменте рассказывается в нашем руководстве по MCP Inspector.
Остальные браузерные серверы из нашего каталога с оценками проверок и командами установки для каждого перечислены в таблице в начале этой страницы.