Skip to main content
Glama
brightdata

Bright Data MCP

Official
by brightdata

Overview

The Bright Data MCP server gives AI agents real-time access to public web data. It exposes 32 tools covering:

  • Web search — Google, Bing, and Yandex results as structured data

  • Page scraping — any URL as Markdown or HTML, with bot detection, CAPTCHA solving, and proxy rotation handled automatically on every request

  • Structured data (Web Scraper API) — clean JSON from 1,200+ pre-built scrapers: Amazon, LinkedIn, Instagram, TikTok, YouTube, X, Reddit, Facebook, Crunchbase, Zillow, npm, PyPI and more, without parsing HTML. Six tools find and run any of them

  • Browser automation — navigate, click, type, screenshot, and read pages in a remote browser session

  • LLM response collection — send prompts to ChatGPT and Perplexity and get their answers back as structured data

Every request is routed through Bright Data's unblocking infrastructure, so pages that block ordinary HTTP clients (bot detection, CAPTCHAs, rate limits, geo-restrictions) return normally. No proxy setup, no headless browser maintenance, no retry logic to write.

Two deployment options: a hosted remote server (one URL, no installation) or a local instance via npx @brightdata/mcp.


Related MCP server: MCP Fetch

Quick Start

Hosted server — no installation. Add this URL to your MCP client:

https://mcp.brightdata.com/mcp?token=YOUR_API_TOKEN_HERE

Get your API token from your Bright Data account settings. New accounts get 5,000 free requests per month.

Optional URL parameters:

Parameter

Description

Example

groups=<ids>

Limit to specific tool groups (default: all tools)

...&groups=scrapers,browser

tools=<names>

Limit to specific tools

...&tools=search_engine,scrape_as_markdown

  1. Go to: Settings → Connectors → Add custom connector

  2. Name: Bright Data

  3. URL: https://mcp.brightdata.com/mcp?token=YOUR_API_TOKEN

  4. Click "Add"

Or run locally:

{
  "mcpServers": {
    "Bright Data": {
      "command": "npx",
      "args": ["@brightdata/mcp"],
      "env": {
        "API_TOKEN": "<your-api-token-here>"
      }
    }
  }
}
claude mcp add --transport http brightdata "https://mcp.brightdata.com/mcp?token=YOUR_API_TOKEN"

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "brightdata": {
      "url": "https://mcp.brightdata.com/mcp?token=YOUR_API_TOKEN"
    }
  }
}

Add to .vscode/mcp.json:

{
  "servers": {
    "brightdata": {
      "type": "http",
      "url": "https://mcp.brightdata.com/mcp?token=YOUR_API_TOKEN"
    }
  }
}

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "brightdata": {
      "serverUrl": "https://mcp.brightdata.com/mcp?token=YOUR_API_TOKEN"
    }
  }
}

Add to ~/.gemini/settings.json:

{
  "mcpServers": {
    "brightdata": {
      "httpUrl": "https://mcp.brightdata.com/mcp?token=YOUR_API_TOKEN"
    }
  }
}

Add to your Zed settings:

{
  "context_servers": {
    "brightdata": {
      "url": "https://mcp.brightdata.com/mcp?token=YOUR_API_TOKEN"
    }
  }
}

Go to Settings > MCP Servers > Add MCP Server and add:

{
  "brightdata": {
    "url": "https://mcp.brightdata.com/mcp?token=YOUR_API_TOKEN"
  }
}

For any client that supports local MCP servers:

{
  "mcpServers": {
    "Bright Data": {
      "command": "npx",
      "args": ["@brightdata/mcp"],
      "env": {
        "API_TOKEN": "<your-api-token-here>"
      }
    }
  }
}

Pricing and Free Tier

Every account includes a recurring monthly free tier. No credit card or commitment required to start.

5,000 free requests per month, renewing on the 1st of each month. Unused requests don't roll over. For team accounts, the free tier is shared across all users in the account.

What's included free:

  • Fetch any webpage and extract as Markdown

  • Access to 60+ pre-built scrapers for popular domains

  • Web search (Google, Bing, Yandex)

  • Web unlocking (bot detection bypass, CAPTCHA solving, proxy rotation)

  • Browser automation

  • Geo-targeting

Beyond the free tier — pay as you go, no commitment:

Search, Scrape & Extract

Browser Navigation

Pay as you go

$1.50 / 1K results

$8 / GB

  • When free requests run out, requests stop. No surprise charges — unless you have deposited funds

  • Adding a credit card is a verification step only; you are not charged unless your free tier is exhausted and you have funds deposited

  • Set a spend cap in the control panel so pay-as-you-go usage never exceeds your budget

Full pricing, volume plans and enterprise →


Use Cases

Real-time research

Answer questions using live web data instead of training data. Search, then read the sources.

Task

Tools

Search the web for current information

search_engine, search_engine_batch

Read a specific page as clean Markdown

scrape_as_markdown, scrape_batch

Example prompts: "What's Tesla's current stock price?", "Get today's weather forecast for New York", "Find the most cited sources on EU AI regulation from the last 6 months".

E-commerce intelligence

Read product data as structured JSON: price, availability, rating, review count, seller, images.

Task

Tools

Products, reviews and search results from Amazon, Walmart, eBay, Best Buy, Etsy, Home Depot, Zara and other stores

search_scrapers → get_scraper_details → run_scraper

Cross-retailer price view

the same flow with the Google Shopping scraper

Example prompts: "Compare this laptop's price on Amazon vs Walmart vs Best Buy", "Get the rating and review count for ASIN B0D2Q9397Y", "Is this product in stock?".

Market and competitor analysis

Build competitor profiles from live data: funding, headcount, hiring, customer reviews, pricing pages.

Task

Tools

Company funding, size, employees, job postings (Crunchbase, ZoomInfo, LinkedIn)

search_scrapers → run_scraper

Customer sentiment (Google Maps, Facebook, app store reviews)

search_scrapers → run_scraper

Competitor pricing pages

scrape_as_markdown, scrape_batch

Market discovery

search_engine_batch

Example prompt: "Analyze Notion as a competitor: pricing, funding, hiring focus, and what customers complain about".

AI agents with reliable web access

Replace built-in fetch/search tools that get blocked on protected sites. Every request goes through unblocking infrastructure, so agents don't fail on bot detection, CAPTCHAs, or geo-restrictions.

Task

Tools

Drop-in replacement for built-in web search

search_engine

Drop-in replacement for built-in URL fetch

scrape_as_markdown

Parallel data collection (10 at a time)

search_engine_batch, scrape_batch

Interactive sites (login walls, infinite scroll, dynamic content)

scraping_browser_* (14 tools)

Structured JSON from any page, no schema needed

extract

Coding agents

Package registry data on demand — no scraping, no stale caches.

Task

Tools

npm and PyPI package version, README, metadata

run_scraper with the npmjs or pypi scraper (find them with search_scrapers)

Read files from GitHub repositories

run_scraper with the GitHub repository scraper

Example prompts: "What's the latest version of express on npm?", "Get the README for the langchain-brightdata PyPI package".

GEO and brand visibility

Send prompts to major LLMs and get their answers back as structured data. Measure how AI assistants describe your brand, which sources they cite, and what they recommend — the feedback loop for Generative Engine Optimization.

Task

Tools

ChatGPT answers with citations and recommendations

chatgpt_ai_insights

Perplexity answers with sources

perplexity_ai_insights

Example prompt: "Ask ChatGPT and Perplexity 'what is the best proxy provider' and compare how each one ranks us".

Social media monitoring

Structured data from every major platform: profiles, posts, comments, engagement metrics. Each platform has scrapers per data type (LinkedIn profiles, Instagram reels, TikTok comments, ...); find them with search_scrapers and run them with run_scraper.

Platform

Examples of scrapers

LinkedIn

person profiles, company profiles, job listings, posts, people search

Instagram

profiles, posts, reels, comments

TikTok

profiles, posts, shop, comments

Facebook

profiles, posts, marketplace listings, company reviews, events

YouTube

videos, channels, comments

X (Twitter)

posts, posts by profile

Reddit

posts, comments

Example prompt: "Get the last 10 posts from this TikTok profile and summarize the engagement".

Content creation and academic research

Gather source material from many pages at once, filtered by recency and relevance.

Task

Tools

Collect multiple sources in one call

scrape_batch (up to 10 URLs)

News and finance data

search_engine with news queries, run_scraper with the Yahoo Finance scraper


How It Compares

Capability

Bright Data MCP

Typical web MCP servers

Total tools

32

2–10

Platform-specific structured JSON extractors

1,200+ pre-built scrapers across e-commerce, social, business, finance, travel, app stores, through 6 tools

Rare; generic scraping only

Unblocking (bot detection bypass, CAPTCHA solving, proxy rotation)

Built into every request

Usually none; blocked on protected sites

Search engines

Google, Bing, Yandex

Usually one

Browser automation

14 tools, remote browser, no local setup

Limited or none

LLM response collection (ChatGPT, Perplexity)

Yes

Not offered

Package registry data (npm, PyPI)

Yes

Not offered

Batch operations

10 searches or 10 scrapes per call

Usually single-request only

Geo-targeting

Yes

Limited or none

Free tier

5,000 requests/month, browser automation included, no credit card

Varies; often rate-limited keyless access


Tool Selection: Groups

Tools are organized into groups so you only load what you need. Fewer tools means less context for your agent to process.

  • With no GROUPS or TOOLS, all 32 tools are enabled. Setting either one limits the server to those tools only

  • GROUPS enables tool bundles. Comma-separated: GROUPS="scrapers,browser" (local) or &groups=scrapers,browser (hosted URL)

  • TOOLS adds individual tools on top: TOOLS="extract,scrape_as_html". On its own, it enables only the tools you list

  • Every group also includes search_engine, scrape_as_markdown and ask_brightdata_assistant

  • Group ID custom is reserved; use TOOLS for individual picks

Group ID

Contents

Tool count

scrapers

Search and run any pre-built Web Scraper API scraper (Amazon, LinkedIn, TikTok, npm, ...)

6

browser

Remote browser automation

14

geo

ChatGPT and Perplexity response collection

2

advanced_scraping

Batch tools, HTML scraping, AI extraction, session stats

5

Older group IDs (ecommerce, social, business, finance, research, app_stores, travel, code) still work and enable the scrapers tools; social and business also add search_dataset and list_dataset_fields. Old web_data_* names in TOOLS enable the scrapers tools too.

Configuration examples

Local server with browser automation and AI extraction:

{
  "mcpServers": {
    "Bright Data": {
      "command": "npx",
      "args": ["@brightdata/mcp"],
      "env": {
        "API_TOKEN": "<your-api-token-here>",
        "GROUPS": "browser,advanced_scraping",
        "TOOLS": "extract"
      }
    }
  }
}

Coding agent setup (Claude Code / Cursor / Windsurf) — npm, PyPI and GitHub data through the pre-built scrapers:

{
  "mcpServers": {
    "Bright Data": {
      "command": "npx",
      "args": ["@brightdata/mcp"],
      "env": {
        "API_TOKEN": "<your-api-token-here>",
        "GROUPS": "scrapers"
      }
    }
  }
}

Tools Reference (32 Tools)

Which tool to use

  • Known URL, need the content: scrape_as_markdown. Multiple URLs (up to 10): scrape_batch

  • Need to find information: search_engine. Multiple queries (up to 10): search_engine_batch

  • Structured data from a known platform (Amazon, LinkedIn, TikTok, npm, PyPI, etc.): search_scrapers → get_scraper_details → run_scraper — returns clean JSON, faster and more reliable than scraping the same page

  • Structured JSON from a page no scraper covers: extract

  • Raw HTML: scrape_as_html

  • Page requires interaction (click, type, scroll, login): scraping_browser_* tools

  • How ChatGPT/Perplexity answer a prompt: chatgpt_ai_insights / perplexity_ai_insights

  • Question about Bright Data itself (products, zones, errors, setup): ask_brightdata_assistant

Notes on scraper runs:

  • Return structured JSON, billed per record returned

  • Records with an error field explain inputs that failed, e.g. a URL of the wrong type

  • Results can be large. Keep limit_per_input low for discover_by_* methods and run bulk collection in a subagent where your framework supports it, so records don't flood the main context window

  • If a run fails, scrape_as_markdown works on the same URL as a fallback

Tool

Description

Group

search_engine

Search Google, Bing, or Yandex. Google returns JSON (URL, title, description); Bing and Yandex return Markdown. Paginate with the cursor parameter

default / every group

search_engine_batch

Up to 10 search queries in one call

default / advanced_scraping

scrape_as_markdown

Any URL as Markdown. Bot protection and CAPTCHA handled automatically

default / every group

scrape_batch

Up to 10 URLs in one call; returns an array of URL/content pairs in Markdown

default / advanced_scraping

scrape_as_html

Any URL as raw HTML

default / advanced_scraping

extract

Scrape a page and convert it to structured JSON using AI, with an optional custom extraction prompt

default / advanced_scraping

session_stats

Tool usage counts for the current session

default / advanced_scraping

Search and run any of Bright Data's 1,200+ pre-built scrapers. The scraper list is loaded from docs.brightdata.com/scrapers.json and refreshed daily. Available on both the hosted and the local server. Enabled by default when no tools or groups are selected; otherwise add the scrapers group (&groups=scrapers on the hosted URL, GROUPS=scrapers locally).

Typical flow: search_scrapers → get_scraper_details → run_scraper. Runs are billed per record; discover_by_* methods collect up to limit_per_input records per input (default 10).

Tool

Description

Group

search_scrapers

Find scrapers by site or data type (e.g. "amazon reviews", "linkedin.com"). Returns dataset ID, name, domain and collection methods

default / scrapers

get_scraper_details

Description, input fields, example input and main output fields for one scraper method

default / scrapers

run_scraper

Run a scraper method. Waits up to 45 seconds; if still running, returns a snapshot_id to check later

default / scrapers

get_scraper_progress

Status of a run: starting, running, ready, failed or canceled

default / scrapers

get_scraper_results

Records of a finished run

default / scrapers

refresh_scrapers

Reload the scraper list now instead of waiting for the daily refresh

default / scrapers

Remote browser session. Typical sequence: navigate → snapshot → interact by ref → extract or screenshot.

Tool

Description

scraping_browser_navigate

Open or reuse a browser session and navigate to a URL

scraping_browser_go_back

Navigate back

scraping_browser_go_forward

Navigate forward

scraping_browser_snapshot

ARIA snapshot of the page listing interactive elements with refs. Required before ref-based actions

scraping_browser_click_ref

Click an element by ref from the latest snapshot

scraping_browser_type_ref

Type into an element by ref; optionally press Enter to submit

scraping_browser_fill_form

Fill several form fields by ref in one call

scraping_browser_screenshot

Screenshot of the current page; optional full_page

scraping_browser_get_text

Text content of the page body

scraping_browser_get_html

HTML of the current page

scraping_browser_scroll

Scroll to the bottom of the page

scraping_browser_scroll_to_ref

Scroll an element into view

scraping_browser_wait_for_ref

Wait for an element to become visible, with optional timeout

scraping_browser_network_requests

Network requests since page load: method, URL, status

Refs come from the latest snapshot. If the page changes after a click or navigation, take a new snapshot before the next ref-based action. For static pages, scrape_as_markdown is faster and cheaper than a browser session.

Tool

Input

Returns

chatgpt_ai_insights

Prompt

ChatGPT's answer as Markdown

perplexity_ai_insights

Prompt

Perplexity's answer as Markdown

Use for Generative Engine Optimization (tracking how LLMs describe your brand) and LLM-as-a-judge workflows.

Filter search over stored LinkedIn datasets; returns matching records at once, with no scraper run.

Tool

Description

Group

list_dataset_fields

Filterable fields of a dataset (name, type, description). Call before search_dataset

default / social, business

search_dataset

Records matching a filter, up to 10 per call, with a cursor for more

default / social, business

Tool

Description

Group

ask_brightdata_assistant

Ask Sophie, Bright Data's support assistant, about products, APIs, zones, errors or account setup. Pass the returned dialog_id to ask a follow-up in the same thread

default / every group

Full tool reference in the docs →


Agent Skills

Ready-to-use skills that teach your agent how to use this MCP server correctly. The full collection lives at github.com/brightdata/skills — 21 skills covering MCP orchestration, competitive intelligence, price comparison, brand listening, SEO audits, scraper building, RAG pipelines, and more.

Three of the highest-impact skills:

Skill

What it does

bright-data-mcp

Makes Bright Data MCP the default for all web data operations, replacing WebFetch, WebSearch, and other built-in web tools that fail on bot detection

competitive-intel

Competitor snapshots, pricing comparison, review mining, hiring signals, content/SEO analysis, and market landscape maps from live web data

price-comparison

Resolves a product across Amazon, Walmart, eBay, Best Buy, and Google Shopping and names the cheapest in-stock option

Browse all 21 skills →


Configuration

Basic setup (local)

{
  "mcpServers": {
    "Bright Data": {
      "command": "npx",
      "args": ["@brightdata/mcp"],
      "env": {
        "API_TOKEN": "your-token-here"
      }
    }
  }
}

Advanced configuration

{
  "mcpServers": {
    "Bright Data": {
      "command": "npx",
      "args": ["@brightdata/mcp"],
      "env": {
        "API_TOKEN": "your-token-here",
        "RATE_LIMIT": "100/1h",
        "WEB_UNLOCKER_ZONE": "custom",
        "BROWSER_ZONE": "custom_browser"
      }
    }
  }
}

Environment variables

Variable

Description

Default

Example

API_TOKEN

Your Bright Data API token (required)

-

your-token-here

RATE_LIMIT

Custom rate limiting

unlimited

100/1h, 50/30m

WEB_UNLOCKER_ZONE

Custom Web Unlocker zone name

mcp_unlocker

my_custom_zone

BROWSER_ZONE

Custom Browser zone name

mcp_browser

my_browser_zone

CONTENT_GATE

When page content returned by a data tool looks like instructions to change the MCP configuration, the server asks the user (via MCP elicitation) before returning it. Set to off to disable

on

off

CONTENT_GATE_TIMEOUT

Seconds to wait for the user's answer before withholding the content

120

60, 300

BROWSER_FILTERED_SNAPSHOT

scraping_browser_snapshot always lists only buttons, links and fields. Saves tokens, and stops page text posing as a clickable element (for sensitive tasks). If necessary, Page text can then be read with scraping_browser_get_text

off

on

BASE_TIMEOUT

Request timeout for base tools in seconds (search and scrape)

No limit

60, 120

BASE_MAX_RETRIES

Max retries for base tools on transient errors (0-3)

0

1, 3

GROUPS

Comma-separated tool group IDs. Limits the server to these groups

All tools

scrapers,browser

TOOLS

Comma-separated individual tool names. Limits the server to these tools

All tools

extract,scrape_as_html

Content gate

scrape_as_markdown, search_engine, extract and their batch variants return whatever a web page says. If that content contains text that reads like instructions to change your MCP configuration — register a server, run an npx -y package, edit the MCP config file — the server pauses and asks you, through your MCP client, before returning it. Approve and the content is returned unchanged; decline and it is withheld with a short explanation to the assistant. Pages that do not contain such text are returned exactly as before, with no prompt. For a batch call, only the matching items are withheld.

Pages that are about MCP configuration (documentation, READMEs) will naturally prompt. Clients that do not support MCP elicitation get the matching content withheld; set CONTENT_GATE=off if you accept the risk. While the server waits for your answer it reports progress; clients that do not extend their tool timeout on progress will cap the wait at their own limit — CONTENT_GATE_TIMEOUT is the knob on the server side. Browser tools are not covered.


Documentation


Troubleshooting

"spawn npx ENOENT" error

Install Node.js, or use the full path to node:

"command": "/usr/local/bin/node"  // macOS/Linux
"command": "C:\\Program Files\\nodejs\\node.exe"  // Windows

Timeouts on complex sites

Increase the timeout in your client settings to 180s.

Authentication issues

Verify your API token is valid and has the required permissions. Tokens are managed in account settings.

run_scraper returns errors or no data

Records with an error field explain inputs that failed. Compare your input with sample_input from get_scraper_details (e.g., Amazon product URLs contain /dp/, Walmart ones /ip/) and check the page is publicly accessible. scrape_as_markdown works on the same URL as a fallback.

Remote server connection fails

Check your internet connection and firewall settings.


Contributing

Please follow Bright Data's coding standards.


Support


License

MIT © Bright Data Ltd.

Available Tools

32 tools
ask_brightdata_assistantA
Read-only

Ask Bright Data's support assistant (Sophie) a question about Bright Data products, APIs, MCP usage, zones, scraping, or account setup. Use when the user asks "how do I..." about Bright Data, when you hit a Bright Data error you don't recognize, or when deciding between products (Web Unlocker vs. Scraping Browser vs. dataset tools). Supports threaded follow-ups via dialog_id.

NameRequiredDescriptionDefault
questionYesThe question to ask. Max 20480 chars.
dialog_idNoOptional 24-char dialog_id from a previous call to continue the same thread.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds useful behavioral context beyond that—the assistant is named Sophie and supports threaded follow-ups through dialog_id—but does not mention latency, reliability, or whether answers are authoritative, which would round out the picture.

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

Conciseness5/5

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

Two sentences, both front-loaded with the core purpose first and the usage triggers second. Every clause carries information—topic scope, trigger conditions, sibling disambiguation, and threading support—with no filler.

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

Completeness5/5

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

For a two-parameter, read-only tool with full schema coverage, no output schema, and annotations covering the safety profile, the description supplies everything needed: purpose, when to call, topic boundaries, and how to continue a conversation. Return-value explanation is unnecessary given the absence of an output schema.

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

Parameters4/5

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

With 100% schema coverage the baseline is 3, and the schema already documents both parameters including the 24-char constraint on dialog_id. The description adds meaningful semantics by explaining that dialog_id enables threaded follow-ups, clarifying its purpose beyond the schema's mechanical description.

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

Purpose5/5

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

The description states a specific verb and resource ('Ask Bright Data's support assistant (Sophie) a question') and names the topical scope: products, APIs, MCP usage, zones, scraping, account setup. It is clearly distinguishable from every sibling, which are scraping/execution tools rather than a knowledge assistant.

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

Usage Guidelines5/5

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

It gives explicit triggering conditions: user asks 'how do I...', an unrecognized Bright Data error occurs, or the agent must choose between products. It even names the specific alternatives being disambiguated (Web Unlocker vs. Scraping Browser vs. dataset tools), leaving little inference required.

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

chatgpt_ai_insightsB

Send a prompt to ChatGPT and get back AI-generated insights. Returns structured answer text, citations, recommendations, and markdown. Useful for GEO and LLM as a judge.

NameRequiredDescriptionDefault
promptYes

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already disclose openWorldHint=true, destructiveHint=false, and readOnlyHint=false, so the safety profile is partially covered. The description adds useful return information: structured answer text, citations, recommendations, and markdown. It does not explain data handling, rate limits, or why readOnlyHint is false for this external prompt call.

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

Conciseness5/5

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

The description is two sentences and front-loads the core action. The second sentence efficiently lists the return components, and there is no redundant filler.

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 one-parameter tool, the description explains what it does and what it returns, which is adequate. However, it leaves important gaps around sibling differentiation from perplexity_ai_insights and prompt formatting, and it does not clarify data handling for an open-world ChatGPT call.

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

Parameters2/5

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

There is one required parameter named 'prompt,' but schema description coverage is 0%. The description repeats the word 'prompt' without adding format, length, content expectations, or examples, so it does not compensate for the schema's lack of semantic detail.

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

Purpose4/5

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

The description states a specific action and resource: send a prompt to ChatGPT and receive AI-generated insights. It also lists return components, making the tool's function clear. However, it does not distinguish itself from the sibling tool perplexity_ai_insights, which appears to serve a similar purpose.

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 offers an implied use case with 'Useful for GEO and LLM as a judge,' but it does not explain when to use this tool instead of perplexity_ai_insights or ask_brightdata_assistant. It gives context but no explicit exclusions or alternatives.

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

extractA
Read-only

Scrape a webpage and extract structured data as JSON. First scrapes the page as markdown, then uses AI sampling to convert it to structured JSON format.

NameRequiredDescriptionDefault
urlYes
extraction_promptNoCustom prompt to guide the extraction process. If not provided, will extract general structured data from the page.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly=true, openWorld=true, destructive=false, so the safety profile is covered. The description adds real value by disclosing the two-stage pipeline (fetch markdown → AI sampling → JSON), but says nothing about latency, cost, failure modes on non-HTML pages, or whether results are deterministic.

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

Conciseness5/5

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

Two sentences, front-loaded with the outcome, then the mechanism. Every clause carries information an agent cannot get from the schema or annotations.

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

Completeness3/5

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

With no output schema, the description should indicate what the returned JSON looks like or that its shape depends on extraction_prompt and page content. The mechanism is explained, but the result contract an agent needs in order to plan a follow-up step is missing.

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

Parameters3/5

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

Schema coverage is 50%: extraction_prompt is documented in the schema, while url has no schema description. The description adds nothing about either parameter beyond implying 'a webpage' for url, so it neither reaches nor falls far short of the baseline.

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

Purpose4/5

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

States a specific verb+resource ('Scrape a webpage and extract structured data as JSON') and implicitly distinguishes itself from scrape_as_markdown by declaring that markdown is only an intermediate step, not the deliverable. The goal (structured JSON) is unambiguous, though it never names the alternative tools directly.

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?

Usage is only implied: an agent must infer it should pick this over scrape_as_markdown when structured fields are wanted and over search_engine when a URL is already known. There is no explicit when-to-use, when-not, or named alternative despite many closely related siblings.

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

get_scraper_detailsA
Read-only

Show the scraper description, input fields, example input and main output fields for one method. Call before run_scraper and build the input from sample_input or input_fields. Records may contain more fields than output_fields lists.

NameRequiredDescriptionDefault
methodYesOne of the scraper collection_methods, exactly as listed (some names are misspelled on purpose)
dataset_idYesdataset_id from search_scrapers

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish readOnly/non-destructive/closed-world, so the safety profile is covered. The description adds a genuinely useful caveat that returned records may contain more fields than output_fields lists, warning the agent not to treat output_fields as exhaustive. It stops short of noting pagination or size limits, but that is minor here.

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 tight sentences: the first states what is returned, the second states when to call and how to use the output. No filler, and the key usage instruction is 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?

There is no output schema, but the description compensates by enumerating the returned components (description, input fields, sample input, output fields) plus the caveat about additional record fields. An agent has everything needed to call it and consume the result correctly.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are documented there, including the dataset_id provenance and the 'misspelled on purpose' method warning. The description adds nothing about parameter meaning beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

Names a specific verb (show) and resource (details for one scraper method) and enumerates exactly what is returned: description, input fields, example input, and main output fields. It is clearly distinguishable from siblings like search_scrapers (discovery) and run_scraper (execution).

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

Usage Guidelines5/5

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

Gives explicit sequencing guidance ("Call before run_scraper") and tells the agent how to use the result ("build the input from sample_input or input_fields"). That is a concrete when-to-use plus the alternative it feeds into, leaving little to inference.

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

get_scraper_progressB
Read-only

Status of a run: starting, running, ready, failed or canceled.

NameRequiredDescriptionDefault
snapshot_idYessnapshot_id from run_scraper

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare this a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the behavioral bar is lower. The description's real contribution is enumerating the five status values, which is useful, but it doesn't say which are terminal, whether it is pollable, or what to do next when status becomes 'ready' or 'failed'.

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?

One short, front-loaded fragment with no filler. It is efficient, though the sentence fragment lacks a subject, and its terseness is part of why usage guidance is missing rather than a model of structure.

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 one-parameter read tool with annotations and no output schema, the description covers what the tool returns at a high level but omits the workflow context (post-run polling, transition to results retrieval) that an agent needs to place this tool correctly among its 30 siblings.

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

Parameters3/5

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

Schema coverage is 100% and the schema already explains that snapshot_id comes from run_scraper. The description adds no meaning beyond that, so the baseline 3 for a fully documented single parameter applies.

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

Purpose4/5

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

States the resource (a run) and its return concept (status) and enumerates the possible values, so an agent can tell it reports progress rather than results. It never names its siblings (get_scraper_details, get_scraper_results, run_scraper) or says explicitly that the 'run' is a scraper run, so differentiation is left to the tool name.

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

Usage Guidelines2/5

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

There is no when-to-use guidance at all: no indication that this is the polling companion to run_scraper, no guidance on repeated polling, and no pointer to get_scraper_results once the status is 'ready'. The agent must infer the entire workflow from the schema note 'snapshot_id from run_scraper'.

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

get_scraper_resultsC
Read-only

Records of a finished run. Returns status "running" if not ready yet.

NameRequiredDescriptionDefault
snapshot_idYessnapshot_id from run_scraper

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already cover safety (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description's job is to add operational context. It does add one genuinely useful trait: the call is non-blocking and returns status "running" when results are not ready, which tells the agent to poll. It does not say what happens to results after completion (retention, idempotency, size limits).

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?

Two short sentences, no filler, and the readiness/polling caveat is placed where it will be read. The first sentence is under-specified rather than padded, so length is not the problem.

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

Completeness3/5

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

With no output schema, the description should give some sense of the return shape (records/data plus a status field), and it only hints that a status field exists. For a single-parameter read tool with clean annotations this is adequate but leaves the agent guessing about payload structure and about the progress-vs-results split.

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?

Only one parameter, and the schema itself documents it fully ("snapshot_id from run_scraper"), so coverage is 100% and the description need not restate it. The description adds nothing about the ID's origin or validity, so baseline 3 applies.

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

Purpose3/5

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

"Records of a finished run" conveys that this retrieves output from a completed scraper run, but it omits the verb and the resource name (scraper results), relying on the tool name to fill that in. It does not distinguish itself from get_scraper_progress or run_scraper, which is the main ambiguity an agent would face.

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 only usage hint is implicit: the 'running' status comment implies this is a polling call. There is no statement of when to call this instead of get_scraper_progress (progress vs. final payload), nor prerequisites such as whether run_scraper must have completed first.

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

list_dataset_fieldsA
Read-only

List the filterable fields of a searchable dataset (field name, type, and description). Call this before search_dataset to learn which field names and types you can filter on. Supported dataset_id values:

  • gd_l1viktl72bvl7bjuj0: LinkedIn people profiles

  • gd_me5ppxjr2ge6icjuh0: LinkedIn people profiles (contact-enriched)

  • gd_l1vikfnt1wgvvqz95w: LinkedIn company information

NameRequiredDescriptionDefault
dataset_idYes

TDQS

A4.8/5.0
Behavior4/5

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

The annotations already establish that the tool is read-only, non-destructive, and closed-world, so the description need not restate safety. The description adds useful behavioral context by specifying the returned field metadata (name, type, description) and the prerequisite relationship to search_dataset. It does not discuss pagination or failure behavior, but these are minor for a small enumeration 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 front-loaded with the core action and prerequisite, then presents supported dataset IDs in a compact bullet list. Every sentence and bullet earns its place without unnecessary repetition.

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 one-parameter tool with no output schema, the description provides everything needed: purpose, sequencing, return content, and the full set of valid dataset_id values. No relevant invocation detail is missing.

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?

Although schema description coverage is 0%, the description fully documents the single dataset_id parameter by listing every allowed enum value with a human-readable meaning. This goes beyond the raw enum and tells the agent exactly what each ID represents.

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

Purpose5/5

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

The description uses a specific verb and resource: 'List the filterable fields of a searchable dataset.' It also names the sibling tool search_dataset and explains the distinct role of this tool, so an agent can distinguish it without opening either schema.

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

Usage Guidelines5/5

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

The description explicitly says 'Call this before search_dataset to learn which field names and types you can filter on.' This gives a clear sequencing rule and names the alternative tool, leaving no ambiguity about when to invoke it.

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

perplexity_ai_insightsB

Send a prompt to Perplexity and get back AI-generated insights. Returns structured answer text in markdown format. Useful for GEO and LLM as a judge.

NameRequiredDescriptionDefault
promptYes

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare openWorldHint=true (external call), destructiveHint=false, and readOnlyHint=false. The description adds one useful behavioral fact beyond the annotations: the response is structured markdown answer text. It says nothing about latency, cost, quota behavior, or whether the call has side effects at the provider, which is relevant given readOnlyHint=false.

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

Conciseness4/5

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

The description is three short sentences and is front-loaded with the action and the return format. The final sentence is vague marketing jargon ('GEO'), but it is short enough not to seriously hurt usability.

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?

This is a simple one-parameter tool with no output schema, and the description does cover the return shape (markdown answer text). It leaves out the key discriminator against the sibling chatgpt_ai_insights, as well as any expectation about latency, cost, or prompt limits, so it is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 0% for the single required 'prompt' parameter, so the description has to carry the meaning itself. The phrase 'Send a prompt' names the input but adds no format, length, or content guidance (e.g. whether the prompt is a single question or a system-style instruction). It is only minimally compensating for the undocumented schema.

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

Purpose4/5

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

The description states a specific verb and resource: it sends a prompt to Perplexity and returns AI-generated answer text. The provider name implicit in the tool name, plus the mention of markdown answer output, makes the tool's purpose concrete. It does not explicitly distinguish itself from the sibling chatgpt_ai_insights, which is the one nearby tool that could easily be confused with it.

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

Usage Guidelines3/5

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

The description gives one hint about where to use the tool: 'Useful for GEO and LLM as a judge.' However, it never states when to choose the Perplexity variant over the sibling chatgpt_ai_insights, nor does it set exclusions or prerequisites (e.g. prompt length limits, rate limits, or credential requirements). By implication, the guidance is present but incomplete.

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

refresh_scrapersA
Read-only

Reload the scraper list now instead of waiting for the daily refresh.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered by structured data. The description adds genuinely new behavioral context — that the scraper list is cached and normally refreshed daily — but says nothing about what the call returns or whether it blocks until reload completes.

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?

A single sentence with the action and the justification for it, front-loaded and free of filler. Nothing could be removed without losing 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 zero-parameter, annotation-backed tool this covers what an agent needs to decide to call it. The one unresolved question is the result of the call — whether it returns the refreshed list or just an acknowledgement — which the missing output schema leaves the description to answer, and it doesn't.

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

Parameters4/5

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

The tool takes no parameters, so there is nothing for the description to disambiguate; the baseline for a zero-parameter schema applies. No parameter text is needed or expected here.

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

Purpose4/5

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

States a specific verb and resource ('Reload the scraper list'), and the phrase 'instead of waiting for the daily refresh' pins down what kind of refresh this is, separating it from search_scrapers / get_scraper_details. It does not explicitly name a sibling, so an agent must infer the boundary rather than being routed to it.

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?

'now instead of waiting for the daily refresh' gives a concrete trigger condition: call this when you need a current scraper list before the scheduled daily refresh runs. No when-not guidance, no cost/latency caveat, and no named alternative for other cases, which keeps it out of 5 territory.

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

run_scraperA

Run a scraper method. input is a list of objects shaped like sample_input from get_scraper_details, one per URL or query. collect_by_url returns one record per input; discover_by_* methods return up to limit_per_input records per input, and every record is billed. Waits up to 45 seconds; if still running it returns snapshot_id with status "running": then poll get_scraper_progress and call get_scraper_results when ready. Records with an "error" field explain failed inputs.

NameRequiredDescriptionDefault
inputYes
methodYesOne of the scraper collection_methods, exactly as listed (some names are misspelled on purpose)
dataset_idYesdataset_id from search_scrapers
limit_per_inputNodiscover_by_* only

TDQS

A4.6/5.0
Behavior5/5

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

Beyond annotations, the description discloses important behavior: every returned record is billed, the call waits up to 45 seconds, long jobs return a snapshot_id with status 'running', and failed inputs are indicated by an 'error' field. These details materially affect cost, latency, and 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?

The description is front-loaded with the core action and then proceeds through input shape, method behavior, timeout handling, and error signaling. Every clause adds operational value with no filler.

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

Completeness4/5

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

There is no output schema, and the description covers the async return path, record counts, billing, and error handling. It does not describe the full record structure, but it points to get_scraper_results for retrieval and get_scraper_progress for polling, which is sufficient for most invocation decisions.

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 75%, so the schema already documents method, dataset_id, and limit_per_input. The description adds useful semantics by explaining that input should match sample_input from get_scraper_details, one object per URL or query, and by clarifying how limit_per_input applies only to discover_by_* methods.

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 gives a specific verb and resource ('Run a scraper method') and immediately clarifies the required input shape and method-specific output behavior. It distinguishes collect_by_url from discover_by_* methods and references the exact sibling tools used before and after this step.

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

Usage Guidelines4/5

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

It explains how to prepare input via get_scraper_details and how collect_by_url differs from discover_by_* in output volume. It also gives clear next-step guidance for long-running jobs by naming get_scraper_progress and get_scraper_results, though it does not explicitly state when not to use this tool versus other scraping siblings.

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

scrape_as_htmlA
Read-only

Scrape a single webpage URL and get back the results in HTML.

NameRequiredDescriptionDefault
urlYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds only that the response is HTML; it says nothing about JS rendering, timeouts, paywalls/anti-bot behavior, or whether the HTML is raw or post-processed.

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?

One short sentence, front-loaded with the verb and ending on the differentiator (HTML output). There is no filler, though the brevity is partly under-specification rather than tightness.

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

Completeness3/5

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

With no output schema, the description should carry more of the return-value and failure-mode burden; 'results in HTML' is thin for a web-scraping call that may return error pages, blocked responses, or empty bodies. It is adequate for invoking the tool but not for anticipating what comes back.

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 single url parameter has 0% schema description coverage, so the schema offers only type/format. The description contributes a little semantic value ('single webpage URL', implying one URL and not a list), but adds nothing about redirects, query strings, or URL format expectations.

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

Purpose4/5

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

States a specific verb+resource ('scrape a single webpage URL') and the output form ('HTML'), which implicitly contrasts with the sibling scrape_as_markdown. It does not explicitly name that sibling or scraping_browser_get_html, so differentiation is left to inference.

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 word 'single' hints this is for one URL rather than batch, but there is no explicit when-to-use guidance versus scrape_as_markdown, scrape_batch, or the scraping_browser_* family. The agent must infer selection from the output format alone.

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

scrape_as_markdownB
Read-only

Scrape a single webpage URL and get back the results in MarkDown language.

NameRequiredDescriptionDefault
urlYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety and network profile is covered. The description adds the output serialization (Markdown), which is genuine value, but says nothing about dynamic-content rendering, timeouts, or failures on non-HTML URLs.

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?

A single short sentence with the action and the return format front-loaded. Nothing wasted, though it is arguably too terse for the gaps it leaves.

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?

There is no output schema, and the description does at least declare the return format as Markdown, which is the key missing piece. However, it omits anything about failure behavior or how it differs from the large family of scrape_as_html / scraping_browser_* siblings, which matters given the crowded namespace.

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%, but there is only one required parameter whose type and URI format are enforced by the schema. The description only restates that it is a webpage URL and adds the constraint that it must be a single page; it does not clarify redirects, auth, or non-web schemes.

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

Purpose4/5

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

States a specific verb (scrape) and resource (a single webpage URL) plus the output format (Markdown). The word 'single' implicitly separates it from scrape_batch, and 'MarkDown' separates it from scrape_as_html, though neither sibling is named.

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?

Usage is only implied: 'single webpage' hints that batch work belongs elsewhere and the Markdown output hints at scrape_as_html being the alternative, but the description never states when to choose this tool or what it cannot do.

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

scrape_batchB
Read-only

Scrape multiple webpages URLs and get back the results in MarkDown language.

NameRequiredDescriptionDefault
urlsYesArray of URLs to scrape (max 5)

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare readOnly, non-destructive and open-world behavior, so the safety profile is covered. The description adds the output format (Markdown), which is genuinely useful context not found in the structured fields. However it says nothing about partial failures (what happens if one of five URLs fails), rate limits, or whether results come back in URL order — meaningful gaps for a batch network operation.

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?

A single front-loaded sentence with no filler, and the output format is stated up front. Minor awkwardness in 'webpages URLs' prevents a 5.

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

Completeness3/5

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

With no output schema, the description carries the burden of explaining the return value, and it only says 'results in MarkDown' — not whether that's an array aligned to input order, how per-URL errors are surfaced, or how large the responses might be. Adequate for a simple tool, but the batch-specific behavior an agent needs to plan around is missing.

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

Parameters3/5

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

There is only one parameter and the schema already documents it fully, including the max-5 constraint via maxItems and its own description. The description says nothing about the URLs array beyond implying multiplicity, so it adds no meaning over the schema; baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('Scrape multiple webpages URLs') plus the return format ('MarkDown'), which lets an agent distinguish it from the single-page scrape_as_markdown and scrape_as_html siblings. It stops short of naming those siblings explicitly, so the differentiation is implicit rather than stated.

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 word 'multiple' implies this is the batch variant to use when more than one URL needs scraping, but no explicit when-to-use or when-not-to-use condition is given. Nothing tells the agent whether to prefer scrape_as_markdown in a loop, or whether scrape_batch is cheaper/faster.

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

scraping_browser_click_refA
Destructive

Click on an element using its ref from the ARIA snapshot. Use scraping_browser_snapshot first to get the correct ref values. This is more reliable than CSS selectors.

NameRequiredDescriptionDefault
refYesThe ref attribute from the ARIA snapshot (e.g., "23")
elementYesDescription of the element being clicked for context

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the mutation and side-effect profile is covered structurally. The description adds a useful reliability rationale ('more reliable than CSS selectors') and the ref provenance, but says nothing about what a click can trigger — navigation, form submission, or a page-state change — which matters a lot for a destructive, open-world action.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the prerequisite, then the rationale — no filler and nothing repeated from the schema verbatim.

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

Completeness4/5

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

For a 2-parameter tool with no output schema and annotations that already cover safety, the description supplies the essential prerequisite and input source. The remaining gap is post-click behavior (does the page navigate, how to recover from a stale ref), which would make it fully self-sufficient.

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

Parameters3/5

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

Schema description coverage is 100%, with both 'ref' and 'element' documented including an example ref value, so the baseline is 3. The description reinforces where the ref originates but adds no meaning for the 'element' context parameter and no format/syntax detail beyond the schema.

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

Purpose4/5

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

Names a specific verb+resource ('Click on an element') and the mechanism ('using its ref from the ARIA snapshot'), which clearly separates it from scraping_browser_type_ref, scraping_browser_fill_form, and the get_text/get_html readers. It does not explicitly say how it differs from the other ref-based actions (scroll_to_ref, wait_for_ref), so it stops just short of full sibling differentiation.

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

Usage Guidelines4/5

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

'Use scraping_browser_snapshot first to get the correct ref values' gives a concrete prerequisite and names the tool that produces the required input, which is exactly the sequencing an agent needs. It gives no when-not guidance (e.g. what to do if the ref is stale, or when to prefer scraping_browser_get_text over clicking), so no exclusions.

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

scraping_browser_fill_formA
Destructive

Fill multiple form fields in one operation. Use scraping_browser_snapshot first to get the correct ref values. This is more efficient than filling fields one by one.

NameRequiredDescriptionDefault
fieldsYesFields to fill in

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the agent knows this mutates a live page. The description adds the snapshot prerequisite, which is useful context, but says nothing about side effects beyond the fields — whether the form is submitted, whether events fire, or what happens if one ref in the batch is stale. With annotations carrying the safety profile, a 3 is appropriate.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and followed immediately by the prerequisite. No filler or restatement of the tool name.

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

Completeness4/5

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

For a single-parameter, fully schema-documented tool with no output schema, the description covers what an agent needs to invoke it: the batching behavior and where refs come from. It is slightly short on post-conditions — whether filling triggers submission or navigation — which matters given destructiveHint=true.

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

Parameters3/5

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

Schema description coverage is 100%, and the nested fields array already documents name, type enum, ref and per-type value formatting (checkbox "true"/"false", combobox option text). The description adds only the provenance of ref values (from the snapshot), which is helpful but marginal beyond the schema.

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

Purpose4/5

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

Names a specific verb+resource ('Fill multiple form fields') and the batching scope ('in one operation'), which implicitly separates it from the single-field sibling scraping_browser_type_ref. It does not name that sibling directly, so the differentiation is inferred rather than stated.

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

Usage Guidelines4/5

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

Gives an explicit prerequisite ('Use scraping_browser_snapshot first to get the correct ref values') and a clear preference rule ('more efficient than filling fields one by one'). No exclusion conditions are stated, such as when a single-field type call would still be needed (e.g. needing to observe intermediate state).

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

scraping_browser_get_htmlB
Read-only

Get the HTML content of the current page. Avoid using this tool and if used, use full_page option unless it is important to see things like script tags since this can be large

NameRequiredDescriptionDefault
full_pageNoWhether to get the full page HTML including head and script tags Avoid this if you only need the extra HTML, since it can be quite large

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds a useful trait not in the annotations: the output can be very large, and script/head content is the expensive part. It does not describe truncation, formatting, or what a non-full_page response looks like.

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

Conciseness3/5

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

It is short, but the sentence is convoluted: the tool is simultaneously discouraged and recommended with full_page, and the clause order buries the actual caveat at the end. Front-loading 'returns full page HTML, can be large' would carry the same content more cleanly.

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

Completeness3/5

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

With one optional parameter, no required params, and no output schema, the definition needs to cover size behavior and alternatives. It covers size, but leaves the agent without a clear path to the cheaper text-only sibling tools, which is the decisive missing piece for this tool family.

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

Parameters3/5

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

Schema description coverage is 100% and the single full_page parameter is already fully documented in the schema, so the baseline is 3. The description reinforces the size caveat but adds no syntax or default-value information beyond the schema.

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

Purpose4/5

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

States a specific verb and resource: 'Get the HTML content of the current page.' An agent can tell it retrieves raw HTML from the active browser session rather than a fresh scrape. It does not, however, distinguish itself from sibling scraping_browser_get_text or scrape_as_html, which is the main ambiguity.

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?

'Avoid using this tool and if used, use full_page option unless it is important to see things like script tags' gives a conditional, but it is self-contradictory in construction and never names the alternative an agent should reach for (scraping_browser_get_text, scrape_as_markdown). Usage direction is implied rather than routed.

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

scraping_browser_get_textB
Read-only

Get the text content of the current page

NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint and destructiveHint=false, so safety is covered. The description adds no behavioral context of its own: it doesn't say whether text is visible-only, whether hidden/script text is included, whether output is truncated, or that results reflect the current DOM state after scrolling/waiting.

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?

A single short sentence with the key qualifier ('of the current page') placed where it matters. It is efficient but so terse that it borders on under-specification rather than genuine conciseness.

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?

There is no output schema, so the description is the only place an agent could learn what comes back — format, length limits, whether markup is stripped — and it says none of that. Combined with the missing session prerequisite, an agent has to guess at the operational contract.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate or clarify. Baseline 4 applies.

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

Purpose4/5

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

States a specific verb and resource ('Get the text content') scoped to 'the current page', which implies the live browser session rather than an arbitrary URL. However it never mentions how it relates to close siblings like scraping_browser_get_html or scrape_as_markdown, so an agent can't tell which text-extraction tool to pick from the name alone.

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 versus scrape_as_markdown, scrape_as_html, or scraping_browser_get_html, and no stated prerequisites. The critical precondition — that a page must already be loaded in the browser session via scraping_browser_navigate — is left entirely implicit.

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

scraping_browser_go_backB
Read-only

Go back to the previous page

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: it does not say what happens at the start of history (no-op or error), whether the current page content is returned, or that the agent should re-snapshot after navigating.

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?

A single front-loaded sentence with no filler. It is appropriately sized, though it is arguably thin rather than maximally efficient given the workflow context it omits.

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

Completeness3/5

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

With no parameters and no output schema, the burden is low, but the description omits session-state implications: it does not say the browser session must have history, nor how to inspect the resulting page (scraping_browser_snapshot). Those gaps matter for correct multi-step agent use.

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

Parameters4/5

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

The tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate. The description correctly avoids inventing parameters.

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

Purpose4/5

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

States a specific verb (go back) and the resource/scope (the previous page in browser history), so an agent can tell it apart from scraping_browser_go_forward and scraping_browser_navigate. It stops short of explicitly naming those siblings as the alternatives.

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

Usage Guidelines2/5

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

There is no when-to-use, when-not-to-use, or prerequisite guidance. The description does not mention that a prior scraping_browser_navigate must have occurred, nor that scraping_browser_go_forward is the inverse action, leaving the agent to infer the workflow.

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

scraping_browser_go_forwardB
Read-only

Go forward to the next page

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnly, non-destructive, open-world behavior, so the safety profile is covered. The description adds nothing: it doesn't disclose that this acts on session history, nor what happens when there is no forward entry (likely a no-op or error).

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?

One short sentence, front-loaded with the verb, zero filler. Its brevity is efficient, though it leans on completeness rather than conciseness for its gaps.

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?

A trivial zero-param tool whose annotations already carry the safety profile, so the burden is light. Still missing is the key context: that this is history navigation tied to prior go_back/navigate calls and how it behaves when no forward page exists.

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

Parameters4/5

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

Zero parameters, so there is nothing to document; baseline 4 applies.

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

Purpose4/5

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

States a specific verb ('go forward') and object ('next page'), which reads as browser history navigation and pairs naturally with the sibling scraping_browser_go_back. It does not explicitly say 'browser history', so 'next page' could be mistaken for pagination, but the sibling set disambiguates.

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 statement of when to use this versus scraping_browser_navigate or scraping_browser_go_back, and no mention that it requires an existing browser session with forward history. The agent must infer all of that.

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

scraping_browser_navigateB
Read-only

Navigate a scraping browser session to a new URL

NameRequiredDescriptionDefault
urlYesThe URL to navigate to
countryNoOptional 2-letter ISO country code to route the browser session (e.g., "US", "GB")

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so safety is covered by structured data. The description adds nothing behavioral beyond the title: it does not say whether navigation blocks until load, what happens on fetch failure, or — critically — whether navigating invalidates previously obtained element refs used by click_ref/type_ref.

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?

A single tight sentence with the action front-loaded and zero redundancy. It is arguably under-specified rather than bloated, but it wastes no space.

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?

For a 2-parameter navigation tool in a 30-sibling browser-automation family with no output schema, the description omits key facts an agent needs: session lifecycle, whether the call returns page content or only a status, and the effect on stored element references. It covers only the bare action.

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

Parameters3/5

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

Schema coverage is 100%, with both the url and country parameters documented in the schema including the ISO pattern and examples. The description contributes no additional meaning about URL format, relative-vs-absolute handling, or how country routing affects the session, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Navigate) and resource (a scraping browser session) with the target being a new URL, which implicitly distinguishes it from the go_back/go_forward siblings. It does not explicitly name those siblings or clarify what a 'scraping browser session' is in relation to the other scrape_* tools.

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

Usage Guidelines3/5

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

Usage is only implied: the agent can infer this is the tool for loading a URL into an existing browsing session, versus history navigation via go_back/go_forward. There is no explicit statement about prerequisites (does a session already have to exist, or is one created?), nor any when-not-to-use guidance relative to scrape_as_markdown or scrape_as_html.

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

scraping_browser_network_requestsA
Read-only

Get all network requests made since loading the current page. Shows HTTP method, URL, status code and status text for each request. Useful for debugging API calls, tracking data fetching, and understanding page behavior.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds value beyond that by disclosing the return payload shape (method, URL, status code, status text) and the temporal scope of the capture, though it says nothing about whether the list resets on navigation or has size limits.

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

Conciseness5/5

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

Three short sentences: what it returns, what fields, and why useful — in that order. Nothing is redundant beyond the necessary enumeration of returned fields, and the key scope constraint is 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?

With no parameters, no output schema and an annotation set that already covers safety, the description carries exactly the burden it must: what is captured, in what timeframe, and in what shape. An agent can call this correctly and interpret the result from the description alone.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics to document and the baseline is 4. The description correctly implies no arguments are needed by framing the call as 'get all requests'.

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

Purpose5/5

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

States a specific verb and resource: 'Get all network requests made since loading the current page.' The scope qualifier (since page load) distinguishes it from sibling capture tools like scraping_browser_get_html and scraping_browser_snapshot, which return page content rather than traffic.

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

Usage Guidelines4/5

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

Gives clear usage contexts — debugging API calls, tracking data fetching, understanding page behavior — which tells the agent when this tool is the right pick over content-extraction siblings. It stops short of explicit exclusions (e.g., 'use get_html for markup'), so it lands at 4 rather than 5.

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

scraping_browser_screenshotA
Read-only

Take a screenshot of the current page. Set full_page to capture the whole scrollable page.

NameRequiredDescriptionDefault
full_pageNoWhether to screenshot the full page (default: false) You should avoid fullscreen if it's not important, since the images can be quite large

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered and the description needn't restate it. The description adds no behavioral context beyond that: it does not say what is returned (inline image, base64, URL), whether it reflects only the viewport, or whether a session/navigation prerequisite applies. Adequate but thin for a tool with no output schema.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core action front-loaded and the optional parameter note trailing. Nothing could be removed without losing 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 one-optional-param, no-output-schema tool, the description covers the action and the only parameter, and annotations carry the safety profile. The main residual gap is the return format (image payload vs. reference) and the implicit requirement of an active browser session, though neither is needed to select the tool correctly.

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?

There is only one optional parameter and schema description coverage is 100% – the schema already explains full_page, its false default, and even warns about large images. The description's 'capture the whole scrollable page' adds a slight semantic clarification (whole scrollable page vs. viewport) but largely repeats structured data, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: 'Take a screenshot of the current page.' That is unambiguous and distinguishable from data-extraction siblings like scraping_browser_get_html or scrape_as_markdown. It stops short of explicitly contrasting with scraping_browser_snapshot, which is the nearest ambiguous neighbor.

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?

Usage is only implied by 'the current page' – it presumes an active browsing session but never says so, and never says when a screenshot is preferable to snapshot, get_html, or get_text. The one piece of guidance present ('Set full_page to capture the whole scrollable page') is about the parameter, not about tool selection.

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

scraping_browser_scrollB
Read-only

Scroll to the bottom of the current page

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, so safety is covered, but the description adds nothing beyond the action itself. It doesn't say whether the scroll waits for lazy-loaded content, whether it pages in one jump or incrementally, or whether any state/result is returned. For a browser-automation tool, those are the traits an agent needs.

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?

One short, front-loaded sentence with no filler. Its brevity is appropriate, though it edges toward under-specification rather than crispness.

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

Completeness3/5

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

The tool is simple (no params, no output schema) and the annotations carry the risk profile, so the description is close to sufficient. Missing is any statement about post-scroll behavior or page state, which is the one thing an agent would need to chain it with snapshot/get_text calls.

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

Parameters4/5

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

The tool takes zero parameters and the schema is a closed empty object, so there is nothing for the description to disambiguate. Baseline 4 applies.

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

Purpose4/5

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

States a specific verb and target ("scroll to the bottom of the current page"), which lets an agent tell it apart from scraping_browser_scroll_to_ref by inference. It stops short of naming that sibling, so the differentiation is implicit rather than stated.

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 contains no when-to-use guidance, no prerequisites (e.g. a browser session/page must already be open), and never mentions the alternative scrolling sibling. The agent must infer that this is for reaching page-bottom content while scroll_to_ref targets a specific element.

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

scraping_browser_scroll_to_refA
Read-only

Scroll to a specific element using its ref from the ARIA snapshot. Use scraping_browser_snapshot first to get the correct ref values. This is more reliable than CSS selectors.

NameRequiredDescriptionDefault
refYesThe ref attribute from the ARIA snapshot (e.g., "23")
elementYesDescription of the element to scroll to

TDQS

A3.8/5.0
Behavior3/5

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

The annotations already establish that this is a safe, read-only, open-world operation. The description adds useful context about the prerequisite snapshot step and the reliability of refs over CSS selectors, but it does not describe edge cases such as invalid refs or what happens if the element 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.

Conciseness5/5

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

Three short sentences with no waste: purpose first, prerequisite second, rationale third. Every sentence earns its place.

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

Completeness4/5

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

For a simple two-parameter scroll action with full schema coverage and annotations covering safety, the description is largely complete. It covers the key prerequisite and rationale, though failure behavior is not mentioned.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented. The description reinforces that `ref` comes from the ARIA snapshot, but adds no syntax or constraint details beyond what the schema provides.

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

Purpose4/5

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

The description states a specific verb and resource: scrolling to a specific element using a ref from the ARIA snapshot. It is clearly different from generic scrolling, though it does not explicitly name the sibling `scraping_browser_scroll` as the page-level alternative.

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

Usage Guidelines4/5

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

It gives a clear prerequisite: use `scraping_browser_snapshot` first to obtain valid refs. It also explains why this approach is preferred over CSS selectors, but it does not state exclusions or when to choose generic `scraping_browser_scroll` instead.

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

scraping_browser_snapshotA
Read-only

Capture an ARIA snapshot of the current page showing all interactive elements with their refs. This provides accurate element references that can be used with ref-based tools. Use this before interacting with elements to get proper refs instead of guessing selectors. A filtered snapshot does not include page text; If necessary, call scraping_browser_get_text to read it.

NameRequiredDescriptionDefault
filteredNoList only buttons, links and fields (default: false). Saves tokens. Use true for sensitive actions (payments, account changes) so page text cannot pose as an element.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, non-destructive, open-world behavior, so the safety profile is covered. The description adds genuinely useful context the annotations do not: that the snapshot yields refs for ref-based tools, and that filtered mode strips page text (with a security rationale in the schema). It stops short of describing size or stability of the snapshot, which keeps it at 4 rather than 5.

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?

Four short sentences, front-loaded with what the tool produces, then when to use it, then the fallback for text. No filler or restatement of the title.

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?

No output schema exists, and the description adequately characterizes the return value (ARIA tree of interactive elements plus refs) and its main limitation in filtered mode. Minor gaps such as snapshot size limits or behavior on pages that are still loading are not addressed.

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?

Only one optional parameter and schema coverage is 100%; the schema itself explains default false, token savings, and the sensitive-action rationale. The description adds one consequence ('A filtered snapshot does not include page text'), but otherwise defers to the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Capture an ARIA snapshot of the current page') plus exactly what the output contains: interactive elements with refs. This clearly separates it from siblings like scraping_browser_screenshot, scraping_browser_get_html, and scraping_browser_get_text, which are named or implied as different outputs.

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

Usage Guidelines5/5

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

Gives an explicit precondition and an exclusion: 'Use this before interacting with elements to get proper refs instead of guessing selectors', and routes the agent to scraping_browser_get_text when page text is needed because a filtered snapshot omits it. The decision path is fully stated.

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

scraping_browser_type_refA
Destructive

Type text into an element using its ref from the ARIA snapshot. Use scraping_browser_snapshot first to get the correct ref values. This is more reliable than CSS selectors.

NameRequiredDescriptionDefault
refYesThe ref attribute from the ARIA snapshot (e.g., "23")
textYesText to type
submitNoWhether to submit the form after typing (press Enter)
elementYesDescription of the element being typed into for context

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already declare this is not read-only, is open-world, and is destructive. The description adds useful context that ref values must come from a prior snapshot and that refs are more reliable than CSS selectors, but it does not describe side effects such as form submission or what destructive behavior may occur.

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

Conciseness4/5

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

The description is three short sentences and front-loads the core action. The final sentence about reliability over CSS selectors is useful rationale, though slightly less essential than the action and snapshot prerequisite.

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

Completeness4/5

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

For a four-parameter browser-typing tool with full schema coverage and annotations covering safety, the description supplies the key operational prerequisite. It does not explain how this differs from fill_form or detail submit behavior, but the schema covers the parameter-level details.

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

Parameters3/5

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

The input schema has 100% description coverage for all four parameters, so the schema already explains ref, text, submit, and element. The description only reinforces ref semantics via the ARIA snapshot prerequisite and does not add meaning beyond the schema for submit or element.

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

Purpose4/5

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

The description states a specific verb and resource: typing text into an element using a ref from an ARIA snapshot. It is clear enough for an agent to understand the action, but it does not explicitly distinguish itself from the sibling tool scraping_browser_fill_form.

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

Usage Guidelines4/5

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

It gives a clear prerequisite: use scraping_browser_snapshot first to get the correct ref values. It also implies ref-based typing is preferred over CSS selectors, though it does not name when to use this instead of scraping_browser_fill_form or other typing alternatives.

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

scraping_browser_wait_for_refA
Read-only

Wait for an element to be visible using its ref from the ARIA snapshot. Use scraping_browser_snapshot first to get the correct ref values. This is more reliable than CSS selectors.

NameRequiredDescriptionDefault
refYesThe ref attribute from the ARIA snapshot (e.g., "23")
elementYesDescription of the element being waited for
timeoutNoMaximum time to wait in milliseconds (default: 30000)

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare this as a non-destructive, read-only, open-world operation. The description adds useful context about waiting for visibility and the ARIA ref dependency, but it omits important behavior such as what happens on timeout or whether it returns a value.

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

Conciseness5/5

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

The description is three short sentences, front-loaded with the core action and immediately followed by the key prerequisite. Every sentence contributes useful 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 browser wait tool, the description covers the critical workflow requirement of obtaining a ref from the snapshot and explains why ARIA refs are preferred. The main missing piece is failure behavior on timeout, which matters because there is no output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the individual parameters are already documented. The description adds the meaningful dependency that ref comes from the ARIA snapshot, but it does not add extra detail about timeout semantics or element usage 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 states a specific verb and resource: wait for an element to be visible using a ref from the ARIA snapshot. It distinguishes itself from selector-based approaches by naming ARIA refs explicitly and pointing to the snapshot tool as the source of refs.

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

Usage Guidelines4/5

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

It gives clear prerequisite guidance: call scraping_browser_snapshot first to obtain a valid ref. It also explains a preference over CSS selectors, though it does not explicitly say when not to use this tool or name alternative wait mechanisms.

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

search_datasetA
Read-only

Search a Bright Data dataset by a filter and get matching records back directly (fast Elasticsearch-backed search; no snapshot). Use this to FIND MANY records by criteria, as opposed to run_scraper which collects fresh records by URL. First call list_dataset_fields to get valid field names. A filter is a tree: a group {operator:"and"|"or", filters:[...]} or a leaf {name, value, operator}. Max nesting depth 3. Leaf operators: =, !=, <, <=, >, >=, in, not_in, includes, not_includes, array_includes, not_array_includes, is_null, is_not_null. Supported dataset_id values:

  • gd_l1viktl72bvl7bjuj0: LinkedIn people profiles

  • gd_me5ppxjr2ge6icjuh0: LinkedIn people profiles (contact-enriched)

  • gd_l1vikfnt1wgvvqz95w: LinkedIn company information

NameRequiredDescriptionDefault
sizeNoNumber of records to return (max 10, default 10)
sortNoSorting: "default", "random", or a custom array like [{"timestamp":"asc"}]. Use "default" or custom sort to paginate with search_after.
filterYesFilter tree describing which records to match. Required, cannot be empty.
dataset_idYes
search_afterNoPagination cursor from a previous response's search_after value.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the description only needs to add mechanism. It does: "fast Elasticsearch-backed search; no snapshot" tells the agent results are existing indexed data, not a fresh capture, which is the key behavioral distinction. It omits the hard 10-record cap and pagination flow beyond the schema's own text, so not fully complete.

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?

Front-loaded with purpose and the sibling contrast, then prerequisite, then filter grammar, then the dataset catalog — a logical build. Dense but each block earns its place; the bulleted dataset list is the one mild expansion, though it supplies information absent from the schema.

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?

There is no output schema, and the description only says "get matching records back directly" without indicating the response shape or that search_after comes from a previous response (that detail lives in the schema). For a 5-parameter read tool with annotations carrying safety, however, what is present is enough to call it correctly.

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

Parameters5/5

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

Schema coverage is 80%, so the baseline is 3, but the description substantially compensates: it explains the filter is a tree of group vs. leaf nodes, states max nesting depth 3 (which the deeply $ref'd schema never says plainly), enumerates all 14 leaf operators, and gives human-readable meanings for each of the three dataset_id enum values that the schema leaves unlabeled. That is real meaning beyond the structured fields.

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

Purpose5/5

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

States a specific verb and resource ("search a Bright Data dataset ... get matching records back directly") plus the retrieval mechanism (Elasticsearch-backed, no snapshot). It explicitly distinguishes itself from the sibling run_scraper, so an agent can route between the two without opening either schema.

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

Usage Guidelines5/5

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

Gives the positive case ("FIND MANY records by criteria"), the contrast case ("as opposed to run_scraper which collects fresh records by URL"), and a prerequisite step ("First call list_dataset_fields to get valid field names"). Nothing is left to inference about when to pick this tool.

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

search_engineA
Read-only

Scrape search results from Google, Bing or Yandex. Returns SERP results in JSON or Markdown (URL, title, description),Ideal forgathering current information, news, and detailed search results.

NameRequiredDescriptionDefault
queryYes
cursorNoPagination cursor for next page
engineNogoogle
geo_locationNo2-letter country code for geo-targeted results (e.g., "us", "uk")

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds the return content, but its claim of "JSON or Markdown" output is unactionable since no format parameter exists in the schema, and pagination via the cursor is never explained. Net: some added value with a mild misleading note.

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?

Two short sentences with the core capability front-loaded and no padding. A typo ("description),Ideal forgathering") slightly hurts polish but not comprehension.

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 4-parameter, no-output-schema search tool, the description covers the source engines, the return payload fields, and the intended use case. The remaining gaps (pagination, format selection) are minor and largely resolvable from the schema's cursor field.

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 50% – only cursor and geo_location are documented in the schema. The description adds meaning to the engine enum by naming Google, Bing and Yandex, but says nothing about the required query or geo-targeting, so the undocumented half is only partially compensated.

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

Purpose4/5

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

States a specific verb and resource ("Scrape search results from Google, Bing or Yandex") and names the output shape (SERP results with URL, title, description). It does not, however, differentiate itself from the sibling search_engine_batch, leaving the agent to infer when the single-query variant is preferred.

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?

"Ideal for gathering current information, news, and detailed search results" gives a use-case context, but there are no when-not conditions and no named alternative despite a sibling search_engine_batch existing. Usage is implied rather than prescribed.

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

search_engine_batchB
Read-only

Run multiple search queries simultaneously. Returns JSON for Google, Markdown for Bing/Yandex.

NameRequiredDescriptionDefault
queriesYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint and destructiveHint, so the safety profile is covered. The description adds genuinely non-obvious behavior — per-engine return formats (JSON for Google, Markdown for Bing/Yandex) — but says nothing about concurrency limits, per-query failure behavior, or whether one failing query aborts the batch.

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?

Two tight sentences with the purpose front-loaded and the format caveat second; nothing is padded. It is efficient but very short relative to how much of the schema is left unexplained.

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

Completeness3/5

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

With no output schema, the description does carry some of the return-value burden by naming formats per engine, which is helpful. However, it omits output shape, cursor/pagination semantics, and batch error handling — significant gaps for a multi-query tool.

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

Parameters2/5

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

Schema description coverage is effectively 0% beyond geo_location; the description explains none of the nested fields. The `cursor` parameter for pagination and the `engine` enum with its google default are undocumented, and the description does not mention the 1-5 query limit enforced by the schema.

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

Purpose4/5

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

States a specific verb and resource ("Run multiple search queries simultaneously") and conveys batch semantics that implicitly separate it from the single-query search_engine sibling. It never names the sibling or the batch limit, so differentiation is inferred rather than explicit.

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?

"Multiple ... simultaneously" implies the tool is for batching several queries, which hints at when to choose it over search_engine, but no explicit when/when-not rule or alternative is stated. An agent must infer the routing decision.

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

search_scrapersA
Read-only

Find a Bright Data pre-built scraper (Web Scraper API, 1,200+ sites) for a site or data type, e.g. "amazon reviews" or "linkedin.com". Returns dataset_id, name, domain and collection_methods. Next: call get_scraper_details with a dataset_id and one method.

NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, and the description adds real value by enumerating the returned fields (dataset_id, name, domain, collection_methods) in the absence of an output schema. It does not disclose result-count behavior, default result size, or empty-result handling, which leaves a minor gap.

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

Conciseness5/5

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

Three short sentences: purpose, return shape, next action. No filler, and the identifying information is front-loaded before the return/next-step details.

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 two-param read-only discovery tool with no output schema, the description covers purpose, return fields and the follow-up call, which is nearly everything an agent needs. The uncovered `limit`/pagination behavior is the only meaningful omission.

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 carries the burden. Its examples ('amazon reviews', 'linkedin.com') do clarify what the required `query` accepts, but the `limit` parameter (1-50, default 10) is never mentioned, leaving half the parameters undocumented anywhere.

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

Purpose5/5

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

The description states a specific verb ('Find') and resource ('Bright Data pre-built scraper / Web Scraper API, 1,200+ sites') and instantly grounds it with two concrete query examples. An agent can distinguish this discovery tool from siblings like get_scraper_details or run_scraper without opening any schema.

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

Usage Guidelines4/5

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

It gives clear usage context plus an explicit next step: 'call get_scraper_details with a dataset_id and one method.' It does not name exclusions or close alternatives (e.g., when to prefer search_dataset or ask_brightdata_assistant instead), so it stops just short of a 5.

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

session_statsC
Read-only

Tell the user about the tool usage during this session

NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds only that the scope is 'this session' and that output is user-facing prose; it says nothing about what data is included or whether it reflects only this MCP server's calls. With annotations carrying the safety profile, this is thin added value.

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?

A single short sentence with no padding, and the scope qualifier lands immediately. It is efficient but under-specified rather than over-long, so it loses a point only for lack of substance.

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

Completeness2/5

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

With no output schema, the description carries the burden of explaining what the agent gets back, and it does not: no mention of which metrics (call counts, per-tool breakdown, timing) or of the response shape. For a zero-param read tool this is low-stakes, but it is still incomplete.

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

Parameters4/5

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

The tool takes no parameters (schema is an empty object with additionalProperties false), so there is nothing for the description to disambiguate. Baseline 4 applies.

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

Purpose3/5

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

The description identifies a resource — tool usage during this session — and the verb is an instruction to report it to the user. It is distinct from every sibling (all scraping/browser tools), but 'tool usage' is vague about what is actually returned (counts, durations, per-tool breakdown).

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 statement of when to call this versus anything else, no triggers, no exclusions. The only implied usage is 'when the user asks about session activity', which the agent must infer from the phrase 'during this session'.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev4.1.0
    • Changedsearch_dataset1 field changed
      • changedInput schema / properties / filter / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "filters": {
        -        "items": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "filters": {
        -                  "items": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "filters": {
        -                            "items": {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "name": {
        -                                  "description": "Field name to filter on. Get valid field names from the list_dataset_fields tool.",
        -                                  "type": "string"
        -                                },
        -                                "operator": {
        -                                  "description": "Filter operator, one of: =, !=, <, <=, >, >=, in, not_in, includes, not_includes, array_includes, not_array_includes, is_null, is_not_null",
        -                                  "type": "string"
        -                                },
        -                                "value": {
        -                                  "anyOf": [
        -                                    {
        -                                      "type": "string"
        -                                    },
        -                                    {
        -                                      "type": "number"
        -                                    },
        -                                    {
        -                                      "type": "boolean"
        -                                    },
        -                                    {
        -                                      "items": {
        -                                        "type": [
        -                                          "string",
        -                                          "number",
        -                                          "boolean"
        -                                        ]
        -                                      },
        -                                      "type": "array"
        -                                    }
        -                                  ]
        -                                }
        -                              },
        -                              "required": [
        -                                "name",
        -                                "operator",
        -                                "value"
        -                              ],
        -                              "type": "object"
        -                            },
        -                            "minItems": 1,
        -                            "type": "array"
        -                          },
        -                          "operator": {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          }
        -                        },
        -                        "required": [
        -                          "operator",
        -                          "filters"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      {
        -                        "$ref": "#/properties/filter/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items"
        -                      }
        -                    ]
        -                  },
        -                  "minItems": 1,
        -                  "type": "array"
        -                },
        -                "operator": {
        -                  "enum": [
        -                    "and",
        -                    "or"
        -                  ],
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "operator",
        -                "filters"
        -              ],
        -              "type": "object"
        -            },
        -            {
        -              "$ref": "#/properties/filter/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items"
        -            }
        -          ]
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "operator": {
        -        "enum": [
        -          "and",
        -          "or"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "operator",
        -      "filters"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "$ref": "#/properties/filter/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "filters": {
        +        "items": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "filters": {
        +                  "items": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "filters": {
        +                            "items": {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "name": {
        +                                  "description": "Field name to filter on. Get valid field names from the list_dataset_fields tool.",
        +                                  "type": "string"
        +                                },
        +                                "operator": {
        +                                  "description": "Filter operator, one of: =, !=, <, <=, >, >=, in, not_in, includes, not_includes, array_includes, not_array_includes, is_null, is_not_null",
        +                                  "type": "string"
        +                                },
        +                                "value": {
        +                                  "anyOf": [
        +                                    {
        +                                      "type": "string"
        +                                    },
        +                                    {
        +                                      "type": "number"
        +                                    },
        +                                    {
        +                                      "type": "boolean"
        +                                    },
        +                                    {
        +                                      "items": {
        +                                        "type": [
        +                                          "string",
        +                                          "number",
        +                                          "boolean"
        +                                        ]
        +                                      },
        +                                      "type": "array"
        +                                    }
        +                                  ],
        +                                  "description": "Value to compare against. Omit for is_null / is_not_null."
        +                                }
        +                              },
        +                              "required": [
        +                                "name",
        +                                "operator"
        +                              ],
        +                              "type": "object"
        +                            },
        +                            "minItems": 1,
        +                            "type": "array"
        +                          },
        +                          "operator": {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "operator",
        +                          "filters"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      {
        +                        "$ref": "#/properties/filter/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items"
        +                      }
        +                    ]
        +                  },
        +                  "minItems": 1,
        +                  "type": "array"
        +                },
        +                "operator": {
        +                  "enum": [
        +                    "and",
        +                    "or"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "operator",
        +                "filters"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "$ref": "#/properties/filter/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items"
        +            }
        +          ]
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "operator": {
        +        "enum": [
        +          "and",
        +          "or"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "operator",
        +      "filters"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "$ref": "#/properties/filter/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items/anyOf/0/properties/filters/items"
        +  }
        +]
  2. 3 tool updatesv4.0.0
    • Addedask_brightdata_assistant
    • Removeddiscover
    • Changedscraping_browser_snapshot1 field changed
      • changedInput schema / properties / filtered / description
        Previous value: -"Whether to apply filtering/compaction (default: false). Set to true to get a compacted version of the snapshot."New value: +"List only buttons, links and fields (default: false). Saves tokens. Use true for sensitive actions (payments, account changes) so page text cannot pose as an element."
  3. 27 tool updatesv3.1.0
    • Addedchatgpt_ai_insights
    • Addedextract
    • Addedget_scraper_details
    • Addedget_scraper_progress
    • Addedget_scraper_results
    • Addedlist_dataset_fields
    • Addedperplexity_ai_insights
    • Addedrefresh_scrapers
    • Addedrun_scraper
    • Addedscrape_as_html
    • Addedscraping_browser_click_ref
    • Addedscraping_browser_fill_form
    • Addedscraping_browser_get_html
    • Addedscraping_browser_get_text
    • Addedscraping_browser_go_back
    • Addedscraping_browser_go_forward
    • Addedscraping_browser_navigate
    • Addedscraping_browser_network_requests
    • Addedscraping_browser_screenshot
    • Addedscraping_browser_scroll
    • Addedscraping_browser_scroll_to_ref
    • Addedscraping_browser_snapshot
    • Addedscraping_browser_type_ref
    • Addedscraping_browser_wait_for_ref
    • Addedsearch_dataset
    • Addedsearch_scrapers
    • Addedsession_stats
  4. 5 tool updatesv2.9.3
    • Addeddiscover
    • Addedscrape_as_markdown
    • Addedscrape_batch
    • Addedsearch_engine
    • Addedsearch_engine_batch

TDQS

B3.4/5.0

Scored across 32 tools

Disambiguation4/5

The set is organized into clearly separated families (simple scraping, Scraping Browser automation, dataset/scraper pipeline, SERP search, AI insights, support), and descriptions actively differentiate lookalikes such as search_dataset vs. run_scraper and ref-based browser actions vs. plain scraping. Minor overlap remains: scrape_as_markdown, scrape_as_html, extract and scraping_browser_get_text/get_html all return page content, and scraping_browser_scroll vs. scrolling to a ref could be momentarily confused.

Naming Consistency4/5

Nearly everything is snake_case with an action-first verb, and the scraping_browser_* prefix gives the browser family a predictable namespace (navigate, go_back, click_ref, type_ref, etc.). A few outliers break the verb pattern — bare 'extract', noun-only 'session_stats', and the 'scrape_as_*' vs 'scraping_browser_*' stem difference — but the convention is still easy to follow.

Tool Count3/5

32 tools is on the heavy side and just reading the list is a burden, largely because the Scraping Browser automation surface alone contributes 14 fine-grained actions. The breadth is defensible since the server fronts several distinct Bright Data products (Web Unlocker-style scraping, Scraping Browser, datasets/scrapers, SERP, AI insights), but it sits above the comfortable range.

Completeness4/5

Coverage is strong: single/batch page scraping, HTML/markdown extraction, full browser lifecycle (navigate, history, snapshot, click/type/fill/scroll/wait, screenshot, network log), and a discover → detail → run → progress → results scraper pipeline plus dataset field/search and support. Small gaps exist — no cancel/abort for a running scraper, no session close/reset for the browser, and no key-press/select helpers beyond fill_form — but these are workaroundable.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers