Skip to main content
Glama

abrasio-mcp

MCP server that exposes Abrasio as an agentic browser for AI models.

Allows Claude, Cursor, and any MCP-compatible AI to control a real web browser with full anti-detection fingerprinting — the same stealth infrastructure used for web scraping, now driven by AI.


How it works

AI Model (Claude, Cursor, etc.)
    │  MCP tool calls
    ▼
abrasio-mcp server
    │  Abrasio SDK
    ▼
Patchright (undetected Playwright fork)
    │  CDP WebSocket
    ▼
Chrome (local stealth)  OR  Abrasio cloud worker (fingerprinted, residential IP)

The MCP server holds a single persistent browser session. The AI calls tools to navigate, observe, and interact — no configuration needed between steps.


Related MCP server: Scout

Installation

pip install abrasio-mcp

Or install from source:

cd abrasio-mcp
pip install -e .

Modes

Local mode (free)

No API key required. Launches Chrome on your machine with Patchright stealth patches.

abrasio-mcp

Best for: development, testing, scraping sites that don't require real residential IPs.

Cloud mode (paid)

Requires an Abrasio API key. The browser runs on Abrasio cloud infrastructure with:

  • Real collected browser fingerprints (not spoofed)

  • Residential or datacenter IP in the target region

  • Persistent profiles that accumulate browser history

ABRASIO_API_KEY=sk_live_xxx abrasio-mcp

Best for: production agents, geo-targeted tasks, heavily protected sites.


Configuration

All configuration is done via environment variables. No config files required.

Variable

Default

Description

ABRASIO_API_KEY

(none)

Cloud API key. If set, enables cloud mode. If unset, uses local mode.

ABRASIO_HEADLESS

true

Run browser headless. Set false to see the browser window (local mode only).

ABRASIO_REGION

(none)

Target region for geo-configuration, e.g. BR, US, DE. Configures locale and timezone automatically.

ABRASIO_HUMANIZE

false

Set true to enable human-like interaction timing on all actions (slower but more realistic).

ABRASIO_TRANSPORT

stdio

MCP transport: stdio for local clients, streamable-http for remote/production.

ABRASIO_HOST

127.0.0.1

Bind host when using streamable-http transport.

ABRASIO_PORT

8931

Bind port when using streamable-http transport.


Integrations

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "abrasio": {
      "command": "abrasio-mcp",
      "env": {
        "ABRASIO_API_KEY": "sk_live_xxx",
        "ABRASIO_REGION": "BR"
      }
    }
  }
}

For local mode (no API key):

{
  "mcpServers": {
    "abrasio": {
      "command": "abrasio-mcp",
      "env": {
        "ABRASIO_HEADLESS": "false"
      }
    }
  }
}

Claude Code

claude mcp add abrasio -- abrasio-mcp

With environment variables:

claude mcp add abrasio -e ABRASIO_API_KEY=sk_live_xxx -e ABRASIO_REGION=BR -- abrasio-mcp

Cursor

Add to .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "abrasio": {
      "command": "abrasio-mcp",
      "env": {
        "ABRASIO_API_KEY": "sk_live_xxx"
      }
    }
  }
}

Streamable HTTP (production / remote)

Start the server:

ABRASIO_TRANSPORT=streamable-http \
ABRASIO_HOST=0.0.0.0 \
ABRASIO_PORT=8931 \
ABRASIO_API_KEY=sk_live_xxx \
abrasio-mcp

Configure the client to connect to http://your-server:8931/mcp.


Tools reference

The MCP server exposes 15 tools, organized in four groups.


Navigation

browser_navigate

Navigate to a URL and wait for the page to load.

Parameter

Type

Description

url

string

Full URL including scheme, e.g. https://example.com

Returns: JSON object with url (final URL after redirects), title, and status (HTTP status code).

{ "url": "https://example.com/home", "title": "Home — Example", "status": 200 }

browser_go_back

Go back to the previous page in browser history.

Returns: JSON object with url and title of the page navigated to.


browser_go_forward

Go forward to the next page in browser history.

Returns: JSON object with url and title.


browser_reload

Reload the current page.

Returns: JSON object with url and title.


browser_get_url

Get the current page URL.

Returns: String with the current URL.


Observation

browser_screenshot

Take a screenshot of the current page.

Returns: PNG image. Claude can see this image and use it to understand the visual state of the browser before deciding what to interact with.

Use this at the start of a task and after each major interaction to confirm the expected result.


browser_get_text

Extract all visible text from the current page body.

Returns: Plain text string. Useful for reading articles, prices, search results, or any text-based content without parsing HTML.


browser_get_html

Get the inner HTML of an element.

Parameter

Type

Default

Description

selector

string

body

CSS selector for the target element

Returns: HTML string of the matched element.


browser_find_elements

Find all interactive elements on the page.

Returns: JSON array. Each item represents a clickable, fillable, or otherwise interactive element:

[
  {
    "tag": "button",
    "type": "submit",
    "text": "Sign in",
    "href": null,
    "selector": "button.login-btn",
    "x": 720,
    "y": 412,
    "visible": true
  },
  {
    "tag": "input",
    "type": "email",
    "text": "",
    "href": null,
    "selector": "input[name=\"email\"]",
    "x": 720,
    "y": 340,
    "visible": true
  }
]

Field

Description

tag

HTML tag name

type

Input type (text, email, submit, etc.) or null

text

Visible text, value, placeholder, or aria-label (up to 120 chars)

href

Link URL for anchor elements

selector

CSS selector hint — use this with browser_click and browser_fill

x, y

Center coordinates in the viewport

visible

Whether the element is within the current viewport

Call browser_find_elements before interacting to get the correct selector for browser_click and browser_fill.


browser_wait_for

Wait for an element to appear in the DOM.

Parameter

Type

Default

Description

selector

string

(required)

CSS selector to wait for

timeout

integer

10000

Maximum wait time in milliseconds

Returns: JSON object with found: true, the selector, and the element's text content.

Use this after triggering actions that cause loading states (form submissions, route changes, AJAX updates).


Interaction

All interaction tools use the Abrasio human simulation layer:

  • Clicks use WindMouse — a physics-based cursor movement algorithm that mimics real hand movement with gravity, wind perturbations, and velocity management.

  • Typing uses character-level timing with realistic delays, burst typing, and occasional typos followed by backspace correction.

  • Scrolling uses a 3-phase easing curve (acceleration → constant → deceleration).


browser_click

Click an element by CSS selector.

Parameter

Type

Description

selector

string

CSS selector for the element to click

Returns: Confirmation string.

Clicked: button#submit

browser_fill

Click a form input and fill it with text.

Parameter

Type

Description

selector

string

CSS selector for the input element

text

string

Value to type into the field

Clears any existing value, clicks the field, then types with human-like timing.

Returns: Confirmation string with character count.

Prefer browser_fill over browser_type when targeting a specific input. Use browser_type only when the input is already focused.


browser_type

Type text at the current cursor position.

Parameter

Type

Description

text

string

Text to type

Types into whichever element currently has focus. Useful for keyboard shortcuts, search boxes that open on click, or multi-step typing flows.

Returns: Confirmation string with character count.


browser_scroll

Scroll the page vertically.

Parameter

Type

Default

Description

pixels

integer

800

Pixels to scroll. Positive = down, negative = up.

Returns: Confirmation string indicating direction and distance.


browser_hover

Move the mouse over an element without clicking.

Parameter

Type

Description

selector

string

CSS selector for the element to hover

Uses WindMouse movement to reach the element. Useful for revealing dropdown menus, tooltips, or hover-triggered UI elements.

Returns: Confirmation string.


browser_press

Press a keyboard key or key combination.

Parameter

Type

Description

key

string

Key name or combination

Common values:

Key string

Action

Enter

Submit form / confirm

Tab

Move focus to next field

Escape

Close modal / cancel

ArrowDown / ArrowUp

Navigate dropdowns

Control+a

Select all

Control+c

Copy

Meta+Return

Submit (macOS)

Returns: Confirmation string.


Evaluation

browser_evaluate

Execute JavaScript in the current page context.

Parameter

Type

Description

script

string

JavaScript expression or function

The script can be a simple expression or a function that returns a value:

// Expression
document.title

// Arrow function
() => document.querySelectorAll('h2').length

// Function with logic
() => {
  const el = document.querySelector('#price');
  return el ? el.innerText.trim() : null;
}

// Read localStorage
() => ({ token: localStorage.getItem('auth_token') })

Returns: JSON-serialized result of the script execution.

Use this for data extraction that browser_get_text and browser_get_html cannot handle — structured data, counts, computed values, or interacting with the page's JavaScript environment.


Patterns and best practices

Starting a task

Always begin with a screenshot to understand the current state:

1. browser_navigate("https://target.com")
2. browser_screenshot()           ← see what loaded
3. browser_find_elements()        ← discover available interactions

Filling a login form

1. browser_navigate("https://site.com/login")
2. browser_screenshot()
3. browser_find_elements()        ← get selectors for email/password fields
4. browser_fill("input[name='email']", "user@example.com")
5. browser_fill("input[name='password']", "secret")
6. browser_click("button[type='submit']")
7. browser_wait_for(".dashboard")  ← wait for redirect
8. browser_screenshot()            ← confirm login succeeded

Handling dynamic content

1. browser_click(".load-more-btn")
2. browser_wait_for(".new-items-loaded")   ← wait for content
3. browser_get_text()                      ← extract updated content

Extracting structured data

1. browser_navigate("https://shop.com/product/123")
2. browser_evaluate("() => ({ name: document.querySelector('h1').innerText, price: document.querySelector('.price').innerText })")

Navigating paginated results

1. browser_navigate("https://site.com/results?page=1")
2. browser_get_text()
3. browser_click("a[aria-label='Next page']")
4. browser_wait_for(".results")
5. browser_get_text()

Architecture

abrasio-mcp/
├── pyproject.toml
└── abrasio_mcp/
    ├── __init__.py
    ├── server.py          # FastMCP server, tool registration, entry point
    ├── browser.py         # AbrasioBrowserAgent — wraps Abrasio SDK + Page
    └── tools/
        ├── __init__.py
        ├── navigate.py    # browser_navigate, go_back, go_forward, reload, get_url
        ├── observe.py     # browser_screenshot, get_text, get_html, find_elements, wait_for
        ├── interact.py    # browser_click, fill, type, scroll, hover, press
        └── evaluate.py    # browser_evaluate

Session lifecycle

The browser session is lazy-started: the MCP server process starts immediately, and the browser only opens when the first tool is called. The session persists for the lifetime of the server process — navigation history, cookies, and localStorage are preserved across all tool calls.

On SIGTERM or SIGINT, the server calls Abrasio.close() which signals the worker to stop (in cloud mode) before dropping the CDP connection, ensuring proper billing finalization.

Browser agent (browser.py)

AbrasioBrowserAgent wraps Abrasio (the SDK's unified class) and holds a single Page object. All tools delegate to this agent. The asyncio.Lock on ensure_started prevents concurrent initialization if two tools are called in rapid succession before the browser is ready.

All interaction methods use the human/actions.py primitives from the Abrasio SDK directly — no custom mouse or keyboard simulation is implemented in abrasio-mcp.


Requirements

  • Python 3.10+

  • mcp >= 1.0.0

  • abrasio >= 0.1.2 (installs patchright automatically)

  • For cloud mode: an Abrasio API key (sk_live_...)


License

MIT — Scrape Technology

Available Tools

17 tools
browser_clickA

Click an element using a CSS selector. Uses human-like WindMouse movement and realistic click timing. Examples: 'button#submit', '.login-btn', 'a[href="/checkout"]'

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description fully carries the burden of disclosing behavioral traits. It mentions human-like WindMouse movement and realistic click timing, which are useful for the agent.

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 with three sentences front-loading purpose, behavior, and examples. No redundant information.

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

Completeness4/5

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

For a simple tool with one parameter and an output schema, the description covers purpose, behavior, and examples. It does not explain return values, but the output schema likely addresses that.

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

Parameters3/5

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

The description provides CSS selector examples, adding meaning beyond the schema's type definition. However, it does not explain selector syntax or valid formats.

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 'Click an element using a CSS selector,' specifying the action and resource. It distinguishes from sibling tools like browser_hover and browser_fill.

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 provides examples but does not explicitly state when to use this tool over alternatives or exclude inappropriate contexts.

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

browser_evaluateA

Execute JavaScript in the current page context and return the result. The script should be a JS expression or a function body that returns a value. Examples:

  • 'document.title'

  • 'window.location.href'

  • '() => document.querySelectorAll("h2").length'

  • '() => { const el = document.querySelector("#price"); return el ? el.innerText : null; }' Returns the serialized result as JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptYes

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?

Without annotations, the description carries the full burden. It discloses that JavaScript is executed in the page context and returns JSON, and provides examples. It does not warn about security risks or limitations (e.g., cross-origin restrictions), but the core behavior is adequately described.

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 very concise: two sentences plus examples. It front-loads the purpose, then explains the parameter format, and ends with output type. Every sentence earns its place without redundancy.

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

Completeness4/5

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

Given the single parameter and output schema existence, the description is mostly complete. It explains input (script type) and output (JSON). It lacks mention of error handling (e.g., script syntax errors or exceptions), but the output schema likely covers return types.

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 only defines 'script' as a string with no description. The description adds significant value by explaining it must be a JS expression or function body returning a value, and provides clear examples. This fully 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 verb 'Execute JavaScript', the resource 'current page context', and the outcome 'return the result'. It distinguishes itself from sibling tools (e.g., click, navigate) by focusing on arbitrary script execution.

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 does not explicitly state when to use this tool versus alternatives. While the nature of JavaScript execution implies custom logic, no guidance is given on when not to use it (e.g., for simple selection which other tools handle). Implicit understanding is reasonable but not stated.

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

browser_fillA

Click a form field and fill it with text using human-like typing. Clears any existing value, then types with realistic delays and occasional typos. selector: CSS selector for the input element. text: the value to type.

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYes
textYes

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 full burden. It discloses that it clears existing values, types with realistic delays and occasional typos, but does not mention waiting for element visibility or error handling, which are relevant for a form fill 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 three sentences, front-loading the main action and explaining parameters without wasted words, achieving a high level of conciseness.

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 presence of an output schema, the description doesn't need to explain return values. However, it omits prerequisites like element visibility or error scenarios, which would make it more complete for a complex tool like form filling.

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%, so the description adds meaning beyond the schema by explicitly stating that 'selector' is a CSS selector and 'text' is the value to type, providing necessary context for the agent.

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 clicks a form field and fills it with text using human-like typing, distinguishing it from siblings like browser_type by noting it clears existing values and uses realistic delays and occasional typos.

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 implies usage for filling form fields with human-like behavior, but does not explicitly state when not to use it or contrast with alternatives like browser_type, though the context of sibling tools provides some guidance.

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

browser_find_elementsA

Find all interactive elements on the page (links, buttons, inputs, etc.). Returns a JSON list with each element's tag, text, type, href, selector hint, center coordinates (x, y), and whether it's visible in the viewport. Use this to discover what you can click or fill before interacting.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It mentions returning data and checking visibility, but does not explicitly state that the tool is read-only and has no side effects. This leaves some ambiguity for the agent.

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 concise sentences, front-loaded with the core action. Every word adds value without redundancy.

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

Completeness4/5

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

For a no-parameter tool, the description covers purpose, output format, and usage hint. However, it could more precisely define what counts as 'interactive elements' (e.g., buttons, links, inputs) and note any limitations (e.g., only visible elements).

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 baseline is 4. The description does not need to add parameter information, and it correctly clarifies the output format beyond the input 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 finds all interactive elements on the page and lists what it returns. It distinguishes from sibling tools like browser_click and browser_fill.

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 tells when to use it: 'Use this to discover what you can click or fill before interacting.' This provides clear context, though it doesn't mention when not to use it or alternative tools.

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

browser_get_htmlA

Get the inner HTML of an element. Defaults to the full page body. Use a CSS selector to target a specific element (e.g. '#main', '.content').

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorNobody

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description carries burden. Describes read operation but does not disclose error handling or behavior when element not found.

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

Conciseness5/5

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

Two concise sentences with no extraneous information. Front-loaded with purpose.

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?

Adequate for a simple getter with output schema available. Lacks mention of return format or error cases, but overall sufficient.

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?

Single parameter 'selector' has no schema description. Description adds usage examples ('#main', '.content') and clarifies default, compensating for schema 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?

Clearly states verb 'Get', resource 'inner HTML', and defaults to full page body. Distinguishes from siblings like browser_get_text and browser_get_url.

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?

Provides example CSS selectors and notes default behavior. Lacks explicit when-not-to-use or alternatives, but context is clear.

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

browser_get_textA

Extract all visible text from the current page body. Useful for reading content, prices, articles, or any text-based information.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. States 'visible text', implying non-hidden content, but lacks details on character limits, formatting, or behavior with dynamic content.

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

Conciseness5/5

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

Two concise sentences, front-loaded with core action. Every phrase adds value with no 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?

Adequate for a simple read tool with an output schema (not shown). Covers purpose and typical use, though no error handling or restrictions mentioned.

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?

No parameters; schema is fully described (100% coverage). Description adds no param info, but baseline is 4 for zero parameters.

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

Purpose5/5

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

Clearly states 'Extract all visible text from the current page body', providing a specific verb and resource. Distinguishes well from siblings like browser_get_html (HTML source) and browser_screenshot (image).

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?

Includes use cases like reading content, prices, articles. Does not explicitly state when not to use, but context is sufficient given sibling diversity.

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

browser_get_urlA

Return the current page URL.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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?

No annotations are provided, but the description accurately reflects a read-only operation with no destructive or side effects. For a simple getter, this is adequate.

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

Conciseness5/5

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

The description is a single sentence with no extraneous words. It is perfectly concise and 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 simplicity of the tool (no parameters, no annotations needed, output schema exists), the description is complete and sufficient for correct usage.

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 no parameters, so the baseline score of 4 is applied. The description adds no parameter-specific information, which is unnecessary.

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 'Return the current page URL' uses a specific verb ('Return') and resource ('current page URL'), clearly distinguishing it from sibling tools like 'browser_get_html' or 'browser_get_text'.

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

Usage Guidelines4/5

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

The description implicitly states when to use this tool (to get the current URL). No explicit exclusions or alternatives are given, but for a simple getter, the context is clear.

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

browser_go_backA

Go back to the previous page in browser history.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It lacks important details such as behavior when there is no previous page, effects on scroll position, or error handling.

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

Conciseness5/5

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

Single, front-loaded sentence with zero waste. Every word earns its place.

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

Completeness3/5

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

For a simple tool with no parameters and an output schema, description is adequate but lacks edge case behavior (e.g., empty history). Could be more complete.

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?

No parameters exist, and schema coverage is 100% (vacuous). Description adds no parameter info, but none is needed.

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

Purpose5/5

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

Description clearly states the verb 'Go back' and the resource 'previous page in browser history'. It effectively distinguishes from siblings like browser_go_forward and browser_navigate.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives like browser_go_forward or browser_navigate. Usage is implied but not clarified.

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

browser_go_forwardA

Go forward to the next page in browser history.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 are provided, so the description carries full responsibility for behavioral disclosure. It states the basic action but does not cover edge cases such as what happens if there is no forward history (e.g., does nothing or errors), nor does it mention any side effects. For a zero-parameter tool, this is minimally sufficient 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 a single succinct sentence of 8 words, front-loading the action and resource. Every word contributes meaning, and no unnecessary information is present.

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 (no parameters, output schema exists), the description adequately conveys the core function. However, it could be more complete by mentioning that the operation requires a browser context and that nothing happens if there is no forward history. Still, it is largely sufficient.

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 no parameters, and the input schema is empty with 100% coverage. The description does not need to add parameter detail. Baseline for zero parameters is 4, and the description meets that.

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: 'Go forward to the next page in browser history.' It uses a specific verb ('go forward') and resource ('browser history'), and the distinction from the sibling tool 'browser_go_back' is evident from the name and description.

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 when wanting to navigate forward, but it does not explicitly specify when to use this tool versus alternatives like 'browser_go_back' or conditions when it should not be used (e.g., when no forward history exists).

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

browser_hoverA

Move the mouse over an element using human-like WindMouse movement. Useful for triggering dropdown menus or tooltips before clicking. selector: CSS selector for the target element.

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYes

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?

It discloses human-like WindMouse movement, adding behavioral context beyond the schema. However, it does not mention potential side effects, prerequisites (e.g., element visibility), 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.

Conciseness5/5

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

The description is concise, using three short sentences. It front-loads the action and includes the parameter explanation efficiently without wasted words.

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

Completeness4/5

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

Given a single parameter, no annotations, and an existing output schema, the description covers purpose, usage context, and parameter semantics adequately. It could be slightly more complete with error or timing details, but it is sufficient.

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 explicitly explains the only parameter 'selector' as a CSS selector for the target element, providing meaning absent from the schema (0% 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 it moves the mouse over an element using human-like movement, and distinguishes from siblings like browser_click by specifying its purpose (hovering).

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?

It mentions it is useful for triggering dropdowns or tooltips before clicking, giving a specific use case, but does not explicitly state when not to use or list alternatives.

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

browser_navigateA

Navigate to a URL and wait for the page to load. Returns the final URL, page title, and HTTP status code.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description adequately covers the return values and the wait-for-page-load behavior. However, it omits details about potential redirects, timeouts, error handling, or what happens if the page fails to load, which leaves gaps in transparency.

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 very concise, consisting of two short sentences that convey the essential information without any extraneous words or repetition.

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

Completeness4/5

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

Given the simplicity of the tool and that an output schema exists (mentioned in context), the description covers the main action and return values. It could be slightly more complete by mentioning error scenarios or page load behavior, but it is largely adequate.

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

Parameters3/5

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

The only parameter 'url' is self-explanatory from the tool name and input schema. Schema description coverage is 0%, but the description does not add any additional meaning or constraints beyond what is obvious. A baseline of 3 is appropriate as no extra value is provided.

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

Purpose5/5

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

The description clearly states the action ('navigate to a URL'), the resource ('a URL'), and what is returned ('final URL, page title, and HTTP status code'). It effectively distinguishes from sibling tools like browser_click or browser_go_back by specifying the core navigation function.

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 such as browser_go_back or browser_go_forward. The description lacks context about prerequisites or conditions that might warrant using this tool over others.

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

browser_pressA

Press a keyboard key or key combination. Examples: 'Enter', 'Tab', 'Escape', 'ArrowDown', 'Control+a', 'Meta+Return'.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations, the description should disclose behaviors such as whether the browser must be focused, if key combinations work globally, or if there are side effects. It only gives examples, omitting details like handling of modifiers or system-level key press limitations.

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 two sentences and a list of examples. Every word is useful, and the structure is clear.

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 a single parameter and an output schema (not shown), the description is largely sufficient for the tool's simplicity. It could mention that it simulates a keyboard press in the active browser context, but the examples cover usage scenarios.

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?

Although schema coverage is 0%, the description provides concrete examples for the 'key' parameter (e.g., 'Enter', 'Control+a'), adding meaning beyond a plain string type. This helps the agent understand valid formats, though more comprehensive documentation would be needed.

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

Purpose5/5

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

The description clearly states 'Press a keyboard key or key combination' and provides specific examples like 'Enter', 'Tab', 'Control+a'. It effectively distinguishes from sibling tools such as browser_click (mouse) and browser_type (text input).

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 like browser_type or browser_fill. Sibling tools exist for keyboard actions, but the description does not specify contexts where press is appropriate (e.g., pressing Tab to navigate) 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.

browser_reloadB

Reload the current page.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior1/5

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

With no annotations, the description must disclose behavioral traits like page state changes or wait behavior, but it only repeats the tool name without adding context.

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 (4 words) and front-loaded, with zero wasted words.

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?

Despite having no parameters, the tool lacks an output schema and annotations; the description fails to specify whether reload waits for completion or returns a result, leaving gaps.

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?

There are no parameters, so per the rule baseline 4 is appropriate; the description adds no parameter info, but none is needed.

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

Purpose5/5

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

The description 'Reload the current page' uses a specific verb (reload) and resource (current page), clearly distinguishing it from siblings like browser_navigate or 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.

Usage Guidelines2/5

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, nor any context for 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.

browser_screenshotA

Take a screenshot of the current page. Returns a PNG image. Use this to visually understand the current state of the browser before deciding what to interact with.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It correctly states the output (PNG image) but does not mention viewport boundaries, potential scroll behavior, or any side effects. For a read-only capture tool, this is adequate but not detailed.

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

Conciseness5/5

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

Two concise sentences: the first states the action and output, the second provides usage context. Every word contributes value with no redundancy.

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

Completeness4/5

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

Given no parameters, no output schema, and no annotations, the description covers the essential aspects: purpose, output format, and usage context. It could mention that it captures the visible viewport, but overall it is complete for its 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?

The tool has zero parameters, and schema coverage is 100%. According to guidelines, baseline is 4 when no parameters exist. The description adds no parameter info (none needed), so the score is appropriate.

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 ('Take a screenshot'), the resource ('current page'), and the output ('Returns a PNG image'). It distinguishes from siblings by emphasizing visual understanding of browser state, which is unique among browser tools.

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

Usage Guidelines4/5

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

The description explicitly advises using the tool 'to visually understand the current state of the browser before deciding what to interact with,' providing clear context for when to employ it. While it doesn't specify when not to use it, the purpose is well-defined.

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

browser_scrollA

Scroll the page vertically with human-like easing. pixels: positive = scroll down, negative = scroll up (default: 800).

ParametersJSON Schema
NameRequiredDescriptionDefault
pixelsNo

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?

Describes human-like easing and pixel sign/direction. Adds behavioral context beyond the bare schema, especially with no annotations provided.

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

Conciseness5/5

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

Two lines: first sentence states behavior, second explains parameter. No filler, front-loaded key info.

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 tool with one parameter and no required params, the description covers everything needed: what it does, how to use the parameter, and behavioral traits.

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 fully explains the pixel parameter: positive scrolls down, negative scrolls up, with a default of 800. This compensates for 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 scrolls the page vertically with human-like easing, distinguishing it from sibling tools like browser_click, browser_navigate, etc.

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

Usage Guidelines4/5

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

Usage is clear: it scrolls vertically with pixel parameter. No explicit when-not or alternatives, but context implies it's the only scrolling tool among siblings.

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

browser_typeA

Type text at the current cursor position (no element targeting). Use this after clicking an input to type into it, or to send keyboard input to the focused element. Uses human-like timing and occasional typos.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes

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 are provided, so the description must carry the full behavioral burden. It adds useful traits: 'Uses human-like timing and occasional typos' and 'no element targeting'. However, it does not disclose potential failure modes (e.g., if no element is focused) or detailed 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?

Extremely concise: two sentences with no redundancy. The first sentence front-loads the core purpose, and every word adds value.

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 tool with one parameter and an output schema (not detailed here), the description is largely complete. It covers purpose, usage context, and a behavioral trait. Minor gap: no mention of what happens if no element is focused.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for the single 'text' parameter. The description implies text is the string to type, but adds no format, length, or encoding constraints beyond the schema.

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

Purpose5/5

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

The description clearly states 'Type text at the current cursor position (no element targeting)', using a specific verb and resource. It effectively distinguishes the tool from siblings like browser_fill (which targets an element) and browser_press (key presses).

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?

Provides clear context: 'Use this after clicking an input to type into it, or to send keyboard input to the focused element.' This gives appropriate usage guidance, but does not explicitly contrast with alternatives like browser_fill or browser_press, which would enhance differentiation.

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

browser_wait_forA

Wait for an element matching the CSS selector to appear in the DOM. Useful after triggering an action that causes a loading state. timeout: max milliseconds to wait (default 10000). Returns the element's text content when found.

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYes
timeoutNo

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. It discloses waiting behavior, timeout default, and return of text content. However, it does not specify behavior on timeout (e.g., throws error vs. returns null) or if the element must be visible (vs. just in DOM).

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

Conciseness4/5

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

Three sentences covering purpose, usage tip, and parameter details. Front-loaded with the main action, no unnecessary words. Could be slightly improved by structuring parameter info more clearly.

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

Completeness3/5

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

For a 2-parameter tool with no annotations but an output schema, the description covers the core functionality and return value. However, it lacks details on error states, visibility checks, and interaction with other browser tools, which could be helpful given the sibling context.

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

Parameters3/5

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

Schema coverage is 0%, so description must compensate. It explains 'timeout' as max milliseconds and default 10000, and implies 'selector' is a CSS selector. However, it adds limited detail beyond parameter names, leaving some ambiguity (e.g., no mention of format for selector).

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 ('wait for') and the resource ('element matching the CSS selector to appear'). It distinguishes from sibling tools like browser_find_elements by focusing on waiting for appearance, which is a unique 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?

Explicitly states when to use: 'Useful after triggering an action that causes a loading state.' This provides clear context, though no direct exclusions or alternative tools are mentioned.

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

TDQS

A4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: navigation, clicking, typing, scrolling, etc. No two tools overlap in function.

Naming Consistency5/5

All tools follow a consistent 'browser_' prefix with snake_case verbs, making the naming predictable and easy to understand.

Tool Count5/5

17 tools cover the full range of browser automation actions without being excessive. Each tool serves a necessary purpose.

Completeness4/5

Core browser interactions are well-covered (navigation, click, type, scroll, screenshot, etc.). Minor gaps exist for file uploads and dialog handling, but the set is largely complete.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Browser MCP server that connects to your existing browser, preserving sessions, passwords, and extensions, enabling AI agents to interact with web pages without bot detection.
    31
    12
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that enables AI tools to control local browser sessions for ChatGPT, Claude, and other AI services, supporting querying, navigation, file uploads, and artifact management.
    44
    546
    Mozilla Public 2.0
  • A
    license
    A
    quality
    B
    maintenance
    MCP 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.
    21
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Scrape-Technology/abrasio-mcp'

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