# io.github.t3ratech/mcp-session-bridge (npm · @t3ratech/mcp-session-bridge)

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

- Trust score: 81/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-20

## Components

- npm · `@t3ratech/mcp-session-bridge`: 81/100 (this document), [markdown](https://verifymcp.io/servers/t3ratech-mcp-session-bridge/t3ratech-mcp-session-bridge.md), [page](https://verifymcp.io/servers/t3ratech-mcp-session-bridge/t3ratech-mcp-session-bridge)

## Channel facts

- Registry: `npm`
- Package: `@t3ratech/mcp-session-bridge`
- Version: `1.2.0`
- 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-09-20.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - No production dependencies, so there is no dependency health to assess.
- **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 (Apache-2.0).
  - 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 3047 tokens (~138/item across 22 items; 22 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 93/100
  - Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **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.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 22 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 22 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 20/100
  - Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28.

## Install

### How do I install the io.github.t3ratech/mcp-session-bridge server?

io.github.t3ratech/mcp-session-bridge runs locally as an npm package, launched with npx -y @t3ratech/mcp-session-bridge. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add t3ratech-mcp-session-bridge -- npx -y @t3ratech/mcp-session-bridge
```

### Cursor

```json
{
  "mcpServers": {
    "t3ratech-mcp-session-bridge": {
      "command": "npx",
      "args": [
        "-y",
        "@t3ratech/mcp-session-bridge"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "t3ratech-mcp-session-bridge": {
      "command": "npx",
      "args": [
        "-y",
        "@t3ratech/mcp-session-bridge"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add t3ratech-mcp-session-bridge -- npx -y @t3ratech/mcp-session-bridge
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add t3ratech-mcp-session-bridge --command npx --arg -y --arg @t3ratech/mcp-session-bridge
```

### Hermes

```yaml
mcp_servers:
  t3ratech-mcp-session-bridge:
    command: "npx"
    args: ["-y", "@t3ratech/mcp-session-bridge"]
```

### Netclaw

```json
{
  "McpServers": {
    "t3ratech-mcp-session-bridge": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@t3ratech/mcp-session-bridge"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add t3ratech-mcp-session-bridge -t stdio -c npx -a -y @t3ratech/mcp-session-bridge
```

### Other

```json
{
  "mcpServers": {
    "t3ratech-mcp-session-bridge": {
      "command": "npx",
      "args": [
        "-y",
        "@t3ratech/mcp-session-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-09-20 (score 81, +1)

No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-18 (score 80, +1)

No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-15 (score 79, +1)

No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-13 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-11 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-09 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-07 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-06 (score 74, +15)

- [security improvement] Malware scan: unverified → pass

## MCP tools (22)

### `session_install` (~61 tokens)

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` (~83 tokens)

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` (~66 tokens)

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` (~102 tokens)

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.

Input parameters:

- `tabId` (integer, required): Tab to close, from session_list_tabs

### `session_navigate` (~150 tokens)

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.

Input parameters:

- `newTab` (boolean): Open in a new tab instead of reusing the active tab (default false)
- `tabId` (integer): Tab id from session_list_tabs; uses the active tab when omitted
- `url` (string, required): Absolute URL to navigate to, including the scheme

### `session_snapshot` (~141 tokens)

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.

Input parameters:

- `tabId` (integer): Tab to snapshot; uses the active tab when omitted

### `session_read_page` (~102 tokens)

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.

Input parameters:

- `tabId` (integer): Tab to read; uses the active tab when omitted

### `session_click` (~136 tokens)

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.

Input parameters:

- `ref` (string): A ref from session_snapshot, such as @e12, used instead of selector
- `selector` (string, required): CSS selector for the element to click
- `tabId` (integer): Tab to act on; uses the active tab when omitted

### `session_fill` (~164 tokens)

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.

Input parameters:

- `ref` (string): A ref from session_snapshot, such as @e12, used instead of selector
- `selector` (string, required): CSS selector for the field to fill
- `tabId` (integer): Tab to act on; uses the active tab when omitted
- `value` (string, required): Text to place in the field, replacing whatever is there

### `session_type` (~162 tokens)

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.

Input parameters:

- `ref` (string): A ref from session_snapshot, such as @e12, used instead of selector
- `selector` (string, required): CSS selector for the field to type into
- `tabId` (integer): Tab to act on; uses the active tab when omitted
- `text` (string, required): Text to type, one character at a time

### `session_select` (~213 tokens)

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.

Input parameters:

- `index` (integer): Zero-based option index to choose; tried last
- `ref` (string): A ref from session_snapshot, such as @e12, used instead of selector
- `selector` (string, required): CSS selector for the <select>
- `tabId` (integer): Tab to act on; uses the active tab when omitted
- `text` (string): Visible option text to choose; matched exactly first, then by substring
- `value` (string): Option value to choose; tried first

### `session_press` (~218 tokens)

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.

Input parameters:

- `key` (string, required): One of Enter, Tab, Escape, Backspace, Delete, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Home, End, PageUp, PageDown, Space
- `ref` (string): A ref from session_snapshot, such as @e12, used instead of selector
- `selector` (string): CSS selector for the element to press the key on; uses the focused element when omitted
- `tabId` (integer): Tab to act on; uses the active tab when omitted

### `session_evaluate` (~146 tokens)

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.

Input parameters:

- `code` (string, required): JavaScript to run in the page's own context. Its completion value is returned, so end with the expression you want back
- `tabId` (integer): Tab to run in; uses the active tab when omitted

### `session_screenshot` (~142 tokens)

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.

Input parameters:

- `format` (string): png (default, lossless) or jpeg (smaller, and the only format quality applies to)
- `quality` (integer): JPEG quality from 0 to 100; ignored for png
- `tabId` (integer): Tab to capture; uses the active tab when omitted
- `windowId` (integer): Window to capture from; uses the current window when omitted

### `session_wait` (~208 tokens)

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.

Input parameters:

- `condition` (string, required): What to wait for: load (the load event), url (value appears in the URL), or selector (element appears)
- `tabId` (integer): Tab to wait on; uses the active tab when omitted
- `timeoutMs` (integer): Maximum wait in milliseconds (default 10000)
- `value` (string): URL substring or CSS selector to wait for; required for the url and selector conditions

### `session_login` (~172 tokens)

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.

Input parameters:

- `domain` (string, required): Domain the credentials are saved for, such as "github.com"
- `masterPassword` (string): Passphrase that unlocks the extension's vault. Never log or persist it
- `submit` (boolean): Ignored; kept so older callers do not break
- `tabId` (integer): Tab holding the sign-in form; uses the active tab when omitted

### `session_store_login` (~136 tokens)

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.

Input parameters:

- `domain` (string, required): Domain the credentials belong to, such as "github.com"
- `masterPassword` (string): Passphrase that unlocks the extension's vault. Never log or persist it
- `password` (string, required): Password to encrypt and store. It is never returned by any tool
- `username` (string, required): Username or email to store

### `session_record_start` (~143 tokens)

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.

Input parameters:

- `maxEvents` (integer): Maximum events to keep, oldest dropped first (default 10000)
- `sessionId` (string): Recording session id; one is generated when omitted
- `tabId` (integer): Tab to record; uses the active tab when omitted

### `session_record_stop` (~97 tokens)

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.

Input parameters:

- `sessionId` (string): Session to stop; required only when more than one recording is active

### `session_record_list` (~74 tokens)

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` (~167 tokens)

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.

Input parameters:

- `limit` (integer): Maximum events to return in this page (default 100)
- `offset` (integer): Number of events to skip, for paging through a long recording (default 0)
- `sessionId` (string, required): Recording session to read, from session_record_list

### `session_record_replay` (~164 tokens)

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.

Input parameters:

- `sessionId` (string, required): Stopped recording session to replay, from session_record_list
- `speed` (number): Replay speed multiplier; 1 is the recorded pace, 2 is twice as fast (default 1)

## Diagnostics

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

## Score history

- 2026-09-20: 81
- 2026-09-19: 80
- 2026-09-18: 80
- 2026-09-17: 79
- 2026-09-16: 79
- 2026-09-15: 79
- 2026-09-14: 78
- 2026-09-13: 78
- 2026-09-12: 77
- 2026-09-11: 77
- 2026-09-10: 76
- 2026-09-09: 76
- 2026-09-08: 75
- 2026-09-07: 75
- 2026-09-06: 74
- 2026-09-05: 59
- 2026-09-04: 67
- 2026-09-03: 66
- 2026-09-02: 66
- 2026-09-01: 65
- 2026-08-31: 65
- 2026-08-30: 64
- 2026-08-29: 64
- 2026-08-28: 63
- 2026-08-27: 48
- 2026-08-26: 61
- 2026-08-25: 59
- 2026-08-24: 59
- 2026-08-23: 59

## Common questions

### What is the io.github.t3ratech/mcp-session-bridge server?

io.github.t3ratech/mcp-session-bridge is listed in the public MCP registry as io.github.t3ratech/mcp-session-bridge. Drive a browser you are already signed into, through the free T3rnel Browser extension. This page covers its npm package (@t3ratech/mcp-session-bridge).

### Is the io.github.t3ratech/mcp-session-bridge server safe to use?

io.github.t3ratech/mcp-session-bridge scores 81 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.t3ratech/mcp-session-bridge server expose?

io.github.t3ratech/mcp-session-bridge exposes 22 tools: session_install, session_health, session_list_tabs, session_close_tab, session_navigate, and 17 more. Their descriptions and schemas cost roughly 3,047 tokens of context every time the server is loaded.

### Is the io.github.t3ratech/mcp-session-bridge server still maintained?

io.github.t3ratech/mcp-session-bridge is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.t3ratech/mcp-session-bridge server under?

io.github.t3ratech/mcp-session-bridge declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/@t3ratech/mcp-session-bridge
- Socket report: https://socket.dev/npm/package/@t3ratech/mcp-session-bridge
- Repository: https://github.com/t3ratech/mcp-session-bridge
- Website: https://t3ratech.github.io/t3rnel-browser-plugin/
- Changelog RSS feed: https://verifymcp.io/servers/t3ratech-mcp-session-bridge/t3ratech-mcp-session-bridge.xml
- Changelog JSON feed: https://verifymcp.io/servers/t3ratech-mcp-session-bridge/t3ratech-mcp-session-bridge.json
- HTML version of this page: https://verifymcp.io/servers/t3ratech-mcp-session-bridge/t3ratech-mcp-session-bridge
