Архітэктура¶
Час выканання¶
cloakbrowser-mcp — гэта знешні сервер MCP, які можа прапаноўваць stdio або Streamable HTTP. Пры запуску ён:
- разгадвае або ўсталёўвае бінарны файл CloakBrowser Chromium;
- стварае часовы канфігурацыйны файл MCP для Playwright;
- запускае upstream
@playwright/mcpу якасці даччынага працэсу праз stdio; - падключаецца да гэтага даччынага працэсу з дапамогай кліенцкага транспарту MCP SDK;
- праз абраны транспарт адкрывае знешні сервер MCP для кліента MCP карыстальніка;
- перасылае спіс інструментаў і выклікі інструментаў upstream без змен;
- дадае
cloakbrowser_binary_infoіcloakbrowser_bridge_info.
Чаму менавіта гэты дызайн¶
Надрупай-праект Playwright MCP ужо валодае кантрактамі на інструменты браўзера і хутка развіваецца. Мадэль маста падтрымлівае гэты праект невялікім і дазваляе пазбегнуць капіравання логікі аўтаматызацыі браўзера.
Кіраванае ўласнасць CDP¶
Кіраваны CDP — гэта неабавязковая другая паверхня кіравання для таго ж пакалення браўзера:
MCP client -> outer bridge -> upstream Playwright MCP child -> Chromium
| | |-- Playwright pipe
| `-- generated config `-- internal loopback CDP
`-- external capability proxy <--------- CDP client
Сесія MCP валодае арэндай знешняга порта, праксі магчымасцей, згенераваным вышэй па патоку канфігурацыя, заменны вышэйстаячы дзіцячы элемент і бягучае пакаленне Chromium. CDP кліент ніколі непасрэдна не падключаецца да ўнутранага пункта заканчэння цыклічнай сувязі. Bootstrap размяшчае аднаразовая задача на старонцы браўзера праз MCP і выкарыстоўваецца праз CDP перад знешняя магчымасць апублікавана. Унутраны канал дыстанцыйнага адладжвання Playwright застаецца актыўны побач з TCP-канцом, кіраваным праз мост.
Знешняя арэнда порта стабільная для сесіі MCP, у той час як дзіцячы працэс, унутраны канец, нумар пакалення і магчымасць URL могуць быць заменены. Браўзер страта робіць цяперашнюю магчымасць несапраўднай і закрывае яе прамежкавыя сокеты, але не пачнуць дзіця на фоне. Першы пазнейшы выклік browser_* MCP ужываецца правіла перазапуску перад прасоўваннем
- адначасовыя выклікі браўзера падзяляюць адзін абмежаваны перазапуск
- стары дзіця становіцца недасяжным і адкідваецца;
- дзіця-замяняльнік выкарыстоўвае тую ж канфігурацыю сесіі і новы ўнутраны порт;
- ўласнасць і знешняя гатоўнасць правяраюцца перад публікацыяй
- Чаканыя выклікі браўзера перасылаюцца гатовым заменнікам дакладна адзін раз.
Калі гатоўнасць не здаецца, ні адзін чакаючы выклік браўзэра не дасягне верхняга дзіцячага элемента, ні адна здольнасць апублікавана, і наступны выклік браўзера можа пачаць новую абмежаваную спробы. Стан браўзера такія як укладкі і захоўванне ў памяці, не аднаўляюцца пасля замены. Лакальныя інструменты, Спіс інструментаў, чытанні выяўлення і звычайныя адключэнні CDP не выклікаюць перазагрузку.
Ачыстка адмяняе дасяжнасць: спыніць доступ, несвядома адключыць магчымасць, закрыць праксі сокеты, вызваліць вышэйстаячага дзіцяці і браўзер, закрыць знешні слухач, затым выдаліць арэнду порта. Гэта прадухіляе ціхі пераход старога URL у новы браўзер.
Каманды MCP і CDP могуць выконвацца адначасова. Мост не дадае крос-пратакольных функцый. транзакцыі або высветліць, які выклікальнік валодае старонкай; выклікальнікі павінны каардынаваць знішчальныя або супярэчлівыя аперацыі
Докер¶
Абраз Docker выкарыстоўвае замацаваны афіцыйны абраз Playwright MCP у якасці базавага абраза. Мост усталёўваецца пад /opt/cloakbrowser-mcp, у той час як верхні паток Playwright MCP застаецца даступным па адрасе /app/cli.js.
Канфігурацыя¶
Брыдж запісвае часовую JSON-канфігурацыю з опцыямі запуску CloakBrowser. Асяроддзе PLAYWRIGHT_MCP_* upstream-а ўсё яшчэ перадаецца ў upstream Playwright MCP.
Транспарт¶
Стандартным транспартам з'яўляецца stdio. Падтрымка струменевага HTTP уключаецца яўна з дапамогай --transport streamable-http або CLOAK_PLAYWRIGHT_MCP_TRANSPORT=streamable-http.
Для stdio адзін знешні сервер валодае адным вытворным працэсам Playwright MCP і захоўвае стандартнае паводзінства профілю Playwright MCP. Для Streamable HTTP кожнае сеансавае MCP мае свой уласны знешні сервер, даччыны працэс upstream, згенераваную канфігурацыю і транспартны стан у памяці. HTTP-сеансы запускаюць upstream Playwright MCP з ізаляванымі профілямі браўзера, каб карыстальнікі не падзялялі і не змагаліся за адзін і той жа пастаянны профіль Chromium.
Бэкэнд сеансу захоўвае толькі метаданыя. Убудаваны бэкэнд — memory; будучыя адаптары Redis, Postgres або SQLite змогуць каардынаваць метаданыя і замкі, але яны не змогуць аднавіць працу браўзера ў вытворчым рэжыме пасля спынення працэса сервера, які ён належыць. Для гарызантальнага маштабавання варта выкарыстоўваць «прывязаныя сесіі» (sticky sessions), ключамі якіх з'яўляюцца mcp-session-id.
Мост выкарыстоўвае MCP SDK StreamableHTTPServerTransport для Streamable HTTP. Ён не выкарыстоўвае састарэлы MCP SSEServerTransport або састарэлы /sse эндпойнт.