<?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.us-east-2.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;blockquote&gt;
&lt;p&gt;Updated October 22, 2026: requirements and examples below target &lt;a href="https://github.com/swimmwatch/cloakbrowser-mcp/releases/tag/v1.15.1" rel="noopener noreferrer"&gt;CloakBrowser MCP 1.15.1&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&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 22.13.0 or newer in the 22.x line, or Node.js 24 or newer (&lt;code&gt;^22.13.0 || &amp;gt;=24.0.0&lt;/code&gt;).&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.15.1 &lt;span class="nt"&gt;--help&lt;/span&gt;
npx &lt;span class="nt"&gt;-y&lt;/span&gt; cloakbrowser-mcp@1.15.1 doctor
npx &lt;span class="nt"&gt;-y&lt;/span&gt; cloakbrowser-mcp@1.15.1
&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@1.15.1 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@1.15.1 &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@1.15.1"&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;The example above uses the &lt;code&gt;mcpServers&lt;/code&gt; format supported by clients such as Claude Desktop and Cursor. VS Code uses a &lt;code&gt;servers&lt;/code&gt; object with &lt;code&gt;"type": "stdio"&lt;/code&gt;; Codex uses TOML. Follow the &lt;a href="https://swimmwatch.github.io/cloakbrowser-mcp/getting-started/" rel="noopener noreferrer"&gt;client-specific setup instructions&lt;/a&gt; instead of copying the same configuration into every client.&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:1.15.1
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.15.1
&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:1.15.1 &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;For external or non-loopback access, use HTTPS plus an auth token, or a trusted reverse proxy that enforces TLS, authentication, and network access controls. The bridge auth token can be configured with:&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;In stdio mode, stdout is reserved for MCP protocol messages. Streamable HTTP mode may write startup and request logs to stdout.&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.15.1
&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.15.1
&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@1.15.1 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@1.15.1"&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>
