Перайсці да зместа

Архітэктура

Час выканання

cloakbrowser-mcp — гэта знешні сервер MCP, які можа прапаноўваць stdio або Streamable HTTP. Пры запуску ён:

  1. разгадвае або ўсталёўвае бінарны файл CloakBrowser Chromium;
  2. стварае часовы канфігурацыйны файл MCP для Playwright;
  3. запускае upstream @playwright/mcp у якасці даччынага працэсу праз stdio;
  4. падключаецца да гэтага даччынага працэсу з дапамогай кліенцкага транспарту MCP SDK;
  5. праз абраны транспарт адкрывае знешні сервер MCP для кліента MCP карыстальніка;
  6. перасылае спіс інструментаў і выклікі інструментаў upstream без змен;
  7. дадае 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 ужываецца правіла перазапуску перад прасоўваннем

  1. адначасовыя выклікі браўзера падзяляюць адзін абмежаваны перазапуск
  2. стары дзіця становіцца недасяжным і адкідваецца;
  3. дзіця-замяняльнік выкарыстоўвае тую ж канфігурацыю сесіі і новы ўнутраны порт;
  4. ўласнасць і знешняя гатоўнасць правяраюцца перад публікацыяй
  5. Чаканыя выклікі браўзера перасылаюцца гатовым заменнікам дакладна адзін раз.

Калі гатоўнасць не здаецца, ні адзін чакаючы выклік браўзэра не дасягне верхняга дзіцячага элемента, ні адна здольнасць апублікавана, і наступны выклік браўзера можа пачаць новую абмежаваную спробы. Стан браўзера такія як укладкі і захоўванне ў памяці, не аднаўляюцца пасля замены. Лакальныя інструменты, Спіс інструментаў, чытанні выяўлення і звычайныя адключэнні 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 эндпойнт.