Browser Mcp

by Agent360dk

18 stars
523 downloads
Not rated
GitHub Website

About

Drive your real, logged-in Chrome from any AI agent (Claude Code, Cursor, VS Code) — works where headless dies. Reads emailed login codes from your Gmail, solves CAPTCHAs, 34 tools. MIT, local-only.

Details

Author
Agent360dk
GitHub stars
18
Downloads
523
Categories
Developer Tools, Automation, Web Scraping

- 34 browser control tools (navigation, interaction, tabs, data, CAPTCHA solving)
- ~80% reCAPTCHA checkbox auto-solve with human fallback
- Multi-session support with color-coded tab groups (up to 10 concurrent sessions)
- Human-in-the-loop overlay for 2FA, CAPTCHA, and credential input
- 9 built-in provider integrations for token extraction (Stripe, HubSpot, Slack, etc.)
- MIT licensed, free, and 100% local — nothing leaves your machine

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Browser Mcp
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Install the MCP server by running npx @agent360/browser-mcp install, then load the Chrome extension from ~/.browser-mcp/extension/ via chrome://extensions with Developer mode enabled. Alternatively, install from the Chrome Web Store and run npx @agent360/browser-mcp install --skip-extension to configure Claude Code.

browser_navigate

Navigate the active browser tab to a URL. Reuses the current tab by default (no tab spam). Pass new_tab=true only when you need to keep the current page open.

browser_get_page_content

Get the content of the current page as text or HTML.

browser_screenshot

Take a screenshot of the visible area of the current tab. Returns base64 PNG, or saves to disk if path is provided.

browser_execute_script

Execute JavaScript code in the context of the current page. Returns the result.

browser_click

Click an element on the page. Supports CSS selectors AND text-based selectors. Auto-scrolls element into view. Uses real mouse events (works on Angular/React SPAs and CSP-strict sites like Google, Stripe). Examples: "button:text(Get started)", "text=Submit", "#my-button", "a.btn-primary"

browser_fill

Fill a form input field with a value. Supports CSS selectors AND text-based selectors. Auto-scrolls and focuses the element. Works on CSP-strict sites via Chrome Debugger API. For date inputs use browser_set_date, for autocomplete/combobox use browser_set_combobox.

browser_press_key

Press a keyboard key (Enter, Tab, Escape, ArrowDown, etc.). Useful for submitting forms, navigating dropdowns, closing dialogs. Supports modifier keys (ctrl, alt, shift, meta).

browser_scroll

Scroll the page to an element or by pixel amount. Useful for reaching elements below the fold.

browser_wait

Wait for an element to appear on the page. Supports CSS and text-based selectors.

browser_hover

Hover over an element to trigger tooltips, dropdown menus, or hover states. Supports CSS and text selectors.

browser_select_option

Select an option from a dropdown menu. Works with native <select> elements AND custom dropdowns (Angular Material, React Select, etc.). For custom dropdowns: clicks the trigger, waits for options, then clicks the matching option by text. For autocomplete (typing filters options) use browser_set_combobox instead.

browser_dismiss_overlays

Dismiss visible popups, modals, tooltips, banners, and "Are you sure?"-style overlays in one call. Heuristic-based: finds close affordance via aria-label, text content (Skip/Cancel/Ikke nu/Don't show/Got it/Close), or × character button. Use when a flow is interrupted by unexpected dialogs (cookie banners, onboarding tooltips, draft-confirm prompts on Meta Ads, etc.). Returns list of what was dismissed.

browser_set_combobox

Set value(s) on an autocomplete/combobox input. Handles the click → type query → wait for filtered listbox → click option flow as one MCP call. Supports multi-select (e.g., Languages on Meta Ads). Use when browser_select_option fails because options render lazily after typing.

browser_drop_file

Upload a file by finding a hidden <input type="file"> within a drag-drop zone's subtree (or parent up to 2 levels). Use when browser_upload_file fails because the dropzone has no visible file input. Returns clear error if no input is found anywhere — pure drop-zones without backing inputs require manual handling.

browser_set_date

Robustly set a date input — handles native <input type="date">, masked text inputs (e.g. MM/DD/YYYY), and calendar pickers (MUI, react-datepicker, AntD, Lexical/Meta). Tries native value-set, format-aware typing via Input.insertText, and ARIA-based picker navigation in sequence with read-back verification. Use instead of browser_fill when fill fails or for any input that opens a calendar widget.

browser_handle_dialog

Handle JavaScript alert(), confirm(), or prompt() dialogs. Call this BEFORE triggering the action that causes the dialog. Waits for the dialog to appear, then accepts or dismisses it.

browser_wait_for_network

Wait for a network request to complete. Useful after clicking buttons that trigger API calls — ensures data is loaded before reading the page. Monitors real network traffic via Chrome DevTools Protocol.

browser_fetch

Make an HTTP request from the extension background (NOT subject to CORS). Use this when page-context fetch would be blocked by CORS or CSP. Useful for API calls to Google, Stripe, Slack APIs while on their pages.

browser_list_tabs

List all open browser tabs with their URLs and titles.

browser_get_cookies

Get cookies for a specific domain.

browser_get_local_storage

Read localStorage from the current page. Pass key for a specific value, or omit for all.

browser_set_cookies

Set one or more cookies for a domain.

browser_set_local_storage

Set a localStorage key-value pair on the current page.

browser_console_logs

Get recent console.log/warn/error messages from the page. Installs a lightweight interceptor on first call. Returns the last N console messages.

browser_ask_user

Show an overlay dialog asking the user to perform an action or provide information (credentials, 2FA, CAPTCHA, OAuth consent). Can include input fields for the user to fill in. Returns user responses.

browser_list_frames

List all frames (iframes) in the current page with their URLs and indices.

browser_select_frame

Execute JavaScript in a specific iframe by frame index. Use browser_list_frames first to find the right index.

browser_get_new_tab

Get the most recently opened tab (useful after clicking links that open new tabs, OAuth popups, etc.).

browser_switch_tab

Switch to a specific browser tab by ID. Get tab IDs from browser_list_tabs or browser_get_new_tab.

browser_close_tab

Close a browser tab by ID. Only tabs owned by the current session can be closed.

browser_upload_file

Upload a file to a <input type="file"> element on the page. Uses Chrome Debugger API to set files programmatically — no dialog needed. For drag-drop zones without visible file input use browser_drop_file.

browser_extract_token

Navigate to a provider's API settings page so you can read its API token from the page.

browser_solve_captcha

Detect and solve CAPTCHAs on the current page. Auto-detects reCAPTCHA v2/v3, hCaptcha, Cloudflare Turnstile, and FunCaptcha. Tries auto-click first (often clears reCAPTCHA v2 when signed into Google), then returns a screenshot for AI vision analysis, then falls back to asking the user. Returns detection info and solving status.

browser_about

Returns Browser MCP info and pre-filled URLs the user can click to submit feature wishes, share use-cases, or report bugs. Call this PROACTIVELY whenever the user (a) mentions a feature they wish existed ("I wish browser-mcp could...", "it would be nice if..."), (b) says something is missing, broken, or unexpected, (c) asks how Browser MCP works or who maintains it, or (d) describes something cool they built with browser-mcp. Pass intent="wish" | "use_case" | "bug" | "info" plus an optional title and body, and offer the returned submit_url to the user. Browser MCP is community-shaped — this tool is how the user contributes back.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "browser mcp": {
            "browser-mcp": {
                "command": "npx",
                "args": [
                    "@agent360/browser-mcp"
                ]
            }
        }
    }
}

McpServers

{
    "browser-mcp": {
        "command": "npx",
        "args": [
            "@agent360/browser-mcp"
        ]
    }
}

Browser MCP by Agent360

npm version
npm downloads
GitHub stars
License: MIT
MCP
Chrome Web Store

Your AI agent drives your real, logged-in Chrome — and works where headless tools die.

Browser MCP Demo

Watch the 37-second demo with sound →

Browser MCP gives Claude Code (and any MCP client — Cursor, VS Code agent mode) control of your actual Chrome: your cookies, your sessions, your 2FA. So it works on CAPTCHA, 2FA and anti-bot sites where Playwright and Puppeteer get blocked — because it's you browsing.

The killer move: it hits a login wall, reads the verification code from your own Gmail tab, and continues the sign-in. No API can do that. Operate platforms with no API, QA your own web app end-to-end, or work dashboards, LinkedIn and Reddit at human pace — with you approving the sensitive steps.

34 tools. ~80% reCAPTCHA-checkbox solve with a human fallback for the rest. Multi-session color-coded tab groups. MIT, free, and 100% local — nothing leaves your machine.

Install — 2 steps (~60 seconds)

Step 1: Configure the MCP server

npx @agent360/browser-mcp install

This copies the Chrome extension files to ~/.browser-mcp/extension/ and adds the MCP server to your Claude Code config. You'll see the path to the extension folder printed in the terminal — copy it.

Step 2: Load the extension in Chrome

> Chrome won't let extensions install themselves from npm — you load it manually one time. To update later, re-run the install command and reload it (see Keeping it updated). Prefer the Chrome Web Store install if you'd rather have the extension auto-update.

1. Open Chrome and type chrome://extensions in the address bar
2. Toggle "Developer mode" ON (top right corner)
3. Click "Load unpacked" (top left, next to "Pack extension")
4. Navigate to ~/.browser-mcp/extension/ and click "Select"
- On Mac: Press Cmd+Shift+G in the file picker, paste ~/.browser-mcp/extension/, press Enter
- On Windows: Paste %USERPROFILE%\.browser-mcp\extension\ in the address bar
- On Linux: Type ~/.browser-mcp/extension/ in the path field
5. Restart Claude Code so it picks up the new MCP server

That's it. The Browser MCP icon will appear in your toolbar, and 34 browser tools are now available in Claude Code.

Alternative: Manual zip download (no npm)

If you don't want to use npm, download the extension directly:

1. Download browser-mcp-v1.23.0.zip from the latest GitHub release
2. Unzip the file (anywhere — e.g. ~/Downloads/browser-mcp-extension/)
3. Follow Step 2 above, but select the unzipped folder instead of ~/.browser-mcp/extension/
4. Configure Claude Code manually by adding this to your ~/.claude.json (or run npx @agent360/browser-mcp install --skip-extension):

   {
"mcpServers": {
"browser-mcp": {
"command": "npx",
"args": ["@agent360/browser-mcp"]
}
}
}

Chrome Web Store (one-click install)

Install from Chrome Web Store →

No Developer mode needed. Then run npx @agent360/browser-mcp install --skip-extension to configure Claude Code.

Why This Over Playwright MCP / BrowserMCP?

| | 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 |

34 Tools

Navigation & Content

| 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 |

Interaction

| 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_set_combobox | Autocomplete/combobox: type query → wait for filtered listbox → click option (multi-value chip support). Use when browser_select_option fails on lazy-rendered options | | browser_set_date | Robust date inputs: tries native value-set → masked typing → calendar-picker navigation (MUI/AntD/react-datepicker/Lexical). Use when browser_fill fails on date fields | | browser_dismiss_overlays | Bulk-dismiss popups/modals/tooltips/banners via aria-label/text/×-char heuristics. non_critical mode preserves dialogs with form data | | browser_handle_dialog | Accept/dismiss native alert/confirm/prompt dialogs |

Tabs & Frames

| 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 |

Data & Network

| 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 |

CAPTCHA Solving

| 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) |

Human-in-the-Loop

| Tool | Description | |------|-------------| | browser_ask_user | Show overlay dialog for 2FA, CAPTCHA, credentials, or any user input |

Data

| 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) | | browser_drop_file | Upload via drop-zones: finds hidden <input type="file"> in target subtree/parent (up to 2 levels). Use when browser_upload_file fails because the zone has no visible input |

Multi-Session Support

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

Built-in Provider Integrations

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 |
| Google | OAuth Client | console.cloud.google.com |
| LinkedIn | Client ID/Secret | linkedin.com/developers |

Architecture

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 # 34 tool definitions
bin/cli.js # Install CLI

How It Works

1. Claude Code starts → spawns MCP server via stdio 2. MCP server binds to first available port (9876-9885) 3. Extension's offscreen document scans ports every 2s 4. WebSocket connection established 5. Commands flow: Claude Code → MCP → Extension → Chrome APIs 6. Process auto-exits when Claude Code closes (stdin detection)

Keeping it updated

Browser MCP has two parts, and they update independently — how the extension updates depends on how you installed it:

| Part | Install method | How it updates |
|------|----------------|----------------|
| MCP server | any | Automatic. Runs via npx @agent360/browser-mcp@latest, so every Claude Code session pulls the newest from npm. Nothing to do. |
| Extension | Chrome Web Store | Automatic. Chrome updates it in the background (usually within a few hours). Nothing to do. |
| Extension | Unpacked (npx … install or manual zip) | Manual. Chrome never auto-updates a load-unpacked extension. Re-run npx @agent360/browser-mcp install, then open chrome://extensions → Browser MCP → ↻ reload. |

Not sure which you have? Open chrome://extensions and find Browser MCP. If it shows a "Loaded from /path/…" line, it's unpacked (manual updates). If there's no such line, it came from the Chrome Web Store (auto-updates).

Want zero-maintenance updates? Install the extension from the Chrome Web Store, then run npx @agent360/browser-mcp install --skip-extension to wire up just the MCP server. After that, both parts stay current on their own.

Troubleshooting

"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 captureVisibleTab if 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

💡 Help Shape Browser MCP

Browser MCP is built in the open and shaped by the people using it.

Browse what others want / built

- 💡 Wishlist → — features people are asking for - 🎯 Use-cases → — what others have built (LinkedIn ICP scraping, vendor research, daily ops, …)

Contribute in 30 seconds

- 💡 Wish for a feature - 🎯 Share a use-case - 🐛 Report a bug

Or just ask Claude — it knows about the browser_about tool and will draft + submit on your behalf when you say things like "I wish browser-mcp could …" or "share my browser-mcp use-case".

License

MIT — Agent360

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.