Mcp Session Bridge

io.github.t3ratech由 GitHub 帳號 t3ratech 發布v1.4.1更新於 Nov 7, 2026

Drive a browser you are already signed into, through the free T3rnel Browser extension.

概覽

AI 產生的概覽

本機 MCP 伺服器,讓助理透過 T3rnel Browser 擴充功能或獨立自動化瀏覽器,操作你已登入的瀏覽器。

可以做什麼
  • 透過 session_* 工具操作使用者已登入的瀏覽器分頁,或使用獨立的 CDP 瀏覽器。
  • 讀取即時頁面的結構化內容、表單值、快照與螢幕擷取畫面。
  • 經由橋接呼叫擴充功能的瀏覽器工具集(最多 100 個工具),並提供註冊原生訊息主機的安裝工具。
  • 可透過設定選擇擴充功能模式、獨立模式或自動退回。
適用情境
適合助理需要在你已登入的網站內操作、而雲端瀏覽器 API 拿不到你的工作階段的情況。也適合不想安裝擴充功能、想用免費獨立模式做瀏覽器自動化的情境。
執行需求
以 npm 套件形式透過 stdio 在本機執行,需要 Node.js。擴充功能模式需要 T3rnel Browser 擴充功能並註冊原生訊息主機;獨立模式會自行啟動 CDP 瀏覽器。選用環境變數 T3RNEL_SESSION_MODE、T3RNEL_SESSION_HEADLESS 與 T3RNEL_SESSION_TIMEOUT_MS 可控制模式、無頭行為與呼叫逾時。僅支援桌面端。
安裝前請注意
擴充功能模式會在你的真實登入工作階段中運作,助理可操作已登入帳號並讀取頁面內容與表單值。部分工具受擴充功能的付費 Pro 版本限制(一次性購買);橋接本身不驗證授權。工具呼叫可能修改或送出頁面資料,擴充功能自帶審核關卡。安裝會向 Chrome、Chromium、Brave 與 Edge 註冊原生訊息主機。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

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

README

MCP Session Bridge

[Listed on mcpservers.org] [Glama score]

A free MCP (Model Context Protocol) server that exposes authenticated browser-session automation: session_* tools that run in the user's own Chrome profile and real logged-in session, which cloud browser APIs cannot do. A free standalone mode is also available; it launches a dedicated automation browser so the same session_* tools work without the extension or a license.

What it does

  • Serves MCP over stdio (newline-delimited JSON-RPC) to any client that speaks the Model Context Protocol. The setup guide covers the common ones.
  • Uses a dual-transport design:
    • Extension mode (free; Pro tools gated by the extension) — forwards calls over a local, owner-only relay socket to a native messaging host that Chrome spawns, and from there to the T3rnel Browser extension, which executes them against the live authenticated tabs.
    • Standalone mode (free) — launches its own headful or headless CDP browser on a persistent profile and drives it directly. No license, no extension, and no access to the user's everyday browser.
  • Returns structured page context, form values, snapshots, and screenshots without shipping session cookies to a remote browser.

Price

The bridge itself is free, and this package enforces no licence of its own.

Extension mode reaches the buyer's real authenticated session through the T3rnel Browser extension, and the Pro tools it exposes are gated by that extension's own Pro tier — $29.99 once, three devices. Standalone mode is free and needs neither the extension nor a licence. There is no separate subscription for this package, and nothing here checks for one; earlier drafts of this file advertised $9/mo and $39/mo tiers that were never implemented, never enforced and never purchasable.

Project layout

  • src/server.js — MCP stdio server: tool surface, schema validation, dual-transport routing, relay client with reconnect and timeouts, and standalone CDP launcher.
  • src/cdp.js — standalone CDP browser management and WebSocket client.
  • src/native-host.js — native messaging host spawned by Chrome; owns the relay socket and multiplexes concurrent MCP servers.
  • src/framing.js — the 4-byte length-prefixed JSON framing shared by native messaging and the relay socket.
  • src/tools.js — the session_* tool definitions, validation, and mapping to the extension's browser_* tools.
  • src/license.js — offline Ed25519 license verification helpers used by the extension and tests.
  • src/install.js — --install / --uninstall native host registration for Chrome, Chromium, Brave and Edge.
  • docs/setup-guide.md — installing on the common MCP clients, plus verification and troubleshooting.
  • docs/chrome-validation-checklist.md — end-to-end validation steps for Chrome with the T3rnel Browser extension.
  • ads/ — ad-copy.md, the shared headline and description copy used when submitting to MCPize, Smithery, mcp.so and PulseMCP.
  • tests/ — node --test suite, including end-to-end tests through a real relay socket and native-messaging framing, plus standalone-mode coverage.

Browser support

Extension mode needs the T3rnel Browser extension, which is packaged for Chrome, Brave, Edge, Opera, Chromium and Firefox and ships from each browser's own extension store. Brave and Chromium install from the Chrome Web Store; Edge, Opera and Firefox each have a separate package. Opera implements no side-panel API and Firefox no debugger API, so both are partly supported; the extension's manifest generator states which capabilities are absent on each. Standalone mode has no browser requirement at all — it launches its own CDP browser.

The extension exposes up to 100 browser tools, plus the bridge's own session_install setup tool. If the merged list would exceed 100 tools — which Google Antigravity refuses to install — the bridge drops the two lowest-value verbs (session_md_diff, session_check_spelling) so the published list stays at or under the ceiling for every extension build. Dropped tools still execute when called by name; all tools remain subject to the extension's Pro gating and approval gate.

Supported clients

  • Claude Code / Claude Cowork
  • Cursor
  • VS Code
  • Windsurf / Devin Desktop
  • Google Antigravity
  • IntelliJ
  • Codex
  • Grok Build
  • Kimi Code / Kimi Desktop
  • JCode
  • Cline
  • OpenCode
  • Continue.dev
  • KiloCode
  • Roo Code
  • Aider
  • OpenClaw
  • Hermes
  • OpenFang
  • Any client that speaks MCP stdio

Install the T3rnel Browser extension

The bridge works best with the T3rnel Browser extension, which lets your AI drive the browser you are already signed into:

https://browser.t3ratech.co.zw/

Where this is listed

Licence

Licensed under the Apache License, Version 2.0. See LICENSE for the full text.

The published npm package is free to use for any purpose, commercial or otherwise. You may read and modify this source; redistribution is governed by the Apache-2.0 terms.

來源:README.md,提交 b22dc0a

工具

22

session_install

Installation instructions

Return setup instructions for the T3rnel Browser extension and for the free standalone automation browser. Needs no browser and no licence, so it is the one tool that always answers — call it when another tool reports the extension is missing. Returns installation steps as text.

無需輸入參數。

session_health

Session health check

Report which transport is live and what it can do. Call this first when another tool fails unexpectedly: it separates 'the extension is not running' from 'this browser does not implement that API', which produce very different fixes. Returns {ok, mode, browser, profileDir} in standalone mode, and the connection state plus the available browser APIs when the extension is attached.

無需輸入參數。

session_list_tabs

List open tabs

List every open tab. Returns an array of {id, title, url}. The ids are what every other tool's optional tabId argument accepts; omit tabId and a tool acts on the active tab, which is rarely what you want once you have opened tabs of your own.

無需輸入參數。

session_close_tab

Close a tab

Close a tab, named explicitly by its id from session_list_tabs. Returns {closed, tabId}. Unlike every other tool here, tabId is required and there is no active-tab default: closing a tab is not undoable, and the active tab is the one the user is looking at. Requires the T3rnel Browser extension; the standalone browser refuses it by name.

輸入參數tabId必填

session_navigate

Navigate a tab

Navigate a tab to a URL inside the user's authenticated session, so pages behind a login load as themselves rather than as a signed-out visitor. Reuses the active tab unless newTab is true. Returns {navigated} with the requested URL, and newTab when a tab was created. It returns once navigation is dispatched, not once the page has settled — follow it with session_wait before reading.

輸入參數url必填tabIdnewTabbackground

session_snapshot

Snapshot interactive elements

Capture a semantic map of a page for deciding what to act on. Returns {url, title, elements}, where each element is {ref, tag, text} — ref being an @eN handle that session_click, session_fill, session_type, session_select and session_press all accept in place of a CSS selector. Prefer this over session_read_page when the goal is to interact rather than to read: it lists only elements a user could actually operate. Skips zero-size and hidden elements, caps each label at 120 characters, and stops at 200 elements.

輸入參數tabId

session_read_page

Read page text

Read a page's visible text, as rendered in the user's authenticated session. Returns {url, title, text, truncated}; text is the body's rendered innerText capped at 50,000 characters, and truncated is true when the page was longer. Prefer this over session_snapshot when the goal is to read or summarise; prefer session_snapshot when the goal is to interact.

輸入參數tabId

session_click

Click an element

Click an element, by CSS selector or by an @eN ref from session_snapshot. Scrolls the element into view and dispatches a real mouse press and release at its centre, so handlers that ignore synthetic events still fire. Returns {clicked} naming what was targeted. Fails with 'Element not found' rather than clicking something else when nothing matches.

輸入參數reftabIdselector

session_fill

Fill a form field

Set a form field's value in one step — input, textarea, or a rich-text editor such as ProseMirror, Lexical or Slate. Writes through the native value setter and then fires input and change, which is what React and Vue listen for. Returns {filled} naming the field. Use session_type instead when a field only reacts to real keystrokes, and session_select for a dropdown.

輸入參數reftabIdvalue必填selector

session_type

Type text

Type text one character at a time, firing the key events a real keyboard would. Use this instead of session_fill when a field only reacts to keystrokes — search boxes with live suggestions, autocompletes, and inputs with per-character validation. Returns {typed} with the number of characters sent. Slower than session_fill, so reach for it only when session_fill leaves the page unchanged.

輸入參數reftext必填tabIdselector

session_select

Choose a dropdown option

Choose an option in a <select> dropdown, by value, by visible text, or by index. Filling a select as though it were a text field does nothing — the native value setter belongs to HTMLInputElement and has no effect here — which is the silent failure this tool exists to prevent. Matches value first, then exact visible text, then a substring, then index. Returns {selected, value, text} for the chosen option, and on no match fails with the available options listed.

輸入參數reftextindextabIdvalueselector

session_press

Press a key

Press a single keyboard key on the focused element, or on a named element after focusing it. Use it to submit a form with Enter, dismiss a dialog with Escape, or walk a suggestion list with ArrowDown. Returns {pressed} naming the key. Supported keys are Enter, Tab, Escape, Backspace, Delete, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Home, End, PageUp, PageDown and Space; anything else fails with the supported list rather than doing nothing.

輸入參數key必填reftabIdselector

session_evaluate

Evaluate JavaScript

Run JavaScript in the page's own context and return its completion value. Use it for what the other tools do not cover — reading computed styles, walking a data structure the page holds, or checking a condition too specific for session_wait. Objects come back as formatted JSON, strings as themselves, and an expression with no value as "undefined". End the code with the expression you want back; a trailing statement returns nothing useful.

輸入參數code必填tabId

session_screenshot

Capture the viewport

Capture what is currently on screen in a tab. Returns a data: URL holding a base64 PNG or JPEG. This is the visible viewport only — it does not scroll or stitch, so a long page needs the extension's full-page capture instead.

輸入參數tabIdformatqualitywindowId

session_wait

Wait for a condition

Block until a page reaches a known state, so the next tool acts on a settled page rather than a half-loaded one. Waits for the load event, for the URL to contain a string, or for a selector to appear. Returns as soon as the condition holds — {condition, waited} for load, {condition, url} for url, {condition, found} for selector — and fails at the timeout with a named error rather than hanging the client. Polls every 200ms; the default timeout is 10000ms.

輸入參數tabIdvaluecondition必填timeoutMs

session_login

Fill stored credentials

Decrypt stored credentials for a domain and fill them into the page's sign-in form. Requires the T3rnel Browser extension with Pro, because the encrypted vault lives in the extension; the refusal comes from the extension rather than from this bridge, so there is one gate rather than two that can disagree. The standalone browser has no vault — sign in once by hand in its profile instead, and the session persists.

輸入參數tabIddomain必填submitmasterPassword

session_store_login

Store credentials

Encrypt credentials for a domain and store them in the extension's vault, for session_login to use later. Requires the T3rnel Browser extension with Pro. The password is never returned by this or any other tool, and never appears in a listing or an error.

輸入參數domain必填password必填username必填masterPassword

session_record_start

Start recording

Begin recording what happens in a tab: clicks, scrolls, keystrokes, form fills, selections and navigations, each with a timestamp. Returns {recording, sessionId, tabId} — keep the sessionId, since every other recording tool needs it. Requires the T3rnel Browser extension. Recording stops on its own if the tab closes or after four hours.

輸入參數tabIdmaxEventssessionId

session_record_stop

Stop recording

Stop a recording and return {recording, sessionId, eventCount, durationMs}. The events themselves are read separately with session_record_events, so this is cheap to call on a long recording. Requires the T3rnel Browser extension. With several recordings active, sessionId is required and the error names how many are running.

輸入參數sessionId

session_record_list

List recordings

List every recording, running or finished, so a caller can find the id that session_record_events and session_record_replay need. Returns {sessions}, each entry being {id, tabId, active, startedAt, stoppedAt, stoppedReason, eventCount, durationMs}. Requires the T3rnel Browser extension.

無需輸入參數。

session_record_events

Read recorded events

Fetch the captured events of a recording, in the order they happened. Returns {events, count}, where count is the total held for the session and events is one page of {type, timestamp, tabId, data}; type is one of click, scroll, keypress, input, navigation, focus, select or resize. Page through long recordings with limit and offset rather than reading them whole, since a session can hold tens of thousands of events. Requires the T3rnel Browser extension.

輸入參數limitoffsetsessionId必填

session_record_replay

Replay a recording

Replay a stopped recording in its original tab, reproducing the recorded interactions in order. Returns {sessionId, totalEvents, replayedEvents, failedEvents, errors}, so a partial replay reports which steps failed instead of appearing to succeed. The tab must still be open. This acts on the live page and its effects are real — it will re-send messages, re-submit forms and re-spend money — so the extension classifies it high risk and gates it behind an approval prompt. Requires the T3rnel Browser extension.

輸入參數speedsessionId必填

版本歷史

2
  1. v1.4.1最新Nov 7, 2026
  2. v1.2.0Sep 16, 2026

評分

已滿足適用檢查項的 90%

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

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

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

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分