CloakBrowser MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CloakBrowser MCPnavigate to example.com and take a screenshot"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CloakBrowser MCP
CloakBrowser MCP is a Python MCP server that lets agents control a CloakBrowser-backed browser from Linux servers, CI jobs, and other environments where a normal desktop browser is not available.
It is designed for three runtime modes:
headless Linux browsing with no
$DISPLAYvirtual-display browsing through Xvfb when headed browser behavior is needed
CDP connection to an existing CloakBrowser or Chromium-compatible endpoint
The server exposes browser automation tools over MCP stdio, so clients such as Claude Code can start a session, navigate, inspect pages, interact with forms, manage cookies/storage, and work with multiple tabs.
Upstream
This project is an MCP wrapper and agent-facing extension built on top of CloakHQ/CloakBrowser. CloakBrowser provides the underlying browser launch and anti-detection automation layer; this repository adds the MCP server, tool schema, session lifecycle, Linux headless/virtual-display deployment flow, tests, and agent-oriented documentation around it.
Related MCP server: scout-mcp-server
Features
28 MCP tools for browser sessions, page interaction, cookies, storage state, and multi-page workflows.
Works in headless Linux environments by default.
Optional Xvfb support for virtual display sessions.
Optional CDP backend for connecting to an existing browser service.
CloakBrowser launch options for user agent, viewport, proxy, locale, timezone, geolocation, humanization, extensions, headers, permissions, and persistent profile/state.
iframe-aware select support through
browser_select_option(..., frame_selector="iframe#...").uv-managed local development and deployment.
Requirements
Python 3.11 or newer
uvLinux, macOS, or another platform supported by the Python dependencies
For virtual display mode on Linux:
Xvfb
Install uv if needed:
curl -LsSf https://astral.sh/uv/install.sh | shFor virtual display mode on Debian/Ubuntu:
sudo apt-get update
sudo apt-get install -y xvfbIf the runtime does not already have browser binaries available, install the Playwright Chromium browser used by the underlying stack:
uv run python -m playwright install chromiumInstallation
Clone the repository and create an isolated uv environment:
git clone https://github.com/SJF-ECNU/CloakBrowserMCP.git
cd CloakBrowserMCP
uv sync --extra dev --no-editableThe project depends on:
mcp[cli]>=1.28,<2pyvirtualdisplay>=3,<4
After changing source code, rebuild the installed package used by MCP clients:
uv sync --extra dev --no-editable --reinstall-package cloakbrowser-mcpRun the MCP Server
Start the stdio MCP server:
uv run --no-editable cloakbrowser-mcpThe process communicates over stdio. It is normally launched by an MCP client rather than run manually in a terminal.
Claude Code Setup
From the repository root, register the server:
claude mcp add --scope user cloakbrowser -- \
uv --project "$PWD" run --no-editable cloakbrowser-mcpThen restart Claude Code or reconnect MCP servers. Run /mcp in Claude Code and
confirm that cloakbrowser is connected.
If you edit the server code, reinstall the package and reconnect Claude Code:
uv sync --extra dev --no-editable --reinstall-package cloakbrowser-mcpClaude Code may cache MCP tool schemas for the lifetime of a connection, so a restart/reconnect is recommended after tool signature changes.
Generic MCP Client Config
For clients that read JSON MCP configuration, use an entry like this:
{
"mcpServers": {
"cloakbrowser": {
"command": "uv",
"args": [
"--project",
"/absolute/path/to/CloakBrowserMCP",
"run",
"--no-editable",
"cloakbrowser-mcp"
]
}
}
}Replace /absolute/path/to/CloakBrowserMCP with the local checkout path.
Browser Modes
Headless Mode
This is the default and is the best choice for Linux servers without a display:
{
"display_mode": "headless"
}Virtual Display Mode
Use this when a target site requires headed browser behavior. If $DISPLAY is
already set, the server uses it. Otherwise it starts Xvfb.
{
"display_mode": "virtual"
}CDP Mode
Use CDP mode to connect to an existing browser or CloakBrowser service:
{
"backend": "cdp",
"cdp_url": "http://127.0.0.1:9222",
"fingerprint": "agent-session-1"
}You can also set a default CDP URL:
export CLOAK_MCP_DEFAULT_CDP_URL=http://127.0.0.1:9222Tool Overview
Session tools:
browser_startbrowser_close
Page basics:
browser_navigatebrowser_clickbrowser_typebrowser_evaluatebrowser_snapshotbrowser_screenshot
Page operations:
browser_wait_for_selectorbrowser_pressbrowser_hoverbrowser_select_optionbrowser_get_textbrowser_get_attributebrowser_get_linksbrowser_scrollbrowser_reloadbrowser_go_backbrowser_go_forward
Context and page management:
browser_get_cookiesbrowser_set_cookiesbrowser_clear_cookiesbrowser_get_storage_statebrowser_save_storage_statebrowser_new_pagebrowser_list_pagesbrowser_switch_pagebrowser_close_page
Common Workflows
Start and Navigate
{
"tool": "browser_start",
"arguments": {
"display_mode": "headless",
"viewport": {"width": 1440, "height": 900},
"locale": "en-US",
"timezone": "UTC"
}
}Then navigate:
{
"tool": "browser_navigate",
"arguments": {
"session_id": "<session_id>",
"url": "https://example.com",
"wait_until": "domcontentloaded"
}
}Inspect a Page
Use browser_snapshot for URL, title, and visible text. Use browser_get_text
for all visible text or a selector-specific text extraction:
{
"tool": "browser_get_text",
"arguments": {
"session_id": "<session_id>",
"selector": "main"
}
}Search or Fill a Form
{
"tool": "browser_type",
"arguments": {
"session_id": "<session_id>",
"selector": "input[name=q]",
"text": "CloakBrowser MCP"
}
}{
"tool": "browser_press",
"arguments": {
"session_id": "<session_id>",
"selector": "input[name=q]",
"key": "Enter"
}
}Select an Option inside an iframe
For a normal page-level <select>, omit frame_selector. For a select inside
an iframe, pass the iframe selector separately:
{
"tool": "browser_select_option",
"arguments": {
"session_id": "<session_id>",
"selector": "#size",
"value": "medium",
"frame_selector": "iframe#preview"
}
}Reuse Login State
Save storage state:
{
"tool": "browser_save_storage_state",
"arguments": {
"session_id": "<session_id>",
"path": "/tmp/cloak-state.json"
}
}Start a new session with that state:
{
"tool": "browser_start",
"arguments": {
"storage_state": "/tmp/cloak-state.json"
}
}For durable browser profiles, use profile_dir instead. profile_dir and
storage_state are mutually exclusive.
browser_start Options
Option | Type | Notes |
| string |
|
| string |
|
| bool/null | Overrides headless behavior for direct mode. |
| string/null | Proxy URL forwarded to CloakBrowser. |
| string/null | Browser locale, for example |
| string/null | Browser timezone, for example |
| bool | Enables CloakBrowser humanized behavior. |
| string/null | Persistent profile directory. |
| string/null | Required for CDP mode unless env var is set. |
| string/null | Added to the CDP URL as a |
| string/null | Custom user agent. |
| object/null | Example: |
| bool | Sets Playwright viewport to |
| string/null |
|
| bool | Forwards CloakBrowser geoip option. |
| bool | Defaults to |
| array/null | Extra browser launch args. |
| array/null | Browser extension paths. |
| string | CloakBrowser humanization preset. |
| object/null | CloakBrowser humanization config. |
| string/object/null | Storage state path or object. |
| object/null | Extra HTTP headers. |
| array/null | Browser context permissions. |
Environment variables:
CLOAK_MCP_DEFAULT_DISPLAY_MODE: default display mode when not providedCLOAK_MCP_DEFAULT_CDP_URL: default CDP endpointCLOAK_MCP_SCREENSHOT_DIR: screenshot output directory
Development
Install development dependencies:
uv sync --extra devRun tests against the source tree:
PYTHONPATH=src uv run pytest -qRun tests against the installed package:
uv sync --extra dev --no-editable --reinstall-package cloakbrowser-mcp
uv run --no-editable pytest -qReal browser smoke tests are opt-in:
CLOAK_MCP_RUN_SMOKE=1 uv run --no-editable pytest tests/test_smoke.py -qVirtual display smoke:
CLOAK_MCP_RUN_VIRTUAL_SMOKE=1 uv run --no-editable pytest tests/test_smoke.py -qCDP smoke:
CLOAK_MCP_SMOKE_CDP_URL=http://127.0.0.1:9222 \
uv run --no-editable pytest tests/test_smoke.py -qSecurity Notes
Browser automation can access web pages, cookies, local files referenced by the browser profile, and authenticated sessions. Run the MCP server in an environment appropriate for the trust level of the agent and target websites.
Avoid sharing persistent profile_dir or storage_state files with untrusted
agents.
License
MIT. See LICENSE.
Available Tools
28 toolsbrowser_clear_cookiesC
Clear browser cookies.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits like scope of cookie clearing (all cookies vs. specific ones), side effects (e.g., logging out user), or persistence. The minimal description fails to communicate important behavioral information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded with purpose. However, it is too brief to cover essential details, but as a concise statement it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite low complexity and an output schema, the description lacks completeness: it does not mention return values, when to use, or effect on browser state. The single sentence fails to provide enough context for reliable tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'session_id' with 0% description coverage, meaning neither schema nor description explains its role. The description provides no parameter information, leaving the agent uninformed about what session_id signifies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Clear browser cookies.' uses a specific verb and resource, clearly indicating the tool's action and target. It effectively distinguishes from sibling tools like 'browser_get_cookies' and 'browser_set_cookies.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as when to clear cookies for session reset or privacy reasons. No exclusions or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_clickC
Click an element by CSS selector.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| selector | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavior (e.g., waits for element, scrolls into view). It simply states 'click an element' without any behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, which is efficient, but it omits necessary details. It could include a brief usage note without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and lack of annotations, the description is incomplete. It does not specify element requirements (visibility, enabled) or the role of session_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description adds no meaning beyond the parameter names. It does not explain session_id or what kind of selector is expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action (click) and the resource (element by CSS selector), clearly distinguishing it from sibling tools like browser_hover or browser_press.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use click vs other interaction tools (e.g., hover, press, type). The description does not mention prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_closeB
Close a browser session and release resources.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions 'release resources' but does not disclose side effects (e.g., cookies cleared, process killed) or authentication needs. This is insufficient for a session-ending operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no extraneous information. It is front-loaded and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required param, output schema present), the description is adequate but incomplete: it omits behavioral details and parameter guidance. A score of 3 reflects minimum viability with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description adds no meaning to the single required parameter 'session_id'. It does not explain what a valid session_id looks like or where to obtain it, so the agent must rely on name only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Close a browser session and release resources' clearly states the verb 'close' and the resource 'browser session', distinguishing it from sibling tools like browser_close_page which close a single page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like browser_close_page or browser_start. Usage is implied (when done with the session), but no exclusions or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_close_pageB
Close a page in the session.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| page_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavior. It only states the basic action but does not mention side effects, confirmation, or what happens to the session. The output schema exists but isn't described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One-sentence description is concise with no filler, but it sacrifices completeness. It earns its place but does not provide enough detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple close action, the description is minimal but missing parameter semantics and behavioral context. The presence of an output schema does not compensate because its contents are not described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning the description adds no explanation for the two parameters (session_id, page_id). The schema provides only types and required status, leaving the agent to guess their meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Close a page in the session' uses a specific verb 'close' and resource 'page', clearly distinguishing it from siblings like browser_close (which closes the entire browser) and browser_switch_page (which switches focus).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when or when not to use this tool. The purpose is implied by the name and description, but no mention of alternatives or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_evaluateC
Evaluate JavaScript in the current page.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| script | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose behavioral traits such as execution context, security implications, or that JavaScript execution can affect the page state. For a tool that executes arbitrary code, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it lacks structure and is under-specified. No organization or front-loading of important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that executes JavaScript with 2 required parameters and no output schema or annotations, the description should at least mention that it returns evaluation results, potential side effects, or security considerations. It does none of this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds no meaning beyond the schema. It doesn't explain what 'script' expects (e.g., JavaScript string) or what 'session_id' refers to. The description is too brief to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Evaluate' and the resource 'JavaScript in the current page', which is specific and distinguishes it from sibling tools like click or navigate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives, when not to use it, or prerequisites. It's just a generic description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_attributeCRead-only
Return an element attribute value.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| selector | Yes | ||
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds no behavioral context beyond the verb 'Return'. No mention of error cases (e.g., missing attribute, invalid selector) or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundancy. Front-loaded with purpose. However, it may be too brief for a tool with three required parameters and no schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 0% schema description coverage and no output schema details provided, the description is insufficient. It does not cover return value, error states, or relationships to other tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of parameters. Parameter names are somewhat self-documenting, but the description does not clarify purpose or format of session_id, selector, or name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (Return) and the resource (element attribute value). It is specific and distinguishes from sibling getters like browser_get_text, browser_get_links, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like browser_get_text or browser_get_cookies. No exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_cookiesCRead-only
Return browser cookies.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| urls | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's short statement adds no further behavioral context. While not contradictory, it misses details like cookie scope or return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at one sentence, but it omits necessary details for effective tool usage. It is not appropriately sized given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks parameter semantics and usage context. For a tool with two parameters and no param descriptions, the one-sentence description is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description provides no information about the two parameters (session_id, urls). It fails to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns browser cookies, with a specific verb and resource. It distinguishes itself from sibling tools like browser_set_cookies and browser_clear_cookies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like browser_get_storage_state or browser_set_cookies. No exclusions or prerequisites provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_linksBRead-only
Return links from the page or a selector.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| selector | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that links can come from the entire page or a specific selector, which is behavioral info beyond the readOnlyHint annotation. However, it lacks details on default behavior with null selector or how the selector is interpreted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the tool's purpose. Every word is necessary, with no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is too brief. It omits important context like selector syntax, limit behavior, and what constitutes a valid session. With three parameters and zero schema descriptions, more detail is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 partially explains the 'selector' parameter by mentioning 'from the page or a selector', but does not explain 'session_id' or 'limit'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns links, which is a specific action. It distinguishes from sibling tools like get_text or get_attribute by focusing on links. However, it does not explicitly differentiate from other get_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not indicate when to use this tool versus alternatives, nor does it offer any context-specific advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_storage_stateCRead-only
Return browser storage state.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only says 'Return,' which aligns with the 'readOnlyHint' annotation but adds no additional behavioral details. It does not explain what is included in 'storage state' (e.g., cookies, localStorage) or any side effects, relying entirely on the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is appropriate for a simple tool. However, it is too brief and could benefit from a bit more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, read-only, output schema exists), the minimal description is partially adequate, but it fails to explain the 'session_id' parameter or the nature of the returned storage state. The output schema existence doesn't compensate for missing input semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'session_id' is required but the description does not explain its purpose or format. Schema description coverage is 0%, so the description adds no value beyond the schema's property name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Return browser storage state,' clearly specifying the verb (Return) and resource (browser storage state). It distinguishes itself from sibling 'browser_save_storage_state' which saves the state, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, such as when to retrieve vs. save storage state. The description lacks any when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_textBRead-only
Return visible text from the page or a selector.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, which the description aligns with, but it adds no additional behavioral details (e.g., what happens if selector is not found, dynamic content handling, or performance). Minimal transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded and to the point. It could include more context without being verbose, but it earns its place with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to explain return values. However, it misses common usage details like error handling and selector validity. Adequate for a straightforward tool but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain parameters. It implicitly mentions the selector's role but does not describe session_id or clarify selector format (CSS, XPath). The optional null behavior is hinted but not explicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action 'return visible text' and the resources 'page or a selector'. It distinguishes from siblings like browser_get_attribute or browser_get_links, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving visible text but provides no explicit guidance on when to use this tool over alternatives (e.g., browser_get_attribute, browser_get_links). No exclusions or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_go_backC
Navigate the active page back in history.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| wait_until | No | load |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description gives no details about side effects, page loading behavior, or state changes beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise but lacks structure; it omits important details that could be included without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and minimal description, the tool definition fails to provide sufficient context for a simple navigation action, especially regarding parameter usage and expected behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any parameters (session_id, wait_until), leaving the agent without meaningful guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action 'navigate' and resource 'active page back in history', distinguishing it from sibling 'browser_go_forward'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'browser_go_forward' or 'browser_navigate'. Missing context for proper invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_go_forwardC
Navigate the active page forward in history.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| wait_until | No | load |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. It only states 'navigate forward' but omits what happens if no forward history, whether it waits for page load (wait_until parameter), or any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (7 words) with no fluff, but this brevity sacrifices necessary information, making it marginally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and sibling tools, the description is insufficiently complete; it lacks edge-case behavior and parameter details, leaving gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any parameters (session_id, wait_until) beyond what the schema provides, failing to add meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'navigate' and resource 'active page forward in history', clearly distinguishing it from sibling tools like browser_go_back.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., browser_go_back, browser_navigate), nor any prerequisites like existence of forward history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_hoverC
Hover over an element by CSS selector.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| selector | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only states the basic action. It does not disclose what happens if the selector fails, whether the element must be visible, or any side effects. This is a significant gap for a tool that requires a session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise, no wasted words, but the brevity sacrifices necessary behavioral and parameter details. Could be slightly expanded without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no behavioral details, the description is incomplete for a browser automation tool. It lacks information about output, error handling, and preconditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description adds minimal meaning: only hints that selector is a CSS selector. session_id is entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (hover), the target (element), and the method (by CSS selector). It distinguishes from sibling tools like browser_click or browser_type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use hover vs alternatives like click, or prerequisites such as requiring an active session or visible element.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_list_pagesCRead-only
List pages in the session.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the readOnlyHint annotation, indicating a safe read operation. However, it adds no additional behavioral details beyond what the annotation already implies, such as whether the output is sorted or includes page titles.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (5 words), but it sacrifices clarity and completeness. While brevity is good, the description could include a sentence on session_id or output format without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the simplicity of the tool, the description lacks essential context, such as how to obtain a session_id or what properties the listed pages contain. The presence of an output schema partially compensates, but the description itself is insufficient for an agent to reliably use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% schema description coverage, and the tool description does not explain the meaning or source of 'session_id'. The user must infer that session_id likely comes from browser_start, which is not clarified here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List pages') and the resource ('in the session'). It effectively distinguishes from sibling tools like browser_switch_page or browser_new_page, but lacks any additional context to differentiate from similar list operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not indicate when to use this tool versus alternatives (e.g., browser_snapshot or browser_get_links), nor does it mention context or prerequisites for using the session_id parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_new_pageC
Open a new page in the session.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| url | No | ||
| switch | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It only states the basic action, omitting details like whether a new tab or window is created, whether focus switches (though the switch parameter hints at it), error handling, or side effects on the session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundancy. It is efficient but could benefit from a slightly more structured format to improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters, no annotations, and an output schema, the description is too terse. It fails to explain return values, behavioral nuances, or how the new page relates to the current session state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate by explaining parameters. However, it does not mention session_id, url, or switch at all, leaving the agent to infer their roles from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does ('Open a new page in the session'), using a specific verb and resource. It implicitly distinguishes from siblings like browser_switch_page (which switches to an existing page) and browser_navigate (which navigates the current page), but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as browser_navigate or browser_start. The description provides no context about prerequisites or scenarios where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_pressC
Press a keyboard key while targeting an element.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| selector | Yes | ||
| key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It only states it presses a key, but does not mention if the key press is simulated, if modifiers are supported, what happens if the element is not focused, or any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no waste, but it is too brief to provide adequate context, bordering on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple action tool, return value is not described (output schema exists but not detailed). No information on errors, success conditions, or behavioral expectations, leaving gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description adds no detail about parameters. The three required parameters (session_id, selector, key) are not explained; for instance, what values are accepted for 'key' (e.g., special keys like 'Enter' or 'Tab') is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Press a keyboard key') and the target ('an element'), distinguishing it from sibling tools like browser_click or browser_type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like browser_type for text input or browser_hover for hover actions. No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_reloadC
Reload the active page.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| wait_until | No | load |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states 'reload' without explaining cache handling, wait behavior, or side effects. The wait_until parameter is not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but lacks structure. It does not use bullet points or separate details, and while front-loaded, it omits necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema and no annotations, the description is insufficient. It fails to describe return values, parameter behavior, or how the tool fits into the broader browsing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain either parameter. session_id and wait_until are left entirely to the agent's inference, providing no added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (reload) and the resource (active page). It is specific enough to distinguish from sibling tools like navigate or go_back, though no additional context is provided about reload behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use reload versus alternatives such as navigate to the same URL or go_back. There is no mention of prerequisites or contexts where reload is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_save_storage_stateC
Save browser storage state to a file.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It states the save action but does not explain whether the file is overwritten or appended, what format is used (e.g., JSON), or whether it requires specific permissions. Missing critical behavioral context for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at one sentence, which is efficient but lacks necessary detail. It could be improved by adding a brief explanation of parameters or usage context. The structure is front-loaded but insufficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, low schema coverage, and the presence of an output schema, the description should explain return values or side effects. It does not mention what the tool returns (e.g., the saved path) or any confirmation. The tool is incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should add meaning to the parameters. It does not explain that 'session_id' identifies a browser session or that 'path' is the file destination. The description adds no value beyond the parameter names themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Save browser storage state to a file' clearly states the action (save) and resource (browser storage state to a file). It distinguishes from sibling tools like browser_get_storage_state which presumably retrieves state rather than saving to a file. However, it does not specify what 'storage state' includes (e.g., cookies, local storage), which could be ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For instance, there is no mention of using browser_get_storage_state to retrieve state first or that this tool overwrites existing files. The description lacks context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_screenshotC
Capture a PNG screenshot and return its filesystem path.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| full_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions file creation and return of a path, but omits key traits like default viewport-only capture, the effect of full_page parameter, file overwrite behavior, or any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is concise, but it omits important details. It is not overly verbose, but it could include more information without becoming too long. The structure is adequate but not optimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description does not explain the full_page parameter or the format of the filesystem path. With 2 parameters and no schema descriptions, the description is insufficient for correct tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should explain parameters. It does not mention session_id or full_page, leaving the agent to infer from names only. The full_page boolean's effect is critical but unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Capture), resource (PNG screenshot), and output (filesystem path). It distinguishes this from sibling tools that perform navigation, clicks, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. The description does not mention context, prerequisites, or when not to use it. Sibling tools like browser_snapshot might overlap, but no comparison is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_scrollC
Scroll the active page by pixel deltas.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| delta_x | No | ||
| delta_y | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full responsibility. It mentions scrolling by pixel deltas but fails to disclose side effects, limits, or whether scrolling is relative or absolute. Missing details like whether negative deltas work or if there are any constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb, resource, and mechanism. No wasted words. However, it could be slightly longer to include parameter hints without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description lacks context such as the need for an active session/page, error conditions, or that the output schema provides return details. It is minimal and leaves the agent potentially uninformed about prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no information about parameters. While delta_x and delta_y are intuitive, the agent receives no explicit guidance on their meaning or valid ranges. The session_id requirement is not mentioned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (scroll) and the resource (active page) with the mechanism (by pixel deltas). It distinguishes this tool from navigation siblings like browser_go_back and browser_go_forward, and interaction tools like browser_click.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, or any prerequisites like having an active page. The description simply states what it does without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_select_optionC
Select an option value in a select element.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| selector | Yes | ||
| value | Yes | ||
| frame_selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose any behavioral traits, such as whether it waits for the element, what happens if the option is not found, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but lacks structure. It could be expanded with minimal additional context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, browser interaction) and lack of rich annotations, the description is insufficient. An output schema exists but doesn't compensate for the missing behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description does not explain any of the 4 parameters (session_id, selector, value, frame_selector) beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (select), resource (option value), and context (select element), which distinguishes it from sibling tools like browser_click or browser_type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, such as browser_click or browser_evaluate. No prerequisites or conditions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_set_cookiesD
Set browser cookies.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| cookies | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description gives no behavioral details. It does not disclose side effects (e.g., overwriting existing cookies, persistence, or impact on storage state).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely brief, but it is not concise in a helpful way. It omits critical details, failing to justify its existence as a useful description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is completely inadequate for a tool with two required parameters and a nested structure. It does not explain the tool's purpose beyond the name, leaving agents unable to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description adds no information about the parameters. It does not explain that session_id identifies the browser session or that cookies is an array of cookie objects with arbitrary properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Set browser cookies' is a tautology of the tool name. It lacks specification of what kind of cookies (session cookies, persistent, domain-specific) and which session, making it vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 siblings like browser_get_cookies or browser_clear_cookies. No mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_snapshotCRead-only
Return page URL, title, and visible text.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's 'Return' is consistent. No additional behavioral traits disclosed (e.g., whether page must be loaded, if it works on any page). With annotations, the bar is lower; this is adequate but not enriched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no fluff, front-loaded with the action and output. Highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists (not shown), so return format is documented elsewhere. However, the description lacks context about prerequisites (e.g., need an active page) and does not clarify scope (current page snapshot). Minimal but not fully sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one required parameter (session_id) with 0% description coverage. The tool description does not explain what session_id represents or how to obtain it. For an agent to use this tool correctly, parameter semantics are completely missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns URL, title, and visible text. This is a specific verb and resource. However, it does not explicitly differentiate from siblings like browser_get_text, which also returns visible text, but the combined nature is implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., browser_get_text, browser_get_links). No when-not or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_startC
Start a CloakBrowser session. Default mode is direct headless Linux browsing.
| Name | Required | Description | Default |
|---|---|---|---|
| backend | No | ||
| display_mode | No | ||
| headless | No | ||
| proxy | No | ||
| locale | No | ||
| timezone | No | ||
| humanize | No | ||
| profile_dir | No | ||
| cdp_url | No | ||
| fingerprint | No | ||
| user_agent | No | ||
| viewport | No | ||
| no_viewport | No | ||
| color_scheme | No | ||
| geoip | No | ||
| stealth_args | No | ||
| args | No | ||
| extension_paths | No | ||
| human_preset | No | default | |
| human_config | No | ||
| storage_state | No | ||
| extra_http_headers | No | ||
| permissions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and 23 parameters, the description fails to disclose important behavioral traits such as session lifecycle, resource management, or effects of parameters like 'humanize' or 'proxy'. Only mentions default headless Linux mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but too brief for the tool's complexity. It front-loads the purpose but omits necessary detail, making it under-specified rather than efficiently concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks essential context about session usage, configuration options, and prerequisites. For a tool with 23 parameters, it is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds almost no meaning to the 23 parameters. Only the default mode gives a hint about 'headless' and possibly 'proxy', leaving the rest undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts a 'CloakBrowser session' and notes the default mode. This distinguishes it from sibling tools that perform actions within a session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, nor prerequisites. The description implies it's the entry point but does not explicitly state that a session must be started before other browser calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_switch_pageC
Switch the active page by page ID.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| page_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavioral traits. It only states the action but does not mention side effects (e.g., what happens to the previous active page), error scenarios (invalid page_id), or output format despite an output schema existing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it is under-specified for a tool with two parameters. While there is no verbosity, the lack of structure (e.g., separating parameter explanation) reduces clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (2 params, no annotations, and an output schema), the description is too brief. It does not explain the relationship between session_id and page_id, nor does it indicate what the output schema contains or how to handle errors, leaving the agent unprepared for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is critical for explaining parameters. It only references 'page ID' but does not define the two required parameters (session_id and page_id) or their purpose, leaving the agent with no additional semantic information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('switch') and the target ('active page') using a specific identifier ('page ID'). It distinguishes from sibling tools like browser_navigate (URL-based) and browser_new_page (create new page).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 browser_navigate, browser_close_page, or browser_list_pages. There is no mention of prerequisites, such as having multiple pages open, or when switching is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_typeB
Type text into an element by CSS selector.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| selector | Yes | ||
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose behaviors like whether the element must be visible, if existing text is cleared, or what happens if the selector is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise and front-loaded, but could be slightly more informative without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple typing tool with many siblings, the description is adequate. However, it lacks details like whether typing is immediate or waits for element, and the output schema is not utilized.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description only clarifies that selector is a CSS selector. It does not explain session_id or text (e.g., whether text is value or raw input). Minimal added value over parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (type text), the target (element), and the method (by CSS selector). It distinguishes from sibling tools like browser_click or browser_press.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for typing text into an element, but does not provide explicit guidance on when to use this tool vs alternatives, or any when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_wait_for_selectorC
Wait for an element selector to reach a page state.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| selector | Yes | ||
| state | No | visible | |
| timeout_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; the description does not disclose behaviors such as possible states (visible, hidden, etc.), error handling on timeout, or return value. It only says 'reach a page state' without elaboration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is too concise for a tool with 4 parameters; it sacrifices informativeness for brevity. A single sentence with vague terms like 'page state' is insufficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and an output schema, the description is incomplete. It does not explain state options, timeout behavior, or what the function returns, leaving critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%; the description adds no explanation for any of the 4 parameters. It only implies that selector and state are involved, but provides no specifics on their semantics or allowed values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (wait) and resource (element selector) and condition (page state), distinguishing it from sibling tools that perform different browser actions. However, 'page state' is vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like click or type. The description lacks any context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
28 tool updates
v0.1.0- First observed
browser_clear_cookies - First observed
browser_click - First observed
browser_close - First observed
browser_close_page - First observed
browser_evaluate - First observed
browser_get_attribute - First observed
browser_get_cookies - First observed
browser_get_links - First observed
browser_get_storage_state - First observed
browser_get_text - First observed
browser_go_back - First observed
browser_go_forward - First observed
browser_hover - First observed
browser_list_pages - First observed
browser_navigate - First observed
browser_new_page - First observed
browser_press - First observed
browser_reload - First observed
browser_save_storage_state - First observed
browser_screenshot - First observed
browser_scroll - First observed
browser_select_option - First observed
browser_set_cookies - First observed
browser_snapshot - First observed
browser_start - First observed
browser_switch_page - First observed
browser_type - First observed
browser_wait_for_selector
TDQS
Each tool has a clearly distinct purpose, targeting specific browser actions like navigation, clicking, typing, or cookie management. Potential overlaps like browser_get_text and browser_snapshot are differentiated by scope (snapshot includes URL and title). No two tools are ambiguous.
All tools share the 'browser_' prefix, but the verb style varies: some are simple verbs (browser_click, browser_close) while others follow verb_noun (browser_clear_cookies). Minor inconsistency but still predictable and readable.
28 tools is on the higher side but appropriate for a comprehensive browser automation server covering navigation, interaction, extraction, state management, and cookies. No tools seem redundant or out of scope.
The tool set covers a wide range of browser automation needs: navigation, clicking, typing, text extraction, screenshots, JavaScript evaluation, cookies, storage, page management, and waiting. Missing advanced features like file upload or network interception, but core workflows are well covered.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server to assist with JxBrowser development.
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
MCP server for Mint — AI-powered QA that runs your app in a real browser on every PR.
MCP Server for an Agent Task Marketplace
Related MCP Servers
- AlicenseBqualityAmaintenanceCloakBrowser MCP server for AI agents: Playwright-powered browsing, clean tool forwarding, Docker support, and multi-session HTTP transport.2537556MIT
- AlicenseAqualityBmaintenanceMCP server for browser automation with anti-detection. Scout pages, find elements, interact with websites, and monitor network traffic from any AI client that supports the Model Context Protocol.211MIT
- AlicenseAqualityDmaintenanceWraps CloakBrowser, a stealth Chromium, as an MCP server for web retrieval with anti-detection features. Enables getting text, HTML, screenshots, and interactive actions via natural language.4MIT
- AlicenseAqualityFmaintenanceA stealth browser automation MCP server that wraps CloakBrowser's patched Chromium to bypass bot detection, providing 22 tools for web navigation, interaction, and session management.242MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/SJF-ECNU/CloakBrowserMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server