<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dmitry Vasiliev</title>
    <description>The latest articles on DEV Community by Dmitry Vasiliev (@swimmwatch).</description>
    <link>https://dev.to/swimmwatch</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3971513%2Fd4ef72e5-f9f3-441e-a373-63c961bb4686.png</url>
      <title>DEV Community: Dmitry Vasiliev</title>
      <link>https://dev.to/swimmwatch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/swimmwatch"/>
    <language>en</language>
    <item>
      <title>CloakBrowser MCP: Playwright MCP tools with a CloakBrowser Chromium runtime</title>
      <dc:creator>Dmitry Vasiliev</dc:creator>
      <pubDate>Sat, 06 Jun 2026 16:50:17 +0000</pubDate>
      <link>https://dev.to/swimmwatch/cloakbrowser-mcp-playwright-mcp-tools-with-a-cloakbrowser-chromium-runtime-3ec8</link>
      <guid>https://dev.to/swimmwatch/cloakbrowser-mcp-playwright-mcp-tools-with-a-cloakbrowser-chromium-runtime-3ec8</guid>
      <description>&lt;p&gt;Browser automation is becoming one of the most useful tool categories for AI agents.&lt;/p&gt;

&lt;p&gt;If an agent can open a page, inspect the accessibility tree, click buttons, fill forms, read console output, and take screenshots, it can help with tasks that are hard to solve through APIs alone: debugging frontend flows, checking documentation, testing onboarding, validating generated UI, and reproducing browser-only bugs.&lt;/p&gt;

&lt;p&gt;Playwright MCP is already a strong foundation for that workflow. It gives MCP clients a browser automation surface built around Playwright. The question that led to CloakBrowser MCP was narrower:&lt;/p&gt;

&lt;p&gt;What if you want the same upstream Playwright MCP tools, but with a different Chromium runtime?&lt;/p&gt;

&lt;p&gt;That is what &lt;code&gt;cloakbrowser-mcp&lt;/code&gt; does.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is CloakBrowser MCP?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;cloakbrowser-mcp&lt;/code&gt; is an open-source Model Context Protocol server that runs upstream &lt;code&gt;@playwright/mcp&lt;/code&gt; with the CloakBrowser Chromium executable.&lt;/p&gt;

&lt;p&gt;The project is intentionally thin:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;upstream Playwright MCP owns the browser tool schemas, descriptions, and responses&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cloakbrowser-mcp&lt;/code&gt; generates a Playwright MCP config that points &lt;code&gt;launchOptions.executablePath&lt;/code&gt; to CloakBrowser&lt;/li&gt;
&lt;li&gt;upstream browser tools are forwarded unchanged&lt;/li&gt;
&lt;li&gt;the bridge adds only two local diagnostic tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those local tools are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cloakbrowser_binary_info&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloakbrowser_bridge_info&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything else comes from upstream Playwright MCP.&lt;/p&gt;

&lt;p&gt;Repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/swimmwatch/cloakbrowser-mcp" rel="noopener noreferrer"&gt;https://github.com/swimmwatch/cloakbrowser-mcp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Docs:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://swimmwatch.github.io/cloakbrowser-mcp/" rel="noopener noreferrer"&gt;https://swimmwatch.github.io/cloakbrowser-mcp/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;npm:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/cloakbrowser-mcp" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/cloakbrowser-mcp&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is not
&lt;/h2&gt;

&lt;p&gt;This is not a custom browser automation API.&lt;/p&gt;

&lt;p&gt;It is not a fork that rewrites Playwright MCP tool contracts.&lt;/p&gt;

&lt;p&gt;It is not a CAPTCHA-solving service, and it should not be treated as a replacement for proper test-environment controls, allowlists, or site-owner-approved automation paths.&lt;/p&gt;

&lt;p&gt;The goal is narrower and more maintainable: keep the Playwright MCP surface familiar, while letting users run that surface with CloakBrowser Chromium in local or Docker-backed agent workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why preserve the upstream Playwright MCP contract?
&lt;/h2&gt;

&lt;p&gt;Browser MCP servers can become painful when every server invents a slightly different tool surface.&lt;/p&gt;

&lt;p&gt;If the tool names, schemas, and behavior drift, users have to relearn the same browser workflow for each runtime. Clients and prompts also become less portable.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cloakbrowser-mcp&lt;/code&gt; takes the opposite approach. The bridge stays small and lets upstream Playwright MCP remain authoritative for browser tools.&lt;/p&gt;

&lt;p&gt;That matters for a few reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Existing Playwright MCP workflows stay familiar.&lt;/li&gt;
&lt;li&gt;Upstream improvements can be adopted without redesigning a parallel tool model.&lt;/li&gt;
&lt;li&gt;The bridge can focus on runtime wiring, diagnostics, packaging, and parity checks.&lt;/li&gt;
&lt;li&gt;Users can compare behavior against upstream Playwright MCP more easily.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The project also runs parity checks against upstream default tools in CI, so changes to the forwarded tool surface are visible during development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start with npm
&lt;/h2&gt;

&lt;p&gt;Requires Node.js 20 or newer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; cloakbrowser-mcp@latest &lt;span class="nt"&gt;--help&lt;/span&gt;
npx &lt;span class="nt"&gt;-y&lt;/span&gt; cloakbrowser-mcp@latest doctor
npx &lt;span class="nt"&gt;-y&lt;/span&gt; cloakbrowser-mcp@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;doctor&lt;/code&gt; first if you want a local diagnostic check before wiring the server into an MCP client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; cloakbrowser-mcp@latest doctor &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The default transport is stdio, which is what most local MCP client configs expect.&lt;/p&gt;

&lt;p&gt;For Streamable HTTP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; cloakbrowser-mcp@latest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--transport&lt;/span&gt; streamable-http &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--http-port&lt;/span&gt; 3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That exposes MCP at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:3000/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also provides health probes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://127.0.0.1:3000/healthz
curl http://127.0.0.1:3000/readyz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  MCP client config
&lt;/h2&gt;

&lt;p&gt;Most MCP clients use the same stdio shape: &lt;code&gt;command&lt;/code&gt;, &lt;code&gt;args&lt;/code&gt;, and optional &lt;code&gt;env&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cloakbrowser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cloakbrowser-mcp@latest"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"PLAYWRIGHT_MCP_HEADLESS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"PLAYWRIGHT_MCP_OUTPUT_DIR"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/tmp/cloakbrowser-artifacts"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the same pattern in clients such as Claude Desktop, Cursor, VS Code, Cline, Continue, Windsurf, Goose, Warp, and Codex, adjusting only the surrounding config format if the client uses TOML or YAML instead of JSON.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker
&lt;/h2&gt;

&lt;p&gt;Docker is useful when you want a repeatable runtime. The image is based on the pinned official Playwright MCP image and includes the bridge.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull swimmwatch/cloakbrowser-mcp:latest
docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--init&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;/artifacts:/data"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  swimmwatch/cloakbrowser-mcp:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Streamable HTTP in Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--init&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 127.0.0.1:3000:3000 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;/artifacts:/data"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  swimmwatch/cloakbrowser-mcp:latest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--transport&lt;/span&gt; streamable-http &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--http-host&lt;/span&gt; 0.0.0.0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--http-port&lt;/span&gt; 3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same images are also published to GitHub Container Registry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ghcr.io/swimmwatch/cloakbrowser-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What tools should appear?
&lt;/h2&gt;

&lt;p&gt;Ask your MCP client to list tools. You should see upstream Playwright MCP browser tools, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;browser_navigate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;browser_click&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;browser_type&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;browser_snapshot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;browser_take_screenshot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;browser_console_messages&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;browser_network_requests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;browser_evaluate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;browser_tabs&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should also see the two local diagnostic tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cloakbrowser_binary_info&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloakbrowser_bridge_info&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The diagnostic tools are there to answer practical setup questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which bridge version is running?&lt;/li&gt;
&lt;li&gt;Which upstream Playwright MCP package/version is resolved?&lt;/li&gt;
&lt;li&gt;Which browser engine is configured?&lt;/li&gt;
&lt;li&gt;Where is the CloakBrowser binary?&lt;/li&gt;
&lt;li&gt;Which output directory is active?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;p&gt;The primary configuration namespace is the upstream Playwright MCP namespace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PLAYWRIGHT_MCP_*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Cloak-specific bridge toggles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CLOAK_PLAYWRIGHT_MCP_*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;PLAYWRIGHT_MCP_HEADLESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true
&lt;/span&gt;&lt;span class="nv"&gt;PLAYWRIGHT_MCP_OUTPUT_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/tmp/cloakbrowser-artifacts
&lt;span class="nv"&gt;PLAYWRIGHT_MCP_OUTPUT_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;stdout
&lt;span class="nv"&gt;CLOAK_PLAYWRIGHT_MCP_CONSOLE_FALLBACK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true
&lt;/span&gt;&lt;span class="nv"&gt;CLOAK_PLAYWRIGHT_MCP_STEALTH_ARGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For local HTTP transport:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CLOAK_PLAYWRIGHT_MCP_TRANSPORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;streamable-http
&lt;span class="nv"&gt;CLOAK_PLAYWRIGHT_MCP_HTTP_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1
&lt;span class="nv"&gt;CLOAK_PLAYWRIGHT_MCP_HTTP_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3000
&lt;span class="nv"&gt;CLOAK_PLAYWRIGHT_MCP_HTTP_ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you expose HTTP outside a local development machine, configure an auth token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CLOAK_PLAYWRIGHT_MCP_HTTP_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Operational notes
&lt;/h2&gt;

&lt;p&gt;A few details are worth knowing before using it in a real workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first browser action may download the CloakBrowser binary if it is not already cached.&lt;/li&gt;
&lt;li&gt;Runtime logs must not go to stdout because MCP stdio uses stdout for protocol messages.&lt;/li&gt;
&lt;li&gt;Docker runs should keep &lt;code&gt;-i&lt;/code&gt; so stdio stays connected.&lt;/li&gt;
&lt;li&gt;Docker runs should include &lt;code&gt;--init&lt;/code&gt; so browser child processes are reaped correctly.&lt;/li&gt;
&lt;li&gt;Artifacts should be written to a known output directory, especially in Docker.&lt;/li&gt;
&lt;li&gt;For reproducibility, pin a version instead of using &lt;code&gt;latest&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; cloakbrowser-mcp@1.3.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--init&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="s2"&gt;/artifacts:/data"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  swimmwatch/cloakbrowser-mcp:1.3.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  When should you use it?
&lt;/h2&gt;

&lt;p&gt;It is a good fit when you want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Playwright MCP-compatible browser tools&lt;/li&gt;
&lt;li&gt;a local stdio MCP server&lt;/li&gt;
&lt;li&gt;a Docker-ready browser automation runtime&lt;/li&gt;
&lt;li&gt;Streamable HTTP for clients that connect over HTTP&lt;/li&gt;
&lt;li&gt;a CloakBrowser Chromium runtime without changing upstream Playwright MCP tool contracts&lt;/li&gt;
&lt;li&gt;simple diagnostics before wiring the server into an agent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is probably not the right fit if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you need a hosted browser service&lt;/li&gt;
&lt;li&gt;you want a custom high-level browser API instead of Playwright MCP tools&lt;/li&gt;
&lt;li&gt;your workflow should use official APIs instead of browser automation&lt;/li&gt;
&lt;li&gt;your testing environment can solve the problem with first-party test keys or allowlists&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The fastest path is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; cloakbrowser-mcp@latest doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add the stdio config to your MCP client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cloakbrowser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cloakbrowser-mcp@latest"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Project links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/swimmwatch/cloakbrowser-mcp" rel="noopener noreferrer"&gt;https://github.com/swimmwatch/cloakbrowser-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs: &lt;a href="https://swimmwatch.github.io/cloakbrowser-mcp/" rel="noopener noreferrer"&gt;https://swimmwatch.github.io/cloakbrowser-mcp/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/cloakbrowser-mcp" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/cloakbrowser-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docker Hub: &lt;a href="https://hub.docker.com/r/swimmwatch/cloakbrowser-mcp" rel="noopener noreferrer"&gt;https://hub.docker.com/r/swimmwatch/cloakbrowser-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MCP Registry: &lt;a href="https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.swimmwatch%2Fcloakbrowser-mcp" rel="noopener noreferrer"&gt;https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.swimmwatch%2Fcloakbrowser-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feedback is welcome, especially from people already using Playwright MCP in local agent workflows.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>playwright</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
