Skip to main content
Glama
browser-mcp-cdp

browser-mcp-cdp

by zhiqi-li

browser-mcp-cdp

A Model Context Protocol (MCP) server that drives your real local Chrome via the Chrome DevTools Protocol. Designed for agents that need access to your logged-in sessions (Gmail, internal dashboards, banking, etc.) without uploading credentials to a cloud service.

Why another browser MCP?

Different tradeoffs from the alternatives:

browser-mcp-cdp

Playwright MCP

Chrome DevTools MCP

Browser

Your local Chrome

Managed Playwright Chromium

Your local Chrome

Login state

✅ Snapshot of your profile (cookies, logins, IndexedDB)

❌ Fresh profile

✅ Real profile (modifies it)

Profile isolation

✅ Copy-on-start, real profile untouched

N/A

⚠️ Direct attach

Multi-client

✅ Shared broker across MCP clients

❌ Per-client

❌ Per-client

Dependencies

Node only (no Playwright download)

Playwright + browsers

Node only

The profile snapshot pattern means you can ask an agent to "check my email" — it sees your Gmail logged in — but the agent's actions never modify your real Chrome profile. Each session gets a disposable copy.

Related MCP server: CloakBrowser MCP

Install

claude mcp add browser -- npx -y browser-mcp-cdp

Or add manually to ~/.claude.json / Claude Desktop config:

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

Requires Node 18+ and Google Chrome installed.

Tools

Tool

Purpose

browser_navigate

Load a URL, return final URL + title

browser_evaluate

Run JS in the page, return result

browser_screenshot

PNG of current page

browser_click

Click via CSS selector

browser_click_at

Click at pixel coordinates (pierces iframes / overlays)

browser_fill

Set value on input/textarea/select

browser_wait_for

Wait for a selector to appear

browser_get_url

Current URL

browser_get_text

Visible text of page or element

browser_get_html

outerHTML of page or element

browser_scroll

Scroll by (x, y) pixels

browser_tabs

List open tabs

browser_new_tab

Open a new tab

Environment variables

Var

Default

BROWSER_MCP_CHROME_PATH

Auto-detected per OS

BROWSER_MCP_CHROME_PROFILE_ROOT

OS-standard Chrome profile dir

BROWSER_MCP_BROKER_SOCKET_PATH

~/.browser-mcp/broker.sock

BROWSER_MCP_BROKER_LOCK_PATH

~/.browser-mcp/broker.lock

BROWSER_MCP_BROKER_IDLE_TIMEOUT_MS

600000 (10 min)

How it works

  1. First MCP client connection spawns a broker subprocess (detached).

  2. Broker copies your Chrome profile's cookies/local storage/login data to a temp dir.

  3. Broker launches Chrome with --user-data-dir=<temp> and --remote-debugging-port.

  4. Subsequent MCP clients connect to the same broker over a Unix socket → they share one Chrome.

  5. Broker exits after BROKER_IDLE_TIMEOUT_MS of no activity; temp profile is deleted.

Security

This server lets an LLM execute arbitrary JavaScript in a browser that is logged into your accounts. Only use with models and prompts you trust. Profile snapshotting limits damage (no persistent mutations to your real Chrome), but the agent can read cookies, session tokens, and any data visible to logged-in you for the duration of the session.

License

MIT

Available Tools

13 tools
browser_clickB

Click an element matched by a CSS selector. Returns true if found and clicked.

Inputs: selector (required).

browser_click_atA

Click at an absolute (x, y) pixel coordinate on the page using real CDP mouse events. Pierces through iframes and ad overlays that block CSS-selector clicks.

Inputs: x (required), y (required).

browser_evaluateA

Execute JavaScript in the current page context and return the result. Use await_promise=true (default) for async expressions.

Inputs: expression (required), await_promise.

browser_fillB

Set the value of an input, textarea, or select element matched by a CSS selector.

Inputs: text (required), selector (required).

browser_get_htmlB

Get the outer HTML of the page or a specific element.

Inputs: selector.

browser_get_textA

Get the visible text content of the page or a specific element.

Inputs: selector.

browser_get_urlA

Get the current page URL.

Inputs: no named parameters.

browser_navigateA

Navigate the browser to a URL. Returns the final URL and page title.

Inputs: url (required).

browser_new_tabB

Open a new browser tab, optionally navigating to a URL.

Inputs: url.

browser_screenshotA

Capture a screenshot of the current page. Returns a PNG image.

Inputs: no named parameters.

browser_scrollB

Scroll the page by a relative offset in pixels.

Inputs: x, y.

browser_tabsA

List all open browser tabs with their id, url, and title.

Inputs: no named parameters.

browser_wait_forA

Wait until an element matching the CSS selector appears in the DOM. Returns true if found within the timeout, false otherwise.

Inputs: selector (required), timeout_ms.

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

    Disambiguation5/5

    Each tool targets a distinct action (navigate, click, fill, etc.) with clear boundaries. No two tools do the same thing; even click variants differ by selector vs coordinates.

    Naming Consistency4/5

    All tools use the 'browser_' prefix with a consistent verb_noun pattern (e.g., get_url, click_at). The only outlier is 'browser_tabs' which uses a noun instead of a verb, but it's still clear.

    Tool Count5/5

    13 tools is well-scoped for browser automation, covering navigation, interaction, content extraction, scrolling, and tab management without being overwhelming.

    Completeness4/5

    Covers most core browser operations (navigate, click, fill, read, screenshot, JS eval). Minor gaps like back/reload or cookie handling exist but are not critical for typical use cases.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Lets local AI agents drive the Chrome browser a user already has open, including signed-in sessions, by listing tabs, reading page text and actionable elements, then clicking, filling, selecting, scrolling, navigating, and capturing viewport screenshots without exporting cookies. Runs as a dependency-free local stdio process over Native Messaging, with per-tab leases, automatic reconnection, and pause/write-action controls.
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables AI agents to drive a Chromium-based browser for web research, testing, and automation with Playwright-compatible tools, persistent profiles, proxy matching, extension loading, and humanized input across local or containerized deployments.
      280 npm
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables AI assistants to drive the user's real, already-logged-in Chrome browser locally, so they can read and navigate pages, click, type, fill forms, take screenshots, and inspect cookies, tabs, console, and network traffic without headless browsers or remote-debugging ports.
      1 npm
      ISC
    • A
      license
      Not graded
      quality
      A
      maintenance
      Lets AI coding tools drive the user's already-signed-in Chrome browser — reading and snapshotting pages, clicking, typing, uploading files, screenshotting, and inspecting tabs, cookies, console, and network traffic. It works through a local Chrome extension bridge, so no remote debugging port is opened and the real, authenticated browser session is used.
      1 npm
      ISC