# io.github.dashi96/chromium-bridge (npm · chromium-bridge)

MCP bridge between Chromium browsers (Arc, Vivaldi, Brave) and Claude Code: browser automation

- Trust score: 66/100 (medium)
- Change this week: +20
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `chromium-bridge`: 66/100 (this document), [markdown](https://verifymcp.io/servers/dashi96-chromium-bridge/chromium-bridge.md), [page](https://verifymcp.io/servers/dashi96-chromium-bridge/chromium-bridge)

## Channel facts

- Registry: `npm`
- Package: `chromium-bridge`
- Version: `0.5.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (106 of 110), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (106 of 110), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 14 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 78/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2115 tokens (~117/item across 18 items; 18 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add dashi96-chromium-bridge -- npx -y chromium-bridge
```

### Codex

```bash
codex mcp add dashi96-chromium-bridge -- npx -y chromium-bridge
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dashi96-chromium-bridge": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "chromium-bridge"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dashi96-chromium-bridge --command npx --arg -y --arg chromium-bridge
```

### Hermes

```yaml
mcp_servers:
  dashi96-chromium-bridge:
    command: "npx"
    args: ["-y", "chromium-bridge"]
```

### Other

```json
{
  "mcpServers": {
    "dashi96-chromium-bridge": {
      "command": "npx",
      "args": [
        "-y",
        "chromium-bridge"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 66, +61)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] License: unverified → pass
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail
- [functional] Capabilities: Protocol version not yet verified: we do not have a sandbox capture of the MCP handshake this version of the package performs yet.
- [functional] Tool coverage: Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.
- [functional] Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional] Licence: MIT

### 2026-07-31 (score 5, −1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 6, −40)

- [security regression] Install scripts: pass → unverified
- [security regression] Provenance: fail → unverified
- [security regression] Malware scan: pass → unverified
- [security regression] Known CVEs: partial → unverified
- [functional regression] License: pass → unverified
- [functional regression] Dependency health: partial → unverified
- [functional regression] Maintenance: pass → unverified
- [functional] Licence: MIT

### 2026-07-27 (score 46, +21)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] License: unverified → pass
- [functional] Tool coverage: Tool coverage not yet verified: our sandbox run of this package did not complete, so we have no tool definitions to assess.
- [functional] Schema quality: Schema quality not yet verified: our sandbox run of this package did not complete, so we have no schema to assess.
- [functional] Licence: MIT

### 2026-07-26 (score 25)

First indexed and scored.

## MCP tools (18)

### `browser_status` (~59 tokens)

Check whether the browser extension is connected to the bridge. Returns {connected: boolean}. Read-only, no side effects. Call it first in a session, or when other browser_* tools fail, to distinguish "extension not connected" from page-level errors.

### `browser_tabs_list` (~59 tokens)

List all open browser tabs with their id, title, and URL. Read-only. Use it to pick a tabId for the other browser_* tools; prefer reusing an existing tab over creating a new one when the target page is already open.

### `browser_tab_create` (~80 tokens)

Open a new browser tab and return its id and windowId. Mutating: adds a tab to the user's real browser and focuses it. Use when a fresh page is needed; to work with a page that is already open, find its id via browser_tabs_list instead.

Input parameters:

- `url` (string): URL for the new tab (blank by default)

### `browser_tab_close` (~68 tokens)

Close a browser tab by id. Destructive: the tab and its unsaved page state are gone, with no undo. Close only tabs this session created, unless the user explicitly asked to close theirs.

Input parameters:

- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create

### `browser_navigate` (~105 tokens)

Navigate an existing tab to a URL, or move through its history with url="back" / url="forward". Mutating: replaces the page currently shown in that tab. Returns when navigation is committed; dynamic pages may still be rendering — verify with browser_page_text or a screenshot before interacting.

Input parameters:

- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create
- `url` (string, required): absolute URL, or "back"/"forward" for history

### `browser_page_text` (~87 tokens)

Get a tab's title, URL, and visible text (up to 80 kB) from the live DOM. Read-only and cheap — prefer it over a screenshot whenever layout does not matter. Content rendered to canvas or images is invisible to it; use a browser_computer screenshot for those.

Input parameters:

- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create

### `browser_computer` (~409 tokens)

Mouse, keyboard, and screenshots in a browser tab via the DevTools protocol; the tab does not need to be active (first use shows Chrome's "started debugging" info bar — that is expected). Actions: screenshot (viewport image in CSS pixels — its coordinates map 1:1 to click coordinates), zoom (magnified region [x0,y0,x1,y1]), left_click, right_click, double_click, triple_click, hover, left_click_drag (start_coordinate→coordinate), type (insert text at the current focus), key (space-separated combos, e.g. "cmd+a Backspace"), scroll (scroll_direction+scroll_amount), scroll_to (ref), wait (duration, max 10 s). Clicks, typing, and key presses are real input events and mutate page state; screenshot/zoom/hover/wait are read-only. Positions come from coordinate:[x,y] or from a ref returned by browser_read_page/browser_find — refs are more reliable than eyeballed coordinates.

Input parameters:

- `action` (string, required): what to do; see the tool description for each action's required parameters
- `coordinate` (array): [x, y] in pixels
- `duration` (number): seconds for wait (max 10)
- `modifiers` (string): click modifiers: cmd, ctrl, alt, shift (joined with +)
- `ref` (string): element ref from browser_read_page/browser_find — alternative to coordinate
- `region` (array): [x0, y0, x1, y1] for zoom
- `repeat` (number): repeat count for key
- `scroll_amount` (number): wheel ticks, default 3
- `scroll_direction` (string): for scroll; default down
- `start_coordinate` (array): drag start for left_click_drag
- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create
- `text` (string): text for type, or key combos for key

### `browser_read_page` (~110 tokens)

Accessibility tree of the page with a ref id per element; use refs with browser_computer (clicks, scroll_to) and browser_form_input. filter=interactive returns only clickable/editable elements — a compact map of the page. Read-only. Refs go stale after navigation or heavy DOM changes; call again to refresh.

Input parameters:

- `filter` (string): interactive — only clickable/editable elements; default all
- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create

### `browser_find` (~104 tokens)

Find elements by visible text, accessible name, or role, and return their refs for use with browser_computer and browser_form_input. Read-only. Cheaper than reading the whole accessibility tree when you know what you are looking for. An empty result means nothing matched — not an error.

Input parameters:

- `query` (string, required): visible text, accessible name, or ARIA role to search for
- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create

### `browser_form_input` (~164 tokens)

Set a form control's value directly in the DOM: input/textarea/contenteditable (text), select (option value or label), checkbox/radio ("true"/"false"). Fires input/change events so frameworks pick the value up. Mutating. Target by CSS selector or ref. Reliable for plain form fields; rich editors (CodeMirror and the like) and custom comboboxes often ignore it — for those, click the field with browser_computer and type.

Input parameters:

- `ref` (string): ref from browser_read_page/browser_find
- `selector` (string): CSS selector
- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create
- `value` (string, required): new value; for checkbox/radio pass "true" or "false"

### `browser_click` (~113 tokens)

Click an element via DOM .click() by CSS selector. Mutating. Works without the debugger — including on pages where CDP attach fails — but only fires the click handler, with no hover/focus/mousedown chain. If the page ignores it (custom dropdowns, canvas UI), use browser_computer left_click for a real mouse event.

Input parameters:

- `selector` (string, required): CSS selector of the element to click (first match)
- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create

### `browser_upload_file` (~108 tokens)

Put local files into an <input type="file"> selected by CSS selector, as if the user picked them in the file dialog (fires change). Mutating. files are absolute paths on the user's machine; the input must already exist in the DOM.

Input parameters:

- `files` (array, required): absolute file paths on the user's machine
- `selector` (string, required): CSS selector of the <input type="file">
- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create

### `browser_javascript` (~117 tokens)

Run arbitrary JavaScript in the page context and return the resolved value (await is supported; runs with the page's own permissions). Can read and mutate anything on the page — treat as mutating unless the code is clearly read-only. Never call alert/confirm/prompt: modal dialogs freeze all automation. Requires the CDP debugger.

Input parameters:

- `code` (string, required): JavaScript source; may use await — the value of the last expression is returned
- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create

### `browser_console_messages` (~125 tokens)

Read a tab's console output (log/warn/error), newest 200 entries. Read-only unless clear=true, which empties the buffer after reading. Messages are captured only from the first time a CDP tool touches the tab — nothing is recorded retroactively; reload the page after attaching to capture its startup logs. Use pattern (regex) to cut noise.

Input parameters:

- `clear` (boolean): clear the buffer after reading
- `pattern` (string): regex filter over the message text
- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create

### `browser_network_requests` (~114 tokens)

List a tab's network requests (method, URL, status), newest 200. Read-only unless clear=true, which empties the buffer. Captured only from the first CDP touch of the tab — reload the page after attaching to see its full traffic. urlPattern (regex) filters by URL.

Input parameters:

- `clear` (boolean): empty the buffer after reading
- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create
- `urlPattern` (string): regex filter over the URL

### `browser_resize_window` (~99 tokens)

Resize the browser window that contains the tab to width×height CSS pixels. Mutating and user-visible: it resizes the user's real window. Use for reproducing responsive layouts or framing a recording, and consider restoring the original size afterwards.

Input parameters:

- `height` (number, required): window height, CSS px
- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create
- `width` (number, required): window width, CSS px

### `browser_gif_start` (~105 tokens)

Start recording the tab into an animated GIF: a frame every intervalMs (default 800 ms); on long recordings the frame rate halves automatically so the whole scenario fits in ~80 frames. One recording per tab at a time; starting twice is an error. Nothing is saved until browser_gif_stop.

Input parameters:

- `intervalMs` (number): frame interval in ms, default 800
- `tabId` (number, required): tab id from browser_tabs_list or browser_tab_create

### `browser_gif_stop` (~89 tokens)

Stop the recording started by browser_gif_start and write the animated GIF to an absolute path on the user's machine. Mutating: creates or overwrites that file. Errors if no recording is active or no frames were captured.

Input parameters:

- `path` (string, required): absolute path for the output .gif; overwritten if it exists
- `tabId` (number, required): tab id the recording was started on

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/dashi96-chromium-bridge/chromium-bridge#diagnostics

## Score history

- 2026-08-03: 66
- 2026-08-02: 66
- 2026-08-01: 5
- 2026-07-31: 5
- 2026-07-30: 6
- 2026-07-28: 46
- 2026-07-27: 46
- 2026-07-26: 25

## Links

- npm package: https://www.npmjs.com/package/chromium-bridge
- Socket report: https://socket.dev/npm/package/chromium-bridge
- Repository: https://github.com/dashi96/chromium-bridge
- Changelog RSS feed: https://verifymcp.io/servers/dashi96-chromium-bridge/chromium-bridge/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/dashi96-chromium-bridge/chromium-bridge/changelog.json
- HTML version of this page: https://verifymcp.io/servers/dashi96-chromium-bridge/chromium-bridge
