T3rnel Browser — Session Bridge
OfficialThis server exposes browser-session automation tools over MCP, letting AI clients drive a real logged-in Chrome/Chromium browser via the T3rnel extension, or a free standalone CDP browser, to read pages, interact with them, and record/replay user actions.
Browse and manage tabs: list open tabs, navigate to URLs, open new tabs.
Read page state: capture semantic snapshots, full page text, forms, and interactive elements.
Interact with pages: click, fill forms, type text, select dropdown options, press keys, and run JavaScript.
Capture screenshots as base64 PNG/JPEG.
Wait for conditions: page load, URL match, or selector presence.
Handle credentials: retrieve and store login credentials in the extension vault (requires Pro).
Record, list, fetch, and replay user interaction sessions.
Check installation/health: get setup instructions and verify extension APIs.
Works in extension mode (authenticated session) or standalone mode (own browser, no license).
Allows automation of the user's authenticated Brave browser session through the T3rnel Browser extension, including structured page context, form values, snapshots, and screenshots.
Partially supports browser automation in Firefox through the T3rnel Browser extension, with limitations due to Firefox lacking a debugger API.
Partially supports browser automation in Opera through the T3rnel Browser extension, with limitations due to Opera lacking a side-panel API.
MCP Session Bridge
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.
Related MCP server: Chromeflow
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— thesession_*tool definitions, validation, and mapping to the extension'sbrowser_*tools.src/license.js— offline Ed25519 license verification helpers used by the extension and tests.src/install.js—--install/--uninstallnative 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 --testsuite, 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 installs on Chrome, Brave, Edge and Chromium from one 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 99 browser tools, all of which are reachable over this bridge subject to the extension's own Pro gating and its 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://t3ratech.github.io/t3rnel-browser-plugin/
Licence
Source-available, not open source. See LICENSE for the terms.
In short: the published npm package is free to use for any purpose, commercial or otherwise; you may read and locally modify this source; you may not redistribute it or publish a derivative without written permission.
Directory listings that expect an SPDX identifier will report "no licence" for this
repository. That is expected — GitHub detects the file and classifies it as other /
NOASSERTION, because the terms are bespoke rather than one of the recognised
open-source licences. The licence exists; it simply is not an OSI one.
Available Tools
22 toolssession_clickADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | A ref from session_snapshot, such as @e12, used instead of selector | |
| tabId | No | Tab to act on; uses the active tab when omitted | |
| selector | Yes | CSS selector for the element to click |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint/openWorldHint annotations, the description discloses side effects: scrolls into view, dispatches a real press/release at centre, returns {clicked}, and fails loudly with 'Element not found' instead of silently mis-clicking. This is behaviorally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short, information-dense sentences with no filler; the core action and target are front-loaded, and the distinctive behaviors follow. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description reports return shape, error behavior, selection alternatives, and event semantics, giving an agent everything needed to call it correctly. tabId is left to the schema, which documents it, so no important gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all parameters (100%), and the description adds the selector-vs-ref relationship and that refs come from session_snapshot. However, it says 'or by an @eN ref' while the schema marks selector as required, so the relationship is not fully consistent; an agent could pass only ref and fail validation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific action ('Click'), the target element, and the two ways to identify it (CSS selector or @eN ref), so an agent immediately understands the operation. It also differentiates from sibling tools by emphasizing a real mouse press/release rather than synthetic event dispatch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to use the tool: when an element needs to be clicked with real input events ('handlers that ignore synthetic events still fire') and when a ref from session_snapshot is available. It does not name alternative sibling tools or state exclusions, but the behavior description makes selection straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_close_tabADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | Tab to close, from session_list_tabs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that closing a tab is not undoable, that the active tab is the one the user is looking at, and that the T3rnel Browser extension is required while the standalone browser refuses the call. These details match and enrich the destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences that front-load the action and return value, then add essential caveats. Every sentence contributes meaningful information, from the id source to the irreversibility and environment restriction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description states the return shape. It also covers prerequisites, side effects, environment requirements, and the unique no-default behavior, making the tool fully actionable for a one-parameter destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents tabId as the tab to close from session_list_tabs, and the description primarily repeats that provenance. It adds the no-default context, but that is more behavioral than parameter-specific, so the schema-coverage baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Close'), a clear resource ('a tab'), and the required source of the identifier ('from session_list_tabs'). It also distinguishes itself from sibling tools by explicitly calling out that tabId is required and there is no active-tab default.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context by directing the agent to obtain the tab id from session_list_tabs and warns that this tool, unlike every other session tool, requires an explicit tabId. It does not explicitly name alternative tools or list exclusions beyond the active-tab contrast, but the guidance is sufficient for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_evaluateADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | JavaScript to run in the page's own context. Its completion value is returned, so end with the expression you want back | |
| tabId | No | Tab to run in; uses the active tab when omitted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds useful behavioral detail beyond that: return value formatting (JSON, strings, 'undefined'), and the critical warning that a trailing statement returns nothing useful. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loads the core action, then provides usage context, return semantics, and a practical code-writing tip. Every sentence adds value without repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an arbitrary JavaScript execution tool with no output schema, the description sufficiently covers what the tool does, when to use it, how to format code, and what return values look like. Combined with the annotation's destructive hint and the schema's tabId documentation, nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra meaning by explaining completion-value behavior and advising the agent to end with the expression it wants back, reinforcing and extending the schema's parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Run JavaScript in the page's own context and return its completion value.' It also differentiates itself from siblings by giving concrete use cases (computed styles, walking data structures, conditions too specific for session_wait), which lets an agent distinguish it from other session tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use it for what the other tools do not cover' and lists example scenarios, directly naming session_wait as an alternative for certain checks. This gives clear when-to-use guidance, though it lacks an explicit 'when not to use' list for other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_fillAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | A ref from session_snapshot, such as @e12, used instead of selector | |
| tabId | No | Tab to act on; uses the active tab when omitted | |
| value | Yes | Text to place in the field, replacing whatever is there | |
| selector | Yes | CSS selector for the field to fill |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses that it writes through the native value setter, fires input and change events, and returns {filled} naming the field. It also clarifies support for rich-text editors. This is meaningful behavioral context not present in the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences: the action and target, the mechanism and why it works, and the return value plus alternative routing. No filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, but the description explicitly names the return value, {filled}. It covers the behavioral mechanism, supported field types, exclusions, and alternatives, making it complete for an agent deciding whether and how to call this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents selector, value, ref, and tabId. The description does not add per-parameter detail beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Set a form field's value', and expands the target to input, textarea, and rich-text editors. It also names sibling tools (session_type, session_select) and explains what this tool is not, making it easy to distinguish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: use session_type when a field only reacts to real keystrokes, and session_select for a dropdown. It also explains why session_fill works for React/Vue fields by firing input and change, giving the agent a clear decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_healthARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds meaningful behavioral context beyond these: it reports live transport status, separates two failure modes, and specifies different return shapes for standalone versus extension-attached modes. This is exactly the kind of contextual detail that helps an agent predict behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The primary purpose is front-loaded, followed by the key usage condition and then the return-value details. Every clause contributes practical information for tool selection and invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter diagnostic tool with no output schema and safety annotations already provided, the description is complete. It explains what the tool reports, why it should be called first during failures, and what fields to expect in each mode. An agent has everything needed to invoke and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema describes this completely with an empty properties object. Per the baseline for zero-parameter tools, no parameter explanation is required; the description adds no parameter semantics because there is nothing to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Report which transport is live and what it can do.' It also clarifies its diagnostic role by saying 'Call this first when another tool fails unexpectedly', which clearly separates it from the sibling action tools like session_navigate or session_click.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Call this first when another tool fails unexpectedly' and explains how it distinguishes root causes. It does not explicitly name alternatives or when-not-to-use scenarios, but the condition and ordering are clear enough for a diagnostic tool with no direct sibling equivalent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_installARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful contextual behavior beyond that: no browser or licence is required, it 'always answers,' and it returns text. This is sufficient for a non-mutating informational tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose. It contains a slight redundancy between 'Return setup instructions' and 'Returns installation steps as text,' but the final clause does clarify the output format, so the overall structure is still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no parameters, no output schema, and annotations that already cover its safety profile, the description provides everything needed: target resources, trigger context, dependency constraints, and return type. An agent can select and invoke this tool correctly without further information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties and schema description coverage is 100%, so the baseline for a 0-parameter tool is 4. There are no parameters to document, and the description does not need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it 'Return[s] setup instructions for the T3rnel Browser extension and for the free standalone automation browser.' It is clearly distinct from all sibling tools, which are runtime/automation operations, and it identifies itself as the fallback tool when another tool reports the extension is missing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit trigger: 'call it when another tool reports the extension is missing.' It also explains why this is the right fallback: 'Needs no browser and no licence, so it is the one tool that always answers.' No sibling tool performs installation instructions, so no alternative routing is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_list_tabsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds valuable behavioral context beyond that: the returned ids are the shared contract used by all sibling tools, and omitting tabId selects the active tab, which is rarely desired. This is precisely the kind of cross-tool behavior an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The core action and return format are front-loaded, and the second sentence earns its place by explaining the practical relationship to every other tool's tabId argument.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool, the description is complete: it names what is returned, the fields in each item, and how those fields are used by sibling tools. Even without an output schema, the agent has everything needed to call this tool and interpret its results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters and an empty input schema, so there is nothing for the description to clarify about parameters. The schema description coverage is 100% and the description avoids inventing parameter details, matching the baseline for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('List every open tab') and then specifies the exact return shape as an array of {id, title, url}. It clearly distinguishes this tool from siblings like session_read_page or session_snapshot by focusing on tab enumeration and the ids consumed by other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when this tool is useful: to obtain tab ids for other tools' optional tabId arguments. It also gives an explicit caution against relying on the active-tab default once you have opened your own tabs, effectively telling the agent when not to omit tabId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_loginAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | No | Tab holding the sign-in form; uses the active tab when omitted | |
| domain | Yes | Domain the credentials are saved for, such as "github.com" | |
| submit | No | Ignored; kept so older callers do not break | |
| masterPassword | No | Passphrase that unlocks the extension's vault. Never log or persist it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not destructive. The description adds useful behavioral context by explaining where the vault lives, that refusal comes from the extension rather than the bridge, and that a standalone browser profile cannot use this tool. This goes beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary behavior, then provides prerequisite and fallback guidance. It is reasonably concise, though the 'one gate rather than two that can disagree' phrasing is slightly elaborate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with full schema coverage and safety annotations, the description covers the main operational context: prerequisites, error source, and fallback behavior. It does not describe return values, but there is no output schema to explain, and the core calling conditions are clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description reinforces the domain and fill behavior but does not add new parameter-level semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it decrypts stored credentials for a domain and fills them into the sign-in form. This clearly distinguishes it from manual form-filling siblings like session_fill and from credential-saving siblings like session_store_login.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when the tool works (T3rnel Browser extension with Pro) and when it does not (standalone browser has no vault), including the alternative action: sign in once by hand. This gives an agent concrete decision rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_pressADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | One of Enter, Tab, Escape, Backspace, Delete, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Home, End, PageUp, PageDown, Space | |
| ref | No | A ref from session_snapshot, such as @e12, used instead of selector | |
| tabId | No | Tab to act on; uses the active tab when omitted | |
| selector | No | CSS selector for the element to press the key on; uses the focused element when omitted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description adds valuable behavioral details: it returns '{pressed}' naming the key, and it discloses the exact error behavior ('anything else fails with the supported list rather than doing nothing'). It also explains the focusing behavior ('or on a named element after focusing it'), which is not evident from the schema alone. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action, followed by purpose examples, return value, and supported keys/error behavior. Each sentence serves a distinct function with no filler. The structure quickly informs an agent what the tool does, when to use it, and what to expect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, one required, no output schema, and annotations already providing safety semantics, the description covers the essential behavioral context: focus targeting, return value, supported keys, and failure mode. The schema covers parameter details and tab/selector behavior, so nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description reinforces the meaning of the key parameter by listing supported keys and clarifies the selector/ref use case ('on a named element after focusing it'), but it does not add substantial detail beyond the schema. Baseline 3 is appropriate because the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Press a single keyboard key on the focused element, or on a named element after focusing it.' It clearly identifies the tool as a key-press operation and distinguishes it from sibling tools like session_click and session_type by its focus on keyboard keys. The concrete use cases (submit form with Enter, dismiss dialog with Escape, walk suggestion list with ArrowDown) reinforce the tool's unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: 'Use it to submit a form with Enter, dismiss a dialog with Escape, or walk a suggestion list with ArrowDown.' This gives clear context for when the tool is appropriate, though it does not explicitly mention when not to use it or name alternative tools. Because the examples imply the alternative (typing full text with session_type, clicking with session_click), the guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_read_pageARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | No | Tab to read; uses the active tab when omitted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, open-world behavior, so the description adds value by disclosing the exact returned fields, the 50,000-character cap, the truncated flag semantics, and that text is rendered innerText from the authenticated session. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise, purposeful sentences: what it does, what it returns with key limits, and when to use it vs. a sibling. Every sentence earns its place and the most important behavior is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter read tool with no output schema, the description fully specifies the return shape, the truncation behavior, and the sibling distinction. The agent has everything needed to invoke it correctly and understand the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents tabId with its integer type and default behavior ('uses the active tab when omitted'), so schema description coverage is 100%. The description does not add parameter-level detail, but none is needed given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Read a page's visible text, as rendered in the user's authenticated session') and immediately contrasts with session_snapshot by scoping this tool to reading/summarizing rather than interacting. This clearly distinguishes it from its sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to prefer this tool over session_snapshot ('when the goal is to read or summarise') and when to prefer the alternative ('when the goal is to interact'). This gives the agent direct routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_record_eventsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum events to return in this page (default 100) | |
| offset | No | Number of events to skip, for paging through a long recording (default 0) | |
| sessionId | Yes | Recording session to read, from session_record_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses the paginated nature of the response, the return shape ({events, count}), the event type enum, and the requirement for the extension. This enriches the agent's understanding of actual behavior without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise but information-dense, leading with the core purpose, then the return structure, paging advice, and the prerequisite. Every sentence adds value with no redundant phrasing, making it easy to scan and act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, paginated tool with simple parameters and no output schema, the description covers all needed aspects: return format, event types, paging behavior, and environmental requirement. An agent can correctly invoke this tool and process results without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters are fully described in the schema (100% coverage), and the description adds practical context by explaining that limit and offset are for paging through recordings and that sessionId comes from session_record_list. This goes beyond the schema's basic definitions, providing meaningful usage insight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches captured events of a recording, specifying the order and the return structure. It distinguishes itself from sibling tools by focusing on reading events rather than recording or replaying them, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on paging through large sessions with limit and offset, and notes the prerequisite of the T3rnel Browser extension. It does not explicitly exclude alternatives like session_record_replay, but the context makes it clear this is for reading raw events, which is sufficient for most use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_record_listARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds useful behavioral context beyond that: it lists both running and finished recordings, specifies the return shape, and notes the T3rnel Browser extension requirement. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. Every sentence carries useful information: what it lists, why a caller would use it, what it returns, and what it requires. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool, the description is complete: it names the dependent sibling tools, describes the output fields, includes both active and finished recordings, and notes the runtime dependency. No output schema exists, so the detailed return description is especially valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so there are no parameter semantics to clarify. The description appropriately focuses on the return shape rather than inputs; the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource ('List every recording, running or finished') and clearly differentiates the tool's purpose as locating the id needed by session_record_events and session_record_replay. This makes the tool's role among many session siblings immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: the caller should use this tool when they need a recording id for session_record_events or session_record_replay. It does not explicitly state when not to use it or name alternative listing tools, but the intended usage is nonetheless clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_record_replayADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| speed | No | Replay speed multiplier; 1 is the recorded pace, 2 is twice as fast (default 1) | |
| sessionId | Yes | Stopped recording session to replay, from session_record_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, openWorldHint=true, and idempotentHint=false. The description goes beyond this by detailing concrete real-world effects (re-sending messages, re-submitting forms, spending money), the high-risk classification with an approval prompt, the requirement that the tab must be open, and how partial replay failures are reported. This is exactly the kind of context an agent needs for a destructive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four information-dense sentences in a logical order: action, return behavior, prerequisites, and risk warning. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the return shape is fully disclosed. The description covers preconditions, failure reporting, real-world consequences, and safety gating. With only two parameters fully documented in the schema, nothing important is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description restates that the session must be a stopped recording but does not add new meaning beyond what the schema already provides for sessionId or speed. No extra parameter-level guidance is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (replay), a specific resource (a stopped recording), and the precise scope (in its original tab, reproducing interactions in order). It clearly differentiates from sibling record_* tools, which create, list, or inspect recordings, by focusing on the replay action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context and preconditions: the recording must be stopped, the original tab must still be open, and the T3rnel Browser extension is required. It also warns that this acts on the live page and is gated behind an approval prompt, but it does not explicitly name alternative tools or stated when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_record_startA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | No | Tab to record; uses the active tab when omitted | |
| maxEvents | No | Maximum events to keep, oldest dropped first (default 10000) | |
| sessionId | No | Recording session id; one is generated when omitted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses meaningful behavior: it starts background recording of specific user interactions, requires an extension dependency, returns a structured object, and has automatic termination after tab close or four hours. These are exactly the kind of side effects and limits an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the core action, lists what is recorded, gives the return shape, and then covers prerequisites and automatic stopping. Every sentence carries useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no required parameters and no output schema, the description covers everything needed to call it correctly: what happens, what is returned, what dependency is required, and when recording ends. This is sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters with 100% coverage, so the description does not need to repeat them. It adds value by emphasizing that the sessionId is essential for subsequent recording tools, which helps an agent understand its significance, but this is a minor semantic addition over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Begin recording') and resource ('what happens in a tab'), enumerates the event types captured, and distinguishes itself from siblings like session_record_stop and session_record_events by framing it as the starting point. It leaves no doubt about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: the T3rnel Browser extension is required, the recording has automatic stop conditions, and the returned sessionId is needed by all other recording tools. It does not explicitly name alternatives or say when not to use it, but the start/stop/event sibling structure makes the use case evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_record_stopAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | No | Session to stop; required only when more than one recording is active |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds the extension requirement, the performance trait ('cheap to call on a long recording'), and the error behavior when multiple recordings are active. No contradiction with idempotentHint=true or destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler. The primary action and return value are front-loaded, followed by necessary operational context and edge-case guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return value, prerequisite, and an important conditional requirement, which is enough for a simple one-optional-parameter tool with idempotency and destructive hints provided by annotations. Minor gaps like behavior on already-stopped recordings are not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents sessionId. The description restates the condition and adds a detail about the error message, but does not materially expand parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Stop a recording') and names the exact return payload, distinguishing it clearly from sibling tools like session_record_start and session_record_events. No ambiguity about what the tool accomplishes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly points to session_record_events as the alternative for reading events, and clarifies when sessionId is required. It does not enumerate every sibling, but gives enough context to route the agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_screenshotARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | No | Tab to capture; uses the active tab when omitted | |
| format | No | png (default, lossless) or jpeg (smaller, and the only format quality applies to) | png |
| quality | No | JPEG quality from 0 to 100; ignored for png | |
| windowId | No | Window to capture from; uses the current window when omitted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds valuable behavioral context: the output is a data: URL containing base64 PNG or JPEG, and the capture is strictly the visible viewport with no scrolling or stitching. This meaningfully enriches the tool's behavior beyond what readOnlyHint/idempotentHint convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with no filler: the action comes first, then the return format, then the critical limitation and alternative. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately explains the return value. Combined with complete parameter schemas and supportive annotations, nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters including defaults and enum behavior. The description only restates the PNG/JPEG output, so it adds little beyond the structured parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Capture what is currently on screen in a tab.' It also clarifies the exact scope ('visible viewport only') and distinguishes itself from full-page capture, so an agent can understand what the tool does at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when not to use the tool ('does not scroll or stitch') and points to the alternative ('a long page needs the extension's full-page capture instead'). This gives clear usage guidance without relying on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_selectAIdempotent
Choose an option in a 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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | A ref from session_snapshot, such as @e12, used instead of selector | |
| text | No | Visible option text to choose; matched exactly first, then by substring | |
| index | No | Zero-based option index to choose; tried last | |
| tabId | No | Tab to act on; uses the active tab when omitted | |
| value | No | Option value to choose; tried first | |
| selector | Yes | CSS selector for the <select> |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the silent failure mode (native value setter belonging to HTMLInputElement has no effect) and explains the tool exists to prevent it. It additionally spells out the matching order, the return object shape {selected, value, text}, and the failure behavior (lists available options). This goes well beyond the annotations (readOnlyHint false, idempotentHint true, etc.) and gives a complete picture of runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet information-dense, with every sentence serving a purpose: stating the core action and selection methods, explaining a common pitfall, detailing the matching precedence, and specifying output and error behavior. It is front-loaded with the purpose and avoids any redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dropdown-selection tool with moderate complexity, the description covers all aspects an agent needs: how to choose (methods), why not to use alternative methods, the order of resolution, the return value, and error handling. There is no output schema, but the description compensates by specifying the return shape. Combined with the thorough schema and annotations, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful context by explaining that value is tried first, then exact text, then substring, then index, which clarifies the interplay between the value, text, and index parameters beyond their individual schema entries. It also notes that ref is used instead of selector, reinforcing the schema's wording. This adds moderate value above the schema, warranting a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb 'choose' and the resource 'option in a <select> dropdown', then elaborates on the three selection modes (value, visible text, index). It also contrasts itself with text-field filling, which is a sibling operation, making the purpose unambiguous and differentiated from session_fill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns that filling a select as a text field does nothing, thereby telling the agent when NOT to use session_fill and implicitly steering it to this tool for dropdowns. It also details the matching priority (value → exact text → substring → index), which helps the agent decide which parameter to supply based on the target option.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_snapshotAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | No | Tab to snapshot; uses the active tab when omitted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with annotations present, the description adds meaningful behavioral detail: it skips zero-size and hidden elements, caps labels at 120 characters, stops at 200 elements, and explains the ref handle format. This goes beyond the idempotent and non-destructive hints already supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler. The first sentence states purpose and return shape, the second explains ref semantics and sibling-tool usage, and the third lists limits. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one optional parameter and no output schema, the description fully covers the output structure, element shape, ref semantics, sibling relationships, and truncation behavior. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the only parameter, tabId, is already documented as 'Tab to snapshot; uses the active tab when omitted.' The description adds no additional parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Capture a semantic map of a page for deciding what to act on.' It also distinguishes itself from session_read_page by framing this as the interactive-element snapshot versus a read-oriented page snapshot. The title 'Snapshot interactive elements' reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly gives the when-to-use rule: 'Prefer this over session_read_page when the goal is to interact rather than to read.' It also explains that the returned @eN refs are accepted by session_click, session_fill, session_type, session_select, and session_press, making the workflow clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_store_loginAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain the credentials belong to, such as "github.com" | |
| password | Yes | Password to encrypt and store. It is never returned by any tool | |
| username | Yes | Username or email to store | |
| masterPassword | No | Passphrase that unlocks the extension's vault. Never log or persist it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write (readOnlyHint=false), idempotent, and non-destructive. The description adds the crucial security guarantee that the password is never returned or listed, and the prerequisite of the extension with Pro. This goes beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The core action is front-loaded, followed by a critical requirement and a security guarantee. Every word contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple store operation with no output schema, the description covers the purpose, prerequisite, and security behavior. It lacks discussion of error cases or overwrite semantics, but these are less critical given the idempotency hint and simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are documented in the schema. The description reinforces the password's privacy but does not add substantive meaning beyond the schema. It meets the baseline but adds little extra.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (encrypt and store credentials for a domain) and a clear resource (the extension's vault), with an explicit purpose tied to session_login. This distinguishes it from siblings like session_login and session_record_* without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates when to use: before session_login to persist credentials. It also notes the requirement (extension with Pro) and that the password is never returned. However, it does not explicitly mention 'when not to use' or name alternative tools, though the context of storing vs. logging in is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_typeA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | A ref from session_snapshot, such as @e12, used instead of selector | |
| text | Yes | Text to type, one character at a time | |
| tabId | No | Tab to act on; uses the active tab when omitted | |
| selector | Yes | CSS selector for the field to type into |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=false, idempotentHint=false, and destructiveHint=false. The description adds useful behavioral context: it fires keyboard events, returns {typed} with the character count, and is slower than session_fill. It does not fully describe side effects of triggering real keystrokes, but with annotations present the additional information is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences: primary behavior, when to use versus session_fill, and return/performance notes. Everything earns its place and the most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple tool with 4 parameters, no output schema, and a clear sibling relationship, the description covers what the tool does, when to use it, what it returns, and its performance tradeoff. No critical information seems missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents selector, text, ref, and tabId. The description reinforces that text is typed one character at a time and mentions the {typed} return value, but it does not need to compensate for missing schema details, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Type text one character at a time, firing the key events a real keyboard would.' It clearly distinguishes itself from session_fill by naming it, so an agent can tell which tool to use without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool instead of session_fill when a field only reacts to keystrokes, and gives concrete examples: search boxes with live suggestions, autocompletes, and per-character validation. It also tells the agent to prefer session_fill unless this tool is needed, providing clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_waitARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | No | Tab to wait on; uses the active tab when omitted | |
| value | No | URL substring or CSS selector to wait for; required for the url and selector conditions | |
| condition | Yes | What to wait for: load (the load event), url (value appears in the URL), or selector (element appears) | |
| timeoutMs | No | Maximum wait in milliseconds (default 10000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a lot beyond the annotations: it polls every 200ms, uses a 10000ms default timeout, returns as soon as the condition holds, fails with a named error instead of hanging, and specifies the exact return shape for each condition. Annotations already declare readOnly and non-destructive, and the description is consistent with them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds useful information: purpose, wait conditions, return shapes, timeout behavior, polling interval, and failure mode. It is front-loaded with the main purpose before going into mechanics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four well-documented parameters, no output schema, and safe read-only annotations, the description covers everything an agent needs to invoke it correctly: what conditions exist, what happens on success/failure, defaults, and polling behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already well documented. The description adds context about behavior, such as how the value relates to URL and selector conditions, but does not significantly extend the meaning of the parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it blocks until a page reaches a known state, then releases so the next tool can act on a settled page. It names the three wait conditions (load, URL substring, selector), which distinguishes it from sibling tools like session_navigate or session_snapshot that perform actions or read state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: before a subsequent tool acts on a page that must be fully loaded or settled. It does not explicitly name alternatives or state when not to use it, but the intended placement in a workflow is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
18 tool updates
v1.2.0- Changed
session_click4 fields changed- added
Input schema / properties / ref / examplesAdded value: +[ + "@e12" +] - added
Input schema / properties / ref / patternAdded value: +"^@?e\\d+$" - added
Input schema / properties / selector / descriptionAdded value: +"CSS selector for the element to click" - added
Input schema / properties / tabId / descriptionAdded value: +"Tab to act on; uses the active tab when omitted"
- Added
session_close_tab - Changed
session_evaluate2 fields changed- added
Input schema / properties / code / descriptionAdded value: +"JavaScript to run in the page's own context. Its completion value is returned, so end with the expression you want back" - added
Input schema / properties / tabId / descriptionAdded value: +"Tab to run in; uses the active tab when omitted"
- Changed
session_fill5 fields changed- added
Input schema / properties / ref / examplesAdded value: +[ + "@e12" +] - added
Input schema / properties / ref / patternAdded value: +"^@?e\\d+$" - added
Input schema / properties / selector / descriptionAdded value: +"CSS selector for the field to fill" - added
Input schema / properties / tabId / descriptionAdded value: +"Tab to act on; uses the active tab when omitted" - added
Input schema / properties / value / descriptionAdded value: +"Text to place in the field, replacing whatever is there"
- Changed
session_login5 fields changed- changed
Input schema / properties / domain / descriptionPrevious value: -"Domain the credentials are saved for, e.g. \"github.com\""New value: +"Domain the credentials are saved for, such as \"github.com\"" - added
Input schema / properties / domain / examplesAdded value: +[ + "github.com" +] - added
Input schema / properties / masterPassword / descriptionAdded value: +"Passphrase that unlocks the extension's vault. Never log or persist it" - changed
Input schema / properties / submit / descriptionPrevious value: -"Ignored; kept for compatibility"New value: +"Ignored; kept so older callers do not break" - added
Input schema / properties / tabId / descriptionAdded value: +"Tab holding the sign-in form; uses the active tab when omitted"
- Changed
session_navigate6 fields changed- added
Input schema / properties / newTab / defaultAdded value: +false - changed
Input schema / properties / newTab / descriptionPrevious value: -"Open in a new tab instead of reusing the active tab"New value: +"Open in a new tab instead of reusing the active tab (default false)" - changed
Input schema / properties / tabId / descriptionPrevious value: -"Tab id from session_list_tabs"New value: +"Tab id from session_list_tabs; uses the active tab when omitted" - changed
Input schema / properties / url / descriptionPrevious value: -"Absolute URL to navigate to"New value: +"Absolute URL to navigate to, including the scheme" - added
Input schema / properties / url / examplesAdded value: +[ + "https://github.com/notifications" +] - added
Input schema / properties / url / formatAdded value: +"uri"
- Changed
session_press5 fields changed- added
Input schema / properties / key / descriptionAdded value: +"One of Enter, Tab, Escape, Backspace, Delete, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Home, End, PageUp, PageDown, Space" - added
Input schema / properties / ref / examplesAdded value: +[ + "@e12" +] - added
Input schema / properties / ref / patternAdded value: +"^@?e\\d+$" - added
Input schema / properties / selector / descriptionAdded value: +"CSS selector for the element to press the key on; uses the focused element when omitted" - added
Input schema / properties / tabId / descriptionAdded value: +"Tab to act on; uses the active tab when omitted"
- Changed
session_read_page1 field changed- added
Input schema / properties / tabId / descriptionAdded value: +"Tab to read; uses the active tab when omitted"
- Changed
session_record_events7 fields changed- added
Input schema / properties / limit / defaultAdded value: +100 - added
Input schema / properties / limit / descriptionAdded value: +"Maximum events to return in this page (default 100)" - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"Number of events to skip, for paging through a long recording (default 0)" - added
Input schema / properties / offset / minimumAdded value: +0 - added
Input schema / properties / sessionId / descriptionAdded value: +"Recording session to read, from session_record_list"
- Changed
session_record_replay4 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"Stopped recording session to replay, from session_record_list" - added
Input schema / properties / speed / defaultAdded value: +1 - changed
Input schema / properties / speed / descriptionPrevious value: -"Replay speed multiplier (default 1)"New value: +"Replay speed multiplier; 1 is the recorded pace, 2 is twice as fast (default 1)" - added
Input schema / properties / speed / exclusiveMinimumAdded value: +0
- Changed
session_record_start4 fields changed- added
Input schema / properties / maxEvents / defaultAdded value: +10000 - changed
Input schema / properties / maxEvents / descriptionPrevious value: -"Maximum number of events to capture (default 10000)"New value: +"Maximum events to keep, oldest dropped first (default 10000)" - added
Input schema / properties / maxEvents / minimumAdded value: +1 - changed
Input schema / properties / sessionId / descriptionPrevious value: -"Optional recording session id; one is generated if omitted"New value: +"Recording session id; one is generated when omitted"
- Changed
session_record_stop1 field changed- changed
Input schema / properties / sessionId / descriptionPrevious value: -"Session to stop; required only when multiple recordings are active"New value: +"Session to stop; required only when more than one recording is active"
- Changed
session_screenshot7 fields changed- added
Input schema / properties / format / defaultAdded value: +"png" - added
Input schema / properties / format / descriptionAdded value: +"png (default, lossless) or jpeg (smaller, and the only format quality applies to)" - changed
Input schema / properties / quality / descriptionPrevious value: -"JPEG quality 0-100"New value: +"JPEG quality from 0 to 100; ignored for png" - added
Input schema / properties / quality / maximumAdded value: +100 - added
Input schema / properties / quality / minimumAdded value: +0 - changed
Input schema / properties / tabId / descriptionPrevious value: -"Tab to capture (defaults to the active tab)"New value: +"Tab to capture; uses the active tab when omitted" - added
Input schema / properties / windowId / descriptionAdded value: +"Window to capture from; uses the current window when omitted"
- Changed
session_select5 fields changed- changed
Input schema / properties / index / descriptionPrevious value: -"Option index to choose"New value: +"Zero-based option index to choose; tried last" - added
Input schema / properties / ref / examplesAdded value: +[ + "@e12" +] - added
Input schema / properties / ref / patternAdded value: +"^@?e\\d+$" - added
Input schema / properties / tabId / descriptionAdded value: +"Tab to act on; uses the active tab when omitted" - changed
Input schema / properties / value / descriptionPrevious value: -"Option value to choose"New value: +"Option value to choose; tried first"
- Changed
session_snapshot1 field changed- added
Input schema / properties / tabId / descriptionAdded value: +"Tab to snapshot; uses the active tab when omitted"
- Changed
session_store_login4 fields changed- added
Input schema / properties / domain / descriptionAdded value: +"Domain the credentials belong to, such as \"github.com\"" - added
Input schema / properties / masterPassword / descriptionAdded value: +"Passphrase that unlocks the extension's vault. Never log or persist it" - added
Input schema / properties / password / descriptionAdded value: +"Password to encrypt and store. It is never returned by any tool" - added
Input schema / properties / username / descriptionAdded value: +"Username or email to store"
- Changed
session_type5 fields changed- added
Input schema / properties / ref / examplesAdded value: +[ + "@e12" +] - added
Input schema / properties / ref / patternAdded value: +"^@?e\\d+$" - added
Input schema / properties / selector / descriptionAdded value: +"CSS selector for the field to type into" - added
Input schema / properties / tabId / descriptionAdded value: +"Tab to act on; uses the active tab when omitted" - added
Input schema / properties / text / descriptionAdded value: +"Text to type, one character at a time"
- Changed
session_wait6 fields changed- added
Input schema / properties / condition / descriptionAdded value: +"What to wait for: load (the load event), url (value appears in the URL), or selector (element appears)" - added
Input schema / properties / tabId / descriptionAdded value: +"Tab to wait on; uses the active tab when omitted" - added
Input schema / properties / timeoutMs / defaultAdded value: +10000 - changed
Input schema / properties / timeoutMs / descriptionPrevious value: -"Maximum wait in milliseconds"New value: +"Maximum wait in milliseconds (default 10000)" - added
Input schema / properties / timeoutMs / minimumAdded value: +1 - changed
Input schema / properties / value / descriptionPrevious value: -"URL substring or selector to wait for"New value: +"URL substring or CSS selector to wait for; required for the url and selector conditions"
21 tool updates
v1.1.1- First observed
session_click - First observed
session_evaluate - First observed
session_fill - First observed
session_health - First observed
session_install - First observed
session_list_tabs - First observed
session_login - First observed
session_navigate - First observed
session_press - First observed
session_read_page - First observed
session_record_events - First observed
session_record_list - First observed
session_record_replay - First observed
session_record_start - First observed
session_record_stop - First observed
session_screenshot - First observed
session_select - First observed
session_snapshot - First observed
session_store_login - First observed
session_type - First observed
session_wait
TDQS
Each tool has a distinct, well-defined purpose with clear boundaries: navigation, reading, interacting, waiting, recording, and login are all separated. Tools like session_read_page vs session_snapshot and session_fill vs session_type explicitly differentiate their use cases and recommend alternatives, eliminating ambiguity.
All tools follow a strict 'session_' prefix with a verb or verb_noun structure in snake_case, such as session_list_tabs, session_close_tab, session_record_start. The pattern is uniform, making it easy to predict and group related actions.
At 22 tools, the count is slightly above the typical 3-15 range, but each tool addresses a distinct browser automation capability (tab, navigation, interaction, recording, login). The granularity is justified by the breadth of the domain, though it borders on heavy.
The tool surface covers the full lifecycle of browser session automation: setup, health check, tab management, page navigation, reading and interacting (click, fill, type, select, press), waiting, screenshots, login credential storage, and full recording/replay. There are no obvious dead ends; all workflows from basic browsing to complex testing workflows are supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Run multi-step tasks in a real Chrome browser: persistent environments, live view, human takeover.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
61
Related MCP Servers
- AlicenseNot gradedqualityAmaintenancesingle-binary MCP server that gives AI agents a browser. 66 tools for navigation, form filling, data extraction, screenshots, and DOM diffing — built on pure Chrome DevTools Protocol.11MIT
- AlicenseNot gradedqualityCmaintenanceChrome extension + MCP server. Lets coding agents (Claude Code, Codex CLI) drive your real Chrome — sessions intact, 2FA stays with the user. 26 browser tools: form fill on React/CodeMirror/Monaco, privileged fetch that bypasses page CSP, authenticated downloads, in-extension docx parsing. Battle-tested by 400+ hours of real agentic browser work before public v0.9 release.312MIT
- FlicenseNot gradedqualityBmaintenanceAn MCP server that lets AI assistants drive real Chromium browsers — navigate, click, type, read pages, run OCR, and record network traffic. 43 tools, credentials stay local, zero telemetry.-
- AlicenseAqualityAmaintenanceMCP server + Chrome extension that drive the user's real, logged-in Chrome over a local WebSocket. 59 token-efficient web-dev tools: compact element refs instead of screenshots, server-side table filtering, visual regression, accessibility/SEO/security audits, network mocking. Also runs on ChromeOS/Crostini.63773MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/t3ratech/mcp-session-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server