Control your real Chrome from Claude Code — with your logins, cookies, and 2FA.
The only browser MCP with multi-session support (10 concurrent AI sessions), human-in-the-loop (2FA, CAPTCHA, credentials), and built-in provider integrations (Stripe, HubSpot, Slack, and 6 more). 29 tools total.
npx @agent360/browser-mcp installThis copies the Chrome extension to ~/.browser-mcp/extension/ and configures Claude Code automatically.
Then load the extension in Chrome:
- Open
chrome://extensions - Enable Developer mode (top right)
- Click Load unpacked → select
~/.browser-mcp/extension/ - Restart Claude Code
That's it. 29 browser tools are now available in Claude Code.
| Browser MCP | Playwright MCP | BrowserMCP.io | |
|---|---|---|---|
| Browser | Your real Chrome | Headless (new session) | Your real Chrome |
| Logins/cookies | Already authenticated | Must log in every time | Already authenticated |
| Multi-session | 10 concurrent sessions with color-coded tab groups | Single session | Single session |
| Human-in-the-loop | browser_ask_user — 2FA, CAPTCHA, credential input |
None | None |
| Provider integrations | 9 built-in (Stripe, HubSpot, Slack...) | None | None |
| CORS bypass | browser_fetch from extension background |
N/A | Limited |
| Network monitoring | browser_wait_for_network via CDP |
Built-in | None |
| CSP-strict sites | Chrome Debugger API throughout | Works (headless) | Limited |
| Custom dropdowns | Angular Material, React Select support | Works (headless) | Limited |
| Install | npx @agent360/browser-mcp install |
npx @anthropic-ai/mcp-playwright |
Manual clone |
| Tool | Description |
|---|---|
browser_navigate |
Navigate to URL (reuses tab, or new_tab=true) |
browser_get_page_content |
Get page text or HTML |
browser_screenshot |
Screenshot via Chrome Debugger (works even when tab isn't focused) |
browser_execute_script |
Run JavaScript in page context |
| Tool | Description |
|---|---|
browser_click |
Click via CSS or text selector (text=Submit, button:text(Next)) |
browser_fill |
Fill input fields (works on CSP-strict sites) |
browser_press_key |
Keyboard events (Enter, Tab, Escape, modifiers) |
browser_scroll |
Scroll to element or by pixels |
browser_wait |
Wait for element to appear |
browser_hover |
Hover for tooltips/dropdowns |
browser_select_option |
Native <select> + custom dropdowns (Angular Material, React Select) |
browser_handle_dialog |
Accept/dismiss alert/confirm/prompt dialogs |
| Tool | Description |
|---|---|
browser_list_tabs |
List session's tabs only |
browser_switch_tab |
Switch to tab by ID |
browser_close_tab |
Close tab (session-owned only) |
browser_get_new_tab |
Get most recently opened tab (OAuth popups) |
browser_list_frames |
List iframes on page |
browser_select_frame |
Execute JS in specific iframe |
| Tool | Description |
|---|---|
browser_get_cookies |
Get cookies for domain |
browser_get_local_storage |
Read localStorage |
browser_fetch |
HTTP request from extension (bypasses CORS) |
browser_wait_for_network |
Wait for specific API call to complete |
browser_extract_token |
Navigate to provider dashboard + extract API token |
| Tool | Description |
|---|---|
browser_solve_captcha |
Detect and solve CAPTCHAs. Auto-detects reCAPTCHA v2/v3, hCaptcha, Turnstile, FunCaptcha. Actions: detect, click_checkbox (auto-click, ~80% pass with Google login), click_grid (AI vision guided), ask_human (fallback) |
| Tool | Description |
|---|---|
browser_ask_user |
Show overlay dialog for 2FA, CAPTCHA, credentials, or any user input |
| Tool | Description |
|---|---|
browser_get_cookies |
Get cookies for a domain |
browser_set_cookies |
Set cookies for a domain |
browser_get_local_storage |
Read localStorage from page |
browser_set_local_storage |
Write localStorage values |
browser_console_logs |
Capture console.log/warn/error messages from page |
browser_upload_file |
Upload files to <input type="file"> via Chrome Debugger API (no dialog) |
Each Claude Code conversation gets its own MCP server on a unique port (9876-9885). The Chrome extension connects to all active servers simultaneously.
Claude Session 1 ←(stdio)→ MCP :9876 ←(WS)→
Claude Session 2 ←(stdio)→ MCP :9877 ←(WS)→ Chrome Extension → Browser
Claude Session 3 ←(stdio)→ MCP :9878 ←(WS)→
- Session isolation — each session gets a color-coded Chrome Tab Group
- Tab ownership — sessions can only see and control their own tabs
- Auto-cleanup — processes exit when Claude Code closes the conversation
browser_extract_token navigates to the provider's API settings page and guides token extraction:
| Provider | Token Format | Dashboard |
|---|---|---|
| Stripe | sk_test_... / sk_live_... |
stripe.com/apikeys |
| HubSpot | pat-... |
app.hubspot.com |
| Slack | xoxb-... |
api.slack.com/apps |
| Shopify | Admin API token | admin.shopify.com |
| Pipedrive | UUID | app.pipedrive.com |
| Calendly | JWT | calendly.com |
| Mailchimp | ...-us1 |
admin.mailchimp.com |
| OAuth Client | console.cloud.google.com | |
| Client ID/Secret | linkedin.com/developers |
extension/
manifest.json # Manifest V3
background.js # Service worker — Chrome API dispatcher, session tab groups
offscreen.js # Persistent WebSocket bridge (multi-port scanning)
popup.html/js # Status UI — sessions, tabs, action log
mcp-server/
index.js # MCP server (stdio) + WebSocket client
tools.js # 29 tool definitions
bin/cli.js # Install CLI
- Claude Code starts → spawns MCP server via stdio
- MCP server binds to first available port (9876-9885)
- Extension's offscreen document scans ports every 2s
- WebSocket connection established
- Commands flow: Claude Code → MCP → Extension → Chrome APIs
- Process auto-exits when Claude Code closes (stdin detection)
The MCP server runs via npx @agent360/browser-mcp@latest — always the latest version from npm. No manual git pulls needed.
To update the extension: npx @agent360/browser-mcp install (re-copies files), then reload in chrome://extensions.
"Chrome extension not connected"
- Check extension is loaded in
chrome://extensions - Click the extension popup → "Reconnect"
- Wait 2-3 seconds for port scan
Screenshot fails
- Uses Chrome Debugger API (works even when tab isn't focused)
- Falls back to
captureVisibleTabif debugger unavailable
Click doesn't work on SPA
- Try text selector:
browser_click("text=Submit") - Uses real mouse events via Chrome Debugger API automatically
Stale processes
- Processes auto-exit when Claude Code closes (stdin detection)
- Idle timeout: 4 hours without commands → auto-exit
- Manual cleanup:
lsof -i :9876-9885 | grep LISTEN
MIT — Agent360
