shared-chrome-mcp
Drives a single persistent Google Chrome instance over CDP so multiple agents can share one logged-in browser. Gives each MCP session its own window and tabs, navigates/clicks/types and waits for pages to fully settle before returning a snapshot, keeps cookies and logins across sessions (refusing obvious logouts), and can hand a window over to a human for CAPTCHAs, 2FA codes or final review.
shared-chrome-mcp
One Chrome that stays on and stays logged in, shared by all your agents at once: Claude Code, Codex, Cursor, Claude Desktop, anything that speaks MCP.
You log in to a site once, or let the agent do it, and every agent can use that login from then on. The agent logs in by itself when a site asks; nothing stops at the login page and waits for you.
Why not just Playwright MCP
This is stock Playwright MCP attached to one Chrome over CDP, plus the rules we learned the hard way, enforced by the server so agents don't have to remember them:
A window per agent, not a tab. A background tab reports
document.hidden, gets throttled, and bot checks flag it. Each MCP session gets its own window on first use and only ever sees its own tabs, so ten agents can work side by side without landing in each other's pages.Waits until the page is ready. After navigate, click, back, select or key press, it waits for load, network idle, no visible spinners and one second without DOM changes (20 s at most), then returns a fresh snapshot. If the page never settles, the result says
NOT READYplainly instead of handing back a half-loaded page.Logins stay. Cookies are shared, so the server refuses obvious logout clicks and URLs. Closing a session closes its windows and nothing else.
Hand a window to the human. For a step only a person can do (a CAPTCHA, a 2FA code, a final review before submit),
browser_hand_overbrings the current window to the front, puts an optional note in its title and leaves it open after the session ends; the session stops seeing it.Always on. On macOS a launchd agent keeps Chrome running across crashes and reboots.
Alternatives: agent-browser (a driver that pins each session to a tab) and BrowserOS neo (a separate browser app for agents).
Related MCP server: agent-browser-bridge
Start Chrome
Needs Node.js 20.11+ and Google Chrome.
npx -y github:zucchini-chat/shared-chrome-mcp install # macOS: launchd keeps it running
npx -y github:zucchini-chat/shared-chrome-mcp start # or run it in the foreground (any OS)
npx -y github:zucchini-chat/shared-chrome-mcp statusChrome opens on its own profile (~/.shared-chrome-mcp/profile) with CDP on 127.0.0.1:9222. Log in there to the sites you want agents to use, or leave that to the agents. Change the port or profile with --port / --profile (or SHARED_CHROME_MCP_PORT / SHARED_CHROME_MCP_PROFILE), the same for every command and for the MCP server. uninstall removes the launchd agent and keeps the profile. install points launchd at the copy of the package it ran from, so run it again after an update.
On macOS, links from other apps open in the oldest running Chrome. If they start landing in the agents' Chrome, install with --owner-chrome-first: it starts your own Chrome first and restarts the agents' one whenever yours restarts.
Claude Code
The repo is a plugin and its own marketplace:
/plugin marketplace add zucchini-chat/shared-chrome-mcp
/plugin install shared-chrome-mcp@shared-chrome-mcpClaude Code installs the two dependencies from package-lock.json as part of the plugin install. The plugin has no version number, so it follows this repo's commits: /plugin marketplace update shared-chrome-mcp brings the latest, or turn on auto-update for the marketplace under /plugin > Marketplaces. You get the MCP server, a skill with the rules the server cannot enforce (payments, downloads, parallel agents, what to do when Chrome is down), and a hook that blocks Claude in Chrome, which refuses to log in anywhere.
Codex, Cursor, Claude Desktop and others
Add it as a stdio MCP server. Codex, in ~/.codex/config.toml:
[mcp_servers.browser]
command = "npx"
args = ["-y", "github:zucchini-chat/shared-chrome-mcp"]Cursor, Claude Desktop and most others:
{ "mcpServers": { "browser": { "command": "npx", "args": ["-y", "github:zucchini-chat/shared-chrome-mcp"] } } }Each client process is one session with its own window. Subagents inside one session share it, so run one browser subagent at a time, or separate sessions in parallel.
Security
The CDP port hands the whole logged-in profile to any process on this machine: every cookie and every session, no password asked. Chrome listens on 127.0.0.1 only. Never forward or expose the port, and run this only on a machine where you trust everything that runs. Playwright MCP's browser_run_code_unsafe tool, kept here, runs arbitrary code in the server process.
Test
From a checkout, after npm install: npm run smoke starts a throwaway Chrome on port 9333, connects two MCP sessions at once and checks the windows, visibility, readiness wait, popups, dialogs, hand-over and cleanup.
This server cannot be deployed
Maintenance
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Cloud browsers for AI agents: get past bot detection, sign in with MFA, run web tasks at scale.
A paid remote MCP for AI agent browser MCP session, built to return verdicts, receipts, usage logs,
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA multi-agent orchestrator that enables multiple AI agents to share a single Chrome browser instance with tab isolation and shared state. It preserves local browser data like cookies and logins while allowing concurrent agent sessions through the official Playwright MCP.10MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to control and inspect the user's actual Chrome browser via MCP, preserving login sessions and isolating agent tasks in background tab groups without disrupting the user's workflow.298 npmMIT
- AlicenseNot gradedqualityBmaintenanceLets many AI agent sessions share one real logged-in browser, each with its own tab group, using standard Playwright MCP tools.18 npmApache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to drive a live, persistent self-hosted Chromium session over MCP, running browser actions via Playwright/CDP, capturing page snapshots, screenshots and videos, and managing uploads and downloads in the same tabs and signed-in accounts a human user can take over at any time.3 npmApache 2.0