Skip to main content
Glama
johannschiffer

BrowserBridge MCP

BrowserBridge MCP (Lite Edition)

License: MIT Protocol: MCP Python: >=3.10

BrowserBridge MCP is a lightweight headless browser session bridge and Accessibility Object Model (AOM) inspector designed for AI coding assistants (Claude Desktop, Cursor, OpenAI Codex, LangGraph).

It enables agents to navigate web applications, extract semantic clean text, and interact with web pages without drowning the LLM context window in massive HTML blobs.


๐ŸŽฏ The Problem

When autonomous AI agents interact with web pages:

  1. Context Window Exhaustion: Dumping 2MB of raw HTML, scripts, CSS, and SVG icons into an LLM exhausts the token budget within 3 turns.

  2. Brittle Selectors: Agents fail to find buttons when modern websites use dynamic, hashed class names (class="btn_3x9a_primary").

  3. Zombie Memory Leaks: Unmanaged headless browsers leak memory on the host system when agents drop sessions without cleanup.

BrowserBridge solves this by converting web pages into a compact, token-efficient Accessibility Object Model (AOM) tree (~95% token reduction) and providing clean interaction primitives.


Related MCP server: Charlotte

โœจ Features (Lite Edition)

  • ๐ŸŒ Headless Navigation: Fetch and navigate web pages with automatic redirect handling.

  • ๐ŸŒณ Accessibility Tree (AOM) Extraction: Filters noisy DOMs into structured interactive nodes (buttons, links, textboxes) with stable @node identifiers.

  • ๐Ÿงน Clean Text Extractor: Strips scripts, ads, and formatting for fast summarization.

  • โšก Zero Browser Overhead: Pure Python runtime compatible with Claude Desktop and Cursor.


๐Ÿš€ Quickstart

1. Installation

git clone https://github.com/johannschiffer/browserbridge-mcp.git
cd browserbridge-mcp
pip install -e .

2. Configure in Claude Desktop or Cursor

Add to your claude_desktop_config.json or Cursor MCP settings:

{
  "mcpServers": {
    "browserbridge": {
      "command": "browserbridge",
      "args": ["run"]
    }
  }
}

3. CLI Inspection

# Inspect clean accessibility nodes of any website
browserbridge aom https://news.ycombinator.com

๐Ÿ› ๏ธ MCP Tools Reference

Tool

Parameters

Description

navigate_page

url, session_id

Navigates headless browser to destination URL

extract_clean_text

session_id

Extracts cleaned markdown text from page

extract_accessibility_tree

session_id

Extracts compact interactive elements (AOM)

click_element

selector, session_id

Simulates click on interactive element

fill_form_field

selector, value, session_id

Fills input or textarea field

get_page_status

session_id

Returns current URL, title, and response code


๐Ÿš€ Upgrade to BrowserBridge Pro

Need enterprise-grade auditability, durable execution receipts, and browser pool sandboxing?

The BrowserBridge Pro Edition adds:

  • ๐Ÿ“œ Durable Action Receipts Engine: Generates cryptographic SHA-256 receipts for every web action, linking pre/post DOM hashes with visual state snapshots.

  • ๐Ÿ›ก๏ธ Session Pool Manager con Anti-Zombie Auto-Cleanup: Manages multiple browser contexts with strict inactivity TTLs, preventing memory leaks on your host.

  • ๐ŸŽฏ Visual Element Selector & Coordinate Resolver: Resolves robust CSS/XPath selectors and handles dynamic single-page applications (SPAs).

  • ๐Ÿณ Production Docker & Compose: Containerized headless Chromium runtime ready for cloud execution.

  • ๐Ÿงช 100% Passing Pytest Suite.

๐Ÿ‘‰ Get BrowserBridge Pro on Gumroad ($14.99 USD)


๐Ÿ“„ License

MIT ยฉ 2026 Johann Schiffer

Available Tools

6 tools
click_elementC

Click an interactive element by CSS selector or target ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYesCSS selector or element name to click.
session_idNoSession identifier (default: 'default').

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does not disclose what a click triggers (navigation, new tab, form submission), whether it waits for the element to become actionable, what happens if the selector matches nothing, or whether the action is reversible โ€” critical context for an interaction tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the action front-loaded and no filler. It is tight, though its brevity partly reflects under-specification rather than disciplined concision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an interactive, side-effecting tool with no annotations and no output schema, the description omits the essentials: post-click behavior, waiting/auto-wait semantics, failure modes, and result reporting. An agent cannot predict the consequences of invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are documented and the baseline is 3. The description roughly restates the selector parameter, but its wording ('target ID') diverges from the schema's 'CSS selector or element name', adding mild ambiguity rather than new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Click an interactive element') with a mechanism (CSS selector / target ID), so the core action is unambiguous. However, it does nothing to distinguish this tool from siblings like fill_form_field or navigate_page, which also act on page elements, so sibling differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no conditions for when to use this tool rather than navigate_page or fill_form_field, no prerequisites (page loaded? session active?), and no exclusions. The agent must infer the 'click vs fill vs navigate' split from tool names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_accessibility_treeA

Extract interactive elements (buttons, links, inputs) as an Accessibility Object Model (AOM), reducing token cost by ~95%.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoSession identifier (default: 'default').

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden, and it does disclose two useful traits: the output shape (AOM) and a rough cost profile (~95% token reduction vs. full DOM). It does not clarify that it is a non-mutating read, what happens on large or empty pages, or how output is bounded, so meaningful gaps remain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence: the verb and resource come first, the output format and the token-cost benefit follow. No filler and nothing redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only extraction tool with one parameter and no output schema, the description covers what it returns and why it is cheap. However, it omits whether the result reflects the currently navigated page/state and how output scales, which an agent selecting it would want to know.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one optional parameter and the schema documents it at 100% coverage, including its default, so the description need not repeat it. It adds no extra meaning about session_id semantics beyond the schema, which is the baseline expectation at full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb ('Extract') plus a specific resource ('interactive elements... as an Accessibility Object Model'), and the parenthetical enumeration (buttons, links, inputs) pins down what 'interactive' means. It distinguishes itself from extract_clean_text by focusing on interactive elements rather than text, though it never names that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the tool to call when it needs a compact map of clickable/fillable elements rather than page text. There is no explicit statement of when to prefer it over extract_clean_text or get_page_status, and no prerequisites (e.g. that a page must be loaded) are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_clean_textB

Extract cleaned, semantic markdown text from current page, stripping scripts and clutter.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoSession identifier (default: 'default').

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the output format (markdown) and that scripts/clutter are stripped, which is useful. However, it omits whether this requires an active session/page, whether it is read-only, and what happens on an empty or non-HTML page.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the action and the transformation front-loaded; no filler. It stops short of being exemplary only because there is no additional routing or prerequisite information to round it out.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity read tool with one optional parameter and no output schema, the description covers the essentials. It still leaves open the required page/session state and whether navigation must precede extraction, which an agent would need when picking between this and the accessibility-tree sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the sole parameter (session_id, default 'default') is documented in the schema. The description adds no parameter-level detail, but the baseline is 3 when the schema does the heavy lifting and there is little to explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Extract') and resource ('cleaned, semantic markdown text from current page'), plus the transformation applied (stripping scripts and clutter). It implicitly distinguishes itself from extract_accessibility_tree by naming markdown text as the output, but does not name the sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the description makes clear this is for pulling readable content off the current page, but it offers no when-to-use guidance, no prerequisites (e.g. a page must be loaded), and no comparison to the sibling extract_accessibility_tree.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fill_form_fieldC

Enter text or value into a form input or textarea.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesText value to insert.
selectorYesCSS selector or input name.
session_idNoSession identifier (default: 'default').

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it discloses almost nothing: not whether existing content is overwritten or appended, whether input/change events are dispatched (critical for reactive form frameworks), what happens on a missing selector, or what is returned. Only the target element type is constrained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words and the action clearly leading. It is efficient, though its brevity is also the source of the coverage gaps.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations, no output schema, and 3 parameters, the description should cover prerequisites and side effects. It omits sequencing with navigate_page, event dispatch behavior, and overwrite semantics, leaving the agent under-informed about a state-changing interaction.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so selector, value, and session_id are already documented in the schema. The description adds no format, syntax, or defaulting detail beyond that, which matches the baseline 3 for schema-documented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (enter) and target resource (form input or textarea), which is concrete enough to separate it from click_element or navigate_page. It does not, however, explicitly contrast itself with any sibling, so an agent gets no routing help beyond the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites (e.g. page must be navigated and the field may need to be focused or clicked first), and no mention of alternatives when the target is not a text input. The agent must infer all of this.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_page_statusA

Inspect active session state, current URL, page title, and HTTP response code.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoSession identifier (default: 'default').

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It does disclose what information is inspected, which is helpful, but it does not explicitly state that the operation is read-only, has no side effects, or describe error conditions when no session is active.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It efficiently states the key inspected values.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple status-inspection tool with one optional parameter and no output schema, the description is mostly complete because it lists the returned fields. It could be slightly richer regarding return structure or behavior when no session exists, but the core information is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage and documents the optional session_id with its default. The description adds no additional parameter meaning, so the schema carries the parameter semantics fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: inspect active session state, current URL, page title, and HTTP response code. It is clearly distinguishable from action-oriented siblings such as navigate_page and click_element, though it does not explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies the tool should be used when the agent needs to inspect current browser session status. However, it gives no explicit when-to-use guidance, prerequisites, or alternatives among the sibling tools.

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.

  1. 6 tool updatesv1.0.0
    • First observedclick_element
    • First observedextract_accessibility_tree
    • First observedextract_clean_text
    • First observedfill_form_field
    • First observedget_page_status
    • First observednavigate_page

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct action: navigation, two extraction modes with clearly different outputs (markdown vs AOM), clicking, status inspection, and form filling. The two extraction tools are differentiated by description, so an agent can choose correctly.

Naming Consistency5/5

All names use snake_case verb_noun format (navigate_page, extract_clean_text, click_element, etc.). Consistent and predictable.

Tool Count5/5

Six tools is well-scoped for a focused headless browser bridge. Each tool covers a core operation without redundancy.

Completeness3/5

Core navigation, extraction, and basic interaction are covered, but common browser automation operations like scrolling, waiting for elements, taking screenshots, executing JavaScript, or handling multiple tabs are absent. These gaps may force workarounds for complex workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI agents to browse and interact with web pages through a persistent headless Chromium session, serving compact structured orientations, targeted element queries, and full detail only when explicitly requested. It supports navigation, observation, form filling, monitoring, and session management while cutting token overhead by up to ~140x versus raw accessibility-tree dumps.
    4 npm
    -
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI agents to browse and interact with web pages through compact, typed structural representations โ€” landmarks, headings, interactive elements, and forms โ€” served in three controllable detail levels instead of full accessibility-tree dumps. Agents can navigate, query for specific elements, fill forms, manage tabs and cookies, capture screenshots, and run audits while paying a fraction of the token cost.
    4 npm
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to browse, navigate, and interact with web pages through structured, token-efficient page representations โ€” returning compact orientations and targeted element queries instead of full accessibility-tree dumps.
    4 npm
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to browse and interact with web pages through compact, structured representations โ€” page summaries, targeted element queries, and full detail on demand โ€” instead of paying for a full accessibility-tree dump on every call. This cuts the token cost of reading content-heavy pages by up to ~140x while still supporting navigation, forms, clicks, screenshots, and session management.
    4 npm
    -