Pilot
Pilot allows AI agents to control a real Chrome browser tab (or visible Chromium instance) with authenticated sessions, bypassing bot detection and Cloudflare blocks.
Navigation
Navigate to URLs, go back/forward, reload pages, and compare text content between two URLs
Page Inspection & Snapshots
Capture accessibility tree snapshots with element refs for precise targeting, snapshot diffs, and focused interactive elements
Extract clean text, full HTML, links, form fields, element attributes, computed CSS values, and element states
Element Interaction
Click, double-click, right-click, hover, fill, select dropdowns, type, press keys, drag, scroll, wait, and upload files
Target elements by ref, CSS selector, visible text, label, or role
Visual & Output
Screenshots (full page, element, clipped, annotated, or responsive across device sizes)
Save pages as PDFs
Tab Management
List, open, close, and switch between browser tabs
Iframe Support
List iframes, switch context into a specific iframe, and return to the main frame
Debugging & Monitoring
Access console messages, network requests, dialog captures, cookies, localStorage, sessionStorage, and performance timings
Run arbitrary JavaScript expressions
Session & Authentication
Import cookies from Chrome, Arc, Brave, Edge, and Comet via Keychain decryption
Save/load/clear full session state, set cookies, custom headers, user agents, viewport size, geolocation, and block requests by URL pattern
Manual Handoff
Pause automation for human intervention (e.g., CAPTCHAs) then resume automated control
Tool Profiles
Choose from core (9 tools), standard (30 tools), or full (61 tools) profiles based on needs
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PilotGo to Amazon and find the current price for a PlayStation 5."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pilot — browser automation MCP for AI agents
Native Playwright-backed browser sessions by default. No Chrome extension required for QA automation.

Pilot has two browser backends:
Native mode (default): isolated Playwright browser contexts. This is the supported path for parallel QA automation and reliable screenshots.
Extension mode (legacy/opt-in): connects to your real Chrome profile when you need existing cookies and logged-in sessions.
Native mode avoids chrome.tabs.captureVisibleTab() entirely, so screenshots do not depend on Chrome being foregrounded, a tab being visibly active, or the extension service worker being fresh.
How it works
AI Agent → MCP Server → Broker on 127.0.0.1:3131 → Native browser session
(stdio) (first process owns broker) (Playwright context/page)Pilot runs as an MCP server — Claude Code, Cursor, or any MCP client connects via stdio
The first Pilot process becomes the broker on localhost
Later Pilot processes connect as broker clients
Each session gets an isolated native browser context/page
Screenshots come from Playwright, not the Chrome extension capture API
Related MCP server: browser-devtools-mcp
Quick Start
1. Add the MCP server
codex mcp add pilot \
--env PILOT_BROWSER_MODE=native \
--env PILOT_PROFILE=full \
-- npx -y pilot-mcpFor a local checkout:
npm install
npm run build
codex mcp add pilot \
--env PILOT_BROWSER_MODE=native \
--env PILOT_PROFILE=full \
-- node /absolute/path/to/pilot/dist/index.js2. Use it
"Open https://example.com, take a screenshot, and summarize the page."
No extension install. No Chrome foreground requirement.
For full native-mode operations, stress commands, and cleanup checks, see docs/native-mode.md.
Lean snapshots
Other tools dump 50K+ chars per page into your context window. Pilot keeps things small:
Other tools: navigate(58K) → navigate(58K) → answer = 116K chars
Pilot: navigate(2K) → navigate(2K) → snapshot(9K) = 13K charssnapshot_diff shows only what changed between actions — no redundant re-reads.
Less context = faster responses, cheaper API calls, fewer hallucinations.
Pilot vs @playwright/mcp
Pilot | @playwright/mcp | |
Browser | Native Playwright context by default; real Chrome via legacy extension | New Chromium instance |
Auth state | Native isolated by default; extension mode can use real Chrome cookies | Anonymous — manual setup |
Bot detection | Native for automation; extension mode for real-profile handoff | Blocked by Cloudflare |
Snapshot size | ~2K navigate, ~9K full | ~50-60K |
Snapshot diff |
| ❌ |
Cookie import | Chrome, Arc, Brave, Edge, Comet | Manual JSON |
Iframes | ✅ | ❌ |
Tool profiles |
|
|
Transport | stdio | stdio, HTTP, SSE |
69 tools across 3 profiles
LLMs degrade as tool lists grow. Load only what you need:
Profile | Tools | What's included |
| 9 | navigate, snapshot, click, fill, type, press_key, wait, screenshot, snapshot_diff |
| 40 | Core + pilot_act, pilot_guide, evidence, doctor/reset, tabs, scroll, hover, drag, iframes, auth, block, find |
| 69 | Standard + network intercept, assertions, clipboard, geolocation, CDP, evaluate, PDF, responsive, deep inspection |
{
"mcpServers": {
"pilot": {
"command": "npx",
"args": ["-y", "pilot-mcp"],
"env": { "PILOT_PROFILE": "standard" }
}
}
}Default: standard. Full tool reference →
Native mode
Native mode is the default:
PILOT_BROWSER_MODE=nativeUse it for QA automation, parallel MCP sessions, and screenshot evidence.
Verify it before QA runs:
PILOT_HEADLESS=1 npm run stress:screenshots
npm run stress:codexExpected: both report 6/6 passed.
Extension mode
Extension mode is legacy and opt-in:
PILOT_BROWSER_MODE=extensionUse it only when you need a user's already-authenticated real Chrome profile.
Import cookies from your real browser: pilot_import_cookies({ browser: "chrome", domains: [".github.com"] })
Supports Chrome, Arc, Brave, Edge, Comet via macOS Keychain / Linux libsecret. For CAPTCHAs: pilot_handoff → you intervene → pilot_resume.
Requirements
Node.js >= 18
Playwright Chromium
macOS or Linux
Extension mode only: Chrome + Pilot extension
If Chromium is missing:
npx playwright install chromiumSecurity
Extension communicates on localhost only (127.0.0.1)
Native broker communicates on localhost only (127.0.0.1)
Native sessions use isolated browser contexts per MCP session
Output path validation prevents writes outside
PILOT_OUTPUT_DIRPath traversal protection on all file operations
PILOT_PROFILEcontrols which tools are exposed (core/standard/full)
Credits
Core architecture — ref-based element selection, snapshot diffing, annotated screenshots — ported from gstack by Garry Tan. Built on Playwright and the MCP SDK.
If Pilot is useful, star the repo — it helps others find it.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Appeared in Searches
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/TacosyHorchata/Pilot'
If you have feedback or need assistance with the MCP directory API, please join our Discord server