Playwright MCP vs Chrome DevTools MCP

Playwright MCP also runs Firefox and WebKit. Chrome DevTools MCP traces Chrome and reports stats.

What the agent does in the browser decides which browser MCP server you want. Playwright MCP drives pages in Chrome, Firefox, WebKit or Edge, and its README positions it for long agent loops that keep browser state. Chrome DevTools MCP works only with Chrome, but it records performance traces, runs Lighthouse and reads heap snapshots, so a slow page, a failing request or a memory leak belongs there. A coding agent with Bash and a busy context window should look at the CLI versions first, as Microsoft’s own README advises.

Measured by agentmods, live: playwright-mcp, chrome-devtools-mcp, browser-use
ModTypeStarsLast pushLicenceScanTokensWorks with
playwright-mcpmicrosoft/playwright-mcpMCP server39kyesterdayApache-2.0A—Claude Code, Codex, Cursor, Gemini CLI, OpenCode
chrome-devtools-mcpChromeDevTools/chrome-devtools-mcpMCP server55kyesterdayApache-2.0A—Claude Code
browser-usebrowser-use/browser-useMCP server120ktodayMITA—Claude Code, Codex, Cursor, Gemini CLI, OpenCode

Install

npx agentmods add mcp/microsoft/playwright-mcp/playwright-mcp
npx agentmods add mcp/chromedevtools/chrome-devtools-mcp/chrome-devtools-mcp
npx agentmods add mcp/browser-use/browser-use/browser-use

Each name opens the mod's page: the scan, the token cost and every other way to install it.

Both read the accessibility tree, through different engines

Neither reads pixels. Playwright MCP calls its browser_snapshot “better than screenshot”, and its screenshot tool says outright that you can’t act on what it returns. Click and type take a target, which is a reference from the snapshot or a unique selector.

take_snapshot in Chrome DevTools MCP does the same thing, with a text snapshot “based on the a11y tree” that gives each element a uid. So the basic loop is the same in both: snapshot, pick an element, act.

Underneath, Chrome DevTools MCP vs Playwright MCP is Puppeteer against playwright-core. Chrome DevTools MCP automates Chrome through Puppeteer and waits for each action’s result. Playwright MCP is a thin package. Its cli.js hands the command to playwright-core, and the repository’s src/README.md says the server’s source lives in the Playwright monorepo. If you want to read how a Playwright MCP tool works, you read it there, not in microsoft/playwright-mcp.

25 default tools against a 61-tool menu, and the CLI route

Snapshots that Playwright MCP attaches to its responses are full by default, and only --snapshot-mode none stops them. Out of the box it exposes 25 tools, 24 in the core group plus browser_tabs. Seven more groups (storage, network, DevTools tracing, coordinate clicks, PDF, test assertions, config) stay off until you name them in --caps.

61 tools in 12 categories appear in the Chrome DevTools MCP reference, but the server does not load all of them. Extension, PWA, WebAuthn, WebMCP and third-party tools are off by default, and 13 of the 14 memory tools wait for --memoryDebugging. For simple tasks --slim cuts the set to three tools (navigate, evaluate, screenshot). Its design notes say that large data belongs in files and the model should get summaries, as in “LCP was 3.2s” instead of 50k lines of JSON.

On Playwright MCP vs Playwright CLI, the Playwright MCP README itself says coding agents increasingly prefer CLI plus skills because MCP loads “large tool schemas and verbose accessibility trees” into the context. playwright-cli runs through Bash, and after each command it prints a link to a snapshot file instead of the snapshot. Chrome DevTools MCP ships a chrome-devtools CLI in the same npm package, backed by a background daemon. We don’t measure token use for MCP servers yet, so the table above can’t settle this one for you.

One npx line each, different Node floors

Node.js 18 or newer is enough for Playwright MCP. In Claude Code it is one line, claude mcp add playwright npx @playwright/mcp@latest. Chrome DevTools MCP needs Node 20.19+, 22.12+ or 23+, plus a current stable Chrome. It starts Chrome only when the first tool needs a browser, not when the client connects. Both servers talk stdio by default. Playwright MCP switches to HTTP with --port, which its README suggests when a headed browser has no display, and its Docker image runs headless Chromium only.

A Claude Code plugin installs Chrome DevTools MCP together with seven skills, including memory-leak and LCP debugging. Keep those skills in step with the server. Its README warns that outdated skills can send your agent to tools or parameters that changed.

Both open a visible browser by default and keep a persistent profile on disk. Playwright MCP makes one profile per workspace, and two clients in the same workspace will fight over it unless you give one of them --isolated or its own --user-data-dir.

Using your logged-in Chrome: the extension or —autoConnect

Playwright MCP connects to running Chrome or Edge tabs through the Playwright Extension (--extension). Chrome DevTools MCP attaches with --autoConnect to Chrome 144 or newer, or with --browserUrl to Chrome started with a debugging port. Its docs give a practical reason. Some accounts refuse sign-in when the browser is driven through WebDriver, which is how the server launches Chrome by default.

Usage statistics, CrUX lookups and file access

Chrome DevTools MCP has three defaults that reach outside your machine. Google usage statistics are on (--no-usage-statistics turns them off, and so does a CI variable). Performance tools may send trace URLs to Google’s CrUX API (--no-performance-crux), so turn that off before you trace internal URLs. The server checks npm for updates. Playwright MCP’s README mentions none of these.

Both projects are blunt about permissions. Playwright MCP says it is “not a security boundary”, and its origin allow and block lists are not one either. Its core group includes browser_run_code_unsafe, which the docs call RCE-equivalent because it runs code in the server process. File access stays inside your workspace roots unless you pass --allow-unrestricted-file-access.

The Chrome DevTools MCP README warns that clients can read and modify any data in the browser. Without MCP roots its file tools stay in the OS temp directory. --no-javascript-evaluation switches off its script tools, but the docs say it is not a sandbox. Its standalone CLI, unlike the server, has unrestricted filesystem access by default.

browser-use as a browser MCP with Python code or 16 tools

Among Playwright MCP alternatives, browser-use is a Python library (3.11 or newer) with two MCP modes, and they are quite different.

Its registry entry starts --cli-mcp. That server has two tools. browser_exec runs Python in a browser-harness session whose namespace persists between calls, and browser_screenshot captures the page. Your agent writes code against the browser instead of calling one tool per click, which is the reason to choose it.

In --mcp mode there are 16 tools, one per action such as navigate, click and type. Among them, content extraction fails without OPENAI_API_KEY, and the description of retry_with_browser_use_agent calls it a last resort. Anonymized telemetry defaults to on. It is MIT-licensed; the other three are Apache-2.0.

There is also a hosted endpoint that needs a Browser Use Cloud API key. Cloud browsers cost $0.02 per browser-hour plus traffic, per the README.

Sources

microsoft/playwright-mcp at 3d49ff2
README.md · src/README.md · cli.js · package.json

ChromeDevTools/chrome-devtools-mcp at 0b37364
README.md · docs/tool-reference.md · docs/configuration.md · docs/advanced-usage.md · docs/design-principles.md · docs/cli.md · src/tools/snapshot.ts · src/tools/performance.ts · src/tools/lighthouse.ts · src/tools/memory.ts · src/bin/chrome-devtools-mcp-main.ts · package.json

browser-use/browser-use at b49a68e
server.json · browser_use/mcp/cli_mcp.py · browser_use/mcp/server.py · browser_use/config.py · pyproject.toml · README.md · LICENSE

microsoft/playwright-cli at 4bc00fb
README.md · skills/playwright-cli/SKILL.md · package.json