> Agent-readable docs index: /llms.txt. Download /docs.zip to grep all markdown files locally.

---
title: Playwriter vs BrowserMCP
sidebarTitle: vs BrowserMCP
description: One execute tool with full Playwright vs dozens of fixed tools.
icon: lucide:puzzle
---

BrowserMCP exposes browser automation through **12+ dedicated MCP tools**, each with its own
schema and parameters. The agent must learn every tool's interface and the MCP client must
load all their schemas into context.

Playwriter has **one tool**: `execute`. It runs any Playwright code. The agent already knows
Playwright from its training data, so there's nothing new to learn.

## Comparison

|                      | BrowserMCP              | Playwriter               |
| -------------------- | ----------------------- | ------------------------ |
| Tools                | 12+ dedicated tools     | 1 execute tool           |
| API                  | Limited actions         | Full Playwright          |
| Context usage        | High (tool schemas)     | Low                      |
| LLM knowledge        | Must learn custom tools | Already knows Playwright |
| CDP access           | No                      | Yes                      |
| Debugger             | No                      | Yes                      |
| Network interception | No                      | Full                     |

## Context usage

Every MCP tool adds its schema to the system prompt. With 12+ tools, that's thousands of
tokens the agent pays on every request just to know what's available. Playwriter's single
`execute` tool uses minimal schema space. The agent writes Playwright code, which it
already knows from training.

## Capability ceiling

BrowserMCP tools are fixed. If you need to do something the tool authors didn't anticipate,
you're stuck. Playwriter lets agents run **any Playwright code**, plus raw CDP commands
for advanced workflows like debugging, performance profiling, and live code editing.

```bash
# BrowserMCP: limited to what the tools expose
# Playwriter: anything Playwright can do

playwriter -s 1 -e "page.evaluate(() => performance.getEntriesByType('navigation'))"
playwriter -s 1 -e "state.cdp = getCDPSession({ page }); state.cdp.send('Network.enable')"
```
