Skip to main content
Glama
Browser Bridge MCP

Browser Bridge MCP

by adbarc92

Browser Bridge MCP

npm version

MCP server that gives AI coding assistants direct control of a real Chrome browser — navigate, click, fill forms, run JavaScript, take screenshots, and read page content. It exists so your assistant can see what you see, instead of you alt-tabbing to copy-paste errors and describe UI state in words.

MCP Client ←(stdio)→ mcp-browser-bridge ←(WebSocket :7483)→ Browser Extension ←(Chrome APIs)→ Browser

Works with any MCP-compatible client: Claude Code, Cursor, Windsurf, Cline, and others.

Quick Start

1. Install the extension

Load it as an unpacked extension:

  1. Download or clone this repo.

  2. Open chrome://extensions and enable Developer mode.

  3. Click Load unpacked and select the extension/ folder.

Works in any Chromium browser: Chrome, Brave, Edge, Arc, Vivaldi, Opera.

2. Add to your MCP client

Run:

claude mcp add browser-bridge -- npx -y mcp-browser-bridge

Or add to .mcp.json:

{
  "mcpServers": {
    "browser-bridge": {
      "command": "npx",
      "args": ["-y", "mcp-browser-bridge"]
    }
  }
}

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "browser-bridge": {
      "command": "npx",
      "args": ["-y", "mcp-browser-bridge"]
    }
  }
}

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "browser-bridge": {
      "command": "npx",
      "args": ["-y", "mcp-browser-bridge"]
    }
  }
}

In the Cline pane, open MCP Servers → Configure MCP Servers to edit cline_mcp_settings.json, and add:

{
  "mcpServers": {
    "browser-bridge": {
      "command": "npx",
      "args": ["-y", "mcp-browser-bridge"]
    }
  }
}

Use npx -y mcp-browser-bridge as the server command in your client's MCP configuration. The server communicates over stdio.

3. Verify

Start your MCP client. The extension popup should show a green Connected indicator. Call the browser_status tool to confirm.

Related MCP server: browser-mcp

Available Tools

All tools accept an optional tabId parameter. When omitted, they target the active tab.

Tool

Description

browser_status

Check if the extension is connected and get active tab info

browser_navigate

Navigate a tab to a URL

browser_screenshot

Capture a screenshot of the visible area of a tab

browser_evaluate

Execute JavaScript in a tab and return the result

browser_click

Click an element by CSS selector

browser_fill

Fill a form field by CSS selector (React-compatible)

browser_get_content

Get the text or HTML of a page or element

browser_get_tabs

List all open browser tabs

browser_get_console

Get captured console log entries from a tab

browser_wait_for

Wait for a CSS selector to appear on the page

browser_send_message

Send a custom message to the extension

Included Prompts

The server ships two MCP prompts that provide guided workflows to any connected client:

Prompt

Description

browse

General-purpose browser interaction — navigating, clicking, filling forms, screenshotting, running JS. Accepts an optional task argument.

qa-runner

Structured QA checklist execution — drives the browser through test scenarios defined in markdown and reports pass/fail results. Accepts an optional checklist path.

In Claude Code, these appear as slash commands: /browser-bridge:browse and /browser-bridge:qa-runner.

Configuration

The WebSocket port defaults to 7483. To change it:

  • Server side: Set the BRIDGE_WS_PORT environment variable in your MCP config.

  • Extension side: Change the port in the extension popup and click Reconnect.

Security

  • WebSocket binds to 127.0.0.1 only — no network exposure.

  • The server accepts exactly one origin, this project's extension at chrome-extension://oohfadbpiimgdciaopnehkldlakgdmhf. It refuses everything else with HTTP 403: other extensions' origins, web pages, and clients that send no Origin header.

  • The extension ID is stable because extension/manifest.json pins a public key. Chromium derives an extension's ID from that key, so every unpacked install gets the same ID regardless of which folder you load it from. Don't remove or change the key, or the server will refuse the extension.

  • Single extension client at a time.

The origin check stops websites, and extensions that connect under their own origin, from driving your browser through the bridge. Origin is still a header the client asserts, so the check has limits:

  • A program running on your machine as your user can send any Origin it likes, and such a program could control your browser by other means anyway.

  • An installed extension that can rewrite request headers might be able to forge the Origin.

Only install extensions you trust alongside this one.

Troubleshooting

Extension shows "Disconnected" Check that the MCP server is running and the port is free:

# macOS/Linux
lsof -i :7483

# Windows
netstat -aon | findstr :7483

Tools return "No extension connected" Open the extension popup and click Reconnect.

Server logs Rejected connection from origin, or browser_status says an extension was refused The extension's ID doesn't match the one the server accepts. This happens if you're running an extension copy from before 1.2.3, or one whose manifest.json has had its key removed. Update your copy of the repo, then in chrome://extensions remove the old Browser Bridge MCP and Load unpacked the extension/ folder again. Its ID should read oohfadbpiimgdciaopnehkldlakgdmhf.

Screenshots fail The target tab must be visible and focused. Background or minimized tabs cannot be captured.

browser_evaluate returns unexpected results Results must be JSON-serializable. Promises return {} — use synchronous expressions or await inside an IIFE and return a plain value.

Development

git clone https://github.com/adbarc92/mcp-browser-bridge.git
cd mcp-browser-bridge
npm install
npm run build
npm test                 # 67 tests via Vitest

Load the extension locally via chrome://extensions → Load unpacked → select extension/.

The repo includes a .mcp.json configured for local development.

License

MIT

Available Tools

11 tools
browser_clickB

Click an element on the page identified by a CSS selector

Inputs: selector (required), tabId.

browser_evaluateB

Execute JavaScript in the context of a browser tab and return the result

Inputs: expression (required), tabId.

browser_fillB

Fill a form field with the specified value

Inputs: value (required), selector (required), tabId.

browser_get_consoleB

Get captured console log entries from a tab

Inputs: clear, tabId.

browser_get_contentA

Get the HTML or text content of a page or specific element

Inputs: tabId, format, selector.

browser_get_tabsA

List all open browser tabs

Inputs: no named parameters.

browser_navigateB

Navigate a browser tab to the specified URL

Inputs: url (required), tabId.

browser_screenshotB

Capture a screenshot of the visible area of a browser tab

Inputs: tabId, format, quality.

browser_send_messageC

Send a custom message to the Chrome extension for extensibility

Inputs: type (required), data.

browser_statusA

Check if the Chrome extension is connected and get active tab info

Inputs: no named parameters.

browser_wait_forB

Wait for an element matching a CSS selector to appear on the page

Inputs: selector (required), tabId, timeout.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 11 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose, such as navigating, clicking, filling, taking screenshots, evaluating JavaScript, etc. There is no overlap or ambiguity between tool functions.

    Naming Consistency5/5

    All tools follow a consistent 'browser_<verb>' pattern (e.g., browser_navigate, browser_click), making the naming predictable and easy to understand.

    Tool Count5/5

    With 11 tools, the server covers essential browser automation actions without being overwhelming. The count is well-scoped for the domain.

    Completeness4/5

    The tool set covers core browser operations (navigation, content retrieval, interaction, screenshots, JavaScript evaluation, tab listing, waiting, console logs). However, minor gaps like back/forward navigation, tab closing, or cookie management are missing, which prevents a perfect score.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      B
      quality
      D
      maintenance
      An MCP server that enables AI coding tools to control a browser for automated actions, UI extraction, network interception, and screenshots.
      23
      1
      -
    • A
      license
      Not graded
      quality
      A
      maintenance
      A local MCP server that lets AI coding assistants drive the Chrome browser you already have open, using your existing logged-in sessions. It enables navigating and reading pages, clicking, typing, filling forms, taking screenshots, uploading files, and inspecting console, network, storage, and cookies — without headless browsers or opening a remote-debugging port.
      1 npm
      ISC