Chromium Bridge

io.github.dashi96由 GitHub 帳號 dashi96 發布v0.5.3更新於 Oct 24, 2026

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

已驗證STDIO僅桌面瀏覽器自動化開發者工具

概覽

AI 產生的概覽

讓助理透過本機擴充功能操作以 Chromium 為基礎的瀏覽器(Arc、Vivaldi、Brave):分頁、導覽、點擊、輸入、截圖、主控台與網路。

可以做什麼
這是一個 MCP 伺服器,透過 127.0.0.1 上的 WebSocket 把 Claude Code 與本機安裝的 MV3 擴充功能連接起來,進而橋接到 Chromium 瀏覽器。它提供 browser_* 工具,用來列出、開啟與關閉分頁、導覽、讀取頁面文字與無障礙樹、尋找元素、點擊、填寫表單、上傳檔案、執行 JavaScript,以及取得截圖、主控台訊息與網路請求。它也能錄製分頁 GIF,並在擴充功能彈出視窗中提供聊天面板。
適用情境
當你希望助理自動化官方 Chrome 擴充功能支援不佳的 Chromium 瀏覽器(例如 Arc、Vivaldi 或 Brave),而且需要真實點擊、讀取頁面、截圖或檢查主控台與網路時,適合使用。它是本機桌面工具,不是託管服務。
執行需求
以 npm 套件 chromium-bridge(npx chromium-bridge)或從複製的儲存庫透過 Node.js 以 stdio 方式在本機執行。需要以 Chromium 為基礎的瀏覽器,並以開發人員模式載入隨附的擴充功能,同時保持伺服器工作階段執行中。選用環境變數:CHROMIUM_BRIDGE_CHAT_MODEL 與 CHROMIUM_BRIDGE_PORT(預設 8929)。聊天面板使用 Claude Code 登入。
安裝前請注意
WebSocket 伺服器信任以你的使用者身分執行的一切,且不區分不同擴充功能,因此不要在共用機器上執行。點擊、輸入、導覽、JavaScript、填寫表單、關閉分頁與上傳檔案等寫入動作可能變更或刪除資料;可用「操作前詢問」模式加以限制。聊天面板會顯示 token 用量與估算的工作階段費用。變更連接埠還需同時修改擴充功能檔案。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Chromium Bridge,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[圖片] Chromium Bridge

Русская версия

A bridge between your Chromium-based browser and Claude Code. The official "Claude in Chrome" extension connects in some Chromium browsers (Arc, Vivaldi, and others) but automation hangs: its tools are built on the tab groups API, which is missing or broken there. This bridge uses only plain chrome.tabs / chrome.scripting / chrome.debugger, so it works in any Chromium browser that can load an extension.

Demo

Claude driving the browser through the bridge — opening Wikipedia, typing a search, and landing on the article:

[Chromium Bridge demo: Claude controlling a Chromium browser]

Architecture

Claude Code ⇄ (stdio MCP) ⇄ server/index.mjs ⇄ (WebSocket, 127.0.0.1:8929) ⇄ extension in the browser                                   ⇅ (WebSocket /chat)                            chat panel (popup on the extension icon)
  • extension/ — an MV3 extension: the service worker keeps a WebSocket to the local server and executes its commands (tabs, navigation, page text, screenshots, clicks, form filling). Clicking the icon opens the chat panel (chat.html) — a popup anchored to the extension icon.
  • server/ — an MCP server (stdio) that exposes the browser_* tools to Claude Code and proxies them to the extension. It accepts WS connections only from a chrome-extension://… Origin — regular web pages cannot connect. It also serves the /chat channel: panel messages run through the Claude Agent SDK (authenticated via the Claude Code login) with the same browser_* tools; built-in tools (Bash, Read, etc.) are disabled.

Chat panel

An equivalent of the "Claude in Chrome" side panel: a popup that opens when you click the extension icon (no chrome.sidePanel — it is not supported everywhere). The chat can see the browser: list tabs, read pages, take screenshots, and click.

[Chat panel demo: Claude opens a Wikipedia article and answers from it]

The panel UI is in English by default and switches to Russian automatically when the browser UI language is Russian. A language selector (Auto / English / Русский) in the bottom bar overrides auto-detection; the on-page badge follows the same choice.

  • The popup closes when it loses focus (clicking the page) — that is browser behavior. The conversation context is not lost: the panel remembers the session_id and the server resumes the conversation via the Agent SDK resume. A turn that is in flight when the popup closes is interrupted.
  • It only works while the server is running (usually an active Claude Code session with the chromium-bridge MCP); otherwise the panel shows "Server unavailable".
  • Model picker in the panel header: "Default" takes the model from ~/.claude/settings.json (whatever was set via /model; SDK sessions do not read Claude Code settings themselves, the server passes the model explicitly), the other entries are hard overrides. Switching applies on the fly (setModel) and is remembered. Startup override: CHROMIUM_BRIDGE_CHAT_MODEL=sonnet in the server environment. Port: CHROMIUM_BRIDGE_PORT (8929 by default) — server side only; the extension always connects to 8929, so changing the port also means editing WS_URL in extension/sw.js and extension/chat.js.
  • Chat history: the 🕓 button in the header lists past conversations (stored in the panel's localStorage, the last 30).
  • After each turn there is a usage line: turn tokens (↑ input incl. cache / ↓ output) and the accumulated session cost in $ (on a subscription this is an estimate, not a separate bill).
  • Screenshots the agent takes along the way are shown right in the chat feed (click to expand). They are not saved to history (localStorage is finite).
  • You can paste images from the clipboard (Cmd+V in the input, up to 5 per message) — the model sees them; only a marker remains in history.
  • "Ask before acting" mode (checkbox above the input): reading (tabs, text, screenshots, console, network) proceeds without questions, while mutating actions — clicks/typing/navigation/JS/forms/closing tabs/file uploads — wait for an Allow / Deny card. The agent sees a denial and continues the conversation. Toggling applies immediately, without recreating the session (via the Agent SDK's canUseTool).

On-page indication

When Claude acts on a tab (from the panel or from Claude Code):

  • an orange glow burns around the page edges with a "✳ Claude is working…" badge, fading 2.5s after the last action;
  • a virtual cursor (an orange arrow) glides to the action point and pulses a ring on click; it disappears after 3.5s of inactivity.

Both are hidden on screenshots so they don't end up in the frame and confuse the model when working with coordinates. On pages where scripts cannot be injected (chrome:// and the like) the indication is silently skipped.

Installation

  1. Extension: clone this repository, open chrome://extensions (in the right space/profile!), enable "Developer mode", click "Load unpacked", and pick the extension/ folder.

  2. MCP server — either way:

    • via npm: claude mcp add -s user chromium-bridge -- npx chromium-bridge
    • from the clone: cd server && npm install, then claude mcp add -s user chromium-bridge -- node "$(pwd)/index.mjs".

    It loads at session start — restart your Claude Code session after installing the extension.

    For other MCP clients, add this to your config:

    json
    {  "mcpServers": {    "chromium-bridge": {      "command": "npx",      "args": ["chromium-bridge"]    }  }}
  3. Check: the browser_status tool should return {"connected": true}.

Tools

As of v0.5.

ToolWhat it does
browser_statusCheck the connection to the extension
browser_tabs_listList tabs (id, title, URL)
browser_tab_create / browser_tab_closeOpen / close a tab
browser_navigateNavigate to a URL; back/forward for history
browser_page_textPage title, URL, and visible text
browser_computerMouse/keyboard/screenshots via CDP: clicks by coordinates or ref, drag, hover, type, key combos, scroll, zoomed region screenshot, wait
browser_read_pageAccessibility tree with ref ids (filter=interactive)
browser_findFind elements by text/role, returns refs
browser_form_inputSet input/textarea/select/checkbox/contenteditable value by selector or ref
browser_clickDOM click by CSS selector (plain .click())
browser_upload_filePut files into an <input type="file">
browser_javascriptRun JS on the page (await supported)
browser_console_messagesTab console (with a regex filter)
browser_network_requestsTab network requests (with a regex filter)
browser_resize_windowWindow size
browser_gif_start / browser_gif_stopRecord a GIF of the tab → file; on long recordings the frame rate halves automatically, so the whole scenario fits

Everything except basic tab operations works through chrome.debugger (CDP): screenshots don't require activating the tab, clicks are real mouse events, and console/network are collected from the first CDP touch of the tab.

Limitations

  • The extension lives in one browser profile — install it in the one you want to automate.
  • While the server is running, its periodic ping keeps the extension's service worker awake. If the worker is asleep anyway (e.g. the server has just started), a keepalive alarm wakes it within ~30 seconds, and the server waits up to 12 seconds for reconnection before erroring.
  • Trust model: the WS server listens on 127.0.0.1 and rejects connections whose Origin is not chrome-extension://…, which keeps web pages out. It does not distinguish between extensions, and a non-browser local process can fake the Origin header — anything running as your user is trusted, like with most local dev tools. Don't run the bridge on a shared machine.
  • On the first CDP action the browser shows a "Chromium Bridge started debugging this browser" bar — that's normal, the debugger is the control mechanism. Closing the bar detaches the debugger (the next action re-attaches it).
  • Console/network are not recorded retroactively — only after the tab is first touched.
  • Port 8929 is owned by one session: a second parallel Claude Code session cannot start its own WS server (the extension stays with the first one).

License

MIT

來源:README.md,提交 bdf0f94

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.5.3最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分