Bright Data MCP
OfficialOne line: This MCP server gives AI agents real-time web access — search, scraping, structured data extraction, browser automation, and LLM insights — all routed through Bright Data's unblocking infrastructure.
Web search — Google/Bing/Yandex SERPs as JSON or Markdown, with geo-targeting and pagination (
search_engine), plus up to 10 parallel queries (search_engine_batch).Page scraping — any URL as clean Markdown (
scrape_as_markdown) or raw HTML (scrape_as_html), and up to 10 URLs at once (scrape_batch); bot detection and CAPTCHAs handled automatically.AI structured extraction — turn any page into structured JSON with an optional custom prompt (
extract).Pre-built scrapers (Web Scraper API) — find and run 1,200+ scrapers for Amazon, LinkedIn, TikTok, Instagram, YouTube, X, Reddit, npm, PyPI, Crunchbase, Zillow and more, returning clean JSON (
search_scrapers→get_scraper_details→run_scraper, withget_scraper_progress,get_scraper_results,refresh_scrapers).Dataset search — filter-based search over stored LinkedIn profiles/companies datasets (
list_dataset_fields,search_dataset).Browser automation — 14 tools for a remote browser session: navigate, back/forward, ARIA snapshots, click/type by ref, fill forms, screenshots, get text/HTML, scroll, wait for elements, inspect network requests.
LLM response collection — query ChatGPT (
chatgpt_ai_insights) and Perplexity (perplexity_ai_insights) and get their answers as structured data for GEO/brand-visibility tracking.Bright Data support — ask product/API/zone/error questions via Sophie, with threaded follow-ups (
ask_brightdata_assistant).Session utilities — tool usage counts for the current session (
session_stats).
All requests include unblocking (proxy rotation, CAPTCHA solving, geo-restrictions) with a 5,000-request/month free tier.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bright Data MCPwhat are the current prices for iPhone 15 on Amazon?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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_HEREGet your API token from your Bright Data account settings. New accounts get 5,000 free requests per month.
Optional URL parameters:
Parameter | Description | Example |
| Limit to specific tool groups (default: all tools) |
|
| Limit to specific tools |
|
Go to: Settings → Connectors → Add custom connector
Name:
Bright DataURL:
https://mcp.brightdata.com/mcp?token=YOUR_API_TOKENClick "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 |
|
Read a specific page as clean Markdown |
|
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 |
|
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) |
|
Customer sentiment (Google Maps, Facebook, app store reviews) |
|
Competitor pricing pages |
|
Market discovery |
|
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 |
|
Drop-in replacement for built-in URL fetch |
|
Parallel data collection (10 at a time) |
|
Interactive sites (login walls, infinite scroll, dynamic content) |
|
Structured JSON from any page, no schema needed |
|
Coding agents
Package registry data on demand — no scraping, no stale caches.
Task | Tools |
npm and PyPI package version, README, metadata |
|
Read files from GitHub repositories |
|
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 |
|
Perplexity answers with sources |
|
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 |
person profiles, company profiles, job listings, posts, people search | |
profiles, posts, reels, comments | |
TikTok | profiles, posts, shop, comments |
profiles, posts, marketplace listings, company reviews, events | |
YouTube | videos, channels, comments |
X (Twitter) | posts, posts by profile |
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 |
|
News and finance data |
|
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
GROUPSorTOOLS, all 32 tools are enabled. Setting either one limits the server to those tools onlyGROUPSenables tool bundles. Comma-separated:GROUPS="scrapers,browser"(local) or&groups=scrapers,browser(hosted URL)TOOLSadds individual tools on top:TOOLS="extract,scrape_as_html". On its own, it enables only the tools you listEvery group also includes
search_engine,scrape_as_markdownandask_brightdata_assistantGroup ID
customis reserved; useTOOLSfor individual picks
Group ID | Contents | Tool count |
| Search and run any pre-built Web Scraper API scraper (Amazon, LinkedIn, TikTok, npm, ...) | 6 |
| Remote browser automation | 14 |
| ChatGPT and Perplexity response collection | 2 |
| 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_batchNeed to find information:
search_engine. Multiple queries (up to 10):search_engine_batchStructured 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 pageStructured JSON from a page no scraper covers:
extractRaw HTML:
scrape_as_htmlPage requires interaction (click, type, scroll, login):
scraping_browser_*toolsHow ChatGPT/Perplexity answer a prompt:
chatgpt_ai_insights/perplexity_ai_insightsQuestion 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
errorfield explain inputs that failed, e.g. a URL of the wrong typeResults can be large. Keep
limit_per_inputlow fordiscover_by_*methods and run bulk collection in a subagent where your framework supports it, so records don't flood the main context windowIf a run fails,
scrape_as_markdownworks on the same URL as a fallback
Tool | Description | Group |
| Search Google, Bing, or Yandex. Google returns JSON (URL, title, description); Bing and Yandex return Markdown. Paginate with the | default / every group |
| Up to 10 search queries in one call | default / |
| Any URL as Markdown. Bot protection and CAPTCHA handled automatically | default / every group |
| Up to 10 URLs in one call; returns an array of URL/content pairs in Markdown | default / |
| Any URL as raw HTML | default / |
| Scrape a page and convert it to structured JSON using AI, with an optional custom extraction prompt | default / |
| Tool usage counts for the current session | default / |
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 |
| Find scrapers by site or data type (e.g. "amazon reviews", "linkedin.com"). Returns dataset ID, name, domain and collection methods | default / |
| Description, input fields, example input and main output fields for one scraper method | default / |
| Run a scraper method. Waits up to 45 seconds; if still running, returns a | default / |
| Status of a run: starting, running, ready, failed or canceled | default / |
| Records of a finished run | default / |
| Reload the scraper list now instead of waiting for the daily refresh | default / |
Remote browser session. Typical sequence: navigate → snapshot → interact by ref → extract or screenshot.
Tool | Description |
| Open or reuse a browser session and navigate to a URL |
| Navigate back |
| Navigate forward |
| ARIA snapshot of the page listing interactive elements with refs. Required before ref-based actions |
| Click an element by ref from the latest snapshot |
| Type into an element by ref; optionally press Enter to submit |
| Fill several form fields by ref in one call |
| Screenshot of the current page; optional |
| Text content of the page body |
| HTML of the current page |
| Scroll to the bottom of the page |
| Scroll an element into view |
| Wait for an element to become visible, with optional timeout |
| 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 |
| Prompt | ChatGPT's answer as Markdown |
| 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 |
| Filterable fields of a dataset (name, type, description). Call before | default / |
| Records matching a filter, up to 10 per call, with a cursor for more | default / |
Tool | Description | Group |
| Ask Sophie, Bright Data's support assistant, about products, APIs, zones, errors or account setup. Pass the returned | 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 |
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 | |
Competitor snapshots, pricing comparison, review mining, hiring signals, content/SEO analysis, and market landscape maps from live web data | |
Resolves a product across Amazon, Walmart, eBay, Best Buy, and Google Shopping and names the cheapest in-stock option |
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 |
| Your Bright Data API token (required) | - |
|
| Custom rate limiting | unlimited |
|
| Custom Web Unlocker zone name |
|
|
| Custom Browser zone name |
|
|
| 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 |
|
|
| Seconds to wait for the user's answer before withholding the content |
|
|
|
|
|
|
| Request timeout for base tools in seconds (search and scrape) | No limit |
|
| Max retries for base tools on transient errors (0-3) |
|
|
| Comma-separated tool group IDs. Limits the server to these groups | All tools |
|
| Comma-separated individual tool names. Limits the server to these tools | All tools |
|
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
Resource | Link |
API documentation | |
Full tools reference | |
Agent skills | |
Usage examples | |
Changelog |
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" // WindowsTimeouts 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
Channel | Link |
GitHub issues | |
Documentation | |
License
MIT © Bright Data Ltd.
Available Tools
32 toolsask_brightdata_assistantARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | The question to ask. Max 20480 chars. | |
| dialog_id | No | Optional 24-char dialog_id from a previous call to continue the same thread. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes |
TDQS
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.
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.
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.
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.
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.
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.
extractARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| extraction_prompt | No | Custom prompt to guide the extraction process. If not provided, will extract general structured data from the page. |
TDQS
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.
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.
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.
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.
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.
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_detailsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | One of the scraper collection_methods, exactly as listed (some names are misspelled on purpose) | |
| dataset_id | Yes | dataset_id from search_scrapers |
TDQS
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.
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.
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.
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.
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.
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_progressBRead-only
Status of a run: starting, running, ready, failed or canceled.
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot_id | Yes | snapshot_id from run_scraper |
TDQS
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.
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.
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.
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.
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.
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_resultsCRead-only
Records of a finished run. Returns status "running" if not ready yet.
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot_id | Yes | snapshot_id from run_scraper |
TDQS
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.
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.
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.
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.
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.
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_fieldsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes |
TDQS
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.
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.
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.
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.
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.
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_scrapersARead-only
Reload the scraper list now instead of waiting for the daily refresh.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | ||
| method | Yes | One of the scraper collection_methods, exactly as listed (some names are misspelled on purpose) | |
| dataset_id | Yes | dataset_id from search_scrapers | |
| limit_per_input | No | discover_by_* only |
TDQS
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.
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.
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.
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.
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.
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_htmlARead-only
Scrape a single webpage URL and get back the results in HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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_markdownBRead-only
Scrape a single webpage URL and get back the results in MarkDown language.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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_batchBRead-only
Scrape multiple webpages URLs and get back the results in MarkDown language.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Array of URLs to scrape (max 5) |
TDQS
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.
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.
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.
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.
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.
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_refADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | The ref attribute from the ARIA snapshot (e.g., "23") | |
| element | Yes | Description of the element being clicked for context |
TDQS
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.
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.
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.
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.
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.
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_formADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Fields to fill in |
TDQS
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.
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.
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.
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.
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.
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_htmlBRead-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
| Name | Required | Description | Default |
|---|---|---|---|
| full_page | No | Whether 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
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.
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.
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.
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.
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.
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_textBRead-only
Get the text content of the current page
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_backBRead-only
Go back to the previous page
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_forwardBRead-only
Go forward to the next page
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_network_requestsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_screenshotARead-only
Take a screenshot of the current page. Set full_page to capture the whole scrollable page.
| Name | Required | Description | Default |
|---|---|---|---|
| full_page | No | Whether to screenshot the full page (default: false) You should avoid fullscreen if it's not important, since the images can be quite large |
TDQS
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.
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.
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.
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.
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.
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_scrollBRead-only
Scroll to the bottom of the current page
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_refARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | The ref attribute from the ARIA snapshot (e.g., "23") | |
| element | Yes | Description of the element to scroll to |
TDQS
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.
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.
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.
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.
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.
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_snapshotARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| filtered | No | 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. |
TDQS
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.
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.
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.
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.
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.
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_refADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | The ref attribute from the ARIA snapshot (e.g., "23") | |
| text | Yes | Text to type | |
| submit | No | Whether to submit the form after typing (press Enter) | |
| element | Yes | Description of the element being typed into for context |
TDQS
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.
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.
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.
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.
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.
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_refARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | The ref attribute from the ARIA snapshot (e.g., "23") | |
| element | Yes | Description of the element being waited for | |
| timeout | No | Maximum time to wait in milliseconds (default: 30000) |
TDQS
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.
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.
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.
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.
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.
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_datasetARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Number of records to return (max 10, default 10) | |
| sort | No | Sorting: "default", "random", or a custom array like [{"timestamp":"asc"}]. Use "default" or custom sort to paginate with search_after. | |
| filter | Yes | Filter tree describing which records to match. Required, cannot be empty. | |
| dataset_id | Yes | ||
| search_after | No | Pagination cursor from a previous response's search_after value. |
TDQS
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.
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.
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.
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.
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.
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_engineARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| cursor | No | Pagination cursor for next page | |
| engine | No | ||
| geo_location | No | 2-letter country code for geo-targeted results (e.g., "us", "uk") |
TDQS
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.
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.
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.
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.
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.
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_batchBRead-only
Run multiple search queries simultaneously. Returns JSON for Google, Markdown for Bing/Yandex.
| Name | Required | Description | Default |
|---|---|---|---|
| queries | Yes |
TDQS
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.
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.
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.
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.
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.
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_scrapersARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
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.
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.
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.
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.
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.
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_statsCRead-only
Tell the user about the tool usage during this session
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 tool update
v4.1.0- Changed
search_dataset1 field changed- changed
Input schema / properties / filter / anyOfPrevious 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" + } +]
3 tool updates
v4.0.0- Added
ask_brightdata_assistant - Removed
discover - Changed
scraping_browser_snapshot1 field changed- changed
Input schema / properties / filtered / descriptionPrevious 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."
27 tool updates
v3.1.0- Added
chatgpt_ai_insights - Added
extract - Added
get_scraper_details - Added
get_scraper_progress - Added
get_scraper_results - Added
list_dataset_fields - Added
perplexity_ai_insights - Added
refresh_scrapers - Added
run_scraper - Added
scrape_as_html - Added
scraping_browser_click_ref - Added
scraping_browser_fill_form - Added
scraping_browser_get_html - Added
scraping_browser_get_text - Added
scraping_browser_go_back - Added
scraping_browser_go_forward - Added
scraping_browser_navigate - Added
scraping_browser_network_requests - Added
scraping_browser_screenshot - Added
scraping_browser_scroll - Added
scraping_browser_scroll_to_ref - Added
scraping_browser_snapshot - Added
scraping_browser_type_ref - Added
scraping_browser_wait_for_ref - Added
search_dataset - Added
search_scrapers - Added
session_stats
5 tool updates
v2.9.3- Added
discover - Added
scrape_as_markdown - Added
scrape_batch - Added
search_engine - Added
search_engine_batch
TDQS
Scored across 32 tools
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.
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.
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.
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
Related MCP Connectors
Hosted Web Crawler MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Official Browserless MCP server: browser automation, scraping, screenshots and PDFs for AI agents.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
Related MCP Servers
- AlicenseBqualityFmaintenanceA Model Context Protocol (MCP) server for web research. Bring real-time info into Claude and easily research any topic.3278 npm298MIT
- AlicenseAqualityDmaintenanceModel Context Protocol server that enables Claude Desktop (or any MCP client) to fetch web content and process images appropriately.155 npmMIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables Claude to perform web research by integrating Google search, extracting webpage content, and capturing screenshots.3278 npm20MIT
- AlicenseAqualityCmaintenanceA Model Context Protocol server that enables Claude to perform web research by integrating Google search, extracting webpage content, and capturing screenshots in real-time.4278 npm9MIT