Архитектура¶
Время выполнения¶
cloakbrowser-mcp — это внешний сервер MCP, который может предоставлять доступ к stdio или Streamable HTTP. При запуске он:
- извлекает или устанавливает бинарный файл CloakBrowser на базе Chromium;
- создаёт временный файл конфигурации Playwright MCP;
- запускает исходный процесс
@playwright/mcpв качестве дочернего процесса через stdio; - подключается к этому дочернему процессу с помощью транспортного протокола клиента MCP SDK;
- предоставляет доступ к внешнему серверу MCP клиенту MCP пользователя через выбранный транспортный протокол;
- пересылает список инструментов и вызовы инструментов без изменений;
- добавляет
cloakbrowser_binary_infoиcloakbrowser_bridge_info.
Почему именно такой дизайн¶
Проект Playwright MCP, разрабатываемый на верхнем уровне, уже владеет контрактами браузерных инструментов и быстро развивается. Модель «моста» позволяет сохранить компактность этого проекта и избежать дублирования логики автоматизации браузера.
Docker¶
Образ Docker использует закрепленный официальный образ Playwright MCP в качестве базового образа. Бридж установлен под именем /opt/cloakbrowser-mcp, в то время как исходный образ Playwright MCP по-прежнему доступен по адресу /app/cli.js.
Настройка¶
Бридж записывает временную конфигурацию в формате JSON с параметрами запуска CloakBrowser. Переменные среды PLAYWRIGHT_MCP_* из верхнего уровня по-прежнему передаются в Playwright MCP верхнего уровня.
Транспорт¶
Транспорт по умолчанию — stdio. Потоковый HTTP явно включается с помощью --transport streamable-http или CLOAK_PLAYWRIGHT_MCP_TRANSPORT=streamable-http.
В случае stdio один внешний сервер управляет одним дочерним процессом Playwright MCP на стороне upstream и сохраняет поведение профиля по умолчанию для Playwright MCP на стороне upstream. В случае Streamable HTTP каждый сеанс MCP имеет собственный внешний сервер, дочерний процесс на стороне Playwright MCP, сгенерированную конфигурацию и состояние транспорта в памяти. Сеансы HTTP запускают Playwright MCP с изолированными профилями браузера, чтобы одновременно работающие пользователи не использовали один и тот же постоянный профиль Chromium и не конкурировали за него.
Бэкенд сессии хранит только метаданные. Встроенным бэкендом является memory; будущие адаптеры Redis, Postgres или SQLite смогут координировать метаданные и блокировки, но они не смогут восстановить активный процесс браузера на стороне клиента после завершения работы серверного процесса, которому он принадлежит. При горизонтальном масштабировании следует использовать «прилипающие» сессии, индексированные по ключу mcp-session-id.
Мост использует MCP SDK StreamableHTTPServerTransport для Streamable HTTP. Он не предоставляет доступ к устаревшему MCP SSEServerTransport или устаревшую конечную точку /sse.