I built pilot because I was tired of watching my AI agent wait.
Hundreds of browser calls per session, each one taking 100-200ms through existing MCP browser servers. That adds up to 20+ seconds of pure latency for a typical automation flow.
After running benchmarks across 5 real tasks with Claude Code as the runtime:
| pilot | @playwright/mcp | |
|---|---|---|
| Wall time | 25s | 43s — 41% faster |
| Tool result size | 5,230 chars | 9,165 chars — 43% smaller |
| Cost/task | $0.107 | $0.124 — 13% cheaper |
| Success rate | 5/5 | 4/5 |
The Architecture Insight
Most MCP browser servers run Playwright as a separate process, talking over HTTP or WebSocket. Every action pays for serialization, network round-trip, and deserialization.
Pilot takes a simpler approach: run Playwright in the same Node.js process as the MCP server. No HTTP layer. ~5ms per action vs ~100-200ms.
The Context Size Problem
Playwright MCP dumps a full snapshot on every navigate() — typically 58K chars. Pilot returns ~1K chars (top 20 interactive elements by default).
On a 2-page task that's 116K chars vs 11K entering context — 6x less before the model generates its first token.
Tool Profiles
Pilot ships 58 tools. Too many for most agents — research shows LLM performance degrades past ~30 tools.
-
core(9 tools) — navigate, snapshot, click, fill, type, press_key, wait, screenshot, snapshot_diff -
standard(28 tools) — adds tabs, scroll, hover, drag, iframes, page reading -
full(58 tools) — everything
Set PILOT_PROFILE=standard and your LLM only sees 28 tools.
Features That Actually Matter
Cookie import. Pilot decrypts cookies directly from Chrome, Arc, or Brave via macOS Keychain. Your agent is already logged into whatever you use daily.
Handoff/Resume. CAPTCHA? pilot_handoff opens a visible Chrome window with your full session. Solve it manually. pilot_resume picks up where you left off.
Iframe support. @playwright/mcp has this marked NOT_PLANNED. Pilot has full list/switch/interact support.
Quick Start
npx pilot-mcp
npx playwright install chromium
Add to .mcp.json:
{
"mcpServers": {
"pilot": {
"command": "npx",
"args": ["-y", "pilot-mcp"]
}
}
}
Works as a drop-in replacement for @playwright/mcp. Same MCP interface, faster everything.
GitHub: github.com/TacosyHorchata/Pilot | npm: pilot-mcp | v0.3.0 | MIT
Top comments (0)