Patchright MCP

Hosted, multi-tenant browser automation for agents — undetected Chromium, persistent per-tenant profiles, Google sign-in, inline human handoff widgets, WARP proxy routing.

Checking service health...

Paste this into claude.ai's connector form

No token. claude.ai discovers OAuth automatically; the first tool call sends you through Google sign-in once, then every call is scoped to your tenant — isolated profiles, cookies, pages, and enrolled browsers per identity.

Claude Desktop / ChatGPT / Cursor

These clients don't auto-discover OAuth, so you mint a per-client bearer token and paste a URL that already contains it.

  1. Sign in with Google — first time only. Each Google identity is an isolated tenant.
  2. Open /dashboard, click Mint token, name it (e.g. claude desktop), copy the resulting connector URL.
  3. Paste it into your client. Every tool call lands in your tenant.

Token revocation, rotation, and per-client naming all happen from the dashboard. Lost a laptop? Revoke that one token without breaking your others. Need to wipe everything? The dashboard's danger zone self-deletes your tenant — profiles, pages, enrollments, tokens, and uploaded files all cascade.

Install the extension (recommended)

The Patchright Handoff extension binds a Chrome profile to your tenant so agent handoffs auto-fulfill without you clicking links — handy when an agent hits a passkey, MFA prompt, or Cloudflare challenge mid-task.

  1. Download extension.zip v0.4.2 and unzip anywhere.
  2. Open chrome://extensions/ in Chrome → toggle Developer mode on (top-right) → click Load unpacked → select the unzipped folder.
  3. Pin the Patchright Handoff icon, open the popup, click Connect via OAuth. After consent, the popup pill flips to Enrolled and the binding shows up on your dashboard.
  4. From then on, any agent call to pr_handoff_start for a site you're signed into auto-fulfills silently in a minimized off-screen window. Hit Pause all sync in the popup any time to disable.

No extension? Agent handoff URLs still work — open in any browser, the bounce page falls back to a manual paste flow for users who'd rather use Cookie-Editor or paste raw storage_state.json.

Endpoint

Three ways to authenticate: (1) bare https://patchright.nlma.io/mcp — client does OAuth 2.1 DCR, you sign in with Google at /authorize, the issued bearer binds to your tenant (claude.ai connector path); (2) https://patchright.nlma.io/mcp?token=<token> — URL-paste with a dashboard-minted bearer; (3) Authorization: Bearer <token> header for clients that support it. All three resolve to the same per-tenant scope.

Recommended agent flow

1. pr_open_page(url, profile)
2. Automate known fields with pr_fill / pr_fill_by_label / pr_click
3. When a human needs to step in (login, 2FA, CAPTCHA, ambiguous UI):
4. For full auth (passkey / password manager / MFA on a third-party site):
     pr_handoff_start(page_id, target_url, allowed_origins, reason)
     pr_handoff_wait(handoff_id)
5. Continue automation, then pr_close_page

Self-host

Deploy your own instance — separate tenants, separate VPS, separate token universe.

git clone https://github.com/NextLevelManagementAdvisors/patchright-mcp.git
cd patchright-mcp
cp .env.example .env
# Set BASE_URL, PATCHRIGHT_FOUNDER_EMAIL, GOOGLE_CLIENT_ID,
# GOOGLE_CLIENT_SECRET, and PATCHRIGHT_SESSION_SECRET in .env.
# See .env.example for full reference.
bash deploy/install.sh

Google OAuth client: create a "Web application" client in Google Cloud Console with redirect URI <BASE_URL>/auth/google/callback. Want a closed instance? Set PATCHRIGHT_ALLOWED_EMAILS to a comma-separated allowlist.