Skip to main content
Glama
ScrapeUnblocker

ScrapeUnblocker MCP Server

Official

ScrapeUnblocker MCP server

A Model Context Protocol server that lets Claude (and any other MCP client) fetch any web page's HTML - or run one of 100+ ready-made site plugins that return structured JSON - through the ScrapeUnblocker scraping API, bypassing anti-bot protection (Cloudflare, DataDome, PerimeterX, Akamai, Shape).

You bring your own API key. Nothing is shared or proxied through us.

Tools

Tool

What it does

fetch_html

Fetch the fully rendered HTML of a URL.

browse_page

Run interactive browser steps on a page (click, type, select, scroll, wait), then return the resulting HTML. Not read-only: it acts on the website.

list_elements

List a page's notable elements with a ready-to-use selector for each (selector discovery).

fetch_parsed

Fetch a page and return AI-parsed structured JSON.

google_search

Run a Google search and return organic results as JSON.

fetch_markdown

Fetch a page and return it as clean Markdown: the main content with absolute links, without scripts, styles, navigation or footer. Usually 2-25% the size of the HTML, so it is the cheap way for a model to read a page.

search_and_read

Search Google and read the top results in one call: Google's AI Overview (when there is one), the first 1-5 result pages as Markdown, and the other results as title, URL and snippet. Billed as one search plus one request per page read.

list_plugins

List the ready-made site plugins (100+: Amazon, Walmart, Zillow, Booking.com, Indeed, Google Trends, YouTube, App Store, Ahrefs, ...) with their parameters. Free - it calls nothing.

run_plugin

Run one site plugin and return its structured JSON.

amazon_search, amazon_product, amazon_reviews, walmart_search, ebay_search, google_shopping, google_local, maps_place_details, google_images, youtube_search, youtube_transcript, zillow_search, indeed_jobs, trustpilot_reviews, booking_hotels

The most-used site plugins as tools of their own, each with its parameters in the tool schema - one call, no list_plugins lookup. Same JSON as run_plugin.

Site plugins (structured JSON for known sites)

For many popular sites there is a plugin that returns the data already parsed - a Target search, a Zillow listing search, an app's App Store reviews, Google Trends for a few keywords. The model calls list_plugins (optionally with search: "zillow" or a category) to find the plugin and its parameters, then run_plugin with name and params (the most-used plugins, listed in the table above, can also be called directly as their own tools):

{ "name": "target_search", "params": { "query": "coffee maker", "max_results": 20 } }

Every plugin and parameter is documented on the plugin pages. Each run is billed like an API request.

Browser steps (interact, then capture)

Some pages only reveal what you need after you interact with them - accept a cookie banner, click a tab, type into a search box and submit, or scroll to trigger lazy loading. Pass a steps array to browse_page and those actions run in a real browser, in order, after the page loads; the resulting HTML is then returned.

Available actions:

Action

Fields

wait_for

selector, selector_type? (css/xPath/className/tagName), timeout_ms?

wait_for_text

value, timeout_ms?

wait

value (ms)

click

selector, selector_type?, timeout_ms?

type

selector, selector_type?, value, clear?, timeout_ms? (typed human-like)

select

selector, selector_type?, value, timeout_ms?

press_key

value (Enter, Tab, Escape, Backspace, Delete, Space, Arrow*, Home, End, PageUp, PageDown)

scroll

value ("bottom" or a pixel offset)

Steps are not idempotent - they run once per call - and they act on the website, so browse_page is the one tool not marked read-only. If a step fails, browse_page returns which step failed, why, and the page HTML at that moment so you can fix the selector and retry.

List elements (discover selectors first)

list_elements loads a page and returns a JSON list of its notable elements (links, inputs, buttons, selects, ...), each with a ready-to-use selector plus tag, text and useful attributes (name, id, type, placeholder, aria_label, href, ...):

{ "url": "https://example.com", "count": 42, "elements": [ { "tag": "input", "selector": "#search", "type": "text", "placeholder": "Search", "aria_label": "Search" } ] }

The natural workflow is discover, then act: call list_elements to find the selectors you need, then pass matching steps to browse_page to click/type/ select and capture the resulting HTML.

Related MCP server: SteadyFetch

Get an API key

Sign up and grab your key at app.scrapeunblocker.com. The server reads it from the SCRAPEUNBLOCKER_KEY environment variable.

Install

Claude Code

The easiest route is the official plugin, which installs this server for you, prompts for your API key (stored in your OS keychain rather than an environment variable), and adds a /scrape-url command plus reference skills:

/plugin marketplace add ScrapeUnblocker/claude-code-plugin
/plugin install scrapeunblocker@scrapeunblocker

See ScrapeUnblocker/claude-code-plugin.

To add the bare server instead:

claude mcp add scrapeunblocker \
  --env SCRAPEUNBLOCKER_KEY=your_api_key_here \
  -- npx -y scrapeunblocker-mcp

Claude Desktop

Add this to your claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "scrapeunblocker": {
      "command": "npx",
      "args": ["-y", "scrapeunblocker-mcp"],
      "env": {
        "SCRAPEUNBLOCKER_KEY": "your_api_key_here"
      }
    }
  }
}

Restart Claude Desktop and the ScrapeUnblocker tools appear.

Any other MCP client

Run the server over stdio:

SCRAPEUNBLOCKER_KEY=your_api_key_here npx -y scrapeunblocker-mcp

Example prompts

  • "Fetch the HTML of https://www.example-shop.com/product/123 and list the price."

  • "This page keeps blocking me: . Use fetch_html to get it."

  • "List the elements on , then use browse_page to type 'laptop' into the search box, press Enter, wait for the results, and give me the HTML."

  • "Search Google for 'best running shoes 2026' and give me the top 5 links."

  • "Read https://en.wikipedia.org/wiki/Web_scraping as Markdown and summarise it in five bullets."

  • "Search the web for the current population of Vilnius and cite the pages you read."

  • "Find coffee makers on Target under $50 and compare them with Walmart's."

  • "Show Google Trends for 'coffee' vs 'tea' in the US over the last year."

  • "What are the newest App Store reviews of WhatsApp saying?"

Development

npm install
npm run build      # bundles to dist/ with tsup
npm run typecheck
npm test           # builds, then runs the tools against a local stand-in API
SCRAPEUNBLOCKER_KEY=... node dist/index.js   # run the server

License

MIT

Available Tools

24 tools
amazon_productScrape an Amazon product pageA
Read-only

Fetches a single Amazon product and returns it as JSON: title, brand, price + currency, listPrice and savingsPercent, availability (+ a boolean inStock), rating, reviewCount, seller, features (bullet points), categories (breadcrumb) and images. Identify the product with either asin (plus marketplace) or a full product url. Amazon prices each page in the currency of the delivery location it infers from the visitor's IP address, so proxy_country defaults to the marketplace's home country (amazon.com -> US) and the call is routed through proxies in that country. The country of the proxy that served the request is reported as exitCountry. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

NameRequiredDescriptionDefault
urlNoFull Amazon product url, e.g. 'https://www.amazon.de/dp/B0BSHF7WHW'. The ASIN and marketplace are read from it, so `asin`/`marketplace` are not needed when a url is given.
asinNoAmazon product id (10-char ASIN, e.g. 'B0BSHF7WHW'; books use their ISBN-10). Give either `asin` (with `marketplace`) or a full `url`.
marketplaceNoRegional Amazon site the ASIN belongs to. Prices and currency differ per marketplace. One of: amazon.com, amazon.co.uk, amazon.de, amazon.fr, amazon.it, amazon.es, amazon.nl, amazon.se, amazon.pl, amazon.com.be, amazon.com.tr, amazon.ca, amazon.com.mx, amazon.com.br, amazon.co.jp, amazon.in, amazon.ae, amazon.sa, amazon.sg, amazon.com.au. Default: amazon.com.
proxy_countryNoProxy country the request is sent from (ISO-2, e.g. 'US', 'DE'). Defaults to the marketplace's home country so the price comes back in the expected currency.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, openWorldHint), and the description usefully adds the proxy-routing model, IP-derived currency behavior, and the `exitCountry` reporting detail. However, the closing sentence about billing says 'keep max_results modest' even though this tool has no max_results parameter — a confusing artifact that undercuts otherwise good behavioral disclosure.

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

Conciseness3/5

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

The field enumeration is front-loaded and earns its place given there is no output schema, but the text repeats 'Returns JSON' twice and ends with an off-topic billing/max_results sentence that has no bearing on this tool. Slightly bloated and not cleanly structured.

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

Completeness4/5

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

With no output schema, the description correctly carries the return-shape burden and adds proxy, currency, and billing context. Gaps remain around failure behavior (invalid ASIN, unavailable product) and rate limiting, but the essential call-time information is present.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes beyond it by explaining why `proxy_country` defaults to the marketplace's home country (currency consistency) and that the serving proxy is echoed as `exitCountry`. That causal context is not present in the schema and materially helps an agent choose parameter values.

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

Purpose5/5

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

Opens with a specific verb and resource ('Fetches a single Amazon product') and immediately enumerates the returned fields, so it is clearly distinguishable from amazon_search (list) and amazon_reviews (reviews) siblings. An agent knows exactly what this returns without opening the schema.

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

Usage Guidelines3/5

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

The description explains how to identify a product ('either `asin` (plus `marketplace`) or a full product `url`'), which is input selection rather than tool selection. It never says when to prefer this over browse_page, fetch_html, fetch_markdown, or amazon_search for the same URL, so usage is only implied by the single-product framing.

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

amazon_reviewsScrape the reviews on an Amazon product pageA
Read-only

Returns the review data an Amazon product page shows to a signed-out visitor, as JSON: the overall rating, total reviewCount (global ratings), the 5..1-star histogram (percent per star), the AI customersSay summary (overall text plus per-aspect sentiment, mentions, positive, negative, summary and the quoted review excerpts Amazon shows for the aspect) and the top reviews (each with id, url, author, rating, title, body, date, country, fromOtherCountry, verified, helpfulVotes, variant and images). Identify the product with asin (plus marketplace) or a product url. Scope: Amazon only shows its full review list to signed-in customers, so this endpoint returns the public slice on the product page - typically 5 to 13 top reviews, local ones first and then reviews from other countries - not a complete review export. When Amazon hides the top reviews behind a sign-in prompt (common on amazon.com), reviewsGated is true and reviews is empty; the rating, histogram and customers-say data, including its review excerpts, are still returned. Every field is always present and is null when the page does not show it. proxy_country defaults to the marketplace's home country; the country of the proxy that served the request is reported as exitCountry. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

NameRequiredDescriptionDefault
urlNoFull Amazon product url, e.g. 'https://www.amazon.de/dp/B0D1XD1ZV3'. The ASIN and marketplace are read from it, so `asin`/`marketplace` are not needed when a url is given.
asinNoAmazon product id (10-char ASIN, e.g. 'B07PXGQC1Q'; books use their ISBN-10). Give either `asin` (with `marketplace`) or a product `url`.
marketplaceNoRegional Amazon site the ASIN belongs to. Reviews are read from that store. One of: amazon.com, amazon.co.uk, amazon.de, amazon.fr, amazon.it, amazon.es, amazon.nl, amazon.se, amazon.pl, amazon.com.be, amazon.com.tr, amazon.ca, amazon.com.mx, amazon.com.br, amazon.co.jp, amazon.in, amazon.ae, amazon.sa, amazon.sg, amazon.com.au. Default: amazon.com.
proxy_countryNoProxy country the request is sent from (ISO-2, e.g. 'US', 'DE'). Defaults to the marketplace's home country. The reviews come from the marketplace itself, so any proxy country returns the same reviews.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover read-only and open-world safety, but the description goes further: it explains that only 5 to 13 signed-out reviews are available, that gated pages return reviewsGated=true with an empty reviews array while rating and histogram still come back, that every field is present and null when absent, and that billing is per request or per result page.

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

Conciseness4/5

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

The return shape is front-loaded and the caveats follow in a logical order (scope, gating, nulls, proxy, billing). It is dense and long, but each sentence carries a fact an agent needs; the items are packed into long parenthetical lists, which slightly hurts readability.

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

Completeness5/5

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

For a scrape tool with no output schema, the description fully covers unknown return shape, the gating edge case, null semantics, proxy behavior, and cost. Nothing an agent needs in order to call it or interpret the result is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both identity parameters and proxy_country are already fully documented. The description restates that asin/marketplace or url identifies the product and notes exitCountry, but adds no syntax or constraint beyond the schema. The baseline of 3 is appropriate.

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

Purpose5/5

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

The first sentence names a specific verb and resource: it returns the review data an Amazon product page shows to a signed-out visitor, as JSON. The scope constraint (public slice, not a full export) separates it from amazon_product and any bulk review export tool without needing the sibling's schema.

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

Usage Guidelines4/5

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

It states the context clearly: use this tool when you need the reviews, rating, histogram, or customers-say summary for an Amazon product, given an ASIN/marketplace or url. It also explains when coverage is limited (reviewsGated). However, it never names an alternative tool or an explicit exclusion, such as 'for product details use amazon_product'.

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

booking_hotelsScrape Booking.com hotelsA
Read-only

Searches Booking.com for location and returns the properties as JSON: name, price (with checkin/checkout), reviewScore, address, coordinates, image and a hotel url. Set adults, children, rooms and currency, and collect up to max_results across pages. Prices only appear when check-in/check-out dates are given. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

NameRequiredDescriptionDefault
roomsNoNumber of rooms.
adultsNoNumber of adults.
checkinNoCheck-in YYYY-MM-DD (needed for prices).
checkoutNoCheck-out YYYY-MM-DD.
childrenNoNumber of children.
currencyNoPrice currency: USD, EUR, GBP, AUD, CAD, CHF, JPY, CNY, INR, BRL, MXN, PLN, SEK, NOK, DKK, AED, SGD, ZAR, TRY, RUB. Default: USD.
locationYesCity or place to search, e.g. 'Austin' or 'Paris'.
max_resultsNoHow many properties to collect across pages. Default: 25.
proxy_countryNoProxy country the request is sent from (ISO-2, e.g. 'US', 'DE').

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry the safety profile (readOnly, openWorld, non-destructive), so the bar is lower, yet the description adds genuine operational context beyond them: pagination ('across pages') and the billing/rate model ('billed like an API request', 'one unit per result page'). That billing detail materially affects how an agent should size max_results.

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

Conciseness4/5

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

Front-loaded with purpose, then return shape, then usage tips and billing caveat in a logical order. Slightly redundant: JSON output is mentioned twice ('returns the properties as JSON' and 'Returns JSON'), which costs a little space.

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

Completeness5/5

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

With no output schema, the description correctly carries the return-value burden by listing the returned fields (name, price, reviewScore, address, coordinates, image, url), plus pagination and billing behavior. Nothing an agent needs to call or interpret this tool is missing.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter is already documented in the schema. The description restates the tunable knobs (adults, children, rooms, currency, max_results) and the checkin/checkout-for-prices rule, but adds little syntax or constraint information beyond what the schema provides. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Searches Booking.com for `location`') and enumerates the returned fields, so an agent immediately knows what this tool produces. It is the only hotel-scraping sibling, so distinction from the amazon/google/zillow tools is unambiguous.

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

Usage Guidelines4/5

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

Gives a real usage condition: prices only appear when check-in/check-out dates are provided, so an agent knows what to supply to get pricing. It also advises keeping max_results modest. It stops short of naming alternatives, though no close sibling competes with it.

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

browse_pageInteract with a page, then capture itA
Destructive

Load a web page in a real browser through ScrapeUnblocker, run an ordered list of browser actions on it (accept a cookie banner, click a tab, type into a search box, choose an option, press a key, scroll to trigger lazy loading, wait), then return the resulting HTML. Workflow: first call the list_elements tool to discover the real selectors on the page, then build steps against them. Steps act on the website and are NOT idempotent - they run once per call; never use them to buy, post, delete or change anything unless the user asked for exactly that. If a step fails, this tool returns which step failed, why, and the page HTML at that moment so you can fix the selector and retry. Billed as one request.

NameRequiredDescriptionDefault
urlYesThe absolute URL to open (http/https).
stepsYesOrdered browser actions to run in a real browser after the page loads, before the HTML is captured. Use `list_elements` first to find selectors. Runs once (not idempotent).
wait_valueNoThe CSS selector or JS expression paired with wait_method.
wait_methodNoOptional render-wait before the steps run: 'css' waits for a selector, 'js' waits for a JS expression to be truthy.
proxy_countryNoOptional ISO 3166-1 alpha-2 country code to route through, e.g. 'US', 'GB', 'DE'.
sleep_secondsNoExtra seconds to wait after load.
method_timeout_secondsNoCap in seconds for the render-wait method.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructive=true, idempotent=false and openWorld=true, so the bar is lower. The description still adds real value: steps run once per call, failures report which step failed plus the page HTML at that moment for retry, and billing is one request — context the annotations do not convey.

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

Conciseness4/5

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

Front-loaded purpose sentence followed by a labeled 'Workflow:' segment and failure semantics; every sentence contributes. It is dense but slightly long, and the mid-sentence parenthetical action list is redundant with the step schema.

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

Completeness4/5

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

For a 7-param tool with a nested anyOf `steps` array and no output schema, the description covers failure returns, billing, and step-construction workflow. Minor gaps remain: optional knobs like proxy_country and wait_method/sleep_seconds are only explained by the (fully covered) schema, not the prose.

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

Parameters4/5

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

Schema coverage is 100%, so the schema carries parameter documentation and the baseline is 3. The description adds meaning beyond the schema by explaining how `steps` should be constructed (discover selectors with `list_elements` first) and that steps execute once, which shapes how an agent authors the array.

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

Purpose5/5

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

The first sentence names a specific verb chain (load in a real browser, run ordered actions, return HTML) and the resource (ScrapeUnblocker-backed page render). It clearly differentiates from siblings by emphasizing interaction, and the title reinforces the two-phase behavior.

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

Usage Guidelines5/5

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

Explicit workflow routing: call `list_elements` first to discover selectors, then build `steps`. It also states a when-not ('never use them to buy, post, delete or change anything unless the user asked'), and names the prerequisite tooling, 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.

fetch_htmlFetch page HTMLA
Read-only

Fetch the fully rendered HTML of any web page through ScrapeUnblocker, bypassing anti-bot protection (Cloudflare, DataDome, PerimeterX, Akamai, Shape). Use this when a normal fetch is blocked (403/429, captcha, 'access denied') or when the page needs a real browser to render. Returns the raw HTML as text. To read or summarise a page, fetch_markdown is much smaller. To click, type or scroll before capturing, use browse_page.

NameRequiredDescriptionDefault
urlYesThe absolute URL to fetch (http/https).
wait_valueNoThe CSS selector or JS expression paired with wait_method (e.g. '#price' or 'document.readyState==="complete"').
wait_methodNoOptional render-wait strategy: 'css' waits for a selector, 'js' waits for a JS expression to be truthy.
proxy_countryNoOptional ISO 3166-1 alpha-2 country code to route through, e.g. 'US', 'GB', 'DE'.
sleep_secondsNoExtra seconds to wait after load before capturing the HTML.
method_timeout_secondsNoCap in seconds for the render-wait method.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, openWorld, and non-destructive behavior. The description adds meaningful context beyond that: anti-bot bypass, real browser rendering, and raw HTML output. It does not contradict the annotations, though it omits rate-limit or failure-mode details.

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

Conciseness5/5

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

The description is front-loaded with the main action and return format, then gives concise routing guidance for alternatives. Every sentence has a clear purpose with no wasted prose.

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

Completeness5/5

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

The tool is open-world and has six parameters, but the schema fully documents them and annotations cover safety. The description supplies the missing high-level behavior and return type, making it complete enough to call correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six parameters thoroughly. The description does not add parameter-specific meaning beyond what is already in the schema, which is acceptable at baseline 3.

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

Purpose5/5

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

The description gives a specific verb and resource: fetching fully rendered HTML of any web page via ScrapeUnblocker. It explicitly states the return format and distinguishes sibling tools like fetch_markdown and browse_page.

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

Usage Guidelines5/5

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

It names concrete conditions for use: normal fetch blocked by 403/429, captcha, access denied, or when a real browser is needed to render. It also routes users away to fetch_markdown for reading/summarising and browse_page for interactions.

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

fetch_markdownFetch page as MarkdownA
Read-only

Fetch a web page in a real browser through the ScrapeUnblocker API (https://docs.scrapeunblocker.com) and return it as clean Markdown: the main content with absolute links, without scripts, styles, navigation or footer. Use it to read, quote or summarise a page; it is usually 2-25% the size of the HTML. Works on JavaScript-rendered pages and on pages that refuse ordinary fetches (403/429, captcha). Use fetch_html instead when you need the markup, selectors or browser steps. Billed as one request.

NameRequiredDescriptionDefault
urlYesThe absolute URL to read (http/https).
wait_valueNoThe selector/expression paired with wait_method.
wait_methodNoOptional render-wait: 'css' selector or 'js' expression.
proxy_countryNoOptional ISO country code to route through, e.g. 'US'.
sleep_secondsNoExtra seconds to wait after load.
main_content_onlyNoDrop navigation, page header, footer and sidebars (default true). False keeps the whole page.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/openWorldHint/non-destructive, and the description adds real context beyond them: real browser rendering, the size reduction (2-25% of HTML), that it defeats 403/429/captcha blocks, and the billing unit ('one request'). These are operational traits an agent cannot get from the structured fields.

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

Conciseness5/5

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

Four dense sentences, front-loaded with what it returns, then capabilities, then the sibling routing rule, then cost. Every sentence carries distinct information and none repeats the schema or annotations.

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

Completeness5/5

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

Despite no output schema, the description specifies the return format precisely (clean Markdown, absolute links, stripped chrome), covers failure/blocking scenarios, and states the billing model. An agent has everything needed to invoke it correctly and interpret the result.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter is documented in the schema, so the baseline is 3. The description only gestures at the render-wait capability ('browser steps') and adds no syntax or defaults beyond the schema, so it neither helps nor hurts.

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

Purpose5/5

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

States a specific verb and resource (fetch a web page, return clean Markdown) and immediately specifies the output shape: main content with absolute links, no scripts/styles/nav/footer. It also names the sibling it is not — fetch_html — so an agent can distinguish them without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit use cases ('read, quote or summarise a page') and an explicit routing rule with the alternative: 'Use fetch_html instead when you need the markup, selectors or browser steps.' It also names the conditions that select this tool (JS-rendered pages, 403/429, captcha). Nothing is left to inference.

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

fetch_parsedFetch AI-parsed page dataA
Read-only

Fetch a web page through ScrapeUnblocker and return AI-parsed structured JSON instead of raw HTML (e.g. product details, article content). Best for extracting fields from product, listing or article pages without writing your own HTML parsing. If the page holds no structured data, the result says so and returns the rendered HTML instead (billed like fetch_html).

NameRequiredDescriptionDefault
urlYesThe absolute URL to fetch and parse.
rules_hintNoOptional natural-language hint about what to extract, to guide parsing.
proxy_countryNoOptional ISO country code to route through, e.g. 'US'.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, openWorld), and the description adds genuinely non-obvious behavior: the graceful degradation to rendered HTML when no structured data exists, plus a billing implication tied to fetch_html. It does not discuss rate limits, proxy/auth requirements, or latency, so it is strong but not exhaustive.

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

Conciseness5/5

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

Three tight sentences: capability and output format first, target use case second, fallback/billing caveat last. Every clause carries information an agent needs, with no restatement of the title or schema.

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

Completeness4/5

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

With no output schema, the description correctly carries the return-value burden by describing structured JSON, its fallback, and cost behavior. The one remaining gap is that the shape of the parsed JSON (field naming, nesting) is left unspecified, though that is arguably discoverable from the response itself.

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

Parameters3/5

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

Schema description coverage is 100%, so url, rules_hint, and proxy_country are already fully documented in the schema. The description implies rules_hint's guiding role but adds no syntax, format, or edge-case detail beyond the structured fields, so the baseline of 3 applies.

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

Purpose5/5

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

Specific verb (fetch) plus explicit output contract: AI-parsed structured JSON rather than raw HTML, with examples (product details, article content). It implicitly distinguishes itself from fetch_html by naming that alternative's output format, so an agent can tell the two apart without opening a schema.

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

Usage Guidelines4/5

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

"Best for extracting fields from product, listing or article pages without writing your own HTML parsing" gives clear positive selection criteria, and the fallback sentence tells the agent what happens on pages lacking structured data. It stops short of an explicit "use fetch_html when you want raw HTML" routing statement, which keeps it from a 5.

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

google_imagesScrape Google Images resultsA
Read-only

Runs the Google Images vertical (udm=2) for q and returns the image results as JSON. Every result carries imageUrl (the full-resolution origin image, not a Google thumbnail; for an image found inside a document such as a PDF, which has no URL of its own, it is Google's thumbnail and sourcePageUrl is the document), sourceDomain and googleImagesUrl (the Google Images viewer link, i.e. the /imgres?... URL a browser copies from the result tile), plus sourcePageUrl, title, sourceName, thumbnailUrl, width, height and fileSize where available. Set proxy_country to target a market: the Google market (gl) follows it automatically, and gl is only an optional override. pages fetches up to 5 result pages of ~100 each; every page fetched is billed as one request. time_range (past hour/day/week/month/year) or date_from/date_to limit the results to images Google found in that period, so a repeated scan returns only what is new. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

NameRequiredDescriptionDefault
qYesImage search term, e.g. 'eiffel tower'.
glNoOptional Google market override (ISO-2, e.g. 'us', 'de'). Leave empty and the market follows `proxy_country` ('us' when neither is set). The market, not the proxy country, is what decides which images rank.
pagesNoHow many Google Images result pages to fetch (1-5, ~100 results each; Google stops at ~400-500 per query). Each page fetched is billed as one request. Default: 1.
date_toNoOnly images Google found on or before this date (YYYY-MM-DD). Works alone or with `date_from`; cannot be combined with `time_range`.
date_fromNoOnly images Google found on or after this date (YYYY-MM-DD). Works alone or with `date_to`; cannot be combined with `time_range`.
time_rangeNoOnly images Google found within this recent period: `hour`, `day`, `week`, `month` or `year` (Google Images' Tools > Time filter). Use it to get just the new results on repeated scans. Cannot be combined with `date_from`/`date_to`.
max_resultsNoOptional cap on the number of results returned (default: all results of the fetched pages).
proxy_countryNoProxy country the request is sent from (ISO-2, e.g. 'US', 'DE'). Image results are market-specific.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover read-only/safe/open-world status, but the description adds substantial non-obvious behavior beyond them: exact return field semantics (e.g., `imageUrl` is the full-resolution origin, except for PDF-embedded images where it is a Google thumbnail), billing per page, page limits (~400-500 per query), and pagination behavior up to 5 pages.

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

Conciseness4/5

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

It is information-dense but front-loads the main purpose and then walks through parameters in a logical order. It is somewhat long and could be tightened, but every sentence carries useful operational detail.

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

Completeness5/5

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

For an 8-parameter, no-output-schema tool, it covers purpose, output shape, parameter interactions, limits, and billing. An agent has enough information to call it correctly without opening the schema.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; however, the description adds meaning not fully captured by the schema, such as how `proxy_country` automatically sets `gl` unless overridden, and clarifies `time_range`/`date_from`/`date_to` semantics for repeated scans.

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

Purpose5/5

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

States a specific verb ('Runs the Google Images vertical') and resource, and identifies the concrete output artifact (image results as JSON) with field-level detail. It is clearly distinguished from siblings like google_search, google_shopping, and google_local by naming the `udm=2` vertical.

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

Usage Guidelines4/5

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

Gives clear context for several parameters: use `time_range`/`date_from`/`date_to` for repeated new-result scans, set `proxy_country` to target a market, and keep `max_results` modest due to billing. It does not explicitly say when to prefer this over google_search or other image-capable siblings, but the vertical-specific purpose largely makes that unnecessary.

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

google_localScrape Google Local business listingsA
Read-only

Runs a Google Local (tbm=lcl) search for keyword and returns up to ~20 businesses as JSON: name, rating, reviews, price, category, address, phone, website, hours, and a top review_snippet. phone and website are null when Google does not render them for that result - service businesses (plumbers, contractors) almost always carry both. Local results are location-sensitive - set proxy_country (and optionally gl/hl) to target a market. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

NameRequiredDescriptionDefault
glNoGoogle country of search, ISO-2 lowercase, e.g. 'us', 'de'.
hlNoGoogle UI language, e.g. 'en', 'de', 'fr'. Default: en.
keywordYesSearch phrase, e.g. 'coffee shops in chicago' or 'plumbers near SW1A'.
proxy_countryNoProxy country the request is sent from (ISO-2, e.g. 'US', 'GB'). Local results are location-sensitive, so pick the country you want results for.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, openWorld, non-destructive), and the description adds genuinely new behavior: phone/website come back null when Google doesn't render them, service businesses usually carry both, and billing is one unit per result page fetched. Cost and data-availability disclosure beyond the annotations is exactly the value-add expected.

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

Conciseness4/5

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

Front-loads purpose and return shape, then tacks on location and billing caveats; every sentence carries information. Minor redundancy in restating 'Returns JSON' after already saying results come back as JSON.

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

Completeness5/5

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

With no output schema, the description compensates by listing all returned fields and flagging which can be null. Combined with location and billing guidance, an agent has everything needed to call and interpret the tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining the purpose of proxy_country plus gl/hl as a location-targeting mechanism rather than restating their type. It adds intent the schema alone doesn't convey.

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

Purpose5/5

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

States a specific verb and resource ('Runs a Google Local (`tbm=lcl`) search for `keyword`') and enumerates the returned fields, which cleanly separates it from google_search and maps_place_details. An agent can tell this is the SERP-scraping local-results tool without opening the schema.

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

Usage Guidelines4/5

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

Gives clear operational context: local results are location-sensitive, so set proxy_country and optionally gl/hl to target a market, and keep max_results modest because of billing. It stops short of naming an alternative (e.g., maps_place_details) or stating when not to use this tool.

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

google_shoppingScrape Google Shopping product listingsA
Read-only

Runs the Google Shopping vertical (udm=28) for q and returns the product cards as JSON: title, price, currency, currencyCode, originalPrice, discount, merchant, rating, reviewCount and Google's own ids for the product (productId, catalogId, offerId - stable across searches, for tracking one product). Set proxy_country/gl to target a market (prices/merchants are region-specific) and min_price/max_price to filter. One render returns the first page of products (v1). Note: Google Shopping exposes no per-product URL, so url is omitted and image is best-effort. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

NameRequiredDescriptionDefault
qYesProduct search term, e.g. 'wireless headphones'.
glNoMarket of search, ISO-2, e.g. 'us', 'de'. Sets prices/merchants. Default: us.
max_priceNoMaximum price filter (whole units, gl currency).
min_priceNoMinimum price filter (whole units, gl currency).
max_resultsNoHow many products to return (v1: first page). Default: 60.
proxy_countryNoProxy country the request is sent from (ISO-2, e.g. 'US', 'DE'). Prices/merchants are market-specific.

TDQS

A4/5.0
Behavior5/5

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

Beyond the readOnly/openWorld annotations, it discloses pagination limits ('one render returns the first page'), known data gaps ('no per-product URL, so `url` is omitted and `image` is best-effort'), and billing behavior ('billed like an API request... one unit per result page'). These are exactly the constraints an agent needs before calling.

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

Conciseness4/5

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

Dense and front-loaded: purpose and return shape come first, then configuration, then caveats and billing. It is a long single paragraph, but nearly every clause carries new information an agent would otherwise have to discover by trial.

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

Completeness5/5

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

With no output schema, the description takes on the job of listing return fields and does so explicitly, plus flags the omitted/approximate fields. Combined with annotations and full schema coverage, an agent has everything needed to call this correctly.

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

Parameters3/5

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

Schema coverage is 100%, so all six parameters are already documented, and the description mostly restates the same semantics (region-specific prices, price filters). It adds value on return identifiers (productId/catalogId/offerId stable across searches) but not on parameter meaning, so the baseline 3 applies.

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

Purpose4/5

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

Names the specific vertical (`udm=28`) and resource ('product cards') and enumerates the returned fields, so the agent knows exactly what this produces. It implicitly distinguishes itself from google_search by scoping to the Shopping vertical, but never explicitly names a sibling as the alternative.

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

Usage Guidelines3/5

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

Guidance exists for configuring the call ('set proxy_country/gl to target a market', 'min_price/max_price to filter', 'keep max_results modest'), but there is no statement of when to reach for this over amazon_search, walmart_search, or google_search. Usage is implied by context rather than declared.

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

indeed_jobsScrape Indeed job listingsA
Read-only

Searches Indeed for query in location and returns the job listings as JSON: title, company, location, salary (with parsed min/max), jobTypes, companyRating, a snippet, datePosted (YYYY-MM-DD), sponsored (Indeed's paid placement) and a clean job url. Filter with country, job_type, days (posting age), remote, sort with sort (date returns the collected jobs newest first, sponsored ones included), and collect up to max_results across pages. Indeed sits behind Cloudflare + PerimeterX - handled for you. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

NameRequiredDescriptionDefault
daysNoMax posting age in days: 1, 3, 7, 14.
sortNoOrdering: relevance, date. Default: relevance.
queryYesWhat to search, e.g. 'software engineer' or 'nurse'.
startNo0-based result offset to start from. Default: 0.
radiusNoSearch radius in miles/km around the location.
remoteNoOnly remote jobs. Default: false.
countryNoIndeed country site: us, uk, ca, au, in, ie, de, fr, nl, es, it, at, ch, be, pl, se, sg, za, nz, mx. Default: us.
job_typeNoJob type: fulltime, parttime, contract, internship, temporary.
locationNoWhere, e.g. 'Austin, TX' or 'London'.
max_resultsNoHow many jobs to collect across pages. Default: 30.
proxy_countryNoProxy country the request is sent from (ISO-2, e.g. 'US', 'DE'). Defaults to the country's site.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnly/openWorld/non-destructive), and the description adds substantially more: Cloudflare + PerimeterX anti-bot handling, that sponsored placements appear in results, and the billing model (per result page fetched, billed like an API request). The cost/cadence disclosure is exactly the kind of behavior annotations cannot express.

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

Conciseness4/5

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

A single dense, front-loaded paragraph with no filler sentences; outputs are listed before filter/sort guidance. The run-on style and stacked parentheticals make it slightly harder to scan than a bulleted alternative, but nothing is wasted.

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

Completeness5/5

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

With 11 parameters and no output schema, the description carries the return-shape burden and does so by naming every returned field, plus discloses cost, anti-bot handling, and pagination behavior. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already defines every parameter; baseline would be 3. The description still adds meaning beyond the schema by glossing `days` as posting age, explaining that sort='date' returns collected jobs newest-first with sponsored included, and noting max_results spans pages.

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

Purpose5/5

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

Opens with a specific verb+resource ('Searches Indeed for `query` in `location`') and enumerates the returned fields, so the agent immediately knows what comes back. No sibling tool covers job listings, so it is unambiguously the right pick among the search scrapers.

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

Usage Guidelines4/5

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

Gives concrete guidance on how to narrow results (country, job_type, days, remote) and ordering (sort), plus a cost-motivated caution to keep max_results modest. It lacks explicit when-not-to-use or alternative-tool routing, but there is no competing sibling for this resource.

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

list_elementsList page elements (selector discovery)A
Read-only

Load a page through ScrapeUnblocker and return a JSON list of its notable elements (links, inputs, buttons, selects, etc.) with a ready-to-use selector for each, plus tag, text and useful attributes (name, id, type, placeholder, aria_label, href, ...). Read-only and does not interact with the page. This is the discovery half of interactive scraping: call list_elements to find the selectors you need, then pass matching steps to browse_page to click/type/select and capture the resulting HTML.

NameRequiredDescriptionDefault
urlYesThe absolute URL whose elements you want to list.
proxy_countryNoOptional ISO country code to route through, e.g. 'US'.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces with 'Read-only and does not interact with the page' while adding non-obvious context: fetching happens via ScrapeUnblocker (an external proxy service) and the response is a JSON element list with selectors and attributes. It stops short of covering failure behavior (blocked pages, non-HTML content) or proxy fallback, so it is strong but not exhaustive.

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

Conciseness5/5

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

Two sentences, both front-loaded: the first states the action and the return shape, the second supplies the workflow linkage. No filler, and the discovery-only constraint is stated before the sibling hand-off.

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

Completeness4/5

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

With no output schema, the description carries the burden and does describe the return payload (element kinds, selector, tag/text/attributes). What an agent would still want — behavior on blocked or non-HTML pages, and whether element listing is capped — is absent, keeping it just below a 5.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (`url`, `proxy_country`) are documented in-schema, so the description need only not contradict them. It mentions loading 'a page' but adds no format or semantics beyond the schema, which lands at the baseline of 3.

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

Purpose5/5

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

States a concrete verb and resource ('Load a page ... return a JSON list of its notable elements') and enumerates what is returned, including the ready-to-use `selector` per element. The opening verb+resource pair makes it immediately distinguishable from sibling fetch tools such as fetch_html or browse_page.

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

Usage Guidelines5/5

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

Explicitly frames the tool as the 'discovery half of interactive scraping' and names the follow-up path: pass matching `steps` to `browse_page`. This gives an agent both when-to-use and the concrete alternative it complements, with no inference required.

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

list_pluginsList site pluginsA
Read-only

List ScrapeUnblocker's ready-made site plugins: scrapers for specific sites that return clean structured JSON (Amazon, Walmart, Target, eBay, Zillow, Redfin, Booking.com, Airbnb, Indeed, Glassdoor, Google Trends / Shopping / Maps, YouTube, Spotify, App Store, Google Play, Trustpilot, Yelp, Ahrefs, Semrush and 100+ more). Check here before scraping a known site with fetch_html - a plugin returns the data already parsed. Without arguments it lists every plugin with its parameters (* = required); category or search narrow the list; name returns one plugin's full parameter docs. Free - it calls nothing.

NameRequiredDescriptionDefault
nameNoA plugin name, for its full parameter docs.
searchNoOnly plugins whose name or description mentions this, e.g. 'zillow' or 'reviews'.
categoryNoOnly plugins in this category.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds useful context beyond that: it is free, 'calls nothing', explains the '*' required marker, and describes what each argument mode returns. Minor gap: it doesn't say how large the full plugin list is or whether results are paginated.

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

Conciseness4/5

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

Front-loaded with the core purpose and the decision rule, with operational details after. The long parenthetical list of example sites is somewhat verbose but earns its place by making the tool discoverable for site-specific queries.

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

Completeness5/5

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

No output schema exists, so the description must explain return behavior; it does: no arguments lists every plugin with parameters, name returns full parameter docs, and plugins return clean structured JSON. Nothing essential for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: the default no-argument behavior, the narrowing effect of category/search, that name returns one plugin's full parameter docs, and that '*' means required. This is meaningful added value.

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

Purpose5/5

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

States a specific verb and resource ('List ... site plugins') and immediately clarifies what a plugin is: a scraper for a specific site returning parsed JSON. It also names the sibling it replaces for known sites ('fetch_html'), so an agent can distinguish it without opening either schema.

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

Usage Guidelines5/5

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

Explicitly says to check here before scraping a known site with fetch_html, and explains the three narrowing modes: no args for all plugins, category/search to narrow, name for one plugin's full docs. When-to-use and alternatives are both stated.

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

maps_place_detailsScrape Google Maps place detailsA
Read-only

Returns the full data for one Google Maps place as JSON: name, address (+ addressLines), phone, website, rating, categories, latitude/longitude, plusCode, hours + openNow, description, photo, cid, featureId, googleMapsUrl and relatedPlaces. Identify the place with place_id (ChIJ...), a Maps url, or a raw feature_id (0xHEX:0xHEX). Location-neutral - the feature id resolves the place directly; proxy_country defaults to a US proxy to clear Google's consent wall. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

NameRequiredDescriptionDefault
glNoGoogle country, ISO-2 lowercase, e.g. 'us'. Default: us.
hlNoGoogle UI language, e.g. 'en', 'de', 'fr'. Default: en.
rawNoInclude the decoded place core array under `raw`. Default: false.
urlNoA Google Maps place URL: a /maps/place/... URL, a maps.app.goo.gl share link or a maps?cid= link. The place is read out of it.
place_idNoA Google place_id, e.g. 'ChIJN1t_tDeuEmsRUsoyG83frY4'.
feature_idNoA Maps feature id '0xHEX:0xHEX', e.g. '0x47e66e2964e34e2d:0x8ddca9ee380ef7e0'. Fastest - no resolve step.
proxy_countryNoProxy country the request is sent from (ISO-2, e.g. 'US', 'DE'). Defaults to US - an EU country hits Google's consent wall. Default: us.

TDQS

A5/5.0
Behavior5/5

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

Beyond the safety hints provided in the annotations, the description adds valuable behavioral context, such as the nature of the output (JSON), the operational constraint of the `proxy_country` default (clearing Google's consent wall), and the billing model.

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

Conciseness5/5

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

The description is highly dense with information, but it is structured effectively. It leads with the output format, then provides input identification methods, followed by operational constraints.

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

Completeness5/5

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

Given that there is no output schema, the description is remarkably complete by listing the specific fields returned (name, address, rating, hours, etc.). This gives the AI agent a full mental model of what the tool produces.

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

Parameters5/5

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

Despite 100% schema coverage, the description adds significant value by clarifying the expected formats for the identifiers (`place_id` e.g., 'ChIJ...', `feature_id` e.g., '0xHEX:0xHEX') and explaining the functional requirement of the `proxy_country` parameter.

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

Purpose5/5

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

The description explicitly states the purpose is to return the 'full data for one Google Maps place as JSON.' It clearly differentiates itself from broader search tools by focusing on scraping detailed attributes from a specific identifiable source.

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

Usage Guidelines5/5

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

The description provides detailed usage advice by stating that `feature_id` resolves a place directly and is 'location-neutral.' It also gives critical operational advice regarding billing ('keep max_results modest').

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

run_pluginRun a site pluginA
Read-only

Run one ScrapeUnblocker site plugin and return its JSON - e.g. a Target or Walmart search, a Zillow listing search, Google Trends for some keywords, an app's App Store reviews. Find the plugin and its parameters with list_plugins first. params uses the parameter names list_plugins shows (snake_case); a list value is fine where a parameter takes several. Each run is billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

NameRequiredDescriptionDefault
nameYesThe plugin to run, as list_plugins names it.
paramsNoThe plugin's parameters, e.g. {"query": "coffee maker", "max_results": 20}.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), and the description adds genuinely non-obvious context: each run is billed like an API request and plugin listing bills per result page, with advice to keep max_results modest. It does not describe error behavior when a plugin name/param combination is invalid, which matters for a pass-through executor.

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

Conciseness4/5

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

Front-loaded with the core action, then prerequisites, then param conventions, then cost caveats — a logical ordering with no filler. The example list is slightly long for the space it occupies, though it does aid recognition of what 'plugin' means.

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

Completeness4/5

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

No output schema exists, but the description states the return is the plugin's own JSON, which is appropriate since the shape necessarily varies by plugin. Combined with the discovery prerequisite and cost semantics, an agent has what it needs to call this correctly; only failure-mode guidance is absent.

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

Parameters4/5

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

Schema coverage is 100%, so the enum and object shape are already documented; the description still adds value by stating params use the exact snake_case names list_plugins reports and that array values are acceptable where a parameter takes several. It does not flag whether unknown/extra param keys are rejected, despite additionalProperties=false on the outer object.

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

Purpose5/5

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

States a specific verb plus resource ('Run one ScrapeUnblocker site plugin and return its JSON') and grounds it with concrete examples (Target/Walmart search, Zillow listings, Google Trends, App Store reviews). An agent immediately understands this is the generic executor behind the plugin catalog, which is materially different from the named sibling wrappers like amazon_search or zillow_search.

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

Usage Guidelines4/5

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

'Find the plugin and its parameters with list_plugins first' is an explicit prerequisite that routes the agent through the correct discovery tool before invocation. It does not explicitly say when to prefer run_plugin over the dedicated sibling tools (amazon_search, walmart_search, youtube_transcript), which is the one real ambiguity given both exist side by side.

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

search_and_readSearch Google and read the top resultsA
Read-only

Search Google through the ScrapeUnblocker API (https://docs.scrapeunblocker.com) and read the top results in one call: returns Google's AI Overview when there is one, each of the first results pages (default 3, max 5) as Markdown, and the other organic results as title, URL and snippet. Use it to answer a question from the live web. Billed as one request for the search plus one per page read.

NameRequiredDescriptionDefault
keywordYesThe search query.
resultsNoHow many top results to read (default 3, max 5).
proxy_countryNoOptional ISO country code to search from and read the pages through, e.g. 'US'.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint. The description adds real context beyond them: the response composition (AI Overview, per-page Markdown, organic title/URL/snippet) and the cost model (one request plus one per page read). It stops short of noting auth, rate limits, or failure modes.

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

Conciseness5/5

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

Three sentences, fully front-loaded with the action and the return shape before the usage hint and billing note. Every clause carries information; the docs link earns its place as a reference.

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

Completeness5/5

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

With no output schema, the description does the work of describing returns (AI Overview, Markdown pages, snippets) and pairing that with the billing model. Combined with annotations covering the safety profile, nothing critical for correct invocation is missing.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all three parameters, including min/max bounds. The description restates the `results` default and cap but adds nothing about `proxy_country` or query formatting, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific compound verb (search Google + read top results) and the exact resource, and crisply describes what it returns. The 'in one call' phrasing implicitly distinguishes it from the search-only and fetch-only siblings like google_search and fetch_markdown.

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

Usage Guidelines4/5

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

"Use it to answer a question from the live web" gives a clear use context, and the compound nature of the tool implies when it beats a plain search. However, it never names an alternative such as google_search or fetch_markdown, nor states when not to use it, so it lacks explicit exclusions.

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

trustpilot_reviewsScrape Trustpilot company reviewsA
Read-only

Returns a company's Trustpilot profile and reviews as JSON. company is the reviewed domain (e.g. www.nike.com). The response has a company summary (trustScore, totalReviews, ratingDistribution 1-5, categories, contact) and a reviews array - each with rating, title, text, verified, author (name, country, review count), reply (the company's response) and dates. Page with page/pages (20 reviews per page), and filter with stars, sort (recency/relevancy), language, date, search, verified or replies. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

NameRequiredDescriptionDefault
dateNoOnly reviews from a recent window: last30days, last3months, last6months, last12months. Omit for all time.
pageNo1-based page to start from (20 reviews/page). Default: 1.
sortNoOrdering: recency, relevancy. Default 'recency' (newest first). Default: recency.
pagesNoHow many consecutive pages to fetch from `page` onward (20 reviews each). Stops early at the last page. Default: 1.
starsNoOnly reviews with these star ratings (1, 2, 3, 4, 5). Repeatable, e.g. stars=4&stars=5.
searchNoKeyword to search within the company's reviews.
companyYesThe reviewed company's domain, e.g. 'www.nike.com' or 'nike.com'. A full site URL or a pasted Trustpilot review URL is also accepted.
repliesNoOnly reviews the company has replied to. Default: false.
languageNoReview language ISO-2 code (e.g. 'en', 'de') or 'all'. Default 'all'. Default: all.
verifiedNoOnly verified reviews (Trustpilot's verified badge). Default: false.
proxy_countryNoProxy country the request is sent from (ISO-2, e.g. 'US', 'DE'). Defaults to a country chosen for the site.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly and openWorld, so safety is covered. The description adds meaningful behavioral detail beyond that: the billing model ('billed like an API request'), that listing plugins bill per result page fetched, and how pagination interacts with cost. It does not mention rate limits or auth, but the cost/pagination behavior is a genuine value-add.

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

Conciseness3/5

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

Front-loaded with purpose and response shape, which is good, but the middle sentence is a dense run-on packing pagination and seven filters into one line. It is informative but not tightly structured, and the filter list partly duplicates the schema.

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

Completeness4/5

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

With 11 params, no output schema, and no annotations for return shape, the description appropriately documents the response structure (company summary fields, reviews array fields) and pagination mechanics. The billing note covers a real concern for a scraping tool. It could mention rate limits or failure modes, but it is largely complete.

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

Parameters3/5

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

Schema coverage is 100%, so parameters are already documented. The description reinforces the key semantics - page/pages with 20 reviews per page, stars/sort/language/date/search/verified/replies as filters - but adds little syntax beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (scrape/returns) and resource (a company's Trustpilot profile and reviews) and names the required identifier. Clearly distinct from siblings like amazon_reviews, which target a different source.

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

Usage Guidelines3/5

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

Implied usage is scraping Trustpilot reviews for a domain, but the description never says when to prefer this over alternatives or when not to use it. It does add the billing note about keeping max_results modest, which offers practical guidance on volume rather than tool selection.

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

youtube_transcriptGet a YouTube video transcriptA
Read-only

Returns a YouTube video's captions as JSON: timestamped segments (start, dur, text) and a joined text, plus availableLanguages, the picked language, isAutoGenerated, and the video's title, author and lengthSeconds. Pass a video id or any YouTube video URL; choose a caption language with lang. Ideal for LLM/RAG pipelines, subtitles and content analysis. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

NameRequiredDescriptionDefault
langNoPreferred caption language code, e.g. 'en'. Omit for the default/first track. A prefix like 'en' matches 'en-US'.
videoYesVideo id (dQw4w9WgXcQ) or any YouTube video URL.
formatNoOutput shape: text, segments. 'segments' returns timestamps; 'text' returns only the joined plaintext. Default: segments.
proxy_countryNoProxy country the request is sent from (ISO-2, e.g. 'US', 'DE') for the watch page. Defaults to US.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the read-only/safe profile, and the description adds real behavioral context beyond them: the billing model ('Billed like an API request'), the output shape, and the language-prefix matching behavior. The closing clause 'listing plugins bill one unit per result page they fetch, so keep max_results modest' is a copy-paste artifact — this tool has no max_results parameter — which injects mild noise, keeping it from a 5.

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

Conciseness4/5

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

A single dense paragraph that front-loads the return contract, then input forms, then use cases, then cost — a sensible order with no wasted sentences. It loses a point for the trailing `max_results` billing clause, which belongs to a different tool family and should have been trimmed.

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

Completeness4/5

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

With no output schema, the description does the heavy lifting by enumerating returned fields, and it discloses billing and language-fallback behavior for a 4-parameter read-only tool. What's missing is error/empty behavior (no captions available, region-blocked video) and whether cost scales with video length or segments, which matters given the stated per-request billing.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters are already documented in the schema, establishing a baseline of 3. The description reinforces the `video` and `lang` semantics ('Pass a video id or any YouTube video URL', 'choose a caption language with lang') but adds no format or proxy_country guidance beyond what the schema already says.

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

Purpose4/5

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

States a specific verb and resource upfront: 'Returns a YouTube video's captions as JSON', then enumerates the exact return fields (segments, text, availableLanguages, isAutoGenerated, title, author, lengthSeconds). The purpose is unmistakable, though it never explicitly contrasts itself with youtube_search or browse_page, so the sibling differentiation comes mostly from the tool name.

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

Usage Guidelines3/5

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

It gives usage contexts ('Ideal for LLM/RAG pipelines, subtitles and content analysis') and tells the agent what input forms are accepted ('Pass a video id or any YouTube video URL'), plus how to pick a language. But there is no explicit when-to-use-this-vs-youtube_search guidance and no statement of what happens when a video has no caption tracks at all, which is the main failure branch an agent must anticipate.

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. 3 tool updatesv0.11.1
    • Changedlist_plugins1 field changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "Travel",
        -  "Google",
        -  "Search engines",
        -  "E-commerce",
        -  "Classifieds & Resale",
        -  "Groceries",
        -  "Real estate",
        -  "Vehicles",
        -  "Jobs",
        -  "Reviews & Companies",
        -  "Local & Maps",
        -  "Apps",
        -  "Video & Music",
        -  "SEO & Ads"
        -]New value: +[
        +  "Travel",
        +  "Google",
        +  "AI",
        +  "Search engines",
        +  "E-commerce",
        +  "Classifieds & Resale",
        +  "Groceries",
        +  "Real estate",
        +  "Vehicles",
        +  "Jobs",
        +  "Reviews & Companies",
        +  "Local & Maps",
        +  "Apps",
        +  "Video & Music",
        +  "SEO & Ads"
        +]
    • Changedmaps_place_details1 field changed
      • changedInput schema / properties / url / description
        Previous value: -"A Google Maps place URL (share link or /maps/place/... URL). The feature id or place_id is read out of it."New value: +"A Google Maps place URL: a /maps/place/... URL, a maps.app.goo.gl share link or a maps?cid= link. The place is read out of it."
    • Changedrun_plugin1 field changed
      • changedInput schema / properties / name / enum
        Previous value: -[
        -  "skyscanner_flights",
        -  "skyscanner_hotels",
        -  "skyscanner_carhire",
        -  "booking_hotels",
        -  "booking_reviews",
        -  "airbnb_search",
        -  "airbnb_room",
        -  "airbnb_reviews",
        -  "tripadvisor_list",
        -  "tripadvisor_reviews",
        -  "google_local",
        -  "google_images",
        -  "maps_place_details",
        -  "google_trends",
        -  "google_shopping",
        -  "google_jobs",
        -  "google_hotels",
        -  "google_hotels_property",
        -  "google_news",
        -  "google_ads_transparency",
        -  "google_ads_transparency_advertisers",
        -  "bing_search",
        -  "bing_images",
        -  "duckduckgo_search",
        -  "yahoo_search",
        -  "yahoo_images",
        -  "brave_search",
        -  "brave_images",
        -  "amazon_product",
        -  "amazon_search",
        -  "amazon_bestsellers",
        -  "amazon_reviews",
        -  "walmart_search",
        -  "target_search",
        -  "bestbuy_search",
        -  "homedepot_search",
        -  "etsy_search",
        -  "shein_search",
        -  "zalando_search",
        -  "aliexpress_search",
        -  "alibaba_search",
        -  "alibaba_product",
        -  "alibaba1688_search",
        -  "alibaba1688_product",
        -  "tiktok_shop_search",
        -  "tiktok_shop_product",
        -  "tiktok_shop_store",
        -  "oopbuy_search",
        -  "smyths_inventory",
        -  "smyths_details",
        -  "smyths_search",
        -  "smyths_category",
        -  "wish_search",
        -  "wish_product",
        -  "shopee_search",
        -  "shopee_product",
        -  "taobao_search",
        -  "taobao_product",
        -  "ebay_search",
        -  "vinted_search",
        -  "leboncoin_search",
        -  "woolworths_search",
        -  "woolworths_category",
        -  "woolworths_specials",
        -  "woolworths_product",
        -  "coles_search",
        -  "coles_category",
        -  "coles_specials",
        -  "coles_product",
        -  "aldi_au_search",
        -  "aldi_au_category",
        -  "aldi_au_specials",
        -  "aldi_au_product",
        -  "zillow_search",
        -  "zillow_detail",
        -  "redfin_search",
        -  "redfin_detail",
        -  "rightmove_search",
        -  "idealista_search",
        -  "idealista_detail",
        -  "immobilienscout24_search",
        -  "mobile_de",
        -  "autoscout24_search",
        -  "indeed_jobs",
        -  "glassdoor_jobs",
        -  "glassdoor_reviews",
        -  "glassdoor_salaries",
        -  "naukri_jobs",
        -  "wellfound_jobs",
        -  "wellfound_job",
        -  "wellfound_company",
        -  "wellfound_company_search",
        -  "career_site_jobs",
        -  "upwork_jobs",
        -  "trustpilot_reviews",
        -  "g2_reviews",
        -  "g2_search",
        -  "capterra_reviews",
        -  "capterra_search",
        -  "product_hunt",
        -  "crunchbase_company",
        -  "crunchbase_search",
        -  "yelp_search",
        -  "yelp_business",
        -  "yelp_reviews",
        -  "naver_place_search",
        -  "naver_place_details",
        -  "google_play_app",
        -  "google_play_search",
        -  "app_store_app",
        -  "app_store_search",
        -  "app_store_reviews",
        -  "youtube_channel",
        -  "youtube_search",
        -  "youtube_transcript",
        -  "spotify_search",
        -  "spotify_artist",
        -  "spotify_album",
        -  "spotify_track",
        -  "spotify_playlist",
        -  "similarweb_overview",
        -  "ahrefs",
        -  "semrush_overview",
        -  "meta_ad_library"
        -]New value: +[
        +  "skyscanner_flights",
        +  "skyscanner_hotels",
        +  "skyscanner_carhire",
        +  "booking_hotels",
        +  "booking_reviews",
        +  "airbnb_search",
        +  "airbnb_room",
        +  "airbnb_reviews",
        +  "tripadvisor_list",
        +  "tripadvisor_reviews",
        +  "google_local",
        +  "google_images",
        +  "maps_place_details",
        +  "maps_reviews",
        +  "google_trends",
        +  "google_shopping",
        +  "google_jobs",
        +  "google_hotels",
        +  "google_hotels_property",
        +  "google_news",
        +  "google_ads_transparency",
        +  "google_ads_transparency_advertisers",
        +  "google_ai_mode",
        +  "google_lens",
        +  "gemini",
        +  "chatgpt",
        +  "bing_search",
        +  "bing_images",
        +  "duckduckgo_search",
        +  "yahoo_search",
        +  "yahoo_images",
        +  "brave_search",
        +  "brave_images",
        +  "amazon_product",
        +  "amazon_search",
        +  "amazon_bestsellers",
        +  "amazon_reviews",
        +  "amazon_offers",
        +  "amazon_seller",
        +  "walmart_search",
        +  "walmart_product",
        +  "target_search",
        +  "target_category",
        +  "target_product",
        +  "bestbuy_search",
        +  "bestbuy_product",
        +  "homedepot_search",
        +  "costco_search",
        +  "costco_product",
        +  "etsy_search",
        +  "etsy_product",
        +  "shein_search",
        +  "zalando_search",
        +  "aliexpress_search",
        +  "aliexpress_product",
        +  "alibaba_search",
        +  "alibaba_product",
        +  "alibaba1688_search",
        +  "alibaba1688_product",
        +  "tiktok_shop_search",
        +  "tiktok_shop_product",
        +  "tiktok_shop_store",
        +  "oopbuy_search",
        +  "smyths_inventory",
        +  "smyths_details",
        +  "smyths_search",
        +  "smyths_category",
        +  "wish_search",
        +  "wish_product",
        +  "shopee_search",
        +  "shopee_product",
        +  "taobao_search",
        +  "taobao_product",
        +  "flipkart_search",
        +  "flipkart_product",
        +  "lazada_search",
        +  "lazada_product",
        +  "allegro_search",
        +  "allegro_product",
        +  "falabella_search",
        +  "falabella_product",
        +  "magazineluiza_search",
        +  "magazineluiza_product",
        +  "mediamarkt_search",
        +  "mediamarkt_product",
        +  "cdiscount_search",
        +  "cdiscount_product",
        +  "idealo_search",
        +  "idealo_offers",
        +  "rakuten_search",
        +  "rakuten_product",
        +  "indiamart_search",
        +  "indiamart_product",
        +  "bedbathandbeyond_search",
        +  "bedbathandbeyond_product",
        +  "petco_search",
        +  "petco_product",
        +  "neobits_product",
        +  "lowes_search",
        +  "lowes_product",
        +  "menards_search",
        +  "menards_product",
        +  "grainger_search",
        +  "grainger_product",
        +  "ebay_product",
        +  "ebay_search",
        +  "vinted_search",
        +  "leboncoin_search",
        +  "woolworths_search",
        +  "woolworths_category",
        +  "woolworths_specials",
        +  "woolworths_product",
        +  "coles_search",
        +  "coles_category",
        +  "coles_specials",
        +  "coles_product",
        +  "aldi_au_search",
        +  "aldi_au_category",
        +  "aldi_au_specials",
        +  "aldi_au_product",
        +  "kroger_search",
        +  "kroger_product",
        +  "instacart_search",
        +  "instacart_product",
        +  "publix_search",
        +  "publix_product",
        +  "bodegaaurrera_search",
        +  "bodegaaurrera_product",
        +  "zillow_search",
        +  "zillow_detail",
        +  "redfin_search",
        +  "redfin_detail",
        +  "rightmove_search",
        +  "idealista_search",
        +  "idealista_detail",
        +  "immobilienscout24_search",
        +  "mobile_de",
        +  "autoscout24_search",
        +  "indeed_jobs",
        +  "glassdoor_jobs",
        +  "glassdoor_reviews",
        +  "glassdoor_salaries",
        +  "naukri_jobs",
        +  "wellfound_jobs",
        +  "wellfound_job",
        +  "wellfound_company",
        +  "wellfound_company_search",
        +  "career_site_jobs",
        +  "upwork_jobs",
        +  "trustpilot_reviews",
        +  "g2_reviews",
        +  "g2_search",
        +  "capterra_reviews",
        +  "capterra_search",
        +  "product_hunt",
        +  "crunchbase_company",
        +  "crunchbase_search",
        +  "yelp_search",
        +  "yelp_business",
        +  "yelp_reviews",
        +  "naver_place_search",
        +  "naver_place_details",
        +  "google_play_app",
        +  "google_play_search",
        +  "app_store_app",
        +  "app_store_search",
        +  "app_store_reviews",
        +  "youtube_channel",
        +  "youtube_search",
        +  "youtube_transcript",
        +  "spotify_search",
        +  "spotify_artist",
        +  "spotify_album",
        +  "spotify_track",
        +  "spotify_playlist",
        +  "similarweb_overview",
        +  "ahrefs",
        +  "semrush_overview",
        +  "meta_ad_library"
        +]
  2. 2 tool updatesv0.8.0
    • Changedrun_plugin1 field changed
      • changedInput schema / properties / name / enum
        Previous value: -[
        -  "skyscanner_flights",
        -  "skyscanner_hotels",
        -  "skyscanner_carhire",
        -  "booking_hotels",
        -  "booking_reviews",
        -  "airbnb_search",
        -  "airbnb_room",
        -  "airbnb_reviews",
        -  "tripadvisor_list",
        -  "tripadvisor_reviews",
        -  "google_local",
        -  "google_images",
        -  "maps_place_details",
        -  "google_trends",
        -  "google_shopping",
        -  "google_jobs",
        -  "bing_search",
        -  "bing_images",
        -  "duckduckgo_search",
        -  "yahoo_search",
        -  "yahoo_images",
        -  "brave_search",
        -  "brave_images",
        -  "amazon_product",
        -  "amazon_search",
        -  "amazon_bestsellers",
        -  "amazon_reviews",
        -  "walmart_search",
        -  "target_search",
        -  "bestbuy_search",
        -  "homedepot_search",
        -  "etsy_search",
        -  "shein_search",
        -  "zalando_search",
        -  "aliexpress_search",
        -  "alibaba_search",
        -  "alibaba_product",
        -  "alibaba1688_search",
        -  "alibaba1688_product",
        -  "tiktok_shop_search",
        -  "tiktok_shop_product",
        -  "tiktok_shop_store",
        -  "oopbuy_search",
        -  "ebay_search",
        -  "vinted_search",
        -  "leboncoin_search",
        -  "woolworths_search",
        -  "woolworths_category",
        -  "woolworths_specials",
        -  "woolworths_product",
        -  "coles_search",
        -  "coles_category",
        -  "coles_specials",
        -  "coles_product",
        -  "aldi_au_search",
        -  "aldi_au_category",
        -  "aldi_au_specials",
        -  "aldi_au_product",
        -  "zillow_search",
        -  "zillow_detail",
        -  "redfin_search",
        -  "redfin_detail",
        -  "rightmove_search",
        -  "idealista_search",
        -  "idealista_detail",
        -  "immobilienscout24_search",
        -  "mobile_de",
        -  "autoscout24_search",
        -  "indeed_jobs",
        -  "glassdoor_jobs",
        -  "glassdoor_reviews",
        -  "glassdoor_salaries",
        -  "naukri_jobs",
        -  "wellfound_jobs",
        -  "wellfound_job",
        -  "wellfound_company",
        -  "wellfound_company_search",
        -  "career_site_jobs",
        -  "trustpilot_reviews",
        -  "g2_reviews",
        -  "g2_search",
        -  "capterra_reviews",
        -  "capterra_search",
        -  "product_hunt",
        -  "crunchbase_company",
        -  "crunchbase_search",
        -  "yelp_search",
        -  "yelp_business",
        -  "yelp_reviews",
        -  "naver_place_search",
        -  "naver_place_details",
        -  "google_play_app",
        -  "google_play_search",
        -  "app_store_app",
        -  "app_store_search",
        -  "app_store_reviews",
        -  "youtube_channel",
        -  "youtube_search",
        -  "youtube_transcript",
        -  "spotify_search",
        -  "spotify_artist",
        -  "spotify_album",
        -  "spotify_track",
        -  "spotify_playlist",
        -  "similarweb_overview",
        -  "ahrefs",
        -  "semrush_overview",
        -  "meta_ad_library"
        -]New value: +[
        +  "skyscanner_flights",
        +  "skyscanner_hotels",
        +  "skyscanner_carhire",
        +  "booking_hotels",
        +  "booking_reviews",
        +  "airbnb_search",
        +  "airbnb_room",
        +  "airbnb_reviews",
        +  "tripadvisor_list",
        +  "tripadvisor_reviews",
        +  "google_local",
        +  "google_images",
        +  "maps_place_details",
        +  "google_trends",
        +  "google_shopping",
        +  "google_jobs",
        +  "google_hotels",
        +  "google_hotels_property",
        +  "google_news",
        +  "google_ads_transparency",
        +  "google_ads_transparency_advertisers",
        +  "bing_search",
        +  "bing_images",
        +  "duckduckgo_search",
        +  "yahoo_search",
        +  "yahoo_images",
        +  "brave_search",
        +  "brave_images",
        +  "amazon_product",
        +  "amazon_search",
        +  "amazon_bestsellers",
        +  "amazon_reviews",
        +  "walmart_search",
        +  "target_search",
        +  "bestbuy_search",
        +  "homedepot_search",
        +  "etsy_search",
        +  "shein_search",
        +  "zalando_search",
        +  "aliexpress_search",
        +  "alibaba_search",
        +  "alibaba_product",
        +  "alibaba1688_search",
        +  "alibaba1688_product",
        +  "tiktok_shop_search",
        +  "tiktok_shop_product",
        +  "tiktok_shop_store",
        +  "oopbuy_search",
        +  "smyths_inventory",
        +  "smyths_details",
        +  "smyths_search",
        +  "smyths_category",
        +  "wish_search",
        +  "wish_product",
        +  "shopee_search",
        +  "shopee_product",
        +  "taobao_search",
        +  "taobao_product",
        +  "ebay_search",
        +  "vinted_search",
        +  "leboncoin_search",
        +  "woolworths_search",
        +  "woolworths_category",
        +  "woolworths_specials",
        +  "woolworths_product",
        +  "coles_search",
        +  "coles_category",
        +  "coles_specials",
        +  "coles_product",
        +  "aldi_au_search",
        +  "aldi_au_category",
        +  "aldi_au_specials",
        +  "aldi_au_product",
        +  "zillow_search",
        +  "zillow_detail",
        +  "redfin_search",
        +  "redfin_detail",
        +  "rightmove_search",
        +  "idealista_search",
        +  "idealista_detail",
        +  "immobilienscout24_search",
        +  "mobile_de",
        +  "autoscout24_search",
        +  "indeed_jobs",
        +  "glassdoor_jobs",
        +  "glassdoor_reviews",
        +  "glassdoor_salaries",
        +  "naukri_jobs",
        +  "wellfound_jobs",
        +  "wellfound_job",
        +  "wellfound_company",
        +  "wellfound_company_search",
        +  "career_site_jobs",
        +  "upwork_jobs",
        +  "trustpilot_reviews",
        +  "g2_reviews",
        +  "g2_search",
        +  "capterra_reviews",
        +  "capterra_search",
        +  "product_hunt",
        +  "crunchbase_company",
        +  "crunchbase_search",
        +  "yelp_search",
        +  "yelp_business",
        +  "yelp_reviews",
        +  "naver_place_search",
        +  "naver_place_details",
        +  "google_play_app",
        +  "google_play_search",
        +  "app_store_app",
        +  "app_store_search",
        +  "app_store_reviews",
        +  "youtube_channel",
        +  "youtube_search",
        +  "youtube_transcript",
        +  "spotify_search",
        +  "spotify_artist",
        +  "spotify_album",
        +  "spotify_track",
        +  "spotify_playlist",
        +  "similarweb_overview",
        +  "ahrefs",
        +  "semrush_overview",
        +  "meta_ad_library"
        +]
    • Changedyoutube_transcript1 field changed
      • changedInput schema / properties / format / description
        Previous value: -"Output shape: segments, text. 'segments' returns timestamps; 'text' returns only the joined plaintext. Default: segments."New value: +"Output shape: text, segments. 'segments' returns timestamps; 'text' returns only the joined plaintext. Default: segments."
  3. 4 tool updatesv0.6.0
    • Addedbrowse_page
    • Changedfetch_html1 field changed
      • removedInput schema / properties / steps
        Removed value: -{
        -  "description": "Optional ordered browser actions to run in a real browser after the page loads, before the HTML is captured. Use `list_elements` first to find selectors. Runs once (not idempotent).",
        -  "items": {
        -    "anyOf": [
        -      {
        -        "additionalProperties": false,
        -        "description": "Wait until an element matching `selector` exists.",
        -        "properties": {
        -          "action": {
        -            "const": "wait_for",
        -            "type": "string"
        -          },
        -          "selector": {
        -            "description": "Selector to wait for (until present).",
        -            "type": "string"
        -          },
        -          "selector_type": {
        -            "description": "How `selector` is interpreted. Defaults to 'css'.",
        -            "enum": [
        -              "css",
        -              "xPath",
        -              "className",
        -              "tagName"
        -            ],
        -            "type": "string"
        -          },
        -          "timeout_ms": {
        -            "exclusiveMinimum": 0,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "action",
        -          "selector"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "description": "Wait until the given text appears on the page.",
        -        "properties": {
        -          "action": {
        -            "const": "wait_for_text",
        -            "type": "string"
        -          },
        -          "timeout_ms": {
        -            "exclusiveMinimum": 0,
        -            "type": "integer"
        -          },
        -          "value": {
        -            "description": "Text to wait for anywhere on the page.",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "action",
        -          "value"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "description": "Pause for a fixed number of milliseconds.",
        -        "properties": {
        -          "action": {
        -            "const": "wait",
        -            "type": "string"
        -          },
        -          "value": {
        -            "description": "Fixed pause in milliseconds.",
        -            "minimum": 0,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "action",
        -          "value"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "description": "Click the element matching `selector`.",
        -        "properties": {
        -          "action": {
        -            "const": "click",
        -            "type": "string"
        -          },
        -          "selector": {
        -            "description": "Selector of the element to click.",
        -            "type": "string"
        -          },
        -          "selector_type": {
        -            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
        -            "description": "How `selector` is interpreted. Defaults to 'css'."
        -          },
        -          "timeout_ms": {
        -            "exclusiveMinimum": 0,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "action",
        -          "selector"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "description": "Type text into an input, character by character.",
        -        "properties": {
        -          "action": {
        -            "const": "type",
        -            "type": "string"
        -          },
        -          "clear": {
        -            "description": "Clear the field before typing.",
        -            "type": "boolean"
        -          },
        -          "selector": {
        -            "description": "Selector of the field to type into.",
        -            "type": "string"
        -          },
        -          "selector_type": {
        -            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
        -            "description": "How `selector` is interpreted. Defaults to 'css'."
        -          },
        -          "timeout_ms": {
        -            "exclusiveMinimum": 0,
        -            "type": "integer"
        -          },
        -          "value": {
        -            "description": "Text to type (entered human-like).",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "action",
        -          "selector",
        -          "value"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "description": "Choose an option in a <select> dropdown by value.",
        -        "properties": {
        -          "action": {
        -            "const": "select",
        -            "type": "string"
        -          },
        -          "selector": {
        -            "description": "Selector of the <select> element.",
        -            "type": "string"
        -          },
        -          "selector_type": {
        -            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
        -            "description": "How `selector` is interpreted. Defaults to 'css'."
        -          },
        -          "timeout_ms": {
        -            "exclusiveMinimum": 0,
        -            "type": "integer"
        -          },
        -          "value": {
        -            "description": "The option value to select.",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "action",
        -          "selector",
        -          "value"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "description": "Press a single keyboard key.",
        -        "properties": {
        -          "action": {
        -            "const": "press_key",
        -            "type": "string"
        -          },
        -          "value": {
        -            "description": "The key to press.",
        -            "enum": [
        -              "Enter",
        -              "Tab",
        -              "Escape",
        -              "Backspace",
        -              "Delete",
        -              "Space",
        -              "ArrowUp",
        -              "ArrowDown",
        -              "ArrowLeft",
        -              "ArrowRight",
        -              "Home",
        -              "End",
        -              "PageUp",
        -              "PageDown"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "action",
        -          "value"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "description": "Scroll the page to the bottom or by a pixel amount.",
        -        "properties": {
        -          "action": {
        -            "const": "scroll",
        -            "type": "string"
        -          },
        -          "value": {
        -            "anyOf": [
        -              {
        -                "const": "bottom",
        -                "type": "string"
        -              },
        -              {
        -                "type": "integer"
        -              }
        -            ],
        -            "description": "'bottom' to scroll to the end, or a pixel offset."
        -          }
        -        },
        -        "required": [
        -          "action",
        -          "value"
        -        ],
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  "type": "array"
        -}
    • Addedfetch_markdown
    • Addedsearch_and_read
  4. 17 tool updatesv0.4.0
    • Addedamazon_product
    • Addedamazon_reviews
    • Addedamazon_search
    • Addedbooking_hotels
    • Addedebay_search
    • Addedgoogle_images
    • Addedgoogle_local
    • Addedgoogle_shopping
    • Addedindeed_jobs
    • Addedlist_plugins
    • Addedmaps_place_details
    • Addedrun_plugin
    • Addedtrustpilot_reviews
    • Addedwalmart_search
    • Addedyoutube_search
    • Addedyoutube_transcript
    • Addedzillow_search
  5. 2 tool updatesv0.2.0
    • Changedfetch_html1 field changed
      • addedInput schema / properties / steps
        Added value: +{
        +  "description": "Optional ordered browser actions to run in a real browser after the page loads, before the HTML is captured. Use `list_elements` first to find selectors. Runs once (not idempotent).",
        +  "items": {
        +    "anyOf": [
        +      {
        +        "additionalProperties": false,
        +        "description": "Wait until an element matching `selector` exists.",
        +        "properties": {
        +          "action": {
        +            "const": "wait_for",
        +            "type": "string"
        +          },
        +          "selector": {
        +            "description": "Selector to wait for (until present).",
        +            "type": "string"
        +          },
        +          "selector_type": {
        +            "description": "How `selector` is interpreted. Defaults to 'css'.",
        +            "enum": [
        +              "css",
        +              "xPath",
        +              "className",
        +              "tagName"
        +            ],
        +            "type": "string"
        +          },
        +          "timeout_ms": {
        +            "exclusiveMinimum": 0,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "action",
        +          "selector"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "description": "Wait until the given text appears on the page.",
        +        "properties": {
        +          "action": {
        +            "const": "wait_for_text",
        +            "type": "string"
        +          },
        +          "timeout_ms": {
        +            "exclusiveMinimum": 0,
        +            "type": "integer"
        +          },
        +          "value": {
        +            "description": "Text to wait for anywhere on the page.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "action",
        +          "value"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "description": "Pause for a fixed number of milliseconds.",
        +        "properties": {
        +          "action": {
        +            "const": "wait",
        +            "type": "string"
        +          },
        +          "value": {
        +            "description": "Fixed pause in milliseconds.",
        +            "minimum": 0,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "action",
        +          "value"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "description": "Click the element matching `selector`.",
        +        "properties": {
        +          "action": {
        +            "const": "click",
        +            "type": "string"
        +          },
        +          "selector": {
        +            "description": "Selector of the element to click.",
        +            "type": "string"
        +          },
        +          "selector_type": {
        +            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
        +            "description": "How `selector` is interpreted. Defaults to 'css'."
        +          },
        +          "timeout_ms": {
        +            "exclusiveMinimum": 0,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "action",
        +          "selector"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "description": "Type text into an input, character by character.",
        +        "properties": {
        +          "action": {
        +            "const": "type",
        +            "type": "string"
        +          },
        +          "clear": {
        +            "description": "Clear the field before typing.",
        +            "type": "boolean"
        +          },
        +          "selector": {
        +            "description": "Selector of the field to type into.",
        +            "type": "string"
        +          },
        +          "selector_type": {
        +            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
        +            "description": "How `selector` is interpreted. Defaults to 'css'."
        +          },
        +          "timeout_ms": {
        +            "exclusiveMinimum": 0,
        +            "type": "integer"
        +          },
        +          "value": {
        +            "description": "Text to type (entered human-like).",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "action",
        +          "selector",
        +          "value"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "description": "Choose an option in a <select> dropdown by value.",
        +        "properties": {
        +          "action": {
        +            "const": "select",
        +            "type": "string"
        +          },
        +          "selector": {
        +            "description": "Selector of the <select> element.",
        +            "type": "string"
        +          },
        +          "selector_type": {
        +            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
        +            "description": "How `selector` is interpreted. Defaults to 'css'."
        +          },
        +          "timeout_ms": {
        +            "exclusiveMinimum": 0,
        +            "type": "integer"
        +          },
        +          "value": {
        +            "description": "The option value to select.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "action",
        +          "selector",
        +          "value"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "description": "Press a single keyboard key.",
        +        "properties": {
        +          "action": {
        +            "const": "press_key",
        +            "type": "string"
        +          },
        +          "value": {
        +            "description": "The key to press.",
        +            "enum": [
        +              "Enter",
        +              "Tab",
        +              "Escape",
        +              "Backspace",
        +              "Delete",
        +              "Space",
        +              "ArrowUp",
        +              "ArrowDown",
        +              "ArrowLeft",
        +              "ArrowRight",
        +              "Home",
        +              "End",
        +              "PageUp",
        +              "PageDown"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "action",
        +          "value"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "description": "Scroll the page to the bottom or by a pixel amount.",
        +        "properties": {
        +          "action": {
        +            "const": "scroll",
        +            "type": "string"
        +          },
        +          "value": {
        +            "anyOf": [
        +              {
        +                "const": "bottom",
        +                "type": "string"
        +              },
        +              {
        +                "type": "integer"
        +              }
        +            ],
        +            "description": "'bottom' to scroll to the end, or a pixel offset."
        +          }
        +        },
        +        "required": [
        +          "action",
        +          "value"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  "type": "array"
        +}
    • Addedlist_elements
  6. 3 tool updatesv0.1.4
    • Addedfetch_html
    • Addedfetch_parsed
    • Addedgoogle_search
  7. 3 tool updatesv0.1.3
    • Removedfetch_html
    • Removedfetch_parsed
    • Removedgoogle_search
  8. 3 tool updatesv0.1.2
    • First observedfetch_html
    • First observedfetch_parsed
    • First observedgoogle_search

TDQS

A3.9/5.0

Scored across 24 tools

Disambiguation3/5

The core fetch family is well-differentiated by the descriptions (fetch_markdown for reading, fetch_html for markup, browse_page for actions, list_elements for selector discovery), but the large set of site-specific tools (amazon_search, walmart_search, ebay_search, zillow_search, indeed_jobs, etc.) overlaps heavily with run_plugin, which can execute those same plugins. An agent must decide between a dedicated vertical tool and the generic plugin runner, and fetch_parsed vs run_plugin is also fuzzy. Descriptions mitigate but do not remove the ambiguity.

Naming Consistency4/5

Two clear families exist: verb_noun for generic operations (fetch_markdown, fetch_html, fetch_parsed, browse_page, list_elements, list_plugins, run_plugin, search_and_read) and site_action for verticals (google_search, amazon_search, walmart_search, zillow_search, youtube_search). Minor deviations (indeed_jobs instead of indeed_search, maps_place_details, booking_hotels) are readable and predictable in context.

Tool Count3/5

24 tools is on the heavy side and much of the bulk comes from site-specific wrappers that run_plugin could largely subsume, so the surface feels wider than necessary. The generic scraping primitives plus plugin discovery form a coherent small core; the remaining verticals inflate the set.

Completeness4/5

Coverage of fetching, rendering, interaction, parsing, search verticals, and major commerce/reviews/jobs/travel sites is strong and covers most scraping workflows end to end. Gaps are minor: no screenshot/PDF capture, no crawl/sitemap or batch-job tooling, and no account/usage/quota introspection.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to fetch bot-protected web pages, run structured Google searches, and check domain authority through UnblockingAPI's anti-detection engine and residential proxies.
    3
    189 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with reliable web fetching capabilities, handling retries, caching, and anti-bot bypass automatically.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to fetch any web page (including those behind Cloudflare or CAPTCHAs), extract clean markdown, structured data, crawl sites, and map URLs via BypassAPI.
    MIT