Skip to main content
Glama

BrowserLemon πŸ‹

An open-source browser bridge that lets AI control your local Chrome's current logged-in session via MCP. It focuses on social media draft creation and publish flows after user approval.

Early MVP: Do not publish to production accounts without direct review. Element refs may become invalid as site UIs change.

Features

  • MCP standard input/output (stdio) server

  • Uses already-logged-in Chrome tabs: cookies and passwords are never copied to the MCP server

  • Page summary, tab list, navigation, click, input

  • draft_social_post and publish_social_post which requires explicit confirmed=true

  • Localhost-only WebSocket and publish domain allowlist

  • MIT license

Related MCP server: Browser Controller

Installation

npm install
npm run build

In Chrome, go to chrome://extensions β†’ Developer mode β†’ Load unpacked β†’ select the extension folder in this repository.

MCP client configuration example:

{
  "mcpServers": {
    "browserlemon": {
      "command": "node",
      "args": ["/absolute/path/to/browserlemon/dist/index.js"]
    }
  }
}

After restarting the MCP client, click the BrowserLemon icon in the Chrome toolbar. When the badge shows ON, you are connected.

  1. Check the connection with browser_status

  2. Use list_tabs and read_page to confirm the target and composer ref

  3. Enter text with draft_social_post

  4. The user reviews the content in the browser

  5. Only call publish_social_post(confirmed=true) when the user has explicitly approved

Security Model

The extension runs with the user's browser permissions, so it is powerful. Run the server only from a trusted local MCP client. The bridge binds only to 127.0.0.1, and password input values are excluded from page snapshots. However, page bodies may contain personal information, so you should also review the data policy of the AI service you connect to.

Supported publish domains: X/Twitter, LinkedIn, Facebook, Instagram, Threads, Bluesky, Mastodon.social. Reading and draft input work on general http(s) pages as well.

Contributing

Bug reports and PRs are welcome. Next priorities are per-site adapters, image upload, scheduled publishing, audit logs, and finer-grained extension permissions.

Available Tools

8 tools
browser_statusA

Check whether the local Chrome extension is connected.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 full burden, and it does convey a read-only, non-destructive status check through the verb 'Check'. However, it does not say what the result looks like, whether it returns a boolean/status value, or what happens if the extension is disconnected, so transparency is only partial.

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, clear sentence with no filler. The verb and object are front-loaded, making the tool's intent immediately obvious.

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 parameterless status check, the description is largely complete: an agent can invoke it without any input. It lacks explicit details about the response format and when to use it, but these are minor gaps given the tool's minimal complexity and empty schema.

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 has zero parameters and schema coverage is 100%, so there is no parameter documentation burden. Per the 0-params baseline of 4, no additional semantic explanation is needed.

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 ('Check') and names a specific resource ('whether the local Chrome extension is connected'). This clearly distinguishes it from sibling tools that operate on tabs, pages, or content, so an agent can tell exactly what this tool does.

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 guidance about when to run this check, whether it is a prerequisite for other browser tools, or what to do if the extension is not connected. The description only states the tool's purpose, leaving usage context to inference.

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

clickA

Click a visible element identified by the ref returned from read_page.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes
tabIdNo

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that the element must be visible and that the ref originates from read_page, but does not mention other behavioral traits such as whether the click triggers navigation, waits for page load, or has side effects. This is minimal but not misleading.

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 entire description is a single, front-loaded sentence with no filler. It efficiently states the action, target, and dependency without redundancy.

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 click tool, the description gives the essential info (what to click and where the ref comes from), but it omits behavior after clicking, any special handling for the optional tabId, and the return value (no output schema). Given the simplicity, the gaps are manageable, but an agent would need to infer some operational details.

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 description explains the primary parameter 'ref' by stating its purpose and source, which adds value over the bare schema. However, the optional 'tabId' parameter is not mentioned at all, and schema description coverage is 0%, so the description only partially compensates for the lack of parameter documentation.

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 clearly states the action (click), the target (a visible element), and how to identify it (via ref returned from read_page). It differentiates from siblings like type_text and read_page by specifying a distinct verb and resource.

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 conveys a clear prerequisite: the ref must come from read_page, so the tool is to be used after reading the page. It implies contexts where clicking is appropriate but does not explicitly state when not to use it or contrast with alternatives beyond the source of the ref.

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

draft_social_postB

Fill a social-media composer without publishing. Call read_page first and pass its composer ref.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
tabIdNo
composerRefYes

TDQS

B3.4/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 transparency burden. It does disclose a key behavioral trait: it fills without publishing, and it implies a dependency on an existing read_page result. But it does not mention overwriting behavior, side effects, visibility requirements, or response/return behavior, so the disclosure is only partial.

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 main action is front-loaded, and the prerequisite is stated immediately after. Every word contributes useful information.

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?

The description gives the critical prerequisite and non-publishing behavior, but with no annotations, no output schema, and 0% parameter schema coverage, there are significant gaps: tabId semantics, return value, error conditions, and what happens to pre-existing draft content. It is not complete enough for an agent to invoke confidently in all cases.

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 partially compensates. It explains that composerRef comes from read_page, and 'text' is implied as the post content by 'Fill a social-media composer,' but the tabId parameter is entirely unexplained, and no parameter-specific details are given. The description is not enough to fully disambiguate the three 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?

The description states a clear action ('Fill a social-media composer') and a resource, and explicitly notes it does not publish. It implicitly distinguishes itself from publish_social_post and type_text, but does not explicitly name sibling alternatives, so it falls just short of a 5.

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 gives a direct prerequisite and dependency: 'Call read_page first and pass its composer ref.' This tells the agent when and how to prepare inputs. However, it does not mention when not to use this tool or explicitly compare against siblings like type_text or publish_social_post, so it's clear but not fully exhaustive.

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

list_tabsA

List normal Chrome tabs. URLs are returned only to the local MCP client.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It usefully states that URLs are only returned to the local MCP client, addressing a privacy-relevant behavior. Yet it does not explicitly confirm the operation is read-only or describe any other side effects, though 'List' strongly implies a non-mutating action.

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 remarkably efficient: a single action statement followed by a one-sentence behavioral note. Every word contributes meaning, with the core purpose front-loaded and no filler or redundant schema repetition.

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 parameterless tool, the description gives enough to invoke it correctly: what it lists, which tabs it covers, and a privacy constraint on the returned URLs. It does not describe return structure beyond URLs, but the absence of an output schema means some details are left unspecified; this is a minor gap for such a simple tool.

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 has zero parameters, so parameter semantics are essentially moot. The description provides all necessary context for invocation, and the schema's 100% coverage of an empty parameter set requires no further elaboration.

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 ('List') and resource ('normal Chrome tabs'), making the tool's function immediately clear. It also adds a meaningful scope qualifier ('normal') and a privacy note about URLs, which helps distinguish it from broader browser-state tools like 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 Guidelines3/5

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

The phrase 'normal Chrome tabs' implies when the tool is appropriate, suggesting it is meant for ordinary tab enumeration rather than special or internal tabs. However, it gives no explicit guidance about alternatives or when not to use it, leaving the agent to infer usage context from sibling tool names.

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

open_urlA

Open an http(s) URL in the active tab or a new tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
newTabNo

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 burden. It discloses the core behavior (opening a URL) and the tab behavior (active vs new tab), but doesn't mention side effects like navigation, potential page load delays, or whether the tool waits for page load. For a simple action, this is adequate but not rich.

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, concise sentence that front-loads the action and target. No wasted words; it earns its place.

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 two-parameter tool with no output schema, the description covers the essential action and tab behavior. However, it doesn't mention error cases (e.g., invalid URL, unsupported scheme) or whether the tool returns any status. Given the simplicity, it's mostly complete but could add a note on validation.

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 0%, so the description must compensate. It mentions the URL and the newTab option implicitly ('active tab or a new tab'), but doesn't explain the url format beyond 'http(s)' or the default behavior of newTab. The schema already defines the parameters, so the description adds minimal extra 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?

The description states a specific verb ('Open') and resource ('an http(s) URL') and clarifies the target ('active tab or a new tab'). It is clear and distinguishes from siblings like read_page or click, though it doesn't explicitly name alternatives.

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 when to use it (opening URLs) but provides no explicit guidance on when not to use it or alternatives. For example, it doesn't mention that read_page is for reading content or that type_text is for input. The context is clear but exclusions are absent.

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

publish_social_postC

Click a publish button on an allowlisted social site. Requires confirmed=true after the user has reviewed the draft.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabIdNo
confirmedYesMust be true only after explicit user approval
publishButtonRefYes

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 all responsibility for behavioral disclosure. It notes the confirmation prerequisite but omits side effects (e.g., publishing publicly), error states, or whether navigation happens. The post-click outcome is entirely undisclosed.

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?

Two sentences, front-loaded with the action and confirmation requirement. No fluff. The core instruction is clear and quick to scan.

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?

Without an output schema or annotations, this tool leaves out success/failure behavior, prerequisites like being logged in or on the right tab, and how to obtain publishButtonRef. Minimal description for a side-effectful action.

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 coverage is low (only 'confirmed' has a description). The tool description adds little beyond restating the confirmed requirement, and does not explain publishButtonRef (presumably a selector) or tabId (which page). Agents can't infer correct values from the description.

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 action (click a publish button) on a social site, distinguishing it from generic click and draft_social_post siblings. However, it doesn't explicitly name these alternatives, so the differentiation is implied rather than stated.

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?

Provides a usage condition: 'Requires confirmed=true after the user has reviewed the draft.' This tells when the tool can be invoked, but it doesn't mention when not to use it, what prior steps are needed, or when the alternative draft_social_post or click should be used instead.

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

read_pageA

Read a compact accessibility-oriented snapshot of the active tab. Sensitive input values are omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabIdNo
maxCharsNo

TDQS

A3.5/5.0
Behavior3/5

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

Since no annotations are provided, the description must inform the agent about side effects and behavior. It discloses that 'sensitive input values are omitted', which is a valuable behavioral trait. However, it does not mention whether this is a read-only operation (likely safe, but not stated) or any other side effects, so the burden is only partially met.

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?

The description is extremely conciseβ€”a single sentence with essential information. The key point about omitting sensitive inputs is front-loaded after the main purpose. It is efficient and avoids redundancy, though it could benefit from a brief mention of parameters, but given the schema has defaults, this is acceptable.

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?

Given the tool's simplicity (only two optional parameters, no output schema), the description is largely adequate. It covers the core purpose and a key behavioral nuance (omission of sensitive values). However, it does not clarify what 'compact' means in terms of output format or whether it returns plain text or structured data, which could be useful for an agent deciding how to use the result.

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 schema provides parameter names, types, defaults, and constraints but no descriptions (0% coverage). The description adds meaning by implying that the parameters control the snapshot's scope (e.g., 'maxChars' likely limits the returned text length, 'tabId' selects the tab). Despite not specifying exact semantics, the description helps interpret the parameters beyond the bare 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 states a specific verb ('read') and resource ('page'), and notes it is a 'compact accessibility-oriented snapshot', which distinguishes it from navigation or interaction tools. It clearly indicates what the tool does, but does not explicitly list sibling tools for differentiation beyond the general phrasing.

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 that it is used to read the content of the active tab, which is a clear use case compared to siblings like click or open_url. However, it does not provide explicit guidance on when to choose this over alternatives (e.g., when you need a lightweight read vs. a full page). The context of 'active tab' is clear, but exclusions are absent.

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

type_textA

Type into a visible editable element. Existing text is replaced by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes
textYes
tabIdNo
appendNo

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 must carry the behavioral burden. It discloses the replace-by-default behavior and the visible-editable constraint, but omits failure conditions, focusing behavior, or any side effects. This is a start but not comprehensive.

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 sentences with no filler, and the core action is front-loaded. Every sentence earns its place.

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 tool with four parameters and no output schema, the description is incomplete. It lacks parameter semantics and any error or edge-case behavior, leaving an agent to infer too much from parameter names alone.

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 coverage is 0%, and the description provides no explanation for ref, text, or tabId. It only hints at the append parameter through the 'replaced by default' phrase, leaving most parameters semantically unexplained.

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 clearly states the action (type) and the target (visible editable element), and the note about replacing existing text distinguishes it from the click sibling. This leaves no ambiguity 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.

Usage Guidelines3/5

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

The description implies use for text entry but provides no explicit guidance on when to prefer this over alternatives like click, nor does it state exclusions or prerequisites. The context is clear but lacks differentiation.

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. 8 tool updatesv0.1.0
    • First observedbrowser_status
    • First observedclick
    • First observeddraft_social_post
    • First observedlist_tabs
    • First observedopen_url
    • First observedpublish_social_post
    • First observedread_page
    • First observedtype_text

TDQS

B3.4/5.0

Scored across 8 tools

Disambiguation4/5

Each tool has a generally distinct purpose: status, tab listing, page reading, navigation, typing, clicking, and social composing/publishing. There is mild overlap between type_text and draft_social_post, and click could theoretically be used in place of publish_social_post, but the descriptions clarify the intended specialized use.

Naming Consistency3/5

Most tools follow a verb_noun snake_case pattern (list_tabs, read_page, open_url, type_text, draft_social_post, publish_social_post), but browser_status is a noun phrase and click is a bare verb. The naming is readable and consistently lowercase, but the pattern is not uniform.

Tool Count5/5

Eight tools is well-scoped for a browser automation assistant. Each tool has a clear role with no obvious filler or redundant duplicates, making the count appropriate for the server's purpose.

Completeness3/5

The set covers core browsing actions like open, read, type, click, plus a guarded social-posting workflow. However, it lacks standard browser controls such as switching or closing tabs, scrolling, refreshing, and waiting for page conditions, which are notable gaps for browser automation.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers