invisible_playwright_mcp — браузерный ИИ-агент, невидимый для анти-бот систем
📂 Исходный код на GitHubPlaywright-совместимый MCP-сервер на Python: ИИ-агент работает в анти-детект Firefox, остаётся невидимым для анти-бот проверок и капч, поддерживает прокси, профили и детерминированную идентичность браузера.
invisible_playwright_mcp — это MCP-сервер для браузерной автоматизации, невидимый для анти-бот систем. Слоган проекта звучит так: «Другие ИИ-браузерные агенты получают капчи. Этот невидим для анти-ботов». Сервер написан на Python, распространяется по лицензии MIT и собрал более 30 тысяч звёзд на GitHub.
Проблема знакома каждому, кто пробовал браузерных агентов. Обычный headless-браузер защита распознаёт быстро. Агент открывает сайт — и вместо страницы получает капчу или блокировку. Этот проект решает задачу иначе: он запускает специальную анти-детект сборку Firefox и водит её как человек. Курсор двигается, клавиши нажимаются, страницу читает модель. Для сайта такой агент выглядит обычным посетителем.
Два способа работы
Первый способ — подключить сервер к своему ассистенту как обычный MCP-инструмент. Поддерживаются Claude Code, Codex и Gemini CLI.
Сначала установите uv:
Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"
Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
Затем подключите сервер к ассистенту.
Claude Code:
claude plugin marketplace add feder-cr/invisible_playwright_mcp
claude plugin install invisible-playwright-mcp@feder-cr
Codex:
codex plugin marketplace add feder-cr/invisible_playwright_mcp
codex plugin add invisible-playwright-mcp@feder-cr
Gemini CLI:
gemini extensions install https://github.com/feder-cr/invisible_playwright_mcp
Второй способ — standalone-режим. Проект приносит свой веб-интерфейс, а вы приносите ключ OpenRouter. Слева чат, справа живой браузер в реальном времени:
uvx invisible-playwright-mcp ui --openrouter-key sk-or-...
После запуска откройте http://127.0.0.1:8765 и пишите задачи в чат.
Что поручать агенту
Подходят любые задачи, где нужен настоящий браузер и человеческая оценка страницы. Автор приводит пример с поиском авиабилета:
Зайди на сайт. Билет в один конец, Милан — Лиссабон, экономкласс, одно место багажа, один взрослый. Проверь каждую дату с 12-го по 16-е следующего месяца по одной и прочитай самую дешёвую цену на каждый день. Поле даты — это календарь, поэтому кликай по дням, а не вводи их с клавиатуры. Если на дату мест нет, так и скажи. Не выдумывай цифры.
Обратите внимание на формулировку: агенту сказано, что поле даты открывается календарём. Это важная деталь. Агент водит мышью и печатает как человек, но сам он не догадается — объясните, куда идти и что делать.
Опции запуска
| Опция | Назначение |
|---|---|
--openrouter-key |
ключ OpenRouter или переменная OPENROUTER_API_KEY |
--model |
ID модели в OpenRouter. По умолчанию z-ai/glm-5.3-flash |
--proxy |
HTTP или SOCKS5 прокси. За ним следуют часовой пояс, локаль и внешний IP |
--binary |
свой бинарник движка. Загрузка пропускается, но проверка версии остаётся |
--seed |
целое число. Одинаковый seed даёт одинаковую идентичность браузера в каждом запуске |
--profile-dir |
каталог профиля: логины и cookie переживают перезапуск |
--headed |
показать окно браузера. Впрочем, интерфейс и так показывает страницу |
--host, --port |
по умолчанию 127.0.0.1:8765. Смена хоста открывает интерфейс без аутентификации |
Опция --binary заслуживает пояснения. Движок скачивается с GitHub при первом запуске. Если подложить свой бинарник, сервер пропустит загрузку, но не проверку версии: подойдёт только та сборка, которую закрепил проект.
Файл .env
Ключ и путь к бинарнику можно не набирать в команде. Положите рядом с местом запуска файл .env:
OPENROUTER_API_KEY=sk-or-...
STEALTHFOX_BINARY=/path/to/firefox
Порядок приоритетов такой: флаг командной строки, затем переменные окружения, затем .env, затем значения по умолчанию. Файл .env никогда не перебивает то, что уже задано. Читается только файл из текущего каталога — наверх поиск не идёт. Запуск из подпапки не подхватит чужой ключ.
Есть и безопасность. Ключ в флаге --openrouter-key попадает в историю shell, а на Linux ещё и в список процессов. Через переменную окружения или .env обоих рисков нет. При старте сервер называет применённые переменные, но никогда не печатает их значения.
Семейство проектов
Сервер — часть связки из трёх репозиториев.
- invisible_playwright — движок в виде Python-библиотеки. Для тех, кто хочет писать код вместо промптов. API повторяет Playwright, поэтому существующий код почти не меняется.
- invisible_core — низкоуровневая часть. Из seed она строит отпечаток браузера, настройки, прокси и геолокацию.
Wiki и примеры
К проекту приложена wiki с гайдами по браузерным агентам:
- обзор ландшафта: browser-use, агенты в стиле Operator и computer-use;
- что проверять, когда агента блокируют;
- что случилось с OpenAI Operator.
Готовые примеры с диалогами и результатами лежат в каталоге articles/. Блоки конфигурации для MCP-клиентов, настройки и список инструментов описаны на странице wiki «The MCP server».
Приватность и лицензия
Сервер работает локально и не имеет своего сервера. Вот что покидает вашу машину:
- Сайты видят браузер — как и любого посетителя с обычным Firefox.
- Провайдер модели получает переписку и то, что агент прочитал на странице. В веб-интерфейсе это OpenRouter под вашим ключом. Через MCP тем же занимается клиент, к которому подключён сервер.
- GitHub отдаёт движок и базу GeoIP при первом запуске, а также принимает запрос к строке-счётчику при каждом старте браузера. Запрос не несёт никаких данных о вас, GitHub видит лишь IP-адрес.
Сессии, профили и скриншоты остаются на диске: в каталоге INVISIBLE_MCP_HOME, если он задан, иначе в системном каталоге данных приложения. Удаляйте их когда хотите, больше их нигде не хранят.
Лицензия — MIT. Всё, что распространялось до 2 сентября 2026 года, вышло под AGPL-3.0 и остаётся под ней.
Напоследок напоминание самих авторов: читайте правила сайтов, куда отправляете агента, уважайте лимиты на частоту запросов и не отправляйте ничего, что человек не прочитал.