Skip to main content
Glama

wraith-mcp

PyPI License: MIT

AI-native stealth browser MCP server. Tell it what to do — it figures out how.

Browser Use (AI vision navigation) + Patchright (bot detection bypass).

Why This One?

wraith-mcp

playwright-mcp

stealth-browser-mcp

browser-use-mcp-server

Navigation

AI vision (self-healing)

CSS selectors

CSS selectors

AI vision

Bot detection bypass

Patchright (binary-level)

None

nodriver

None

Tools

17 — keyless navigate/snapshot/click/type_text/… + AI browse/extract

20+

90+

via Agent

Keyless (no API key)

Yes — client AI drives low-level tools directly

Yes

Yes

No

Site layout changes

Adapts automatically

Breaks

Breaks

Adapts

LLM providers

6 (Anthropic, OpenAI, OpenRouter, Google, Ollama, +compatible)

N/A

1

1

One command does it all — no selectors, no step-by-step scripting:

"Log into my dashboard and download the monthly report"

Related MCP server: MCP Playwright Server

Quick Start

Add wraith-mcp as MCP server

Install

pip install wraith-mcp

Setup

Add to your MCP config (.mcp.json, .cursor/mcp.json, .windsurf/mcp.json, etc.):

{
  "mcpServers": {
    "wraith": {
      "command": "wraith-mcp"
    }
  }
}

Works with any MCP client: Cursor, Windsurf, VS Code, Cline, Roo Code, OpenCode, Codex, and more.

The browser window is visible by default. Set "HEADLESS": "true" in env to run it headless — recommended for servers, CI, and Docker (the Docker image already sets it).

These clients call Wraith over MCP. The low-level tools work with no API key — your client's AI drives them directly. The autonomous browse/extract tools use MCP sampling when supported, otherwise a fallback key (see below).

Do I Need an API Key?

No — for the low-level tools. navigate, snapshot, click, type_text, scroll, press_key, get_content, screenshot, pdf, and tabs need no API key: your MCP client's model (Claude Code, Codex, OpenCode, …) calls them directly and is the brain, exactly like playwright-mcp.

Only the autonomous Agent toolsbrowse and extract, which plan the steps themselves — need a model. They use MCP sampling when the client supports it, otherwise a fallback provider key. Note that many clients, including Claude Code today, do not implement MCP sampling, so browse/extract need a fallback key there (ANTHROPIC_API_KEY, OPENROUTER_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY, or Ollama via OLLAMA_MODEL). The low-level tools work either way.

Tools

Keyless — your client's AI drives the browser directly, no API key:

Tool

Description

navigate

Open a URL; returns the page's interactive elements

snapshot

List interactive elements as [index] <tag> text

click

Click an element by index (from snapshot)

type_text

Type text into an element by index

scroll

Scroll the page

press_key

Press a key or chord (e.g. Enter, Control+a)

get_content

Current page as clean markdown

screenshot

Capture a page as base64 PNG

pdf

Render a page to base64 PDF (headless only)

tabs

List, open, or close tabs

list_downloads

List files downloaded this session (saved to ./downloads by default)

save_storage_state

Save cookies + localStorage to a file (restore via BROWSER_STORAGE_STATE)

list_sessions / close_session / close_all_sessions

Manage persistent sessions

Autonomous AI Agent — needs MCP sampling or a fallback key:

Tool

Description

browse

Execute any browser task in natural language

extract

Pull structured data from a page

The low-level tools share a persistent browser via session_id (default "default"): call navigate once, then snapshot/click/type_text/… reuse the same page. browse/extract also accept session_id.

Fallback LLM Providers

Use these only when your MCP client does not support sampling, or when you want to force Wraith to use an explicit provider.

Provider

Key

Anthropic (default)

ANTHROPIC_API_KEY

OpenRouter

OPENROUTER_API_KEY

OpenAI

OPENAI_API_KEY

DeepSeek / Groq / Together

OPENAI_API_KEY + OPENAI_BASE_URL

Google Gemini

GOOGLE_API_KEY

Ollama (local)

OLLAMA_MODEL

Set BROWSER_USE_MODEL to override the default model or provide a sampling model hint to the MCP client.

Browser Options

Wraith keeps its default browser profile unless optional env vars are set. It can forward Browser Use profile knobs for domain policy (BROWSER_ALLOWED_DOMAINS, BROWSER_PROHIBITED_DOMAINS, BROWSER_BLOCK_IP_ADDRESSES=true for Browser Use's direct-IP navigation block), session/artifacts (BROWSER_STORAGE_STATE, BROWSER_USER_DATA_DIR, BROWSER_DOWNLOADS_PATH, BROWSER_RECORD_HAR_PATH, BROWSER_RECORD_VIDEO_DIR, BROWSER_TRACES_DIR), and permissions, viewport, or wait timing (BROWSER_PERMISSIONS, BROWSER_VIEWPORT, BROWSER_MINIMUM_WAIT_PAGE_LOAD_TIME, BROWSER_WAIT_FOR_NETWORK_IDLE_PAGE_LOAD_TIME, BROWSER_WAIT_BETWEEN_ACTIONS) when the installed Browser Use BrowserProfile supports those fields. Domain/IP policy env vars fail closed on unsupported Browser Use versions.

Locale & timezone (stealth): by default Wraith pins neither — it inherits the host locale and timezone so they stay consistent with your exit IP. Forcing en-US on a non-US IP is itself a bot signal, so set these only when routing through a proxy: point BROWSER_LOCALE and BROWSER_TIMEZONE at the proxy's region (e.g. en-US + America/New_York) so locale, timezone, and IP agree. BROWSER_TIMEZONE is applied via CDP (Emulation.setTimezoneOverride) because Browser Use's BrowserProfile has no timezone field.

Downloads: files save to ./downloads (relative to the server's working directory) by default so they persist — Browser Use otherwise uses a temp dir that gets cleaned up on session stop, losing the file. Override with BROWSER_DOWNLOADS_PATH, and use the list_downloads tool to retrieve the saved paths after a click/navigate triggers a download.

Docker

docker build -t wraith-mcp .
docker run -i --rm wraith-mcp

SSE mode for local-only testing:

docker run -p 127.0.0.1:8808:8808 wraith-mcp --transport sse --host 0.0.0.0 --port 8808

Do not expose the SSE port directly to an untrusted network. If you need remote access, put it behind an authenticated proxy or SSH tunnel and restrict browsing with BROWSER_ALLOWED_DOMAINS plus BROWSER_BLOCK_IP_ADDRESSES=true.

SSE Transport

wraith-mcp --transport sse --host 127.0.0.1 --port 8808

The SSE host defaults to 127.0.0.1. Binding to 0.0.0.0 is only appropriate behind an authenticated proxy or another trusted network boundary.

How It Works

Keyless (low-level tools) — your MCP client's AI is the brain:

Client AI -> MCP Server -> Patchright Chromium
  1. navigate opens a page and returns its interactive elements

  2. The client AI reads the [index] <tag> text snapshot and decides what to do

  3. It calls click/type_text/scroll/… by index — no model runs in Wraith

  4. Patchright executes without triggering bot detection

Autonomous (browse/extract) — Wraith drives a Browser Use Agent:

AI Agent -> MCP Server -> Browser Use Agent -> Patchright Chromium
  1. Describe a task in natural language

  2. Browser Use asks the MCP client model through sampling, or a fallback provider

  3. Browser Use sees the page (screenshot + DOM) and decides actions

  4. Patchright executes without triggering bot detection

Security

  • URL scheme validation (http/https only)

  • max_steps capped at 50 server-side

  • Input length capped at 4000 chars

  • Task timeout (default 120s, configurable via BROWSER_TASK_TIMEOUT)

  • Proxy support via PROXY_SERVER

  • SSE transport binds to 127.0.0.1 by default; do not expose it directly without authentication

  • Browser Use page context is sent to the MCP client model via sampling, or to the configured fallback provider

Limitations

  • Binary-level stealth only (no Runtime.enable CDP fix)

  • Enterprise WAFs may still block without residential proxies

  • Fresh browser per call (~3s startup)

  • The low-level tools (navigate/snapshot/click/…) are keyless — no model needed

  • browse/extract need MCP sampling or a fallback key; many clients (incl. Claude Code) don't implement sampling, so a fallback key is required there

License

MIT

Available Tools

17 tools
browseA

Execute a browser task described in natural language. The AI agent navigates and interacts with pages automatically. Resilient to site layout changes — no CSS selectors needed.

Args: task: What to do, e.g. "Search for 'AI news' and return top 3 results" url: Optional starting URL to navigate to first max_steps: Maximum interaction steps (capped at 50) session_id: Optional session ID to reuse an existing browser session

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
taskYes
max_stepsNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses autonomy, resilience to layout changes, a step cap, and session reuse, which are useful. However, it does not warn about potential destructive actions (e.g., form submissions, purchases) or describe error/return behavior, which is a notable gap for a tool that interacts with live pages.

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 summary sentence is front-loaded, and the Args section is clearly structured with no redundancy. Every sentence adds value, including the resilience note and the capped step limit. It is appropriately sized for the tool's complexity.

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 the tool's moderate complexity and the presence of an output schema (which handles return values), the description covers core purpose, behavior, and all parameters. It could add more about behavior when max_steps is exceeded or error handling, but it is largely complete for an agent to use the tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description fully compensates by documenting all four parameters: task with an example, url as optional starting point, max_steps with a cap, and session_id for reuse. This goes well beyond the bare schema and provides complete semantic meaning.

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

Purpose5/5

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

The description clearly states it executes natural-language browser tasks via an autonomous agent, which distinguishes it from sibling tools that handle specific low-level actions like click or type_text. The verb 'execute' and resource 'browser task' are specific, and the mention of 'no CSS selectors needed' further differentiates it from tools that require selectors.

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

Usage Guidelines3/5

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

The description implies use for high-level, natural-language tasks with the example and the 'no CSS selectors needed' note, but it does not explicitly name alternatives or state when not to use this tool. It lacks clear exclusions or direct comparison with sibling tools like click or navigate.

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

clickA

Click the element with the given index (from snapshot). Returns a new snapshot.

Args: index: Element index from snapshot session_id: Session to act on (default: "default")

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations exist, so the description must carry the transparency burden. It discloses the main behavior and the fact that a new snapshot is returned, but it does not mention potential side effects (e.g., navigation, waiting for load) or error behavior for stale indices.

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

Conciseness5/5

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

The description is compact and front-loaded, with a one-sentence purpose followed by a clear Args block. Every line provides relevant information without redundant filler.

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 click action, the description covers the core workflow: get snapshot index, click, receive a new snapshot. It could mention prerequisites like session creation, but the schema and default values fill some gaps, and an output schema exists.

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 0%, so the parameter descriptions are essential. The description explains 'index' as an element index from a snapshot and 'session_id' as the session to act on with a default, adding meaningful context beyond the raw schema types.

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 verb ('Click'), a clear target ('the element with the given index (from snapshot)'), and the return value ('Returns a new snapshot'). This distinguishes it from sibling tools like type_text, scroll, and navigate.

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

Usage Guidelines3/5

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

The phrase 'from snapshot' implies the prerequisite of obtaining a snapshot first, and returning a new snapshot suggests a refresh workflow. However, there is no explicit guidance on when to use this vs. alternatives or when not to use it.

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

close_all_sessionsA

Close all active persistent browser sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 disclosing behavioral traits. It only states what it does (closes all persistent sessions) but does not mention side effects, irreversibility, impact on current tab, or authentication requirements. This is a destructive operation with minimal behavioral disclosure.

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

Conciseness5/5

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

The description is a single, concise sentence that is front-loaded with the verb and object. No unnecessary words or repetition.

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 tool is simple (0 params, output schema exists), so the description is close to adequate. However, it lacks context about consequences (e.g., sessions are terminated and cannot be restored) and does not differentiate when to use this versus 'close_session'. Given the destructive nature, a bit more context would be appropriate.

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

Parameters4/5

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

The tool takes zero parameters, so the schema fully covers everything. The description does not need to add parameter semantics, and the baseline for 0-parameter tools is 4.

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 (close) and the resource (all active persistent browser sessions). It distinguishes itself from the sibling tool 'close_session' by specifying 'all' rather than a single session.

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 the alternative 'close_session'. The description does not mention scenarios, prerequisites, or exclusions. While the name implies batch closing, there is no explicit usage guidance.

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

close_sessionC

Close a persistent browser session.

Args: session_id: The session ID returned when the session was created

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior1/5

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

No annotations are provided, so the description carries the full burden of disclosing behavioral traits. It only states the action itself, omitting critical details such as whether the close operation is irreversible, what happens to unsaved state, or whether it affects other sessions. This is a significant gap for a destructive-looking operation.

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 extremely concise, with a clear action statement followed by a structured Args section. Every sentence earns its place, and there is no redundant or filler content.

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 the tool's simplicity and the presence of an output schema, the description could suffice, but it lacks usage guidelines and behavioral disclosure. The existence of sibling tools like 'close_all_sessions' creates a need for differentiation that is not addressed, making the description incomplete for safe and correct use.

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

Parameters4/5

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

The schema provides only 'session_id' as a string. The description adds meaningful context by explaining that the session ID is 'returned when the session was created', which helps agents source the correct value. This goes beyond the schema's minimal type information.

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

Purpose4/5

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

The description states a specific action ('Close a persistent browser session') with a clear resource (the session). It doesn't explicitly distinguish from the sibling 'close_all_sessions', but the name 'close_session' and the singular resource make the intent clear enough.

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 like 'list_sessions' or 'close_all_sessions'. There are no stated prerequisites, exclusions, or context for choosing this tool.

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

extractA

Extract structured data from a webpage using natural language.

Args: url: Target URL data_description: What to extract, e.g. "all product names and prices in JSON" max_steps: Maximum interaction steps (capped at 50) session_id: Optional session ID to reuse an existing browser session

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
max_stepsNo
session_idNo
data_descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations exist, so the description carries the burden. It adds useful behavioral details not in the schema: max_steps is 'capped at 50', session_id allows reusing a browser session, and 'interaction steps' implies the tool may take actions on the page. However, it does not disclose whether these actions are read-only or can modify state, or any permission requirements.

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 concise and well-structured: a one-sentence purpose followed by a succinct Args list. Every element adds value, and the most important information (purpose) is front-loaded.

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?

The description covers the tool's purpose, all parameters with examples, and key behavioral constraints. It lacks explicit usage guidance relative to siblings, but the presence of an output schema means return-value documentation is unnecessary. Overall, it is a solid, nearly complete description.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates with a clear Args list explaining each parameter. It provides an example for data_description ('all product names and prices in JSON'), specifies the max_steps cap, and clarifies session_id's purpose for reusing a session.

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 'Extract structured data from a webpage using natural language,' which combines a specific verb ('extract'), resource ('webpage'), and method ('natural language'). This distinguishes it from siblings like get_content or browse by emphasizing structured output and natural-language instructions.

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 context (when you need structured data from a webpage) but does not explicitly compare to alternatives or state when not to use it. Mention of 'session_id' and 'interaction steps' provides some context, but there is no direct guidance on choosing this over sibling tools like get_content or snapshot.

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

get_contentB

Return the current page as clean markdown (no LLM, no screenshot).

Args: session_id: Session to read (default: "default")

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It discloses the return format ('clean markdown') and exclusions ('no LLM, no screenshot'), but omits details like whether it waits for page load, whether it captures the full page or visible portion, or if it requires an active session. Some transparency is present but not fully 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?

The description is two sentences, front-loaded with the main action, and every word earns its place. No fluff or redundancy, making it an ideal concise tool description.

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 read-only tool with one optional parameter and an output schema, the description is adequate. It clearly states what it returns and the parameter, which is enough for basic invocation. It could mention when to use it relative to siblings, but the low complexity keeps the requirement modest.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate. It merely restates the schema's 'session_id' with a default, adding nothing beyond 'Session to read' which is nearly identical to the schema title. No additional meaning, constraints, or examples are provided.

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 uses a specific verb ('Return') and resource ('current page as clean markdown'), clearly distinguishing it from screenshot (not an image) and extract (no LLM processing). However, it does not explicitly differentiate from snapshot, which might also retrieve page content. Overall, purpose is clear.

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

Usage Guidelines3/5

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

The phrase 'no LLM, no screenshot' gives some context on what this tool is not for, but it does not explicitly state when to use it over siblings like browse, snapshot, or extract. Usage is implied rather than spelled out, with no exclusionary guidance.

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

list_downloadsA

List files downloaded in this session, with their paths.

Files are saved to ./downloads by default (override with BROWSER_DOWNLOADS_PATH). Call this after a click/navigate that triggers a download to find the saved file.

Args: session_id: Session to inspect (default: "default")

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It reveals the default save directory ('./downloads') and the BROWSER_DOWNLOADS_PATH override, which is useful operational context. It does not explicitly state that the operation is non-destructive, but the verb 'list' and inability to modify files make that apparent.

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

Conciseness5/5

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

The description is compact and well-structured: purpose sentence, path/override context, usage timing, and argument documentation. Every sentence adds value, with no redundancy or filler.

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

Completeness5/5

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

For a simple listing tool with an output schema, the description covers the core purpose, when to use it, the parameter semantics, and an important environment variable detail. No significant gaps remain for an agent to invoke it correctly.

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

Parameters4/5

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

The schema provides only a default value for session_id with no description, and schema description coverage is 0%. The description compensates by including 'Args: session_id: Session to inspect', clarifying the parameter's meaning. Though minimal, this is necessary and sufficient for a single obvious parameter.

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 'List files downloaded in this session, with their paths', using a specific verb and resource. This clearly distinguishes the tool from sibling navigation and content tools, and immediately conveys its function.

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 says 'Call this after a click/navigate that triggers a download', providing clear timing guidance. It does not name alternatives or exclusions, but no sibling tool serves a similar download-listing purpose, so the context is sufficient.

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

list_sessionsA

List active persistent browser session IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 behavioral disclosure. It clearly states that this is a list operation, which implies non-mutating behavior, and adds contextual detail ('active persistent'). However, it does not explicitly state that no sessions are modified or whether any permissions are required.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler words. Every word contributes to understanding the tool's purpose. It is appropriately concise for a zero-parameter list operation.

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?

The tool is simple (0 params) and has an output schema, so the description need not explain return values. It provides enough context about what is listed ('active persistent browser session IDs'), though it could add a note about typical usage, e.g., retrieving IDs before closing sessions.

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 provides complete coverage. The description does not need to explain parameter semantics. A baseline of 4 is appropriate since there is nothing for the description to add.

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

Purpose5/5

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

The description uses a specific verb ('List') and a clear resource ('active persistent browser session IDs'). It clearly distinguishes itself from sibling tools like close_session and list_downloads by specifying exactly what is being listed.

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 is provided on when to use this tool versus alternatives. There is no mention of exclusions, prerequisites, or relationships to sibling tools like close_session or list_downloads. The usage context is only implied by the tool's name.

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

pdfA

Render a webpage to PDF and return it as a base64-encoded PDF.

Keyless — navigates and renders directly, no LLM. Headless only (Chromium prints PDF only in headless mode).

Args: url: URL to render

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are present, so the description carries the burden. It discloses that it's keyless (no LLM), headless only, and returns base64-encoded PDF, which informs the agent about the output and execution mode. It doesn't cover error handling or timeouts, but the core behavior is transparent.

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

Conciseness5/5

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

The description is concise and front-loaded, using three sentences plus an args line. It gets directly to the point with no extraneous 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?

Given the tool's simplicity (one param) and presence of an output schema, the description covers the essential behavior: rendering URL to base64 PDF, headless mode, and keyless operation. It doesn't discuss failure modes, but the main usage scenario is well specified.

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?

With 0% schema description coverage, the description compensates by defining 'url: URL to render'. This adds meaning beyond the schema's just type and required flag. The single parameter is fully explained.

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 'Render a webpage to PDF and return it as a base64-encoded PDF' with a specific verb and resource. It distinguishes from siblings like screenshot by specifying PDF format and includes constraints (headless, keyless).

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 context on when to use: it mentions keyless, headless-only, and direct rendering, which implies it's for straightforward PDF capture without LLM processing. However, it doesn't explicitly name alternative tools or exclusion criteria, so not a 5.

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

press_keyA

Press a key or chord (e.g. "Enter", "Control+a"), then return a new snapshot.

Args: keys: Key or chord to send session_id: Session to act on (default: "default")

ParametersJSON Schema
NameRequiredDescriptionDefault
keysYes
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 full burden. It discloses a key behavioral trait: after pressing the key, it returns a new snapshot. However, it does not mention side effects, whether it waits for navigation/load, or how session state is affected, leaving gaps for a mutation-like 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 concise and well-structured: a one-sentence purpose statement followed by a clear Args list. No wasted words, and the key information is front-loaded.

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 its simplicity (2 params, output schema present), the description covers the essential aspects: what the tool does, its arguments, and the return behavior (new snapshot). It does not explain when to use vs. alternatives, but that is the usage dimension, and the output schema covers return value 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?

Schema description coverage is 0%, but the description compensates by explicitly explaining each parameter: 'keys' is a key or chord to send with a formatting example, and 'session_id' is the session to act on with a default value. This adds meaningful meaning beyond the raw 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 uses a specific verb ('Press') and resource ('a key or chord') with concrete examples ('Enter', 'Control+a'), and clearly distinguishes itself from siblings like type_text (typing strings) and click (mouse actions) by explaining it sends keyboard keys and then returns a new snapshot.

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. It does not mention using this for keyboard shortcuts/hotkeys vs. type_text for text entry, nor does it note any prerequisites like needing an active session or focus.

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

save_storage_stateA

Save a session's cookies + localStorage (auth state) to a JSON file.

The file holds live authentication secrets — store it securely and never commit it. Restore it by setting BROWSER_STORAGE_STATE= before the session starts.

Args: session_id: An existing session ID (create one via browse/extract with session_id) path: File path to write the storage-state JSON to

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations available, the description carries the full burden of behavioral disclosure. It warns that the file holds live authentication secrets and should be stored securely, which is a crucial behavioral trait. It also implies a write operation and gives restore instructions, though it does not mention overwriting behavior or failure modes.

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

Conciseness5/5

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

The description is compact and well-structured. It opens with a one-sentence purpose, adds a security note, gives restore context, and then lists arguments with clear explanations. Every sentence earns its place with no 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?

For a tool with only two parameters and an output schema, the description covers all essential aspects: what is saved, the security implications, how to restore, and parameter details. It is complete enough for an agent to invoke correctly without further assumptions.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It explains that session_id is an existing session ID and suggests creating one via browse/extract, and that path is the file to write to. These explanations add significant meaning beyond the bare schema property names.

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: 'Save a session's cookies + localStorage (auth state) to a JSON file.' This is a specific verb-plus-resource that distinguishes it from sibling tools like browse, extract, or close_session. The scope is well-defined: it saves session storage state, not just any data.

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 clear context: it explains that restoring is done via BROWSER_STORAGE_STATE and specifies that session_id must be an existing session (created via browse/extract). It does not explicitly name alternatives or when-not-to-use, but the context is sufficient for most agents.

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 webpage and return it as base64-encoded PNG.

Keyless — navigates and captures directly, no LLM.

Args: url: URL to screenshot full_page: Capture the full scrollable page (default: visible viewport only)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
full_pageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description bears full responsibility. It discloses the output format (base64 PNG) and the keyless, direct capture behavior, but does not mention failure modes, page load handling, or limitations. This is minimal but not misleading.

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

Conciseness5/5

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

The description is three short sentences plus an Args list. Information is front-loaded, with the core purpose in the first sentence, and every phrase adds value. No filler or 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?

For a 2-parameter screenshot tool with an output schema, the description covers core behavior, output format, and parameter semantics. It lacks some edge-case details (e.g., what happens on navigation failure), but is sufficient for the tool's simplicity.

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 0%, so the description must compensate. The Args section explains both 'url' and 'full_page', with full_page's default clarified as 'visible viewport only'. It adds meaning beyond the raw schema, though the url explanation is slightly tautological.

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

Purpose4/5

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

The description states 'Take a screenshot of a webpage and return it as base64-encoded PNG' – a specific verb and resource with output format. However, it does not explicitly distinguish from sibling tools like 'snapshot' or 'pdf', so it lacks explicit sibling differentiation.

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 mentions it is 'Keyless' and navigates/captures directly, but it does not provide explicit when-to-use vs alternatives like 'snapshot' or 'get_content'. Usage is only implied by the purpose.

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

scrollA

Scroll the page, then return a new snapshot.

Args: direction: up, down, left, or right amount: pixels to scroll (default 500) session_id: Session to act on (default: "default")

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNo
directionNodown
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 of behavioral disclosure. It explicitly says the tool scrolls and returns a new snapshot, covering the core action and output. It also documents defaults for direction and amount. It does not mention edge cases or side effects, but for a simple scrolling operation, this is sufficient.

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 extremely concise: one sentence for the action and output, followed by a compact list of parameter explanations. Every piece of information is necessary and directly relevant, and the structure is well-organized with the main purpose front-loaded.

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 the tool's low complexity (three optional parameters) and the presence of an output schema, the description is complete. It explains all parameters, states the output (snapshot), and does not need to elaborate on return structure. It is self-sufficient for an agent to invoke the tool correctly.

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

Parameters5/5

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

The description provides plain-language explanations for all three parameters: direction (allowed values), amount (pixels), and session_id (session to act on). The schema only has titles and defaults, so the description adds essential meaning and compensates for the 0% schema description 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 the page') and its result ('return a new snapshot'), using a specific verb and resource. This distinguishes it from sibling tools like navigate (which changes the URL) and click (which interacts with elements).

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

Usage Guidelines3/5

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

The description implies that scroll is for moving the current page's viewport, but it does not explicitly state when to use it versus alternatives such as navigate or click, nor does it provide any exclusions or alternative recommendations. It is not misleading, but it lacks clear usage guidance.

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

snapshotA

Return the current page's interactive elements as [index] <tag> text.

Pass an index to click/type_text. Re-run after the page changes.

Args: session_id: Session to inspect (default: "default")

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full safety/disclosure burden. It adds useful behavioral context: the snapshot is an indexed list of interactive elements, indices are tied to the current page state, and stale results require a re-run. It doesn't explicitly state that this is a read-only operation, but the phrase 'Return' and the provided workflow imply no 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?

Three short segments with no filler: the main purpose, a usage tip, and a parameter note. The most important information appears first and the entire description is under 70 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 single-parameter, read-only tool with an output schema, the description covers the core contract: what is returned, how to interpret it, when to refresh, and how to address a session. Nothing essential is missing.

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

Parameters4/5

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

The schema only defines `session_id` with a default and no descriptive help text (0% coverage). The description's Args section adds meaning by identifying it as 'Session to inspect', which clarifies the parameter's role beyond the schema's bare type and default.

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+resource ('Return... interactive elements') and defines the output format `[index] <tag> text`, which distinguishes it from sibling read tools like get_content or screenshot.

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

Usage Guidelines4/5

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

It explicitly instructs to pass an index to click/type_text and to re-run after the page changes, giving clear context for when to use it and how the result should be consumed. It doesn't name exclusions or alternative tools, but the usage note makes the intended scenario clear.

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

tabsA

Manage browser tabs within a persistent session.

Args: session_id: An existing session ID action: One of "list", "open", "close" url: URL to open (action="open"; validated http/https) target_id: Tab target_id to close (action="close"; from action="list")

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
actionYes
target_idNo
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/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. It explains each action and parameter, including URL validation, but does not disclose side effects, session requirements beyond 'existing', or error behavior. It adds useful context but lacks depth.

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

Conciseness5/5

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

The description is compact and structured with an Args block, with no fluff. Every sentence earns its place, making it easy to parse.

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?

The description covers all required aspects for usage, and the output schema covers return values. It lacks some detail on error handling or session state, but is otherwise complete for a simple tool.

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

Parameters5/5

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

The schema has 0% description coverage, but the description compensates by explaining all parameters: session_id, action, url (with validation), and target_id (sourced from list). This fully maps 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?

The description clearly states the tool manages browser tabs within a persistent session and enumerates the supported actions (list, open, close). This is specific and distinguishes it from sibling tools like navigate or browse.

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 tab management within a session but does not explicitly state when to choose this over alternatives or provide exclusions. The context of a persistent session and action list gives some guidance, but no explicit comparisons are made.

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

type_textA

Type text into the element with the given index. Returns a new snapshot.

Args: index: Element index from snapshot text: Text to type session_id: Session to act on (default: "default")

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
indexYes
session_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/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. It discloses a key behavior by stating 'Returns a new snapshot,' and the action of typing is clear. However, it does not mention whether text replaces existing content or appends, nor any prerequisite like focusing the element, which could be critical.

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 concise and well-structured: a single purpose line followed by a clean Args list. Every sentence adds value and the front-loaded purpose immediately tells the agent what the tool does.

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?

The tool is simple and the description covers input, action, and return. It even references the snapshot tool by mentioning 'index from snapshot.' The presence of an output schema reduces the need to detail return values. Minor gaps like error behavior or text replacement semantics keep it from a perfect score.

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

Parameters5/5

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

The description provides an Args section that explains all three parameters: index (element index from snapshot), text (text to type), and session_id (session to act on, default default). This fully compensates for the schema's 0% property descriptions, adding missing meaning.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Type text into the element with the given index.' This clearly differentiates the tool from siblings like 'click' or 'press_key' by indicating the action (typing) and the target (element index).

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 usage context is implied: the tool is for typing text into a specific element. However, there is no explicit guidance on when to prefer this over alternatives like 'press_key' or 'click', nor exclusions such as whether the element must be focused.

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. 17 tool updatesv0.2.2
    • First observedbrowse
    • First observedclick
    • First observedclose_all_sessions
    • First observedclose_session
    • First observedextract
    • First observedget_content
    • First observedlist_downloads
    • First observedlist_sessions
    • First observednavigate
    • First observedpdf
    • First observedpress_key
    • First observedsave_storage_state
    • First observedscreenshot
    • First observedscroll
    • First observedsnapshot
    • First observedtabs
    • First observedtype_text

TDQS

A3.7/5.0

Scored across 17 tools

Disambiguation4/5

Most tools have clearly distinct purposes: navigation, interaction, content reading, screenshots, PDFs, downloads, and session management are all separate. The only potential confusion is between browse, extract, and navigate, but their descriptions make the distinction clear.

Naming Consistency3/5

Naming is mixed: some tools use bare verbs (browse, scroll, navigate, click, extract), others use verb_noun (type_text, get_content, close_session), and a couple are nouns used as commands (tabs, screenshot). The style is readable but not uniform.

Tool Count4/5

With 17 tools, this is slightly above the ideal 3-15 range, but each tool covers a distinct browser or session operation, making the count justified. It feels a bit heavy but not excessive.

Completeness4/5

The server covers the core browser lifecycle well: navigation, interaction, content extraction, screenshots, PDFs, downloads, persistent sessions, and tabs. Minor gaps exist (e.g., no explicit history or wait commands), but workflows are largely complete.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables AI-powered browser automation, web scraping, and testing using Playwright across Chromium, Firefox, and WebKit. It allows users to perform actions like navigation, clicking, typing, and taking screenshots through natural language interfaces.
    8 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for Meshbrow that gives AI agents full browser automation capabilities with stealth anti-detection, enabling natural language control of browser sessions, data extraction, and multi-browser fleets.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A stealth-enhanced browser automation MCP server for AI agents to interact with websites while bypassing anti-bot detection mechanisms like Cloudflare and reCAPTCHA.
    8
    MIT