The most token-efficient MCP server for Chrome automation β a Playwright MCP alternative.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Lets Claude Code and Cursor drive Chrome β with your real, logged-in profile. On the same 30-test benchmark page it used 30% fewer tokens, 25% less money, 41% fewer tool calls and 40% less time than Playwright MCP at the same pass rate β two runs each, 2026-09-03, driver Claude Opus 5, raw data in the repo (Benchmarks, including where it loses). Its own tool definitions are 34% smaller since v2.10.4 (7,607 β 4,990 tokens, reproduce with node scripts/token-count.mjs). Direct CDP, a11y-tree refs, multi-tab ready β 2,360 TypeScript tests, 237 Python tests.
Built for Claude Code, Cursor, and any MCP-compatible client.
Looking for an alternative to Playwright MCP, Browser MCP, or claude-in-chrome? Public Browser talks to Chrome directly via the DevTools Protocol β no Playwright dependency, no Chrome extension bridge, no single-tab limit. One command to install, zero config. See benchmark comparison below.
Every Chrome MCP server has the same problem: bulky responses, too few reliable refs. Screenshots return 10-30x more context payload than text trees. Selector-based refs break the second the DOM rerenders. Extension bridges (Browser MCP) get stuck on the connected tab. Playwright wrappers spin up a new browser instance for every session.
Public Browser fixes this. It talks directly to Chrome via CDP (same protocol Playwright and Puppeteer use internally), returns an accessibility-tree-based reference map, and caches it across calls so click(ref: 'e5') and type(ref: 'e7', ...) survive scrolls and DOM updates.
Benchmark rows below are April 2026, 35-test suite, Opus 4.6 unless a cell also gives a September value. Cells marked Sep come from the blind September 2026 re-run (35-test page, 30 scored, driver claude-opus-5, two runs per required server; one browser-use run) β run files public-browser-run1/2.json, playwright-mcp-run5/6.json, chrome-devtools-mcp-run3/4.json, browser-use-run6.json in test-hardest/results/. Cross-suite comparison is not valid; see Benchmarks.
| What you get | Playwright MCP | Browser MCP | claude-in-chrome | browser-use | Public Browser |
|---|---|---|---|---|---|
| Benchmark pass rate (Apr 2026: 31 scored / Sep 2026: 30 scored) | 29/31 (563s) Sep: 30/30 (468s, 493s) | 6/31, aborted Sep: not re-run | (24-test suite only) | 21/31 (1870s) Sep: 24/30, incomplete run (2023s) | 30/31 (598s) Sep: 30/30 (281s, 296s) |
| Session tokens, whole run (Sep 2026 only) | Sep: 8.8M, 9.6M | β | β | Sep: 56.2M, incomplete run | Sep: 6.3M, 6.5M (β30%) |
| Cost per run, Opus 5 list price (Sep 2026 only) | Sep: $4.28, $4.78 | β | β | Sep: $25.25, incomplete run | Sep: $3.41, $3.35 (β25%) |
| Avg Tool-Response (Chars) | 1,448 Sep: 740, 656 | β | β | β | 807 Sep: 1,298, 1,214 |
| P95 Tool-Response (Chars) | 8,068 Sep: 3,617, 1,587 | β | β | β | 2,328 Sep: 6,077, 6,479 |
view_page avg (Chars) | 6,084 (browser_snapshot)Sep: 1,911, 2,269 | β | β | β | 1,124 Sep: 2,841, 3,398 |
| Multi-tab support | Yes | No (single tab) | Yes | Partial | Yes |
| Connection | New browser | Extension bridge | Extension | Subprocess | Direct CDP (pipe or WebSocket) |
| Ref system | Playwright refs | Playwright refs | CSS selectors | Screenshots | A11y-tree refs (stable across DOM changes) |
| Drag & drop | Yes | No | Partial | No | Yes (native CDP mouse events) |
| Shadow DOM + iframe | Yes | Yes | Partial | No | Yes (with OOPIF session support) |
| Multi-step plan execution | β | β | β | β | run_plan β server-side plan executor with variables, conditions, suspend/resume |
P95 is not computed the same way in both rows: the April values are the largest per-tool P95 (by_tool[].p95_chars, jq index floor((n-1)Β·0.95)), the September values are a nearest-rank P95 over all MCP calls of a run. Do not read the April and Sep P95 numbers as one series.
What changed since April. In April 2026 Public Browser's page views were 5.4x smaller than Playwright MCP's; Playwright MCP 0.0.80 has since made its snapshot format much more compact, so in the September runs its individual responses are smaller than ours (Γ 740 and 656 chars against 1,298 and 1,214) and the tool-response payload summed over a whole run is roughly a tie (109,075 / 104,432 chars against 101,478 / 99,147) β "smallest responses" is no longer a claim we can make. What the model actually consumed over the whole session is a different story: 6.3M and 6.5M tokens against 8.8M and 9.6M (~30% fewer), $3.41 and $3.35 against $4.28 and $4.78 at Opus 5 list price (~25% less). That gap comes from the second thing left standing: ~41% fewer tool calls (84 and 86 against 137 and 151) and ~40% less time to finish (281s and 296s against 468s and 493s, page timer; 34% on the full wall clock, 331s and 346s against 501s and 527s) at the same reliability, 30/30 in each of those four runs. Every call re-reads the whole conversation so far, so fewer calls means fewer re-reads β that is where the token and cost gap comes from, not from smaller responses. The advantage moved from "cheaper per look" to "cheaper per task", and the headline was changed accordingly.
September 2026 data, both runs per server, against Playwright MCP 0.0.80. Rows where the bar runs past the line are rows Public Browser loses. Method and the full table: Benchmarks.
One command β installs globally for all projects:
Important: after claude mcp add you must fully quit and reopen Claude Code. /mcp reconnect is not enough β Claude Code reads the mcpServers config only at session start and caches it. After the restart, the first tool call auto-launches Chrome visible (no headless, no port setup). Done.
To enable parallel Python Script API access, add
--scriptto the args:claude mcp add --scope user public-browser npx -y public-browser@latest -- --script
Add to ~/.cursor/mcp.json:
For parallel Python Script API access, use
"args": ["-y", "public-browser@latest", "--", "--script"]
Add to your cline_mcp_settings.json:
Any client that supports stdio MCP servers: npx -y public-browser@latest with no arguments.
After installing, paste this into your AI coding assistant:
Open mcp-test.second-truth.com, read the page, and fill the contact form with Name "Test User" and Email "test@example.com".
This exercises three core tools in sequence: navigate loads the page, view_page reads the accessibility tree with stable element refs, and fill_form fills multiple fields in one call. You should see Chrome open, the page load, and the form filled β all without writing a single line of code.
By default, Public Browser starts Chrome with a fresh temp profile β no cookies, no logins, no extensions. For tasks like research on sites that block anonymous visitors, you can launch Chrome with your real profile instead.
Three ways β pick whichever fits your setup:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/public-browser)<a href="https://allmcps.com/mcp/public-browser"><img src="https://allmcps.com/api/badge/public-browser?style=directory" alt="Public Browser on AllMCPs" /></a>