Skip to main content
Glama

License: MIT PRs Welcome Node Made for Claude Code

Let Claude Code drive your real, logged-in Chrome — the way the Claude-in-Chrome extension does, but open source and yours.

JevBridge pairs a tiny MCP server with a Chrome MV3 extension. The extension uses Chrome's built-in chrome.debugger (CDP) to read and act on your actual tabs — your profile, your logins, your open pages — with no remote-debug port and no relaunch. The page is read as a compact, numbered element table (jev-style), not screenshots.

The calling agent (Claude) is the policy. There is no second model and no API key. Page snapshots flow up to Claude as ordinary tool results; nothing is sent to any third party.

Claude Code ──stdio(MCP)──▶ mcp/server.mjs ──ws://127.0.0.1:10577──▶ Chrome extension ──CDP──▶ your tabs

Why this instead of the alternatives

Claude-in-Chrome

jev launch/attach

JevBridge

Runs in your real logged-in Chrome

❌ (own profile / debug port)

✅ (chrome.debugger, no port)

Decision model

Claude

jev's model (paid, per-click)

Claude (you), no key

Perception

screenshots + DOM

element table

element table

Open source / self-owned

partial

✅ MIT

Page data to a third party

no

yes (to the model API)

no

Related MCP server: chrome-mcp

Install (developer / unpacked)

  1. Load the extension

    • Chrome → chrome://extensions → toggle Developer mode (top right).

    • Load unpacked → select the extension/ folder.

    • Copy the extension's ID (shown on its card).

    • Open its Details → Extension options to confirm the bridge port (default 10577).

  2. Register the MCP server with Claude Code (user scope):

    claude mcp add --scope user jevbridge -- node /ABS/PATH/jevbridge/mcp/server.mjs

    (Optional: --env JEVBRIDGE_PORT=10577 to change the port; set the same in the extension options.)

  3. Restart Claude Code so the new tools load. The extension badge turns green (●) when it reaches the bridge.

Tools

  • browser_status — connection + attached-tab diagnostics (call this first if something's off).

  • browser_tabs — list open tabs (id, title, url, active).

  • browser_navigate{ url, tabId? } → element table after load.

  • browser_observe{ tabId? } → the element table.

  • browser_act{ ops: [...], tabId? } → runs ops, returns a fresh table.

  • browser_assert{ contains? | url_includes? | ref_visible?, tabId? } → pass/fail.

Ops for browser_act: {op:"click",ref:"e12"}, {op:"type",ref:"e7",text:"..."}, {op:"select",ref:"e8",value:"..."}, {op:"key",key:"Enter"}, {op:"scroll",dy:600}, {op:"wait",ms:500}.

Element table line: e12 btn "Sign in" · e7 inp "Email" ▸ "current value" · e9 chk✓ "Remember me" · = disabled · (off-screen) = outside the viewport. Refs (e12) stay stable across observations of the same page.

Notes & limits

  • Attaching the debugger shows Chrome's "JevBridge is debugging this browser" banner — expected.

  • One debugger client per tab: a tab with DevTools open (or driven by another extension) can't be attached; switch tabs or close DevTools.

  • chrome://, the Web Store, and other browser pages can't be driven.

  • No cross-origin iframe traversal, canvas, or file uploads yet.

  • The bridge binds to 127.0.0.1 only.

Security

The extension holds debugger + <all_urls> — the power to read and act on any page in your profile. That is the same capability class as any real-browser agent; use it deliberately. Everything here is auditable: the MCP server is one zero-dependency file (mcp/server.mjs), the extension is plain JS under extension/.

Contributing

Contributions are welcome. See CONTRIBUTING.md for the dev setup, how to run the tests, and the PR process. By participating you agree to the Code of Conduct.

Security

The extension holds powerful permissions, so security reports matter. Please do not open a public issue for vulnerabilities — see SECURITY.md for private reporting.

Support

Questions or trouble? See SUPPORT.md.

License

MIT © jevbridge contributors.

Available Tools

6 tools
browser_actA

Run a list of operations on the target tab in order, then return the fresh element table. ops: [{op:"click",ref:"e12"} | {op:"type",ref:"e7",text:"..."} | {op:"select",ref:"e8",value:"..."} | {op:"key",key:"Enter"} | {op:"scroll",dy:600} | {op:"wait",ms:500}].

ParametersJSON Schema
NameRequiredDescriptionDefault
opsYes
tabIdNo

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It clearly discloses that operations execute in order, enumerates the supported operation shapes, and states that a fresh element table is returned. It does not cover partial-failure behavior or whether a click can cause navigation, but the core side effects are visible.

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 that states the behavior first and then provides a compact, unambiguous grammar for the operations array. There is no filler or repetition of schema field names.

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?

It covers the core mechanics and the return value, but it leaves some operational context implicit: element refs presumably come from a prior observation, tabId semantics are unspecified, and error or partial-failure behavior is not addressed. An agent can likely call it correctly in simple cases, but must infer these assumptions.

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

Parameters4/5

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

Schema description coverage is 0%, but the description compensates by defining the required `ops` parameter as a precise union of six operation shapes. The optional `tabId` is only implied by 'target tab' and left undocumented, which is a minor gap given its straightforward meaning.

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

Purpose5/5

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

The description states a specific action (run a list of operations), a target (the tab), an ordering constraint, and a concrete outcome (return the fresh element table). The enumerated operation types make it clearly distinct from the sibling tools like browser_observe and browser_navigate.

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 description implies this tool is for batching tab interactions, but it never explicitly states when to use it over alternatives or what prerequisites exist (e.g., an already-open tab or a prior element observation). No exclusions or when-not-to-use guidance is provided.

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

browser_assertA

Prove an outcome instead of inferring it. Provide one of: contains (page text includes string), url_includes (current url contains string), ref_visible (a ref is present and visible). Returns pass/fail.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabIdNo
containsNo
ref_visibleNo
url_includesNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It explains what each assertion does and states that the tool returns pass/fail, which covers the core behavior. But it does not disclose side effects, what a 'ref' refers to, how tabId affects the current tab, or behavior if multiple modes are provided.

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?

Three tight sentences: a purpose statement, a compact list of modes with inline explanations, and a return-type note. No filler, and the key usage rule is front-loaded.

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?

The description is adequate for a simple assertion tool: it names the modes and the pass/fail return value. It falls short on operational details an agent would need, such as what 'ref' means, whether tabId is required, and what happens when assertions fail (exception vs. false).

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for contains, url_includes, and ref_visible, and clarifies that they are alternatives. However, tabId is left unexplained, and the 'provide one of' rule is not enforced in the schema.

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 clearly states the tool's job: prove an outcome rather than infer it, and lists three concrete assertion types (contains, url_includes, ref_visible). This is a specific verb plus resource, and the contrast with 'inferring' hints at the sibling browser_observe, though no sibling is named explicitly.

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

Usage Guidelines4/5

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

The phrase 'Prove an outcome instead of inferring it' gives clear context for when to use this tool rather than an observational tool like browser_observe. 'Provide one of' also instructs the agent to supply exactly one assertion mode. However, it does not explicitly mention alternatives or discuss when not to use the tool.

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

browser_navigateA

Navigate the target tab to a URL and return the element table once loaded.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
tabIdNo

TDQS

A3.5/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 usefully discloses that navigation happens and that the tool waits for load before returning an element table. It does not mention failure behavior, timeouts, or side effects like invalidating previous page state, but the core behavior is clear.

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 compact sentence with no filler. It front-loads the action and result and earns its place by stating both the operation and the expected return value.

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 unannotated tool with no output schema and no parameter descriptions, this description is too thin. It leaves tabId semantics, default target behavior, and failure/loading edge cases implicit, so an agent lacks important details for robust invocation.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only indirectly references url and tabId as 'URL' and 'target tab'. It does not clarify that tabId is optional, which tab is used when omitted, URL format expectations, or how navigation errors are handled.

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

Purpose5/5

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

The description states a specific action, 'Navigate the target tab to a URL', and a clear result, 'return the element table once loaded'. This is distinct from siblings like browser_observe or browser_act, because it clearly identifies the operation as web navigation.

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 description implies it should be used when the agent needs to change the current tab's URL and get the resulting element table. However, it gives no explicit when-to-use or when-not-to-use guidance and does not reference sibling alternatives such as browser_observe or browser_act.

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

browser_observeA

Read the target tab as an element table: one numbered, actionable control per line (e12 btn "Sign in"). Refs (e12) stay stable across observations of the same page. Read this, then act on the refs.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabIdNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing behavior. It explains the output shape (numbered, actionable controls), gives an example format, and notes that refs stay stable across observations. It does not cover failure modes, but for a read-only observation tool this is meaningful behavioral detail.

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 compact and front-loaded with the most essential information: what the tool reads, what the output looks like, and how refs should be used. Every sentence earns its place with no redundant wording.

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 one-parameter tool, the description covers the output format and ref stability well. However, it leaves tab selection ambiguous and does not describe what happens when tabId is omitted or invalid. The absence of an output schema makes the lack of explicit return-value details more noticeable, though the example format helps.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It mentions 'the target tab' but never explicitly explains the tabId parameter, its optionality, or how it is resolved. Given that tabId is not required according to the schema, the missing default behavior is a notable gap.

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

Purpose5/5

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 the target tab as an element table.' It also differentiates itself from siblings by framing the output as actionable controls and referencing a follow-up action ('then act on the refs'), which distinguishes it from browser_act, browser_navigate, and browser_status.

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

Usage Guidelines4/5

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

The description gives clear workflow context: read the tab, then act on the returned refs. It does not explicitly name alternatives or exclusion conditions, but the 'read then act' instruction makes the intended position relative to sibling tools reasonably clear.

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

browser_statusA

Report bridge + extension connection state and the currently targeted tab. Call this first if anything behaves unexpectedly: it distinguishes "no extension connected" from "no tab attached".

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. It clearly states what the tool reports and that it differentiates two failure modes. It does not describe output format or side effects, but for a zero-parameter status tool this is reasonably transparent.

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 two sentences, front-loaded with the core purpose and followed immediately by practical usage guidance. Every sentence earns its place; there is no filler.

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

Completeness5/5

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

For a no-parameter, no-output-schema diagnostic tool, the description is complete: it states what is reported, when to call it, and why the diagnostic distinction matters. Nothing needed for selecting or invoking the tool is missing.

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

Parameters4/5

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

The input schema is empty with zero parametersainer, and schema coverage is 100%, so the baseline is 4. The description adds no parameter details because none exist, which is appropriate.

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

Purpose5/5

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

The description names a specific verb ('Report') and a precise set of resources: bridge + extension connection state and the currently targeted tab. It also distinguishes this tool from navigation, observation, action, and assertion siblings by focusing purely on status/diagnostics.

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

Usage Guidelines4/5

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

The description gives explicit situational guidance: 'Call this first if anything behaves unexpectedly.' It also explains the diagnostic value by distinguishing 'no extension connected' from 'no tab attached.' It does not name alternative tools or when-not conditions, so it stops short of a 5.

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

browser_tabsA

List open tabs in the real browser (id, title, url, active). Use a tab id with the other tools to target a specific tab; omit to use the active tab.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. The word 'List' signals a read-only operation, and the description clarifies what data is returned and that the active tab is the default target for later tools. It could be more explicit about having no side effects, but 'list' sufficiently implies that.

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?

Two short sentences with no filler. The core function is front-loaded, and the second sentence immediately provides actionable usage guidance.

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

Completeness5/5

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

For a zero-parameter list tool with no output schema, this description is complete: it states the return fields and exactly how to apply the result with sibling tools. 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.

Parameters4/5

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

The tool takes zero parameters, so the empty input schema fully covers parameter semantics. The description adds useful cross-tool context about tab ids, even though those ids are consumed by sibling tools rather than by this one.

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

Purpose5/5

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

The description uses a specific verb and resource ('List open tabs in the real browser') and names the exact returned fields (id, title, url, active). This clearly separates it from the navigation, observation, and assertion siblings.

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

Usage Guidelines4/5

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

It explains how to use the returned tab ids with other tools and the active-tab fallback, which is the main usage context. It doesn't explicitly say when not to use this tool, but the listing role is obvious and no sibling is an alternative for listing tabs.

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 updatesv0.1.0
    • First observedbrowser_act
    • First observedbrowser_assert
    • First observedbrowser_navigate
    • First observedbrowser_observe
    • First observedbrowser_status
    • First observedbrowser_tabs

TDQS

A4.1/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct concern: listing tabs, checking connection/target state, navigating, reading the page, acting on the page, and asserting outcomes. The descriptions clearly separate browser_status from browser_tabs by emphasizing connection state versus the full tab list.

Naming Consistency4/5

All tools share a consistent browser_ prefix and lowercase style, which makes the set predictable. However, the second part mixes nouns (tabs, status) with verbs (navigate, observe, act, assert), so the pattern is not perfectly uniform.

Tool Count5/5

Six tools is a well-scoped size for browser automation. Each tool covers a necessary phase of the workflow without redundancy or bloat.

Completeness4/5

The core browser automation lifecycle is covered: list tabs, target, navigate, observe, act, and assert. Minor gaps exist around tab lifecycle operations like creating or closing tabs, but these don't prevent typical automation workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables Claude Code to control a real browser using AI for web scraping, competitive intelligence, and UX auditing through the MCP protocol.
    -
  • A
    license
    B
    quality
    A
    maintenance
    Enables controlling a real Chrome browser from MCP hosts like Claude, with extension-based or CDP fallback, supporting tabs, navigation, interaction, and page reading tools.
    40
    1,043 npm
    6
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Chrome extension + MCP bridge that gives Claude control over your real browser via CDP, enabling navigation, clicking, typing, scrolling, screenshots, and JS execution with a visible cursor and tab-bring-to-front.
    1
    MIT