Skip to main content
Glama
ykshah1309

stealth-agent-browser-mcp

by ykshah1309

stealth-agent-browser-mcp

A Model Context Protocol (MCP) server that gives AI agents a stealth-grade Chromium browser with a hybrid Accessibility-Object-Model + Set-of-Mark vision interface. Built for Claude, works with any MCP-compatible host.

  • Stealth first. Uses rebrowser-playwright to patch the Runtime.Enable CDP leak that bypasses playwright-extra-class stealth plugins. Passes modern bot-detection suites (CreepJS, bot.sannysoft.com) where vanilla Playwright fails.

  • Token-lean by default. browser_snapshot returns Playwright aria snapshot YAML (~2–5 KB) instead of raw HTML (100KB+). Every interactive element carries a [ref=eN] id that actions consume directly — no selectors, no drift.

  • Hybrid vision when it matters. Ask for mode: "hybrid" and the server overlays numbered red boxes on the screenshot so the model can ground visually (Set-of-Mark prompting, Yang et al.). The ref ids on the image match the ids in the YAML. No parallel numbering scheme to go out of sync.

  • Readability-based content extraction. browser_scroll_read runs Mozilla Readability through JSDOM and returns clean Markdown — optionally delta-only, so re-reads cost nothing when nothing changed.

  • Proxy-ready. Per-session proxy auth, useful with residential pools.

Authorized use only. Stealth tooling has legitimate applications (accessibility auditing, your-own-account automation, QA against sites you own or have permission to test). Do not use this server to violate a site's terms of service or applicable law. See SECURITY.md.


Install

npm install -g stealth-agent-browser-mcp
# Chromium binary is fetched automatically on first launch
npx playwright-core install chromium

Or run without install via npx stealth-agent-browser-mcp.

Related MCP server: BrowserGenie MCP Server

Quickstart (Claude Desktop / Claude Code / Cursor)

Add to your MCP config:

{
  "mcpServers": {
    "stealth-browser": {
      "command": "npx",
      "args": ["-y", "stealth-agent-browser-mcp"],
      "env": {
        "SAB_HEADLESS": "true",
        "SAB_STEALTH_LEVEL": "patched"
      }
    }
  }
}

Restart the host. The agent will see the tools listed below.

Tools

Tool

Purpose

browser_navigate

Navigate a URL and return a snapshot.

browser_snapshot

aom (YAML only, cheapest), vision (raw screenshot), or hybrid (YAML + Set-of-Mark screenshot).

browser_click

Click an element by its [ref=eN].

browser_type

Type into an input/textarea by ref.

browser_select

Choose options in a <select> by ref.

browser_scroll_read

Scroll and return Readability Markdown (delta-only by default).

browser_wait_for

Wait for text or a ref to become visible.

browser_tabs

list / new / close / switch.

browser_eval

Evaluate a JS expression in the page's MAIN world; JSON result.

browser_set_proxy

Update single-proxy config (effective after browser_restart).

browser_set_proxy_pool

Replace residential proxy pool at runtime (effective after browser_restart).

browser_solve_captcha

Fallback captcha solver (CapSolver / 2Captcha). Detects Turnstile/hCaptcha/reCAPTCHA on the page.

browser_restart

Close + re-open the active browser session with current config.

All action tools are addressed by the ref emitted in the last AOM snapshot. Refs are Playwright's own aria-ref=eN ids — there is no parallel numbering scheme.

Configuration

All via environment variables:

Var

Default

Notes

SAB_HEADLESS

true

false for a visible window (debugging).

SAB_STEALTH_LEVEL

patched

off | patched | paranoid.

SAB_PROXY_SERVER

Single-proxy mode. e.g. http://host:port

SAB_PROXY_USERNAME / SAB_PROXY_PASSWORD

SAB_PROXY_POOL

Residential pool. Comma-separated URLs (http://u:p@host:port,...) or a JSON array of {server, username, password}.

SAB_PROXY_ROTATION

per-restart

per-session | per-restart | static.

SAB_PROXY_STICKY_TEMPLATE

Username template for sticky-IP providers. ${sessionId} interpolates. Example: brd-customer-c1-zone-res-session-${sessionId}.

SAB_HUMAN_MOUSE

true

Bezier-path click with pre-click hesitation. Defeats Datadome trajectory analysis.

SAB_CAPTCHA_PROVIDER

none

capsolver | twocaptcha | none.

SAB_CAPTCHA_API_KEY

Provider API key.

SAB_USER_DATA_DIR

Persistent profile directory (cookies build reputation).

SAB_DEFAULT_TIMEOUT_MS

15000

Per-action timeout.

SAB_MAX_ANNOTATED

75

Max labelled boxes in hybrid mode.

SAB_VIEWPORT_W / SAB_VIEWPORT_H

1366 / 768

SAB_LOCALE

en-US

SAB_TIMEZONE

America/New_York

LOG_LEVEL

info

debug, warn, etc. Always writes to stderr.

Architecture

src/
├── index.ts         # Entry (stdio)
├── server.ts        # MCP server + tool registration
├── tools.ts         # Tool handlers
├── browser.ts       # Stealth Chromium launcher (rebrowser-playwright)
├── session.ts       # Per-connection browser/context/page state
├── snapshot.ts      # AOM + Set-of-Mark pipeline
├── annotate.ts      # SVG overlay compositing (sharp)
├── reader.ts        # Readability → Markdown (pierces open shadow roots)
├── fingerprint.ts   # Rotatable UA/viewport/timezone profiles
├── proxy.ts         # Residential pool + rotation + sticky-session template
├── human-mouse.ts   # Bezier-curve cursor paths (ghost-cursor math)
├── captcha.ts       # CapSolver / 2Captcha REST adapters
├── config.ts        # Zod-validated env config
└── logger.ts        # pino → stderr (never stdout)

All logs go to stderr — stdout is reserved for JSON-RPC. Never add console.log.

TLS / JA3 fingerprint — why there is no Node-layer spoofer here

A common ask for scrapers is: "spoof the TLS ClientHello (JA3) to look like Chrome, via curl-impersonate or node-tls-client."

That applies to Node-layer HTTP scrapers (fetch, got, axios) where the TCP connection originates from Node's OpenSSL, which emits a ClientHello signature distinct from Chrome's BoringSSL — and Cloudflare / Akamai Bot Manager drop it at the network layer before a single byte of JavaScript runs.

This MCP does not have that architecture. Every request exits through Chromium. Chromium's TLS stack is Chrome's TLS stack (literally the same BoringSSL build), so the ClientHello JA3 is Chrome's JA3 by construction. No JS-level rewriting is possible or necessary.

The one place TLS can still betray you is if you route through a proxy that terminates and re-initiates TLS (MITM). Residential proxy providers (Bright Data, DataImpulse, Oxylabs residential, SOAX) route at TCP — they do not MITM TLS — and the Chromium handshake reaches the origin unmodified. The products that do MITM TLS are managed scraping browsers (Bright Data's Scraping Browser, Oxylabs Web Unblocker), which ship their own headless Chrome and replace this MCP rather than layering on top of it.

Bottom line: with rebrowser-playwright + residential pool (P1) + human mouse (P2), the TLS fingerprint, CDP runtime, DOM surface, and behavioral layer all match real Chrome. Captcha solving (P3) is a fallback for the 1–5% of sessions that still get flagged.

Benchmarks

npm run bench:stealth launches the configured browser against public bot-detection test pages (bot.sannysoft.com, CreepJS, pixelscan, BrowserLeaks WebRTC) and reports pass/fail. These are the same harnesses used by the rebrowser-patches and Patchright projects — see rebrowser-bot-detector for the reference suite.

Typical local-fixture test run (see test/):

Test

Result

AOM YAML contains refs for all interactive elements

hybrid mode returns PNG + YAML, refs match

click/type by ref produces expected DOM change

Readability extracts article to Markdown

Delta-only scroll returns (no readable content change) on repeat

Comparison

stealth-agent-browser-mcp

playwright-mcp

browser-use MCP

computer use

CDP-level stealth (Cloudflare/DataDome)

partial

Accessibility-tree snapshots

Set-of-Mark vision (ref-labeled screenshot)

pure vision

Readability-based scroll-and-read

Token-lean by default

Bundled agent loop

✗ (host's model drives)

Development

npm install
npx playwright-core install chromium
npm run build
npm test

Contributing

See CONTRIBUTING.md. All contributions under Apache-2.0.

License

Apache-2.0

Available Tools

13 tools
browser_clickB

Click an element addressed by its ref. When SAB_HUMAN_MOUSE=true (default), the cursor travels via a Bezier path with pre-click hesitation — this defeats trajectory analyzers like Datadome that flag teleporting mice.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesA [ref=eN] id taken from the last aom/hybrid snapshot.
buttonNoleft
clickCountNo

TDQS

B3.3/5.0
Behavior4/5

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

Description reveals a key behavioral trait: the Bezier path with hesitation to defeat trajectory analyzers when SAB_HUMAN_MOUSE is true. Since no annotations are provided, this disclosure is valuable, though it omits other traits like waiting, retry logic, or failure outcomes.

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 efficient sentences: first states purpose, second adds critical behavioral detail. No unnecessary words, information 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?

Covers purpose and a key behavioral trait, but lacks details on parameters (button, clickCount), preconditions (snapshot dependency), error handling, and output (none provided). For a simple click tool with no annotations, the description is adequate but has notable gaps.

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 33% (only ref described). Description adds minimal parameter context: it mentions ref addressing but does not explain button (left/right/middle) or clickCount (double-click, triple-click). The description does not compensate for the low 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?

Clearly states 'Click an element addressed by its ref', identifying the action and target. Distinguishes from sibling tools like browser_type (typing) and browser_select (selection) but doesn't explicitly contrast them.

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?

No guidance on when to use this tool versus alternatives (e.g., browser_type or browser_select). The mention of SAB_HUMAN_MOUSE suggests a scenario for evasion, but no explicit when-to-use or when-not-to-use advice.

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

browser_evalA

Evaluate a JS EXPRESSION in the page's MAIN execution world. Observable by page scripts; use sparingly. Prefer AOM + action tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
expressionYesJS expression (not a statement). Executes in the page's MAIN execution world — observable by page scripts. Use sparingly; prefer AOM + actions.

TDQS

A3.8/5.0
Behavior2/5

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

Discloses that execution is observable by page scripts, which is a key behavioral trait. Without annotations, the description should provide more about error handling, return value, or side effects, but it does not.

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 concise sentences, front-loaded with the core purpose. Every sentence provides unique value without redundancy.

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?

Given high schema coverage, single parameter, and no output schema, the description adequately covers purpose and usage guidelines. It could improve by noting that the tool returns the expression's evaluated result, but overall is sufficiently complete for its simplicity.

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% for the single parameter. The tool description adds minimal value beyond the schema, merely restating the same information. Baseline score of 3 applies.

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?

Clearly states it evaluates a JS expression in the page's main execution world. Verb 'evaluate' and specific resource differentiate it from sibling tools that perform other browser actions.

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?

Explicitly advises to use sparingly and prefer AOM + action tools, providing clear when-to-use guidance. However, it lacks explicit exclusions or detailed alternative conditions.

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 active session's page to a URL. Returns a snapshot (default: aom-only, cheapest).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesFully-qualified URL to navigate to.
modeNoSnapshot mode to return after navigation. 'aom' is cheapest; 'hybrid' adds a Set-of-Mark annotated screenshot.aom
waitUntilNoPage lifecycle event to wait for.domcontentloaded

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description adds value by stating that a snapshot is returned after navigation and that 'aom' mode is the cheapest. This discloses expected behavior beyond the input schema, though it could detail side effects like page state changes.

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, well-structured sentence that front-loads the key action and return value. Every word contributes to clarity, with no 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?

Given the lack of output schema, the description only mentions a 'snapshot' without specifying its content or structure. For a navigation tool, this is adequate but leaves the agent without full understanding of what the snapshot contains.

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 coverage is 100%, but the description enriches the 'mode' parameter by explaining 'aom' is cheapest and 'hybrid' adds a Set-of-Mark annotated screenshot. This adds practical meaning beyond the schema's enum values.

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 verb 'navigate' and the resource 'active session's page to a URL'. It also mentions the return value (a snapshot), which distinguishes it from sibling tools like browser_click or browser_type.

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?

No explicit guidance on when to use this tool versus alternatives. The description does not mention when not to use it or provide any context for selection among siblings, which are numerous and distinct.

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

browser_restartA

Close the active browser session and start a fresh one with the current config. Required after 'browser_set_proxy' to actually route new requests through the proxy.

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 full responsibility for behavioral disclosure. It states that the tool closes the active session and starts a fresh one, which implies destructiveness (session state is lost). This is sufficient for a restart tool. No contradictions.

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 consists of two concise sentences. The first sentence states the main action, and the second adds a crucial use case. No redundant words.

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?

Given no parameters and no output schema, the description is complete. It explains the tool's purpose, the fact that it uses current config, and a key scenario (after set_proxy). This is all needed for a simple restart 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 input schema has zero parameters, so schema coverage is 100%. The baseline for 0 parameters is 4. The description does not need to add parameter semantics since there are none.

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 tool's function: close the active browser session and start a fresh one. This distinguishes it from sibling tools like browser_navigate (navigates within same session) and browser_set_proxy (changes proxy, but requires restart). The verb 'restart' and resource 'browser session' are specific.

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 explicitly notes that this tool is required after 'browser_set_proxy' to route new requests through the proxy. This provides clear context for when to use it. However, it does not mention any scenarios where it should not be used.

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

browser_scroll_readA

Scroll and return a Readability-extracted Markdown view. With deltaOnly=true, returns '(no change)' if nothing new became visible — keeps context windows lean.

ParametersJSON Schema
NameRequiredDescriptionDefault
pixelsNo
deltaOnlyNoReturn markdown only if the readable content changed since the last call.
directionNodown

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the deltaOnly behavior and its effect on output ('(no change)' if nothing new). However, it does not mention scrolling mechanics, boundary conditions, or what happens if the page is not fully loaded.

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 that are front-loaded with the main purpose. Every sentence adds value with no redundancy. Highly efficient.

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 3 parameters, no annotations, and no output schema, the description covers the core functionality but omits details about scrolling behavior, pixel amounts, direction options, and return format structure. Adequate but with clear gaps.

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 only 33% (deltaOnly described). The description adds value by explaining deltaOnly's behavior, but it does not describe the 'pixels' or 'direction' parameters, which remain undocumented. The description partially compensates for low coverage.

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 tool's action ('Scroll and return') and the output format ('Readability-extracted Markdown view'). It uniquely identifies the tool among siblings which are different browser actions (click, type, navigate, etc.).

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 usage for scrolling and reading content but does not explicitly state when to use this tool over alternatives like 'browser_snapshot' or 'browser_eval'. No when-not or alternative usage 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_selectC

Select one or more options in a addressed by ref.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes
valuesYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, and the description lacks behavioral details such as whether it clears previous selections, supports multiple selections (implied by array but not stated), or waits for elements. The agent has no information on side effects or error handling.

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 one short sentence, which is concise and front-loaded with the action. However, it lacks structure and could benefit from additional details without being verbose.

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?

Given no output schema, no annotations, and minimal parameter explanation, the description is incomplete. It does not describe return values, error conditions, or behavioral nuances like handling of multiple selections or invalid references.

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, but it only says 'addressed by ref' and 'Select one or more options'. It does not explain what 'ref' is (selector format) or what 'values' represent (option values, labels, or indices). Minimal added 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 clearly states the verb 'Select' and the resource 'options in a <select>' addressed by 'ref'. It distinguishes from sibling tools like browser_click or browser_type which do different actions. However, it does not clarify what 'ref' refers to (e.g., CSS selector), slightly reducing clarity.

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?

No guidance on when to use this tool versus alternatives or when not to use it. The description does not mention that it is specifically for <select> elements, nor does it exclude other uses. No prerequisites or context provided.

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

browser_set_proxyB

Update the proxy config. Call 'browser_restart' after this for the change to take effect (browser-level constraint — an existing context cannot be re-routed).

ParametersJSON Schema
NameRequiredDescriptionDefault
serverNoe.g. http://host:port — omit to clear.
passwordNo
usernameNo

TDQS

B3.3/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 the need for a restart and the constraint on existing contexts, but omits details on authentication requirements, destructiveness, or side effects.

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 with no redundant words. It front-loads the main action and immediately provides the critical follow-up step.

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 has three parameters, no output schema, and no annotations, the description is adequate but incomplete. It explains the update and restart requirement but lacks parameter semantics and comprehensive behavioral context.

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?

The schema has low description coverage (33% with only 'server' described). The tool description does not explain any parameters beyond the general 'proxy config', failing to add meaning for 'username' or 'password'.

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 'Update the proxy config', which is a specific verb and resource. It is distinct from the sibling 'browser_set_proxy_pool' by name, but no explicit differentiation is provided.

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 advises calling 'browser_restart' after setting the proxy and mentions a browser-level constraint, implying a specific workflow. However, it does not discuss when to use this tool versus alternatives like 'browser_set_proxy_pool'.

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

browser_set_proxy_poolA

Replace the residential proxy pool at runtime. Takes effect on the next 'browser_restart'. Supports sticky sessions via SAB_PROXY_STICKY_TEMPLATE.

ParametersJSON Schema
NameRequiredDescriptionDefault
poolNoResidential proxy pool: comma-separated URLs (http://u:p@host:port) or a JSON array. Omit to clear.
rotationNoRotation strategy. Default: per-restart.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It reveals that changes are deferred until restart and mentions sticky session support via environment variable, which are important behavioral traits. However, it does not detail error conditions or immediate side effects.

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-loading the purpose and then adding crucial timing and sticky session info. No wasted words.

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?

Given no output schema and simple parameter set, the description adequately covers when effect applies and sticky session support. It could mention required permissions or error handling, but overall it is complete for its purpose.

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?

Input schema covers both parameters with descriptions. The description adds context about sticky sessions and runtime replacement, enhancing understanding beyond the schema. Baseline 3 raised due to this additional context.

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 explicitly states the action ('Replace the residential proxy pool') and the context ('at runtime'), clearly distinguishing it from sibling tools like browser_set_proxy which likely handles individual proxies.

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 informs that changes take effect after 'browser_restart' and supports sticky sessions, providing clear usage context. It does not explicitly list when not to use, but for a simple configuration tool this is adequate.

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

browser_snapshotA

Take a snapshot of the current page. 'aom' returns the accessibility YAML (token-lean); 'hybrid' adds a Set-of-Mark screenshot with numeric red boxes matching each ref.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo'aom' = accessibility YAML only (cheap). 'vision' = raw screenshot. 'hybrid' = YAML + screenshot with red-boxed refs overlaid.aom

TDQS

A3.9/5.0
Behavior4/5

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

Describes what each mode returns (YAML for aom, screenshot with overlays for hybrid) and implies read-only snapshot behavior. Lacks explicit statement about non-destructiveness or performance costs, but sufficient for a snapshot tool.

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, front-loaded with primary purpose, then details about modes. No redundant words; every sentence adds value.

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?

With no output schema, description partially explains return values (aom and hybrid) but omits 'vision' mode return. Lacks complete coverage of all modes despite having only one parameter.

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 covers mode parameter with enum values and descriptions (100% coverage). Tool description adds useful context like 'token-lean' and 'Set-of-Mark screenshot', but 'vision' mode is only described in schema, not in main description.

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?

Clearly states 'Take a snapshot of the current page' with specific verb and resource. Lists three distinct modes, differentiating from sibling tools like browser_scroll_read or browser_click which do other actions.

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?

No guidance on when to use this tool versus alternatives. Does not mention prerequisites or use cases relative to siblings like browser_scroll_read for reading text or browser_wait_for for waiting.

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

browser_solve_captchaB

Fallback captcha solver. Detects Turnstile/hCaptcha/reCAPTCHA on the current page (or takes an explicit sitekey), submits to the configured provider (CapSolver or 2Captcha per SAB_CAPTCHA_PROVIDER + SAB_CAPTCHA_API_KEY), polls for a token, and injects it into the widget's response field.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOverride auto-detection. Otherwise the active page is scanned for a known widget.
pageUrlNoPage URL the captcha is bound to. Defaults to the current page.
sitekeyNoProvide explicitly when auto-detection fails.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It describes the process but omits behavioral details like rate limits, costs, timeouts, or what happens on failure. The dependency on env vars (CapSolver/2Captcha) is mentioned but not explained.

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 a single sentence that efficiently conveys the main workflow. It is clear and front-loaded with the tool's role, though slightly dense with multiple clauses.

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?

No output schema exists, but description does not explain return values (e.g., success flag or token). Input parameters are well-covered. Absence of failure/error handling info and provider configuration details makes it adequate but not complete.

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%; the description adds little beyond schema descriptions (e.g., 'Override auto-detection' for type). Baseline 3 applies as schema already documents parameters adequately.

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?

Description clearly states the tool is a fallback captcha solver for Turnstile/hCaptcha/reCAPTCHA, with specific steps: detect, submit to provider, poll, inject. Verb and resource are explicit, and it is distinct from all sibling browser tools.

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 term 'fallback' implies usage when other methods fail, but no explicit guidance on when to use this tool versus alternatives, nor when not to use it. No mention of prerequisites like provider configuration beyond env var names.

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

browser_tabsC

Manage browser tabs: list, new, close, switch.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
indexNo
actionYes

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It only lists actions but does not disclose behavioral traits such as side effects (e.g., closing a tab loses state), prerequisites (e.g., index required for switch/close), or authorization needs. The actions are named but their exact behavior is vague.

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

Conciseness3/5

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

The description is extremely concise (one line). While concise, it sacrifices clarity and structure. A list of actions without elaboration is too terse to be fully helpful, but it does front-load the key purpose.

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

Completeness1/5

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

The description lacks details about return values, prerequisites, and action-specific behavior. For a tool with 3 parameters and multiple actions, this is insufficient. No output schema or annotations exist to compensate.

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

Parameters1/5

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

The input schema has 0% description coverage, and the tool description does not add meaning beyond the schema. The description lists actions but does not explain the roles of 'url' and 'index' parameters, leaving ambiguity about which actions require them.

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 'Manage browser tabs: list, new, close, switch.' It specifies both the resource (tabs) and the actions, distinguishing it from sibling tools like browser_navigate or browser_click.

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?

No guidance is provided on when to use this tool versus alternatives. For example, there is no mention that browser_navigate is for changing the current tab's URL, while browser_tabs with action 'switch' changes the active tab. The description lacks context for when to use each action.

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

browser_typeB

Type into an input or textarea addressed by ref.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesRef of an input/textarea element.
textYes
clearNoClear the field before typing.
submitNoPress Enter after typing.

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It only states 'type into' but does not disclose behavioral details like waiting for element, clear behavior (though default in schema), keyboard event simulation, or error handling when ref not found.

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?

Single sentence, front-loaded with purpose, no redundant information. Every word is meaningful.

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 typing action, the description covers the basic purpose but omits critical context like whether it waits for the element, what happens if ref is invalid, and how special keys are handled. Adequate but not complete.

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 75% (3 of 4 parameters have descriptions). The description adds the context that ref addresses an input/textarea, but doesn't explain the 'text' parameter. Baseline 3 due to high coverage, but no extra value beyond schema.

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 ('input or textarea addressed by ref'). It distinguishes from sibling tools like browser_click (click) and browser_select (select).

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?

No guidance on when to use this tool vs alternatives, no prerequisites, and no conditions for appropriate usage. The description lacks any context about when to type versus when to use other browser interaction tools.

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

browser_wait_forB

Wait until either some text appears on the page or a given ref resolves to a visible element.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoRef that must resolve to a visible element.
textNoSubstring to wait for in page text.
timeoutMsNo

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided. Description lacks details on timeout behavior, return value, polling mechanism, or what happens when both conditions are true.

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?

Single sentence, no redundancy, well-formed.

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?

No output schema, no annotations, and description omits return value, error handling, and behavior edge cases. Incomplete for a tool with 3 parameters and implicit complexity.

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 67% (low), and the tool description adds no extra meaning beyond the schema descriptions. Does not explain how 'ref' resolves or what 'visible element' means.

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?

Clear verb 'wait' and specific conditions: text appearance or visible element. Distinct from siblings like browser_click or 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 Guidelines2/5

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

No guidance on when to use versus alternatives or when not to use. Does not explain when to choose text vs ref condition.

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.

  1. 13 tool updatesv0.2.0
    • First observedbrowser_click
    • First observedbrowser_eval
    • First observedbrowser_navigate
    • First observedbrowser_restart
    • First observedbrowser_scroll_read
    • First observedbrowser_select
    • First observedbrowser_set_proxy
    • First observedbrowser_set_proxy_pool
    • First observedbrowser_snapshot
    • First observedbrowser_solve_captcha
    • First observedbrowser_tabs
    • First observedbrowser_type
    • First observedbrowser_wait_for

TDQS

A3.5/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct action: scrolling, waiting, navigation, snapshot, clicking, typing, selecting, tab management, JS evaluation, proxy configuration, and captcha solving. No overlapping purposes.

Naming Consistency4/5

Tools consistently use the browser_ prefix with verb or verb+noun patterns (e.g., browser_navigate, browser_set_proxy). The exception is browser_tabs (noun) which deviates slightly but remains clear.

Tool Count5/5

13 tools cover the core browser automation tasks without being excessive. Each tool has a clear role, and the count is well-scoped for the server's purpose.

Completeness4/5

Covers navigation, interaction, proxy management, and captcha solving comprehensively. Minor gaps exist, such as missing back/forward navigation or visual screenshot (snapshot returns AOM only), but most workflows are supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    A high-performance browser automation MCP server that provides AI agents with a fast, persistent Chromium instance via Playwright. It features reference-based element interaction, snapshot diffing, and manual handoff capabilities to handle complex tasks like CAPTCHAs.
    61
    18
    32
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    An MCP server that provides AI models with full browser automation capabilities through Chrome. It enables navigation, interaction, screenshots, and complete DevTools access by bridging AI clients with a companion Chrome extension.
    99
    10
    3
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Agent-native browser control MCP server that enables AI agents to browse and interact with web pages via accessibility tree snapshots and ref ID-based commands.
    15
    2
    MIT

Latest Blog Posts

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/ykshah1309/stealth-agent-browser-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server