Skip to main content
Glama

MCP Browser

Give your AI a real browser.

MCP server that lets AI assistants browse the web through your real Chrome — with your cookies, sessions, and fingerprint. No bot detection. No CAPTCHAs.

npm version npm downloads license CI


Quick Start (30 seconds)

No installation needed. Just add the config to your MCP client:

Claude Desktop

Add to ~/.config/claude/claude_desktop_config.json (Mac/Linux) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "browser": {
      "command": "npx",
      "args": ["-y", "@wgarrido/mcp-browser"],
      "env": {
        "CHROME_HEADLESS": "true"
      }
    }
  }
}

Claude Code (CLI)

claude mcp add browser -- npx -y @wgarrido/mcp-browser

VS Code / Cursor

Add to .vscode/mcp.json in your project:

{
  "servers": {
    "browser": {
      "command": "npx",
      "args": ["-y", "@wgarrido/mcp-browser"],
      "env": {
        "CHROME_HEADLESS": "true"
      }
    }
  }
}

That's it. Chrome launches automatically in the background. Start browsing.


Related MCP server: Chrome MCP Server

Why MCP Browser?

Problem

How MCP Browser solves it

Sites block bots and scrapers

Uses your real Chrome with your real fingerprint

Cloudflare challenges, CAPTCHAs

Auto-detects and waits for challenges to resolve

Content behind login

Your cookies and sessions are already there

Noisy HTML (ads, nav, popups)

Smart DOM cleaning strips everything but content

Cookie consent banners

Auto-dismissed (40+ selector patterns)

SPAs with dynamic content

Runs in a real browser — JavaScript executes naturally


Available Tools (15)

Core

Tool

What it does

fetch_page

Load a URL → clean Markdown

fetch_readable

Extract main article content (Readability)

web_search

Search Google/DuckDuckGo through the browser

screenshot

PNG screenshot of a page or CSS element

execute_javascript

Run arbitrary JS in the page context

fetch_structured_data

Extract JSON-LD, OpenGraph, meta, tables, headings, links

multi_fetch

Fetch up to 5 URLs in parallel

extract_links

Get all links from a page (with regex filter)

crawl

Crawl a site following links (depth/page limits)

browser_status

Check browser connection status

Persistent Sessions

Keep tabs open across multiple tool calls for multi-step workflows:

Tool

What it does

open_tab

Open a persistent tab → returns tab_id

close_tab

Close a tab by tab_id

click_and_navigate

Interact: click, type, select, submit, scroll

list_tabs

List all open tabs

monitor_page

Track page changes over time (start/check/stop)

Most tools accept an optional tab_id to reuse a persistent session instead of opening a new page.


Usage Examples

Just talk naturally to your AI:

  • "Search for the latest Node.js release notes"web_search + fetch_page

  • "Read and summarize this article: https://..."fetch_readable

  • "Compare pricing on these two pages"multi_fetch

  • "Take a screenshot of https://..."screenshot

  • "Log into this site, then scrape my dashboard"open_tab + click_and_navigate + fetch_page

  • "Extract all /docs/ links from this page"extract_links

  • "Crawl this site 2 levels deep"crawl

  • "Watch this page for changes every 30 seconds"monitor_page


Advanced: Use Your Own Chrome Sessions

By default, MCP Browser launches Chrome in headless mode (background, no window). This is the simplest setup.

If you want to use your existing cookies and logged-in sessions, launch Chrome manually with CDP enabled, then point MCP Browser to it:

Launch Chrome with CDP

Mac:

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
  --remote-debugging-port=9222 --no-first-run

Linux:

google-chrome --remote-debugging-port=9222 --no-first-run

Windows (PowerShell):

& "C:\Program Files\Google\Chrome\Application\chrome.exe" `
  --remote-debugging-port=9222 --no-first-run

Or use the included scripts:

./scripts/launch-chrome.sh       # Mac/Linux
.\scripts\launch-chrome.ps1      # Windows

Important: Chrome must be started fresh. If it's already running, the CDP flag is ignored. Quit Chrome first, or use --user-data-dir="/tmp/chrome-cdp" for a separate profile.

Config without headless

{
  "mcpServers": {
    "browser": {
      "command": "npx",
      "args": ["-y", "@wgarrido/mcp-browser"],
      "env": {
        "CDP_URL": "http://localhost:9222"
      }
    }
  }
}

Configuration

All settings are optional. Pass them via env in your MCP config:

Variable

Default

Description

CHROME_HEADLESS

false

Auto-launch Chrome in headless mode (recommended)

CHROME_PATH

(auto-detect)

Custom path to Chrome/Chromium executable

CDP_URL

http://localhost:9222

Chrome DevTools Protocol endpoint

DEFAULT_TIMEOUT

30000

Page load timeout in ms

MAX_CONTENT_LENGTH

50000

Max returned content in characters

MAX_CONCURRENT_TABS

5

Max simultaneous browser tabs

CACHE_ENABLED

true

Enable in-memory page cache

CACHE_TTL

300

Cache time-to-live in seconds

SEARCH_ENGINE

google

google or duckduckgo

LOG_LEVEL

info

debug, info, warn, error

SESSION_TIMEOUT_MINUTES

30

Auto-close inactive tabs after this duration

CHROME_PROFILES

{}

JSON map of profile name → CDP URL

Example with custom settings:

{
  "mcpServers": {
    "browser": {
      "command": "npx",
      "args": ["-y", "@wgarrido/mcp-browser"],
      "env": {
        "CHROME_HEADLESS": "true",
        "SEARCH_ENGINE": "duckduckgo",
        "DEFAULT_TIMEOUT": "60000",
        "MAX_CONTENT_LENGTH": "100000"
      }
    }
  }
}

Features

  • Headless mode — Chrome runs in the background, auto-launched by the server

  • Anti-bot stealth — Hides navigator.webdriver, fakes plugins, languages, and permissions

  • Cloudflare handling — Detects Turnstile/interstitial challenges and waits up to 15s for resolution

  • Cookie banner dismissal — Auto-clicks consent overlays (GDPR, OneTrust, CookieBot, Reddit, 40+ patterns)

  • Smart DOM cleaning — Strips nav, sidebars, footers, ads, modals, and action links

  • URL rewriting — Redirects SPAs to scraping-friendly versions (e.g. reddit.comold.reddit.com)

  • Google → DuckDuckGo fallback — If Google shows a CAPTCHA, search falls back automatically

  • Persistent sessions — Keep tabs open for multi-step workflows (login, forms, navigation chains)

  • LRU cache — Avoids redundant fetches with configurable TTL

  • Concurrency control — Semaphore limits concurrent tabs to prevent resource exhaustion

  • Multi-profile support — Connect to multiple Chrome instances via named profiles


Troubleshooting

"Cannot connect to Chrome" Chrome must be running with --remote-debugging-port=9222, or set CHROME_HEADLESS=true for auto-launch.

"Port 9222 already in use" Another Chrome instance is using CDP. Close it or use a different port:

./scripts/launch-chrome.sh 9333

Then set CDP_URL=http://localhost:9333.

"Page timeout" Increase the timeout: "DEFAULT_TIMEOUT": "60000"

"Empty results from web_search" Google may show a CAPTCHA. Switch to DuckDuckGo: "SEARCH_ENGINE": "duckduckgo"

"Cloudflare challenge page" The server auto-waits up to 15s for Cloudflare challenges. If it needs manual verification, use open_tab to create a persistent session, solve it in Chrome, then use the tab_id with other tools.

"MCP error -32000: Connection closed" This can have two causes:

  1. Chrome is not running with CDP enabled — If you're not using CHROME_HEADLESS=true, make sure Chrome is launched with --remote-debugging-port=9222 before starting the server. Verify with:

    curl http://localhost:9222/json/version

    If this returns an error, Chrome is not listening. See Launch Chrome with CDP.

  2. Corrupted npx cache — If you see TypeError: Comparator is not a constructor in the logs, the npx cache is corrupted. Clear it and retry:

    rm -rf ~/.npm/_npx/*
    # The next npx -y @wgarrido/mcp-browser call will re-download cleanly

Development

git clone https://github.com/wgarrido/mcp-browser.git
cd mcp-browser
npm install
npm run dev    # Run with hot reload
npm run build  # Build for production

Requirements

  • Node.js 18+

  • Google Chrome or Chromium

License

MIT

Available Tools

15 tools
browser_statusA

Check if the browser connection is active and return status info

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/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 behavioral disclosure burden. It communicates a read-only checking behavior and that status info is returned, but it does not mention error behavior, side effects, or whether the tool can initiate a connection if none exists. The behavior is implied but not fully detailed.

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 sentence with no redundant content. It front-loads the action and resource, and every word contributes to understanding the tool's purpose.

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 parameterless status-check tool, the description is mostly adequate, but with no output schema, 'return status info' leaves the return-value structure ambiguous. It does not specify what fields the agent should expect, such as connection state, browser version, or error details.

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 the schema already fully covers parameter semantics. The description adds meaningful context by clarifying that the result is status info, satisfying the baseline for a parameterless tool.

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 resource ('browser connection') and states the expected result ('return status info'). It clearly identifies a health/status operation and is distinct from sibling tools that manipulate tabs, fetch pages, or run scripts.

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 the tool—when needing to verify the browser connection—but it does not explicitly state when to prefer it over alternatives or mention whether it should be called before other browser operations. No exclusions or comparative guidance is provided.

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

click_and_navigateA

Interact with a persistent browser tab: click elements, type text, select options, submit forms, or scroll. Requires a tab_id from open_tab. Returns the page state after the action.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueNoText to type (for 'type'), option value (for 'select')
actionYesAction to perform
tab_idYesThe persistent tab ID (from open_tab)
timeoutNoTimeout in ms (default: 30000)
selectorYesCSS selector for the target element
wait_afterNoCSS selector to wait for after the action completes

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 burden of disclosing behavior. It does state that the tool returns the page state after the action, which is useful. However, it does not mention side effects of mutating actions like form submission triggering navigation, clicks that navigate away, or how failures/timeouts behave.

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. The action list is front-loaded, followed by the prerequisite and return information. Every sentence earns its place.

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 multi-action tool with 6 parameters and no output schema, the description covers the essential flow: prerequisite tab_id, the range of actions, and the return value. It does not spell out the exact structure of the page-state return or per-action differences, but the rich parameter schema compensates for much of that.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds some value by connecting tab_id to open_tab and summarizing the action enum, but it does not add meaningfully beyond what the schema already documents for selectors, timeout, or wait_after.

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 clear verb and resource: interact with a persistent browser tab. It enumerates the supported actions (click, type, select, submit, scroll), which makes what the tool does immediately obvious and distinguishes it from tab-management siblings like open_tab and close_tab.

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 gives a clear prerequisite: 'Requires a tab_id from open_tab.' This implies when the tool is appropriate, but it does not explicitly contrast it with alternatives such as execute_javascript or fetch_page, nor does it state when not to use this tool. Usage context is present but only implicitly.

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

close_tabA

Close a persistent browser tab by its tab_id. Use this to clean up tabs opened with open_tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
tab_idYesThe tab ID returned by open_tab

TDQS

A4/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 behavioral burden. It clearly discloses that the operation closes a tab and is intended for cleanup, which implies a mutating action. However, it does not mention side effects, error behavior, or whether the close is irreversible.

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, with the core action front-loaded and the usage context in the second sentence. No filler or redundant wording.

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 single-parameter tool with no output schema, the description is largely complete: it states what is closed, what identifier is needed, and when to use it. It could mention return/error behavior, but the simplicity of the operation makes this a minor gap.

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

Parameters3/5

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

Schema coverage is 100%, with tab_id already documented as 'The tab ID returned by open_tab'. The description restates this relationship but adds no significant new semantic detail beyond what the schema provides.

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 ('Close') and resource ('persistent browser tab') and identifies the exact identifier needed ('by its tab_id'). This is clearly distinguishable from siblings like open_tab and list_tabs.

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 states when to use the tool: 'Use this to clean up tabs opened with open_tab.' It does not provide when-not-to-use guidance, but there is no alternative close tool among the siblings, so this is sufficient.

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

crawlA

Crawl a website starting from a URL, following links up to a specified depth. Returns a list of discovered pages with titles and optional content summaries. Respects same-domain and link filter constraints.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesStarting URL for the crawl
timeoutNoTimeout per page in ms (default: 30000)
max_depthNoMaximum link depth to follow (default: 2)
max_pagesNoMaximum total pages to crawl (default: 10)
link_filterNoRegex pattern to filter which links to follow
include_contentNoInclude a markdown content summary per page (default: false)
max_length_per_pageNoMax content length per page when include_content is true (default: 5000)

TDQS

A3.8/5.0
Behavior3/5

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

Discloses that traversal is depth-limited, output is a list with titles/summaries, and that same-domain/link_filter constraints are respected. However, with no annotations, it leaves side effects unclear (e.g., whether it opens tabs or alters browser state, auth handling, rate limits) and doesn't describe execution mode.

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 sentences pack purpose, output, and constraints without filler. Front-loaded with the core action; every sentence earns its place.

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, the description supplies a high-level return shape (pages with titles and optional summaries) and covers core constraints. It doesn't detail the exact returned item structure, error behavior, or side effects, but defaults and parameter meanings are fully documented in the schema.

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 covers 100% of parameters with clear descriptions, so the baseline is 3. The description reinforces the role of link_filter and includes content summaries but adds no new parameter-specific 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?

States the tool's action ('Crawl'), resource ('a website'), and key behavior ('following links up to a specified depth'), plus the output ('list of discovered pages with titles and optional content summaries'). This clearly separates it from single-page siblings like fetch_page and extract_links.

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?

Implies the use case of multi-page link traversal from a URL, and mentions constraints (same-domain, link_filter), but gives no explicit 'when to use vs. alternatives' or exclusions. Siblings such as fetch_page/multi_fetch are not referenced.

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

execute_javascriptA

Execute arbitrary JavaScript in the context of a loaded web page. The script runs in the browser and must return a JSON-serializable value. Supports persistent sessions via tab_id — when using a tab_id, the url parameter is optional (executes on the current page).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe URL to load before executing the script (optional if tab_id is provided)
scriptYesJavaScript code to execute. The last expression is returned, or use 'return' explicitly.
tab_idNoReuse a persistent tab (from open_tab) instead of opening a new one
timeoutNoTimeout in ms (default: 30000)

TDQS

A4/5.0
Behavior3/5

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

No annotations are present, so the description carries the transparency burden. It usefully discloses that the script runs in the browser and must return a JSON-serializable value, but it does not mention error behavior, timeout/async semantics, or the potentially page-mutating side effects of arbitrary JS.

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; the primary action and the most important usage caveat are front-loaded. Every clause adds functional information.

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 four-parameter tool with no output schema or annotations, the description covers execution context, return-type constraint, and tab/session behavior. It leaves minor gaps around error handling and asynchronous behavior, but an agent can reasonably decide how to invoke the tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds a little context (persistent sessions and the current-page behavior when tab_id is used), but those details mostly duplicate the existing parameter descriptions rather than substantially expanding 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?

States a specific verb and resource ('Execute arbitrary JavaScript in the context of a loaded web page') and clarifies the return contract. This clearly differentiates it from sibling tools like fetch_page, open_tab, or click_and_navigate, which do not run custom JS.

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?

Gives clear invocation context by explaining persistent sessions via tab_id and when the url parameter may be omitted. It does not explicitly compare to sibling tools or state when not to use this tool, so it falls just short of full alternative guidance.

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

fetch_pageB

Load a URL in the browser and return the full page content as Markdown. Supports persistent sessions via tab_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe URL to load (optional if tab_id is provided)
tab_idNoReuse a persistent tab (from open_tab) instead of opening a new one
timeoutNoTimeout in ms (default: 30000)
wait_forNoCSS selector to wait for before extraction
max_lengthNoMax content length in characters (default: 50000)

TDQS

B3.3/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 behavioral burden. It discloses the primary action and output format, and that tab_id supports persistent sessions. However, it does not clarify side effects such as whether a new tab is opened, whether tabs remain open, or how failures/timeouts behave.

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 with no filler. The main purpose is stated first, followed by the session capability. Every word 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?

The description plus schema covers parameters and the Markdown output, making simple calls feasible. However, with no annotations, no output schema, and a browser tool that may have side effects, it lacks guidance on tab lifecycle, required input combinations, and when to use alternatives.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters. The description adds little beyond the schema; 'persistent sessions via tab_id' restates the schema's tab_id description rather than adding new meaning.

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

Purpose4/5

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

The description clearly states the action ('Load a URL'), the resource ('URL'), and the result ('full page content as Markdown'). It also mentions persistent sessions via tab_id, which distinguishes it from simpler fetch tools. However, it does not explicitly differentiate itself from sibling tools like fetch_readable or fetch_structured_data.

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 on when to use fetch_page versus alternatives such as fetch_readable, open_tab, or crawl. The mention of persistent sessions via tab_id is a partial usage hint, but it does not explain when to prefer this tool or when to avoid it.

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

fetch_readableA

Load a URL and extract the main article content (removes navigation, ads, sidebars). Falls back to full page content if extraction yields too little text. Supports persistent sessions via tab_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe URL to load (optional if tab_id is provided)
tab_idNoReuse a persistent tab (from open_tab) instead of opening a new one
timeoutNoTimeout in ms (default: 30000)
wait_forNoCSS selector to wait for before extraction
max_lengthNoMax content length in characters (default: 30000)
fallback_to_fullNoFall back to full page content if Readability extraction is too short (default: true)

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 behavioral disclosure burden and does a solid job: it reveals that navigation/ads/sidebars are removed, that it falls back to full page content when extraction is too short, and that persistent sessions are supported. It omits details like output format or side effects, but the key behavioral traits are disclosed.

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 concise sentences, each earning its place. The core behavior is front-loaded, fallback behavior follows, and the persistent-session capability is stated without fluff.

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 covers the core extraction behavior and fallback, but it does not explain the return format despite there being no output schema, nor does it offer guidance on choosing among related sibling tools. It is adequate for basic invocation but leaves notable gaps around output expectations and alternative tool selection.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds only a light conceptual layer about persistent sessions via tab_id, but most parameter meaning is already fully documented in the schema. No compensation needed or provided.

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 a specific verb and resource: 'Load a URL and extract the main article content.' It also differentiates itself from siblings like fetch_page by emphasizing readability extraction that removes navigation, ads, and sidebars, with a fallback behavior.

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 the tool—when main article content is needed—but never explicitly contrasts it with alternatives like fetch_page or fetch_structured_data. Mentioning persistent sessions via tab_id gives some contextual guidance, but no when-not-to-use or explicit alternative routing.

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

fetch_structured_dataB

Extract structured data from a web page: JSON-LD, OpenGraph tags, meta tags, tables, headings, and links. Supports persistent sessions via tab_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe URL to analyze (optional if tab_id is provided)
tab_idNoReuse a persistent tab (from open_tab) instead of opening a new one
extractNoData types to extract (default: ["json_ld", "opengraph", "meta"])
timeoutNoTimeout in ms (default: 30000)

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral disclosure burden. It only states extraction capabilities and the existence of persistent sessions via tab_id; it does not disclose whether a new tab is opened when tab_id is omitted, whether the tab remains open afterward, whether the operation is read-only, or how sessions are cleaned up. These are material side effects for an agent to invoke the tool safely.

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 short sentences with no filler. The core capability is front-loaded, followed by a scannable list of extractable data types and one sentence about session reuse. Every word 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?

With no annotations and no output schema, the agent learns what can be extracted but not what the return payload looks like, what side effects occur, or when this tool is the right choice among thirteen browser-related siblings. For a tool that can create or reuse persistent browser sessions, this leaves too much to inference.

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

Parameters3/5

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

The input schema already documents all four parameters with 100% coverage, including optionality, defaults, and the relationship between url and tab_id. The description adds little beyond restating the tab_id concept ('Supports persistent sessions via tab_id'), so it does not meaningfully extend the schema's parameter semantics.

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 ('Extract structured data') on a precise resource ('a web page') and enumerates the concrete data types it returns: JSON-LD, OpenGraph tags, meta tags, tables, headings, and links. That list clearly distinguishes it from sibling tools like fetch_readable, fetch_page, and extract_links, which have narrower or different extraction scopes.

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 makes the tool's domain clear and mentions the persistent-session tab_id option, so an agent can infer when structured-data extraction is wanted. However, it never explicitly says when to prefer this tool over fetch_readable, fetch_page, or extract_links, nor does it explain when to supply tab_id versus url. The guidance is implied rather than explicit.

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

list_tabsA

List all open browser tabs with their URLs and titles

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/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, and 'List all open browser tabs' clearly conveys a read-only enumeration behavior. It also discloses what the result will contain (URLs and titles), which is helpful beyond the tool name.

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 communicates the action, scope, and output fields with no wasted 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?

For a zero-argument listing tool, the description provides the essential information an agent needs: what is listed and what fields are returned. No output schema exists, but the description covers the meaningful output content.

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 the schema reflects that fully, so the baseline applies. The description does not need to explain any parameter semantics.

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 a specific verb and resource: 'List all open browser tabs with their URLs and titles.' It is unambiguous and informative, but it does not explicitly distinguish itself from sibling tools like browser_status or fetch_page.

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 given on when to use this tool versus alternatives such as browser_status, fetch_page, or open_tab. The context is simple, but the description does not state exclusions or preferred conditions.

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

monitor_pageA

Monitor a web page for content changes. Use 'start' to begin monitoring, 'check' to retrieve changes, 'stop' to end monitoring, or 'list' to see all active monitors.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL to monitor (required for 'start')
actionYesAction to perform
selectorNoCSS selector to monitor for changes (default: 'body')
monitor_idNoMonitor ID (required for 'check' and 'stop')
interval_secondsNoPolling interval in seconds (default: 30)

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that monitors exist and can be listed or stopped, but it does not state whether start launches a background process, whether checks consume or destroy state, whether resources persist, or what side effects monitoring has. A stateful tool needs more explicit lifecycle behavior.

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, front-loaded with the core purpose. The second sentence compactly maps all four actions without unnecessary elaboration.

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 action surface is covered clearly, but the broader behavior is underspecified: there is no output schema, no indication of what 'start' returns, no clarification of whether monitoring is server-side or tied to an open tab, and no cleanup or rate-limit guidance. For a stateful tool with no annotations, this leaves important gaps an agent would have to infer.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents every parameter, giving a baseline of 3. The description adds some action-to-parameter intent by tying 'start'/'check'/'stop'/'list' to the action enum, but it does not meaningfully explain parameter details beyond the 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?

States a specific function—monitoring a web page for content changes—and enumerates the four supported operations. This clearly distinguishes it from one-shot sibling tools like fetch_page, screenshot, and crawl.

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 the monitoring workflow by listing start/check/stop/list, giving an agent clear operational context. However, it does not explicitly state when to choose this tool over siblings like fetch_page or crawl, and it offers no exclusions or alternative routing.

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

multi_fetchA

Fetch multiple URLs in parallel and return their content as Markdown. Useful for comparing sources or gathering information from several pages at once. Max 5 URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYesList of URLs to fetch (max 5)
timeoutNoTimeout per page in ms (default: 30000)
wait_forNoCSS selector to wait for on each page
max_length_per_pageNoMax content length per page in characters (default: 15000)

TDQS

A4/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 of behavioral disclosure. It does explain that fetching is parallel, returns Markdown, and caps at 5 URLs. However, it does not disclose what happens on partial failures, per-URL errors, malformed URLs, or whether results are returned in the original order, which is meaningful for a batch fetch 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?

The description is two sentences with no filler. The first sentence states the core action and output format, and the second provides use cases and the limit. Every sentence earns its place.

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

Completeness4/5

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

For a simple batch-fetch tool with only one required parameter and complete schema descriptions, the description covers the essential selection and invocation information well. The main gap is the lack of explicit failure/partial-response behavior, and since there is no output schema, a bit more detail about return behavior would make it fully 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%, so the input schema already documents all four parameters. The description adds only the max-5 constraint, which the schema also states, and provides no additional meaning for timeout, wait_for, or max_length_per_page. This aligns with the baseline of 3.

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 ('Fetch multiple URLs in parallel') and the resource ('multiple URLs'), and identifies the output ('return their content as Markdown'). It also distinguishes itself from sibling tools like fetch_page by emphasizing parallel batch fetching, making its purpose unambiguous.

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

Usage Guidelines4/5

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

The description provides concrete use cases: 'comparing sources or gathering information from several pages at once,' which tells an agent when this tool is appropriate. It does not explicitly name alternatives like fetch_page or crawl, nor does it state when not to use it, so it falls 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.

open_tabA

Open a new persistent browser tab. Returns a tab_id that can be used with other tools for multi-step workflows (login, navigation, form filling). The tab stays open until explicitly closed or the session expires.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL to navigate to (optional, opens blank tab if omitted)
timeoutNoNavigation timeout in ms (default: 30000)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description discloses key behaviors: the tab is persistent, returns a tab_id, and remains open until explicitly closed or the session expires. It does not cover failure modes or resource implications, but the core lifecycle behavior is clearly stated.

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 compact sentences with the primary action first, followed by return value and lifecycle semantics. Every sentence earns its place with no filler or redundancy.

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?

The description covers everything needed to invoke the tool correctly: it explains what it does, what it returns, and how long the tab persists. Since there is no output schema, the explicit mention of tab_id is essential and sufficient. The schema handles parameter details, so nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents both parameters. The description adds no extra semantic detail about them, but it doesn't need to; it focuses on the tool's overall behavior.

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 ('Open a new persistent browser tab') and distinguishes itself from siblings like fetch_page by emphasizing persistence and returning a tab_id for multi-step workflows. This makes the tool's role clear and easily differentiated.

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 identifies the intended use case: multi-step workflows such as login, navigation, and form filling. It doesn't name alternative tools or state when not to use it, but the persistent-tab framing and tab_id return value imply the contrast with single-shot tools like fetch_page.

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

screenshotA

Take a screenshot of a web page or a specific element. Returns a PNG image. Supports persistent sessions via tab_id — when using tab_id, url is optional (screenshots the current page).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe URL to capture (optional if tab_id is provided)
widthNoViewport width in pixels (default: 1280)
heightNoViewport height in pixels (default: 720)
tab_idNoReuse a persistent tab (from open_tab) instead of opening a new one
timeoutNoTimeout in ms (default: 30000)
selectorNoCSS selector of a specific element to capture
full_pageNoCapture the full scrollable page (default: false)

TDQS

A4.4/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the behavioral disclosure burden. It adds meaningful details beyond the schema: it returns a PNG, reuses persistent tabs via tab_id, and can target the current page when url is omitted. It does not mention tab lifecycle side effects when no tab_id is given, but the disclosed behavior is substantial.

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. The core purpose and return type are front-loaded, followed by the key tab_id usage caveat. Every sentence earns its place.

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 tool with 7 optional parameters and no output schema, the description provides sufficient invocation context: what it captures, what it returns, and how tab_id interacts with url. Minor gaps remain around combining url and tab_id simultaneously and what happens when neither is provided, but individual parameter details are covered by the 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?

Schema coverage is 100%, so the baseline is met. The description adds cross-parameter meaning by clarifying that url is optional when tab_id is provided and that a selector can target a specific element. This relationship is not fully apparent from the individual schema descriptions.

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 opens with a specific verb and resource: 'Take a screenshot of a web page or a specific element.' The output format is also stated ('Returns a PNG image'), which clearly differentiates it from sibling content-fetching tools like fetch_page or fetch_readable that return HTML/text.

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 usage context for the persistent-session mode: when tab_id is provided, url is optional and the current page is captured. It does not explicitly contrast against fetch_page or web_search, but it provides enough operational guidance for when to use a tab_id versus a URL.

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. 15 tool updatesv1.0.0
    • First observedbrowser_status
    • First observedclick_and_navigate
    • First observedclose_tab
    • First observedcrawl
    • First observedexecute_javascript
    • First observedextract_links
    • First observedfetch_page
    • First observedfetch_readable
    • First observedfetch_structured_data
    • First observedlist_tabs
    • First observedmonitor_page
    • First observedmulti_fetch
    • First observedopen_tab
    • First observedscreenshot
    • First observedweb_search

TDQS

A3.6/5.0

Scored across 15 tools

Disambiguation3/5

fetch_page, fetch_readable, multi_fetch, fetch_structured_data, extract_links, and crawl all retrieve page content or extracted data, creating a cluster of tools with overlapping outputs. Descriptions clarify some intent, but fetch_readable's fallback to full page content makes it ambiguous with fetch_page, and fetch_structured_data overlaps with extract_links.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern like open_tab, close_tab, list_tabs, and extract_links. Minor inconsistencies such as browser_status, web_search, screenshot, multi_fetch, and fetch_readable break the pattern but remain readable and predictable.

Tool Count4/5

15 tools is at the upper edge of the well-scoped range and covers browser sessions, search, fetching, extraction, interaction, and monitoring. It feels slightly heavy because several fetch/extract tools could be consolidated, but the count is not unreasonable for the domain.

Completeness5/5

The set covers the browser lifecycle well: search, navigation, persistent tabs, interaction, screenshots, structured extraction, crawling, and change monitoring. There are no major dead ends for common browser-automation workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    An MCP server that provides AI assistants with full control over a real browser session via a Chrome extension, supporting 36 tools for navigation, data extraction, and DOM manipulation. It bypasses bot detection by utilizing the user's active browser session, including cookies, authentication tokens, and installed extensions.
    18
    3
    MIT
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    An extension-based MCP server that enables AI assistants to control your existing Chrome browser, leveraging your active login states and settings for automation. It provides over 20 tools for tasks like semantic tab search, screen capture, network monitoring, and direct element interaction.
    -
  • 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
    B
    quality
    C
    maintenance
    Browser MCP server that connects to your existing browser, preserving sessions, passwords, and extensions, enabling AI agents to interact with web pages without bot detection.
    31
    10
    1
    MIT