Skip to main content
Glama

Local processing. No third-party API keys. No paid captcha services. No telemetry. Web requests reach the sites you visit, and results reach the agent or client you connect.

Svipall fetches and renders pages locally, extracts their content, and reports detected challenges and extraction-quality labels. Some sites still block it, and an apparently successful response can contain incomplete records or a page shell. The published comparisons therefore audit useful content separately from HTTP status and the tool's own verdict.

Why Svipall

What goes wrong

Svipall

Your agent reads a "checking your browser" screen and summarises it as the article. It was a 200, so nothing flagged it

Twelve wall kinds, each naming the move it implies. Detected blocks carry an explicit verdict; classification is heuristic

You crawl 5,000 pages and can't tell which are worth keeping

Assessed pages carry quality and duplicate observations; quality labels do not discard pages

One page = 300,000 tokens of raw HTML. The fixes are four manual jobs you now own

Clean Markdown by default; opt into tables as rows, out_file to disk, or capture of the site's own JSON API

You want to attempt a supported captcha without a paid solver

Fifteen widget families and eleven answer modalities, all local, optional vision models depending on the build, and a human dashboard for unresolved challenges

It records successful visits, failures, incomplete extraction and rejected changes. Historical benchmark logs and the current comparison use different scoring rules and configurations; the results section distinguishes them.

Rust · MCP + CLI + REST · no Node, no Python, no API key · local storage and processing → Install it ↓

The comparison table describes other projects' documented scope.


Related MCP server: Crawl4AI MCP Server

Install

Every channel below installs the latest release, built from the tree this README describes. svipall doctor reports what an installed build can do on the machine it is on.

The README factual audit records the source checks, documentation corrections and limits of this review.

Choose agent-assisted setup, the Claude Code plugin, or a manual installation.

Ask the agent you already have

Paste this into Claude Code, Cursor, Codex, opencode, or anything else that can run a command:

Install and configure Svipall by following the instructions here:
https://raw.githubusercontent.com/ilien-dev/svipall/main/docs/install.md

That page guides an agent through platform detection, installation, verification and MCP registration. Completion depends on the agent, client configuration and available permissions.

Claude Code: install the plugin

/plugin marketplace add ilien-dev/svipall
/plugin install svipall@svipall
/svipall:setup

/svipall:setup installs the binary if it is missing, checks the server answers, and offers to make Svipall the way Claude reaches the web in every project. It asks before each of those. /svipall:doctor reports the installation's capabilities. /svipall:uninstall offers removal of setup's registration, memory and strict-mode changes; binary and data removal are separate choices.

Install it yourself

One line, no toolchain, nothing to compile:

curl -fsSL https://raw.githubusercontent.com/ilien-dev/svipall/main/install.sh | sh   # macOS, Linux
irm https://raw.githubusercontent.com/ilien-dev/svipall/main/install.ps1 | iex        # Windows

Or a package manager, or the container image:

brew install ilien-dev/svipall/svipall               # macOS, Linux
scoop bucket add svipall https://github.com/ilien-dev/scoop-svipall && scoop install svipall
docker pull ghcr.io/ilien-dev/svipall:latest         # or :slim, the http tier only; see container notes
npx --yes svipall doctor                             # if node is already there
cargo install svipall                            # from source; add `svipall models install` for the models

The installers verify checksums where they can, and a mismatch stops the install. A missing checksum file, entry or hashing utility only warns, so a successful exit is not by itself proof the archive was verified: read the output.

Platform builds, what ships where, building from source and wiring it into any MCP client are all in docs/install.md. Never installed anything from a terminal before? GET-STARTED.md is this section with nothing assumed.

Then ask for something

No key to paste, no account to create, no service to sign up for.

"Read this page and summarise the pricing." "Crawl these docs and write me an llms.txt." "Watch this listing and tell me when the price moves." "Get me every row of that table as CSV."

The assistant can choose among the exposed tools. A human dashboard for supported challenges needing a pair of eyes lives at http://localhost:8787/human.

Or drive it from a shell

svipall fetch https://example.com/article
svipall fetch https://shop.example/item --query "shipping costs"
svipall fetch https://docs.example/api --schema auto        # rows from a listing you've never seen
svipall crawl https://docs.example/ --pages 50 --out pages.csv
svipall search "rust async runtime" --engine all
svipall snapshot https://news.ycombinator.com                # the page as roles and refs, not markup
svipall serve --port 8788                                    # the same server as a local REST API

Completed data commands print one JSON object to stdout; diagnostics go to stderr, so their output can be piped to jq. serve is a long-running server, and help is written to stderr.

What comes back

A historical run of svipall fetch https://example.com, with the content string cut short. Current automatic fetches also report identity_used, and the fallback fields described below when they have something to report:

{
  "attempts": ["http: 200 (170ms) OK"],
  "chars": 167,
  "content": "# Example Domain\n\nThis domain is for use in documentation examples…",
  "final_url": "https://example.com/",
  "optimization": "ordinary",
  "quality": "thin",
  "quality_reasons": ["thin_text"],
  "status": 200,
  "tier_used": "http",
  "title": "Example Domain",
  "tokens_estimated": 42,
  "url": "https://example.com"
}

tier_used says how hard it had to try. quality says what actually arrived — and when a page does not arrive, the same object carries blocked_reason, wall_kind, wall_vendor, wall_evidence and a note telling your agent what to do next. Straight from a committed benchmark record:

{ "wall_kind": "vendor", "wall_vendor": "kpsdk.io", "wall_evidence": "header x-kpsdk-ct" }

A detected block carries a verdict alongside the returned content. A clear verdict still needs a content check; the classifier is not proof that the requested records arrived intact.

What you can actually do with it

You want to…

It looks like this

Read one page cleanly

web_fetch → Markdown with heuristic boilerplate removal and sanitization; query= ranks text by lexical relevance

Turn a listing into rows

schema: "auto" reads the page's own repeated structure, names the columns and hands back typed rows — no model, no API, one parse

Pull a data table

tables=true → typed rows; out_file: rows.csv writes them to disk so thousands of rows never touch your context

Skip the scraping entirely

web_capture returns the JSON the page fetched while loading — usually the site's real API, with ?page=2 waiting for you

Turn a docs site into a corpus

web_crawl with llms.txt output, near-duplicate labels, resumable frontier and lexical saturation stopping, subject to page/token/traffic limits

Search without a key

web_search scrapes DuckDuckGo, Bing and Brave; engine="all" merges them by agreement

Let the agent click things

web_snapshot (roles + refs, a fraction of the tokens) then web_act — click, type, scroll, wait, all through human-like input

Attempt a browser challenge

Automatic routing can escalate to a patient browser tier; unresolved challenges and detected blocks are reported, but the remote cause is not always identifiable

Attempt a captcha locally

Fifteen widget families and eleven answer modalities, model support where available and a phone-friendly human dashboard. No paid solver; local budgets and remote restrictions still apply

Log in once and stay in

web_login opens a real window; you sign in; the cookies are kept in a profile you can export

Watch a page

web_watch checks the whole page or one CSS region while the server runs; saved selector fingerprints can help recover some redesigns

Read PDFs and Office files

docx, xlsx, pptx, odt, epub, rtf, csv and pdf come back as Markdown, from the web or from file://

Drive it from any language

svipall serve → 19 local REST routes, one per tool, behind a bearer key it generates for you

Who it is for

You are…

Svipall gives you…

A Claude Code / Claude Desktop / Cursor user

One line of setup and tools your assistant picks by itself. Research, documentation, price comparison, monitoring

A developer building AI agents

A local web layer with structured output, token budgets, file export and resumable crawls; live web outcomes remain variable

A RAG / dataset builder

Bounded site crawls to Markdown, near-duplicate labels, llms.txt, and quality observations for assessed pages

A data or research person

Pages that sit behind "checking your browser" walls — and an honest answer when your address cannot open one

A privacy-conscious operator

No scraping API, no captcha farm, no geolocation lookup, no update check, no telemetry. Additional downloads are the managed browser when needed (automatic provisioning can be disabled) and the blocklists you enabled

A security or QA engineer testing your own site

A reproducible benchmark whose raw run logs are committed in this repository, and a request log that names which tier answered and which wall appeared

Svipall is not a hosted scraping API and does not try to be one. If you want a URL you can curl from a serverless function, use a cloud service. If you want the web inside your own agent, on your own hardware, Svipall provides that processing locally; browser traffic and optional downloads are described under Privacy and safety.


How it works, in plain words

The steps below describe the emulated tiers. The current automatic policy can promote a supported emulated route and append one eligible native fallback. Wall verdicts can end the attempt; content-quality labels alone do not trigger escalation.

  1. Ask for the page through HTTP first on a new route. The default engine emulates selected Chrome network characteristics. In the historical public31 runs above, 59 of 93 cells stopped at this tier; 44 of those scored ok under that benchmark's rule. Stopping is not necessarily delivery.

  2. If the page needs JavaScript, open a browser. Headless Chromium runs the scripts and hands back the rendered document.

  3. If the site checks for robots, wear a disguise. The stealth tier patches known browser surfaces to match the emulated identity. The offline probes check those surfaces; they cannot prove that an arbitrary detector will accept them.

  4. If the site wants a real person, act like one. The real tier is a visible-but-offscreen browser with a persistent profile, moving the pointer along curves and scrolling with a wheel.

  5. If there is a challenge, answer it or wait it out. The warm tier runs the captcha strategy loop during its bounded wait and avoids pointer activity on recognized self-verifying interstitials. This does not guarantee clearance.

  6. Use native only as a last resort. When eligible and within the remaining budgets, try one native browser attempt. It exposes real device characteristics and reports a privacy notice.

  7. Remember what worked. Two supporting observations can promote a useful emulated route for later visits in the same context. Native stays last even when it succeeds.

  8. Report the observed failure. Where available, a blocked result includes blocked_reason, the classified wall, recognized vendor/evidence and a suggested next step. Classification is heuristic; transport errors and local budget deferrals may have less page evidence.


MCP tools

Twenty-nine tools, all local.

Tool

What it does

web_fetch

Fetch a page as Markdown or structured JSON. mode=auto climbs the ladder. schema (self-healing), tables, scroll, query, max_tokens/cursor, cache, include_metadata, include_links, include_quality, use_site_template, robots, out_file, mobile, text_only, isolated, css_selector, profile, proxy, method/body/headers. URLs may be raw:<html> or file:// under local_roots

web_fetch_many

Bounded-parallel fetch of many URLs, with schema and tables as on web_fetch. Reports corroboration — how many distinct documents the set actually is — marks each duplicate with same_text_as, and moves the different ones up. It says reordered_for_diversity when it did, because a set that comes back in a different order without saying so is a surprise, not a feature

web_search

DuckDuckGo / Bing / Brave without an API key; engine="all" merges by agreement

web_site_search

Discover a site's search form and learn its query-URL pattern when possible; later fetches still follow normal routing and policy

web_crawl

Same-domain crawl with robots.txt, dedup, boilerplate removal, strategy=dfs, scroll, schema/tables for rows, llms.txt, file export, a saturation stop, and a crawl_id to resume

web_map

A site's URLs without crawling it: robots.txt, sitemaps (nested indexes and .gz included), RSS/Atom feeds and homepage links — a few hundred tokens of structure instead of the thousands a crawl costs

web_snapshot

The page as roles, accessible names and short refs that web_act accepts. Deterministic, no vision model

web_act

click, type, fill, press, hover, select, scroll, wait, eval, goto, screenshot, hold, verify, console; supported pointer/keyboard/wheel actions use the behavior layer, while eval runs caller-supplied JavaScript

web_capture

Observe matching JSON/network responses during a bounded browser visit; API usability and completeness are not guaranteed

browser_open / browser_do / browser_close

Persistent session with cookies and page state across calls

web_screenshot

PNG of the rendered page, full_page or mobile

web_diff

What changed on a page since Svipall last saw it

web_watch

Persist a watch and check it while the server runs; list or check to retrieve changes. Region recovery after a redesign is heuristic

web_notes

Key-value memory that outlives the session

web_log

Which tier answered, which wall appeared, how long it took, per domain

web_login

Visible window for a manual login or challenge; cookies saved to a profile

web_route

Per-domain proxy, or a pool of proxies with countries; subdomains inherit; exit_strategy sticky or round-robin; check=true tests the exits (liveness, latency, DNS leak) with no third-party service

web_profile

Export/import an encrypted browser profile between machines

web_status

Learned tiers, cooldowns, routes, per-exit health and latency, profiles, open browsers, solver stats, which models answer and from where, whether the host has a real GPU, h3_offered_by

browser_setup

Download or manage Chrome for Testing

solve_and_continue

Attempt a captcha on the blocked page and return the resulting content or unresolved state

solve_image_captcha / solve_recaptcha_v2 / solve_turnstile / solve_hcaptcha / captcha_status / report_captcha

Local captcha attempts; the dashboard also exposes in.php / res.php / createTask / getTaskResult compatibility endpoints for supported tasks. This is not full compatibility with every solver-client option

The CLI

svipall fetch | crawl | snapshot | capture | search | map | log | notes | watch
        profile | browser | route | status | serve | doctor | hook
        config show | set | preset
        solver export-corpus
        quality ask | export-training | train

A test asserts the usage text names every command the binary answers to, and a second test keeps skill/SKILL.md in step with both.


The REST API

The same server, over HTTP, so any language can drive it — not only an MCP client or a shell.

svipall serve --port 8788        # the bearer key is printed once, and kept in ~/.svipall/api_key
curl -sH "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -d '{"url":"https://example.com","query":"pricing"}' localhost:8788/v1/fetch

svipall-mcp mounts the same router when rest_port is set, on its own listener, sharing its browser pools, page cache and route evidence with the MCP tools.

Nineteen routes, one per tool, each taking that tool's own JSON as the body:

POST /v1/fetch /v1/fetch_many /v1/crawl

pages

POST /v1/search /v1/site_search /v1/map

finding things

POST /v1/snapshot /v1/act /v1/capture /v1/screenshot

a real browser

POST /v1/solve_and_continue

the captcha, answered on the blocked page

POST /v1/diff /v1/watch /v1/notes /v1/log

memory

POST /v1/route /v1/profile /v1/browser_setup

configuration

GET/POST /v1/status

what this installation has learned. GET is read-only by construction: the three clearing fields are reachable only by POST

GET /v1/health

the one route with no key, so a container healthcheck does not need one

A blocked page is a 200: the call ran, the page did not. blocked_reason, wall_kind and note can appear in the body as over MCP. Non-2xx responses include a malformed body (400), a bad key (401), a browser Origin or a rebound Host (403), a body over 2 MB (413) or a broken installation (500); an unknown job can return 404, and routing can reject unsupported paths or methods. A client must inspect both the HTTP status and the tool result before deciding to retry.

Every tool and job route needs the key, including on loopback; /v1/health is exempt. A local port is not a boundary: Svipall carries logged-in profiles, cookies and your exit address, so an open one is a proxy wearing your identity. Two more checks sit in front of the key, because binding to 127.0.0.1 does not stop a page in your own browser being served a DNS answer of 127.0.0.1 and posting to it: any request carrying an Origin header is refused, and on a loopback bind so is any Host that is not loopback. There is no CORS layer and there will not be one — no browser page is a client of this API.

Ten tools are deliberately not routes, in three groups, and rest.rs records why next to each: browser_open/browser_do/browser_close, whose persistent session lifecycle is outside this REST interface's current design; web_login, whose interactive window is also excluded; and the six solve_*/captcha_status/report_captcha tools, which already answer on the dashboard port in the classic solver wire shape. Twenty-nine tools minus those ten is the nineteen routes above. A new #[tool] fails the test suite until it is listed as a route or as a named exclusion.

A long crawl is a job rather than a held connection. "async": true answers 202 with an id; GET /v1/jobs/{id} polls it, GET /v1/jobs/{id}/stream follows it as Server-Sent Events, DELETE stops it. The id is the crawl_id, so there is one handle to learn and resuming is {"crawl_id": "…"} — the same word the MCP tool and the CLI already use. A cancelled crawl stops between pages after that page's links are queued, so its frontier is kept; it is never aborted, because that would leak a browser page. A job whose process was killed becomes interrupted, and interrupted is resumable. The first frame of a stream is always a snapshot from the store, so a subscriber that joins at page forty is never told the job started at zero. And a queued job whose site already has one running is held back: two crawls of one site would spend one address's reputation with that host twice as fast, which is the scarcest thing a local-only tool has. Full contract in docs/rest.md.


How Svipall compares

The following describes project scope from primary documentation checked on 2026-09-07. It is not a feature-exhaustive comparison or a head-to-head performance test.

Project

Documented focus

Svipall

Local Rust CLI, MCP and REST server; bounded automatic routing, content labels and local challenge attempts with human fallback

Firecrawl

Web scraping/crawling API with hosted and self-hosted options; the open-source and cloud offerings differ

Crawl4AI

Python crawler with browser extraction and a Docker server offering API and MCP access

Scrapling

Python adaptive parsing, fetchers and spiders, with session/proxy controls and MCP integration

Playwright MCP

Browser automation through MCP using structured accessibility snapshots

The historical benchmark above does not establish current superiority over these projects. Choose based on your required integration and validate your own target pages.


Everything else

This file is the first minute. The rest is next door, and none of it was deleted.

Install

Every platform, what ships where, building from source, wiring it into any MCP client

Proof

Every published number, with the command and the log that reproduce it, failures included

Features

The whole surface, tool by tool

Captcha

Fifteen widget families, eleven answer modalities, and what happens when none of them work

Configuration

Every key in ~/.svipall, and what changing it costs

The REST API

Nineteen routes, the job routes, and what a status code means

Extraction

How a page becomes Markdown, and how well, measured against three corpora

Privacy and safety

What leaves this machine, and what does not

Limits

Stated on purpose

Architecture

The crates, and why they are separate

Development

Building, testing, and the benchmarks

FAQ

Exit codes

What the binary returns, for scripts

Models

The embedded weights, their licences and their sizes

Firefox &middot; HTTP/3 &middot; Benchmarks

The engineering notes

Changelog &middot; Contributing &middot; Disclaimer

About the name

Svipall is one of Odin's names in Grímnismál, stanza 47. Bellows renders it as “The Changing” in his translation notes. The project uses that name as an image of changing appearance, not as a promise of invisibility.

That is the idea behind its emulated identities: keep the machine, browser, network fingerprint and input behaviour coherent within a session, and retire sessions when they are refused. Native fallback instead uses real browser/device characteristics. Neither policy guarantees that a site will accept the visit or be unable to link it to an earlier one.


License

AGPL-3.0-only, subject to the terms in LICENSE, including its conditions for distribution and section 13 on remote network interaction. The component licences and linking exception below also apply; this paragraph is not a substitute for those terms.

crates/svipall-extract, the extraction engine, is deliberately MIT OR Apache-2.0 so that anything can depend on it: a library nobody can use is a library nobody reads. crates/svipall-cdp keeps its upstream terms (chromiumoxide, MIT OR Apache-2.0) and crates/svipall-quic keeps its own (quiche, BSD-2-Clause); the default build links BoringSSL under an explicit AGPL section 7 linking exception. These are set out in NOTICE and THIRD-PARTY-NOTICES.md.

Trademark

The name Svipall and the Svipall logo are trademarks of the author. They are not licensed under the AGPL, and nothing in this repository grants a licence to them.

The licence gives you the code. It does not give you the name. Run it, study it, modify it, fork it and redistribute it freely under the AGPL — but distribute a modified version under a different name and without the logo, so that nobody who downloads it is misled about who produced it or what is in it.

The project permits descriptive references such as saying that your project uses Svipall, works with Svipall, or is a fork of Svipall, without implying endorsement.

Disclaimer

Svipall is provided as is, with no warranty and no liability, and it grants you no authorisation with respect to any system you point it at. Complying with the law, with data-protection rules and with a site's terms is the operator's responsibility, not the author's. Capability is not permission — read DISCLAIMER.md before you run it against something that is not yours.


Available Tools

29 tools
browser_closeA

Close a session opened with browser_open and release its browser. Call it when the multi-step work is done; sessions left open keep a browser running.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe `session_id` browser_open returned.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and openWorldHint=false, indicating a non-read-only local cleanup operation. The description adds useful behavioral context by explaining that the browser is released and that sessions left open keep a browser running. It does not cover error or idempotency behavior, but for this simple close operation that is a minor gap.

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

Conciseness5/5

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

Two tightly written sentences with no filler. The primary action is front-loaded, and the usage condition and consequence follow immediately.

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

Completeness5/5

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

For a simple one-parameter cleanup tool with no output schema, the description covers the essential action, trigger, and resource consequence. Annotations supply the safety profile, and the schema supplies the parameter meaning, so nothing critical 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%, and the single session_id parameter is already documented in the schema as the value browser_open returned. The description reinforces that linkage but adds no format, validation, or edge-case meaning beyond the schema. Baseline 3 is appropriate when the schema carries parameter semantics.

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 names a specific verb and resource: close a session and release its browser. It explicitly ties the session to browser_open, distinguishing it from other browser-related siblings.

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

Usage Guidelines5/5

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

It gives a clear trigger condition: call it when multi-step work is done. It also explains the consequence of not calling it, with sessions left open keeping a browser running.

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

browser_doA

Navigate and act inside a session from browser_open: the same actions as web_act, ref from web_snapshot accepted. Omit url to keep acting on the current page. Returns per-action results and the page content, filtered by query when given.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoNavigate here first. Omit to keep acting on the current page.
queryNoKeep only the blocks relevant to these words (BM25).
actionsNoSteps, in order, as in web_act; omit to only read the page.
timeoutNoTimeout in ms for the whole call. Default 90000.
extractionNomarkdown (default), text, or html for the page returned.
session_idYesThe `session_id` browser_open returned.

TDQS

A4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, so the agent knows this mutates external state. The description adds that actions are performed in order and returns per-action results and page content, which is useful, but doesn't elaborate on destructive potential, required auth, or error behavior beyond the annotations.

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, front-loaded with purpose and key constraints, no filler. Every sentence earns its place by adding usage context or return info.

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?

Covers core usage, return values, and query filtering, and references sibling tools for session and snapshot. Missing details on error handling or action failure behavior, but adequate given rich schema and annotations.

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 parameters thoroughly, including nested action properties. The description adds marginal value by restating 'omit url to keep acting' and query filtering, but baseline 3 is appropriate when schema does the heavy lifting.

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 specific verbs (navigate, act) and resource (a browser session from browser_open), and explicitly ties to siblings web_act and web_snapshot. An agent can distinguish it from web_act (session vs new page) without opening schemas.

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

Usage Guidelines4/5

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

Explicitly says to omit url to keep acting on the current page and references the session from browser_open, giving clear context. However, it doesn't state when to choose this over web_act or browser_open directly, nor exclusions.

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

browser_openA

Open a persistent stealth browser session and return a session_id for browser_do. Use for multi-step work where cookies and page state must survive between calls: log in, then browse; add to cart, then check out. For one page and a few actions web_act is simpler. profile reuses cookies saved by web_login. Close it with browser_close.

ParametersJSON Schema
NameRequiredDescriptionDefault
proxyNoProxy URL for this session; web_route sets one per domain.
profileNoProfile saved by web_login whose cookies to reuse. Default: a fresh profile.
visibleNoShow the browser window. Default false (offscreen).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, so the agent already knows this creates state and reaches the network. The description adds genuinely new traits: the session is stealth and persistent, it is referenced by a returned session_id, cookies can be seeded from web_login via profile, and it must be released with browser_close. It stops short of disclosing resource cost or concurrent-session limits.

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

Conciseness5/5

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

Four short sentences, front-loaded with the action and return value, then when-to-use, then the alternative, then lifecycle. No sentence 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?

Covers opening, the session_id contract, cookie/profile reuse, the alternative tool, and the required teardown via browser_close. With no output schema needed beyond the stated session_id and full parameter coverage, nothing an agent needs to invoke this correctly 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 all three parameters are already documented, including proxy, profile, and visible defaults. The description reinforces profile's link to web_login but adds no syntax or format detail beyond the schema, so the 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+resource ('Open a persistent stealth browser session') and names the return value ('session_id for browser_do'), which lets an agent distinguish it from web_act, browser_setup, and browser_do 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 Guidelines5/5

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

Gives explicit when-to-use ('multi-step work where cookies and page state must survive between calls') with concrete examples (login then browse, cart then checkout), names the alternative for the simple case ('For one page and a few actions web_act is simpler'), and states both the profile-reuse path and the closing tool.

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

browser_setupA

Manage the browser behind the browser, stealth, real and warm tiers. status (default) says which binary would run and why; install downloads Chrome for Testing (about 190 MB) when the machine has none; update replaces it with current stable; remove deletes it. Use when a fetch or web_status reports no usable browser. Nothing is downloaded unless asked.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNostatus (default) | install | update | remove.
artifactNochrome (default, supports the headful real/warm tiers) | chrome-headless-shell (smaller, but cannot run headful and is more detectable).

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, so mutation and network access are already flagged. The description adds real value on top: the ~190 MB download cost, the default action (status), and the safety promise 'Nothing is downloaded unless asked' — behavior the 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?

Front-loaded with the action enumeration, then the trigger condition, then the safety note — a logical order with no filler sentences. The opening 'browser behind the browser, stealth, real and warm tiers' is mildly jargon-heavy, keeping it just under a 5.

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 only two fully documented parameters, no output schema, and minimal annotations, the description carries the burden well: it covers all four actions, sizes, defaults, and when to invoke. It does not describe the shape of the status output, but that is a minor gap for a setup 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 beyond the schema's one-line summaries by explaining what each action does (status explains 'why', install downloads Chrome for Testing, update moves to current stable, remove deletes). That meaningfully enriches the action 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?

It names the resource (the browser binary behind the fetch stack) and enumerates each verb explicitly: status reports which binary would run, install/update/remove act on it. An agent can distinguish this management tool from the runtime siblings browser_open/browser_do without opening any schema.

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

Usage Guidelines4/5

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

The trigger is explicit: 'Use when a fetch or web_status reports no usable browser.' This names the alternative signal that should route the agent here. It lacks an explicit negative case (e.g., don't call when a browser already works), so it stops short of a 5.

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

captcha_statusA
Read-only

Check a captcha task by its taskId, as returned by solve_turnstile, solve_recaptcha_v2, solve_hcaptcha or solve_image_captcha. Returns status solved, processing or failed, with the token or text once solved.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe `taskId` a solve_* tool returned.

TDQS

A4.2/5.0
Behavior4/5

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

With readOnlyHint=true and openWorldHint=false already declaring the safety profile, the description adds real value by disclosing the possible status values (solved, processing, failed) and what the successful result contains (token or text). It doesn't mention polling behavior or timing expectations.

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 tightly written sentences with no waste; the identifying resource and the linking constraint come first, followed by the return-value detail.

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

Completeness4/5

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

There is no output schema, so the description carries the burden of explaining returns, and it does so adequately by naming the status values and the token/text payload. The only gap is polling/timing behavior for an async task checker.

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 taskId parameter is already fully documented in the schema. The description reinforces the origin of taskId (returned by solve_* tools), which adds marginal meaning but not new syntax or format details. 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?

The description uses a specific verb (Check) plus resource (captcha task by taskId) and explicitly ties itself to the solve_* family of sibling tools. An agent can immediately distinguish this as the status-query counterpart to the solve tools.

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

Usage Guidelines4/5

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

It clearly establishes context: use this to check a task produced by solve_turnstile, solve_recaptcha_v2, solve_hcaptcha, or solve_image_captcha. No explicit when-not-to-use or polling-interval guidance is provided, so it falls short of a 5.

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

report_captchaA

Report whether a captcha answer worked (good=true) or was rejected (good=false), by taskId. Call it after submitting a token from solve_turnstile, solve_recaptcha_v2 or solve_hcaptcha: the outcome orders the strategies tried next time on that route, so an unreported rejection is repeated.

ParametersJSON Schema
NameRequiredDescriptionDefault
goodYestrue: the site accepted the answer. false: it was rejected.
noteNoWhat the site said, if anything; kept with the outcome.
taskIdYesThe `taskId` a solve_* tool returned.

TDQS

A4.4/5.0
Behavior4/5

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

Discloses a real behavioral trait beyond the annotations: outcomes order the strategies tried next time on that route, so the effect is persistent and feedback-driven. Annotations only say readOnlyHint=false. It could note idempotency or overwrite behavior, but the feedback-loop effect is the key non-obvious trait and is covered.

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

Conciseness5/5

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

One dense sentence states the action, the payload, the key, and the reason to call it. No filler, and the routing instruction is front-loaded.

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?

Complete enough for a small 3-param mutation tool with no output schema: action, post-condition, and the consequence of omission are all present. It stops short of 5 only because return behavior and error handling are not mentioned.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents good, note, and taskId fully. The description adds only the good semantics, which the schema also states. Baseline 3 is correct when the schema does the work.

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 (report) and resource (captcha outcome), with the boolean semantics spelled out (good=true worked, good=false rejected) keyed by taskId. The relationship to the solve_* family is explicit, distinguishing it from the solve tools.

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 when to call it: after submitting a token from solve_turnstile, solve_recaptcha_v2, or solve_hcaptcha. Also gives the when-not consequence: an unreported rejection is repeated because it feeds strategy ordering, which is a strong reason to always report.

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

solve_and_continueA

Solve the captcha on a blocked page in place and return the page behind it. The right choice whenever the goal is the content: solve_turnstile, solve_recaptcha_v2 and solve_hcaptcha return a bare token bound to the session and address that produced it, which rarely works elsewhere. Use after web_fetch returns blocked_reason with a captcha widget. Non-interactive widgets clear on their own; one that needs a person opens a visible window or the dashboard (URL in web_status).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe blocked page. The challenge is solved on this very page, not a copy of it.
profileNoProfile whose cookies to reuse and update. Defaults to the domain's automatic profile.
timeout_sNoSeconds to wait for the challenge to clear. Default 120.
extractionNoExtraction for the unblocked page: markdown (default), text, html.
max_tokensNoCap on the content returned, as in web_fetch. Default 25000.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=true but reveal nothing about the interactive/non-interactive distinction, the visible-window/dashboard fallback, or the session-bound nature of the challenge. The description adds all of these. It stops short of stating auth requirements or rate limits, so not 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.

Conciseness5/5

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

Four sentences, each front-loaded with a distinct payload: what it does, why it beats siblings, when to reach for it, and what happens with stuck widgets. No filler.

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

Completeness5/5

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

For a 5-param mutation tool with no output schema but rich annotations, the description covers the full decision path (trigger, alternatives, return semantics, stuck-widget escalation) an agent needs to invoke it correctly. Nothing material 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 the schema already documents all five parameters, their defaults and formats. The description adds no per-parameter detail beyond what the schema provides. Baseline 3 is correct.

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 ('Solve the captcha on a blocked page in place') and explicitly contrasts its return value with the three sibling solver tools (solve_turnstile, solve_recaptcha_v2, solve_hcaptcha) that return a bare token. This is exactly the differentiation needed when the sibling toolset contains four captcha solvers.

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 trigger: 'Use after web_fetch returns `blocked_reason` with a captcha widget.' Explicit alternative guidance: 'The right choice whenever the goal is the content' vs the sibling solvers when only a token is needed. It even addresses the edge case of non-interactive vs human-required widgets and where to look (web_status).

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

solve_hcaptchaA

Solve an hCaptcha challenge from its sitekey and pageUrl and return the token. Use only when you will submit the token yourself from the same session and address; to read the page behind the challenge use solve_and_continue. Returns the token, or a taskId to follow with captcha_status while a person solves it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageUrlYesThe page the widget is on.
sitekeyYesThe widget's site key, from the page's data-sitekey attribute.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and openWorldHint=true, so the description usefully adds the session/address constraint and the dual-mode behavior: it may return immediately with a token or return a taskId for a human-solved flow polled via captcha_status. It stops short of stating timeouts, cost, or failure modes, 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 with no filler: purpose first, then the routing constraint with its alternative, then the return shape. Every clause carries decision-relevant information and the discriminating constraint is front-loaded.

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

Completeness5/5

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

There is no output schema, so the description assumes the burden of describing returns and does so (token, or a taskId to follow with captcha_status). Combined with the documented required params and sibling routing, an agent has everything needed to invoke 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 description coverage is 100% and both required parameters are documented in-schema (sitekey from the data-sitekey attribute, pageUrl the page the widget is on). The description merely references the same two inputs by name and adds no format or constraint detail beyond the schema, so 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 ("Solve an hCaptcha challenge") plus the two inputs it consumes and the artifact it produces (the token). It also names the sibling it is not (solve_and_continue), so an agent can distinguish it from the adjacent captcha tools without opening any schema.

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

Usage Guidelines5/5

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

Explicitly narrows the use case ("Use only when you will submit the token yourself from the same session and address") and gives the alternative plus its selecting condition ("to read the page behind the challenge use solve_and_continue"). It further routes the async case to captcha_status.

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

solve_image_captchaA

Read the characters in an image captcha given as base64 or a URL and return them as text. Use when a form shows a picture of distorted characters you will type yourself; for a challenge widget on a blocked page use solve_and_continue. Returns text, or a taskId to follow with captcha_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYesThe captcha image, as base64 or as a URL.
is_base64NoSay so when `image` is base64 and could be mistaken for a URL.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and openWorldHint=false, so the description carries the interesting burden. It discloses the return shape ("Returns `text`, or a `taskId` to follow with captcha_status"), which reveals the async possibility and the follow-up tool, adding real behavioral value. It does not discuss rate limits or failure behavior, so it falls short of 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.

Conciseness5/5

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

Three tightly packed sentences: purpose, then usage routing, then return values. Nothing is redundant and the discriminating usage guidance is front-loaded after the core purpose.

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

Completeness5/5

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

There is no output schema, so the description appropriately explains the return values (text or taskId plus the follow-up tool). Combined with full schema coverage and clear routing, an agent has everything needed to call it 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 both parameters are already documented, giving a baseline of 3. The description restates that the image may be base64 or a URL but adds no format, size, or encoding detail beyond the schema.

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

Purpose5/5

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

States a specific verb and resource: read characters in an image captcha and return them as text. It explicitly distinguishes itself from solve_and_continue, which handles challenge widgets on blocked pages, so an agent can disambiguate 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?

Provides a concrete when-to-use condition ("a form shows a picture of distorted characters you will type yourself") and an explicit alternative with its own trigger ("for a challenge widget on a blocked page use solve_and_continue"). Routing is unambiguous.

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

solve_recaptcha_v2A

Solve a reCAPTCHA v2 challenge from its sitekey and pageUrl and return the gRecaptchaResponse token. Use only when you will submit the token yourself from the same session and address; to read the page behind the challenge use solve_and_continue. Returns the token, or a taskId to follow with captcha_status while a person solves it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageUrlYesThe page the widget is on.
sitekeyYesThe widget's site key, from the page's data-sitekey attribute.
invisibleNoThe invisible variant, with no checkbox. Default false.

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true), the description discloses a non-obvious constraint (same session/address), the dual return path (token or taskId to poll via captcha_status), and that a human may be involved. It doesn't mention credits, rate limits, or timeouts, so it stops short of 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.

Conciseness5/5

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

Three sentences, each load-bearing: what it does, when to use it (with the alternative), and what comes back. Front-loaded with the operation and inputs.

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 carries the return-value burden and does so ('the token, or a taskId to follow with captcha_status'). Combined with the session constraint and routing to solve_and_continue, an agent has everything needed to invoke and follow up 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 covereage is 100% and the schema already documents pageUrl and sitekey with source detail (data-sitekey attribute). The description names the same two inputs but adds nothing about the optional 'invisible' flag, so it only matches, not exceeds, the schema.

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

Purpose5/5

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

States a specific verb and resource ('Solve a reCAPTCHA v2 challenge') plus the inputs (sitekey, pageUrl) and the artifact produced (gRecaptchaResponse token). It also names the sibling it must not be confused with (solve_and_continue), so an agent can separate them without opening any schema.

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

Usage Guidelines5/5

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

Explicit routing is given: 'Use only when you will submit the token yourself from the same session and address; to read the page behind the challenge use solve_and_continue.' This supplies both the inclusion condition and the named alternative.

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

solve_turnstileA

Solve a Turnstile challenge from its sitekey and pageUrl and return the token. Use only when you will submit the token yourself from the same session and address, such as a form posted with web_fetch method=POST; to read the page behind the challenge use solve_and_continue. Returns the token, or a taskId to follow with captcha_status while a person solves it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageUrlYesThe page the widget is on.
sitekeyYesThe widget's site key, from the page's data-sitekey attribute.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and openWorldHint=true, so the description carries the real behavioral burden and does so: it discloses the dual return mode (token vs. taskId) and that a taskId must be polled via captcha_status while a person solves it. It also reveals the session/address constraint, which is non-obvious. It stops short of stating timeout/failure semantics.

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 tightly packed sentences with the core action front-loaded, then the routing condition, then the return values. No filler; every clause conveys decision-relevant information.

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 2-param, no-output-schema tool, the description covers the action, the disambiguating alternative, the submission constraint, and the two possible return shapes including how to follow up on a taskId. Nothing an agent needs to invoke it correctly 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%, with pageUrl and sitekey already documented (including the data-sitekey origin). The description names both parameters but adds no format, syntax, or sourcing detail beyond the schema, so 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+resource (solve a Turnstile challenge) plus the inputs and output (token), and explicitly distinguishes itself from the sibling solve_and_continue. An agent can identify this tool from siblings without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use condition ('only when you will submit the token yourself from the same session and address, such as a form posted with web_fetch method=POST') and names the alternative (solve_and_continue) with the condition that selects it (reading the page behind the challenge).

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

web_actA

Open a URL in a browser, run a list of actions and return the resulting page. One shot with no session: for several steps on one login or cart use browser_open + browser_do. Take a web_snapshot first and name elements by ref. Actions: click, type, fill, press, hover, select, scroll (until:'stable' loads everything), wait, eval, goto, verify, console, screenshot, hold; each is an object with do and the fields it needs. Returns per-action results and the final page as markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to open first.
tierNoBrowser tier: browser, stealth, real (default), warm.
proxyNoProxy URL for this run only; web_route sets one per domain.
actionsYesSteps, in order, e.g. `[{"do":"type","ref":"e3","text":"shoes"},{"do":"press","key": "Enter"},{"do":"wait","selector":".results"}]`.
profileNoProfile saved by web_login whose cookies to use.
timeoutNoTimeout in ms for the whole interaction. Default 90000.
extractionNomarkdown (default), text, or html for the final page.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, so the general safety profile is partly covered. The description adds important session behavior ('one shot with no session'), the action repertoire, and return shape, but does not detail side effects, auth, 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.

Conciseness4/5

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

Front-loads the purpose and the key alternative before listing action types. The action list is dense but necessary; overall it is appropriately sized, though it could be slightly more scannable.

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 complex browser-automation tool with no output schema, the description covers the one-shot limitation, snapshot prerequisite, action types, and return format. It omits error handling and some environment details, but the full schema and annotations cover much of the remaining context.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 even with no parameter info in the description. The description reinforces action structure and ref workflow, but adds little meaning beyond what the schema already documents for url, actions, tier, proxy, profile, timeout, and extraction.

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: opens a URL, runs actions, and returns the resulting page. It explicitly distinguishes itself from browser_open + browser_do for multi-step sessions, so an agent can tell it apart from siblings.

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 when-to-use and when-not-to-use guidance: one-shot with no session, and for several steps on one login or cart use browser_open + browser_do. Also instructs taking a web_snapshot first and naming elements by ref.

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

web_captureA
Read-only

Record the JSON and XHR responses a page fetches while it loads and return them: the site's own API, smaller, typed and more stable than the HTML built from it. Use to find the real endpoint behind a listing or pagination; an endpoint that took page=1 takes page=2, which beats following links. Call once without pattern to see what the page asked for, then with pattern (URL substring) and bodies=true for the payloads. Returns endpoints and responses with url, status, mime, and body when asked.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page whose requests to record.
tierNoBrowser tier: browser, stealth, real (default), warm.
bodiesNoReturn the response bodies too. Off by default because they are large; turn it on once `pattern` names the endpoint you want.
patternNoOnly responses whose URL contains this, e.g. "/api/". Leave it out the first time to see everything the page asked for.
profileNoProfile saved by web_login whose cookies to use.
max_bodyNoPer-body character cap. Default 20000.
settle_msNoHow long to keep recording after the page loads, in ms. Default 3000.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds the recording window after load, the fact that bodies are off by default because they are large (a cost disclosure), and the shape of what comes back. It does not cover the `profile`/auth implications or timing/rate behaviour, so it stops short of full transparency.

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 and dense with useful detail; the workflow sentence and return-shape sentence both earn their place. Slightly long and clause-heavy, but no filler.

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

Completeness5/5

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

With no output schema, the description supplies the return contract (`endpoints` and `responses` with url, status, mime, and body when requested) plus default behaviours, so an agent has everything needed to call and interpret it.

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 already 100%, so a 3 is the baseline; the description goes beyond it by explaining the intent behind `pattern` (URL substring, omit first time), `bodies` (large, enable once the endpoint is named), and the interrogation sequence, adding real usage semantics.

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 — recording JSON/XHR responses a page fetches during load and returning them — and contrasts it with the HTML-derived alternative and with link-following crawls. An agent can distinguish it from siblings like web_fetch or web_crawl without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit two-step workflow (call once without `pattern` to survey, then with `pattern` and `bodies=true` to retrieve) and a concrete selection rationale: find the real endpoint behind listing/pagination, and page=1 endpoints accept page=2, which beats following links.

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

web_crawlA
Read-only

Crawl one site from a start URL and return every page as markdown, deduplicated, robots.txt obeyed. Use when the pages are not known in advance; when they are, web_fetch_many is cheaper, and web_map lists a site's URLs for a few hundred tokens before deciding to crawl. max_pages (20), max_depth (2), include (URL substring), query (rank by relevance, stop when saturated), strategy=dfs for a manual or a paginated listing, schema or tables for rows from every page. For many rows pass out_file (.csv, .json, .jsonl): a path comes back instead of the pages. Returns the pages and a crawl_id; pass it back as crawl_id to resume an interrupted crawl. Links to a page's own site are paths, to be joined to that page's url.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesStart URL. Crawl stays on this domain.
alsoNoMore sites to crawl alongside `url`, under the same page and token budget. Each domain gets an equal share of the pages, so one large site cannot spend the whole run.
modeNoLeave unset: auto learns the tier per domain.
dedupNoSkip near-duplicate pages, reporting what they duplicate instead of their content. Default true.
queryNoRank pages by relevance to these words, keep only the relevant blocks, and stop when new pages add nothing (see `stop_when_saturated`).
outputNoOutput shape: pages (default), llms.txt, llms-full.txt.
robotsNorobots.txt policy: obey (default for crawling), warn, ignore.
schemaNoRows instead of prose from every page, as on web_fetch: "auto" or your own selectors. With `out_file`, one row per item, each carrying its page's `url`.
scrollNoScroll every page until it stops growing before reading it (`"auto"` or a round count), for sites whose listings load as you scroll. Implies browser tiers; slower.
tablesNoEvery page's data tables as typed rows, as on web_fetch.
includeNoOnly follow URLs containing this substring (e.g. "/docs/").
timeoutNoTimeout in ms per page. Default 45000.
crawl_idNoResume an interrupted crawl by the `crawl_id` it returned: queue, pages already fetched and parameters all come back. web_status lists the ones with work left.
out_fileNoWrite the pages to this file instead of returning them, as CSV, JSON or JSON Lines depending on the extension. What comes back is a path and a count.
strategyNoOrdering: best_first (default when a query is given), bfs, or dfs to follow one branch to its end before starting the next — what a manual or a paginated listing wants.
max_depthNoLink depth from the start URL. Default 2.
max_pagesNoMaximum pages to fetch. Default 20, max 200.
extractionNomarkdown (default), text, or html.
max_duration_msNoGive up after this long regardless. Default 120000.
max_tokens_totalNoWhole-crawl token cap. Default 60000.
since_last_crawlNoSeed from the site's sitemap and fetch only what its `lastmod` says has changed since this machine last read it. A page with no date is always fetched: silence is not "unchanged".
max_chars_per_pageNoPer-page content cap in chars. Default 8000.
stop_when_saturatedNoStop once the crawl stops learning anything new about `query`. Default true when a query is given.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds substantial context beyond that: robots.txt obedience, dedup defaults, resume semantics via crawl_id, saturation stopping, out_file changing the return shape to a path+count, and link-joining note. Does not cover rate limits or token/cost tradeoffs, so not 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.

Conciseness3/5

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

Front-loaded main purpose is good, but the param rundown sentence is dense and lists roughly a dozen parameters inline, some of which (max_pages default 20, max_depth 2) repeat schema defaults. Informative but not tight.

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 23-param crawling tool with no output schema, the description covers the essential behavior an agent needs: scope, dedup, robots, resumption, saturation, output-shape switching. Return format is described at a high level (pages + crawl_id) which is sufficient since no output schema exists.

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

Parameters4/5

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

Schema coverage is 100% so the schema already documents all 23 params; baseline 3. The description still adds cross-field meaning: out_file changing return type, include-URL-substring, query+stop_when_saturated coupling, strategy=dfs use case, schema/tables producing rows, crawl_id resumption. Marginally above baseline but largely restates schema.

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

Purpose5/5

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

States a specific verb (crawl) and resource (one site from a start URL), and names the return (every page as markdown) with modifiers (deduplicated, robots.txt obeyed). Explicitly distinguishes from siblings web_fetch_many and web_map with the condition that selects each.

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

Usage Guidelines5/5

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

Gives the core when-to-use ('pages are not known in advance') and two named alternatives with their own selection conditions: web_fetch_many when pages are known (cheaper), web_map for pre-crawl URL listing. Routes the agent without schema inspection.

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

web_diffA
Read-only

Compare a page with the copy svipall cached last time and return what changed: changed, similarity, and the added and removed markdown blocks. Use for a one-off question of whether a page changed since it was last read; to keep checking on a schedule use web_watch. Cheap: the comparison is a stored fingerprint, not a second full copy.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to compare against its previously cached copy.
refetchNoFetch a fresh copy first. Default true; false compares stored versions only.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds genuinely new context: the comparison is a stored fingerprint rather than a fresh fetch, making it cheap, and it names the return shape. It doesn't elaborate on the refetch default/failure behavior, keeping it short of 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.

Conciseness5/5

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

Three tight sentences, front-loaded with what the tool does and its outputs, followed by routing guidance and a cost note. No filler and nothing that doesn't earn its place.

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

Completeness5/5

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

For a two-parameter read tool with no output schema, the description names the returned fields (changed, similarity, added/removed blocks), the usage context, and the cost model. An agent has everything needed to select and invoke it 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 both url and refetch (with its default and false semantics) are already documented in the schema. The 'stored fingerprint, not a second full copy' line nudges toward the cached-comparison behavior but doesn't add syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Compare a page with the copy cached last time and return what changed') and even enumerates the returned fields. An agent can distinguish it from web_watch on the description alone.

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 scopes usage to 'a one-off question of whether a page changed since it was last read' and routes scheduled checking to the named sibling 'web_watch'. This is a textbook when-to-use / when-to-use-something-else statement.

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

web_fetchA
Read-only

Fetch one URL and return its main content as markdown (PDF and office documents too), or as rows with schema or tables. The default way to read a page: mode=auto climbs http -> browser -> stealth -> real -> warm, remembers the working tier per domain, and is never set by hand. Cut tokens with query (keep only relevant blocks), css_selector, max_tokens + cursor (page through), or out_file (write to disk, return a path). To click use web_snapshot; for the site's JSON API use web_capture; for several known URLs use web_fetch_many. Returns content, title, tier_used and quality; links to the page's own site are paths, to be joined to url. A wall returns blocked_reason and a note saying what to do: act on it, never retry blindly.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page. Also `raw:<html>` for markup you already have (no request is made) and `file:///path` for a local file under `~/.svipall/in` or a configured `local_roots` entry.
bodyNoRequest body for POST/PUT (http tier only).
modeNoLeave unset: auto learns the tier per domain. Forcing one (http, browser, stealth, real, warm) is for debugging and is slower or weaker.
cacheNoauto (default: serve a fresh copy, revalidate a stale one), read, write, bypass, refresh.
proxyNoProxy URL for this fetch only; web_route sets one per domain.
queryNoKeep only the blocks relevant to these words (BM25), e.g. "shipping costs". The cheapest way to read a long page for one fact, and how much it saves is decided by the query, not the page: measured on two long articles, "robots.txt" and "caching headers" left 6% and 13% of the page, while "history of scraping" left 88%. Name the fact, not the topic.
cursorNoContinue a truncated response from where it stopped: the `cursor` of the previous result.
methodNoHTTP method for the http tier: GET (default), POST, PUT, DELETE, HEAD.
mobileNoAsk as a phone: phone identity and viewport. Only worth it where a site serves a lighter page to phones — a responsive site, which is most of them, returns the same bytes: measured byte-identical on two sites at both the http and browser tiers. It also costs a browser page of its own, since no warm page is reused, and rules out the native last resort.
robotsNorobots.txt policy: warn (default: fetch, and say whether robots.txt disallows it), obey (refuse a disallowed URL), ignore.
schemaNoRows instead of prose, returned as `extracted`. E.g. `{"name": "products", "base_selector": "div.product", "fields": [{"name": "title", "selector": "h2 a"}, {"name": "url", "selector": "a", "type": "attribute", "attribute": "href"}]}`; types text (default), attribute, number, exists, list, html, markdown. A named schema is remembered per domain, and a selector a redesign breaks is relocated and reported as `healed`.
scrollNoScroll a page that loads as you go before reading it: "auto" until it stops growing (up to 40 screens, one "load more" click), or a number of rounds. Implies a browser tier.
tablesNoReturn the page's data tables as typed rows, `tables: [{caption, header, rows}]`, instead of prose: a fraction of the markdown, columns kept. Layout tables are skipped.
headersNoExtra request headers (http tier only).
profileNoProfile saved by web_login whose cookies to use. Implies a browser tier.
timeoutNoTimeout in ms for the whole ladder. Default 60000.
isolatedNoA throwaway browser profile for this fetch alone: no cookies in, nothing left behind.
max_tierNoHighest tier the ladder may climb to: http, browser, stealth, real, warm (default).
out_fileNoWrite the content to this file and return the path instead: measured, a 418-character response against the 34 746 characters of the page it wrote. Relative paths land in ~/.svipall/out/. With `schema` or `tables` a .csv, .json or .jsonl name writes the rows in that format.
text_onlyNoSkip images, fonts, stylesheets and video in browser tiers. Faster on heavy pages; off by default because some anti-bot scripts notice a page whose images never loaded.
extractionNomarkdown (default), text, or html (the raw markup, many times the tokens).
max_tokensNoCap on the content returned, cut on block boundaries. Default 25000. A truncated result carries a `cursor`.
css_selectorNoKeep only the elements this CSS selector matches, e.g. "article" or "#prices".
include_linksNoAdd `links`, split into internal and external, plus images.
include_qualityNoAdd `quality_detail`: integrity verdict with reasons, optimisation traits, near-duplicates in the cache, provenance (byline, date, citations). For judging a source; the compact `quality` field is always present.
include_metadataNoAdd `metadata`: canonical URL, language, author, dates, OpenGraph, JSON-LD, feeds.
main_content_onlyNoDrop navigation, footers and sidebars. Default true; false returns the whole body.
use_site_templateNoStrip what this site repeats on every page (banners, footers), learned from earlier fetches of the same site. Off by default: it can take a word of real content with it. A response it changed says `"template": {"learned_from": 16, "removed_blocks": 3}`.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnly and openWorld annotations, it discloses the automatic tier ladder, per-domain tier memory, token-reduction options, default return fields, link handling, and blocked-response behavior. The instruction to act on blocked_reason/note and never retry blindly is important operational guidance.

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 dense but front-loaded: purpose first, then default behavior, token controls, sibling routing, return fields, and failure handling. Every sentence contributes useful context for a 28-parameter fetch tool.

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 complex open-world fetch tool with no output schema, the description covers the main behavior, default return shape, blocked-case behavior, and sibling alternatives. The remaining parameter and output details are fully covered by the rich input 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 coverage is 100%, so the baseline is already strong. The description adds high-level semantics for key parameters such as query, css_selector, max_tokens/cursor, out_file, schema, tables, and mode, though the detailed per-parameter semantics still come primarily from the schema.

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

Purpose5/5

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

The description states a specific verb and resource: fetch one URL and return its main content as markdown, PDF/office, or rows via schema/tables. It also distinguishes itself from web_snapshot, web_capture, and web_fetch_many, so an agent can identify its role 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 Guidelines5/5

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

It explicitly calls itself the default way to read a page and explains that mode=auto should be used rather than set by hand. It names alternatives for clicking, JSON APIs, and multiple known URLs, giving clear when-to-use and when-not-to-use guidance.

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

web_fetch_manyA
Read-only

Fetch several URLs in parallel with the same escalation, query filter, schema and tables as web_fetch, results in input order. Use when the URLs are already known, from web_search, web_map or a listing; to discover them use web_crawl. Returns one web_fetch result per URL plus corroboration: how many distinct documents the set really is, duplicates marked same_text_as.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoLeave unset: auto learns the tier per domain.
urlsYesThe pages to fetch, in the order the results come back.
queryNoKeep only the blocks relevant to these words (BM25), on every page.
schemaNoRows instead of prose from every page, as on web_fetch: "auto" or your own selectors.
tablesNoEvery page's data tables as typed rows, as on web_fetch.
timeoutNoTimeout in ms per URL. Default 60000.
max_tierNoHighest tier the ladder may climb to. Default warm.
extractionNomarkdown (default), text, or html.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations cover read-only and open-world safety, while the description adds parallel execution, input-order results, one web_fetch result per URL, and corroboration output with duplicate marking. This gives substantial behavioral context beyond 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?

Three front-loaded sentences with no wasted language. Purpose, usage, and return behavior are all covered efficiently.

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 batch tool with no output schema, the description is complete enough: it covers purpose, when to use it, alternatives, and return shape. Annotations and the full parameter schema fill in the remaining safety and input details.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters are already documented in the input schema. The description references the same query/schema/tables semantics as web_fetch but adds little parameter-level detail beyond what the schema provides.

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 several URLs in parallel. It clearly differentiates itself from web_fetch (batch) and web_crawl (discovery), so an agent can identify its role without opening another 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 when to use it: when URLs are already known, from web_search, web_map, or a listing. It also names the alternative for discovery: web_crawl. No inference is required.

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

web_logA
Read-only

Report what this installation has done per domain: which tier answered, which wall appeared, how long it took. view=summary shows domains that are half blocked or slow, the sign of a learned tier gone wrong (reset it with web_status forget_tier); view=recent lists the last events. web_status shows the current state; this is the history.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNorecent (default) or summary.
limitNoMaximum lines for `recent`. Default 50.
domainNoOnly this domain.
since_secsNoHow far back to look, in seconds. Default 3600.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real context beyond that: it explains what an event record contains and hints at a downstream action (resetting a learned tier). It stops short of noting pagination or volume characteristics, so it is not 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?

Front-loaded with the core purpose, then the two view modes, then the sibling contrast. The parenthetical about forget_tier is somewhat dense, but every sentence carries information and nothing is redundant filler.

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

Completeness4/5

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

No output schema exists, and the description covers enough about what is reported (which tier answered, which wall appeared, how long it took) for an agent to interpret results. A read-only, zero-required-parameter history tool does not need much more, though return volume is unaddressed.

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. The description exceeds it by giving semantic meaning to the 'summary' value — the signal of a learned tier gone wrong — which the schema merely labels as 'recent (default) or summary'. It does not clarify limit, domain, or since_secs beyond the schema.

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

Purpose5/5

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

States a specific verb and resource — reporting past activity per domain — and enumerates the payload (tier, wall, duration). It also explicitly contrasts itself with the sibling web_status ('web_status shows the current state; this is the history'), so an agent can separate the two without opening either schema.

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

Usage Guidelines5/5

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

Names both modes and their selection criteria: 'view=summary shows domains that are half blocked or slow... view=recent lists the last events.' It also routes to the sibling alternative and even names the remediation tool (web_status forget_tier) for the condition summary is meant to surface.

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

web_loginA

Open a visible browser window so a person can log in or pass a challenge by hand, then save the cookies to a profile. Use when a fetch returns blocked_reason naming a login wall or a challenge no automatic tier clears. Without profile the domain's auto profile is used and later fetches pick it up on their own; name a profile to reuse it explicitly. Move it to another machine with web_profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to open in the visible window: the login form, or the blocked page itself.
profileNoProfile to save the cookies under. Default: the domain's auto profile, which later fetches use on their own.
timeout_sNoSeconds to wait for the person to finish; closing the window finishes early. Default 300.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the mutation nature is known. The description adds substantial context beyond that: the window is visible, a human must act, behavior on profile omission (domain auto profile that later fetches pick up automatically), and reuse semantics. It doesn't state what happens if the timeout elapses without success, but that is a minor gap.

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

Conciseness5/5

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

Front-loaded with the action, then the triggering condition, then the profile nuances and the sibling pointer. Every sentence carries information; no filler.

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

Completeness4/5

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

No output schema exists, and the description does explain the key side effect (cookies saved to a profile, later fetches reuse them). For a 3-param human-in-the-loop tool with annotations covering the safety profile, only the failure/timeout outcome is left implicit.

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 all three parameters are documented in the schema itself, and the description's notes on `profile` (auto profile vs. named reuse) largely restate it. It adds the cross-fetch consequence that later fetches pick the profile up automatically, but that is marginal over the schema.

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

Purpose5/5

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

States a specific verb+resource (open a visible browser window) and the outcome (save cookies to a profile), which is clearly distinguishable from the solve_* captcha siblings and browser_open. An agent can tell this is the human-in-the-loop fallback rather than an automatic solver.

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 names the trigger condition: use when a fetch returns `blocked_reason` naming a login wall or a challenge no automatic tier clears, which routes the agent after the solve_* tools have failed. It also names web_profile as the tool for moving the profile to another machine.

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

web_mapA
Read-only

List a site's URLs without fetching its pages: robots.txt, sitemaps (nested indexes and .gz), RSS/Atom feeds and homepage links. Use before web_crawl to decide what is worth fetching, or to find the page for a topic: a few hundred tokens instead of the thousands a crawl costs. Returns urls with sources_used, sitemaps and feeds; read the ones that matter with web_fetch_many.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAny URL on the site; the whole origin is mapped.
limitNoMaximum URLs to return. Default 1000.
includeNoOnly URLs containing this substring.
sourcesNoSources to use: robots, sitemap, feeds, links. Default: all of them.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already establish read-only and open-world behavior, but the description adds important context beyond them: it avoids fetching pages, lists the source types, highlights token savings versus crawling, and names the returned fields. It does not contradict the annotations.

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

Conciseness5/5

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

The description is three dense sentences with no wasted text. The core purpose is front-loaded, followed by usage guidance and return information in a logical order.

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 usefully names the return keys (`urls`, `sources_used`, `sitemaps`, `feeds`) and tells the agent how to proceed with `web_fetch_many`. Combined with complete parameter descriptions, it is sufficient for an agent to call and interpret this tool.

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 all four parameters are already well documented in the schema. The description does not add syntax, format, or interaction details for url, limit, include, or sources beyond what the schema provides.

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 a site's URLs without fetching pages. It also enumerates the sources it maps (robots.txt, sitemaps, feeds, homepage links), which distinguishes it clearly from web_crawl and web_fetch_many.

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 use it before web_crawl to decide what is worth fetching, or to find the page for a topic. It also names web_fetch_many as the follow-up for reading selected URLs, giving clear routing guidance.

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

web_notesA

Remember a value across sessions: set a key, get it back, list by prefix, delete it. Use for state needed in a later session, such as the last id seen, a learned URL pattern or a checkpoint. Keys are path-like (shop/last_id) so a prefix groups them.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoThe note's name. A path-like key ("shop/last_id") groups notes for `list`.
valueNoWhat to remember. Required for `set`; a string, so pass JSON if it has structure.
actionNoget (default), set, list or delete.
prefixNoFor `list`: only notes whose key starts with this. Empty lists everything.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only tell us it is a write-capable, non-open-world tool; the description supplies the key behavioral facts they omit — persistence across sessions, path-like key grouping, and prefix-based listing. It does not disclose whether set overwrites, note scope (global vs per-profile/site), or any TTL/size limits, which leaves real gaps for a stateful store.

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, fully front-loaded: purpose first, then a concrete use-case list, then the key-format convention. No filler sentences.

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?

Covers all four actions, the persistence intent, and key structure for a 4-param, zero-required tool with no output schema. It does not describe return semantics for get/list (e.g. missing-key behavior or output shape), which the absence of an output schema would otherwise justify.

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%: value requirement for set, action meanings, and prefix semantics are all already documented in the schema. The description's path-like key example repeats the schema's own example rather than adding new meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific resource (a cross-session value store) and enumerates all four verbs (set/get/list/delete) explicitly. No sibling tool (browser_*, web_crawl, web_search, etc.) does persistent storage, so it is easily distinguished 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?

'Use for state needed in a later session' gives a clear triggering condition, and the examples (last id seen, learned URL pattern, checkpoint) pin down the intended context. It does not name when NOT to use it or any alternative, so it stops short of a 5.

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

web_profileA

Move a logged-in browser profile between machines: export writes an encrypted archive, import restores it, list shows the profiles web_login saved. Use so a challenge a person passed once with web_login is not passed again elsewhere. password is required; there is no unencrypted form.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoWhere the archive goes, or comes from. Relative paths land in ~/.svipall/out/.
nameNoThe profile name, as used by web_login and `profile` on web_fetch.
actionNolist (default), export or import.
passwordNoRequired for export and import. The archive is the session; there is no unencrypted form.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only say readOnlyHint=false and openWorldHint=false, so the description carries most of the burden. It usefully discloses that the archive is encrypted, that the password is required, and that no unencrypted form exists — meaningful behavior beyond the annotations, though it omits what import does if a profile already exists or whether export overwrites.

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

Conciseness4/5

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

Three tight sentences, front-loaded with the core action, then the rationale, then the password constraint. Slightly compressed phrasing ('Use so a challenge a person passed once...') but every sentence earns its place.

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

Completeness4/5

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

For a 4-parameter tool with no output schema and thin annotations, it covers the three actions, the encryption guarantee, and where files land. Minor gaps remain around error/overwrite behavior, but nothing essential to invoking it correctly 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 parameters are already documented in the schema; baseline is 3. The description reinforces the required-password constraint and clarifies that list works on profiles saved by web_login, but adds little beyond what the schema already states.

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+resource ('Move a logged-in browser profile between machines') and enumerates the three modes export/import/list with what each does. It clearly separates this tool from the web_login sibling, which it names.

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

Usage Guidelines4/5

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

Gives an explicit rationale for when to use it — so a challenge a person passed once with web_login is not repeated elsewhere — which is strong context. It does not explicitly state when to prefer list over export/import or any exclusion conditions, so it falls short of a full 5.

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

web_routeA

Send one domain (subdomains inherit) through a proxy from now on, or through a pool with proxies and countries; remove drops the route, no arguments lists routes, check=true tests the exits for liveness, latency and DNS leak. Use when a fingerprinting wall never yields at any tier, or a site is locked to a country. Give country so the browser's timezone and language match the exit.web_status shows each exit's health per domain.

ParametersJSON Schema
NameRequiredDescriptionDefault
checkNoTest the exits configured for `domain` instead of changing them: did each answer, how fast, any DNS leak or scheme problem.
proxyNoProxy URL, e.g. "socks5h://user:pass@host:1080" (socks5h resolves DNS at the exit).
domainNoThe domain to route; subdomains inherit. Omit everything to list the routes.
removeNoRemove the route for `domain`.
countryNoISO country the proxy exits from, e.g. "DE", so the browser announces a matching timezone and language. Declared, never detected: that would need a geolocation service.
proxiesNoSeveral exits instead of one: the domain sticks to the first that works and moves on when that one is blocked twice.
check_urlNoThe URL a `check` fetches through each exit. Default: a small neutral page.
countriesNoISO country of each entry in `proxies`, by position; `country` covers the rest.

TDQS

A4.3/5.0
Behavior5/5

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

With readOnlyHint=false and openWorldHint=true, the description adds key behavioral context: routing persists 'from now on,' subdomains inherit, remove drops the route, no arguments lists routes, and check tests exits for liveness, latency, and DNS leak. It also explains that country aligns browser timezone and language with the exit, which is valuable operational detail beyond the annotations.

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 core action is front-loaded and the description is dense with useful mode and usage information. It is a long, semicolon-heavy paragraph with some repetition of schema details, but it remains readable and mostly earns its place.

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

Completeness4/5

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

For an eight-parameter routing tool with no output schema, the description covers purpose, modes, usage conditions, and the web_status alternative. It does not explain the return format for listing or check operations, but the rich schema descriptions and annotations compensate for much of that gap.

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 eight parameters in detail. The description restates some roles, such as proxies, countries, remove, and check, but adds little syntax or semantics beyond what the schema provides; 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?

The description states a specific action: route one domain through a proxy or pool, with clear modes for remove, list, and check. It distinguishes those modes and points to web_status for health, so an agent can tell what this tool does 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?

It gives explicit use cases: when a fingerprinting wall never yields at any tier, or when a site is locked to a country. It does not provide when-not guidance or name an alternative tool beyond web_status for health monitoring.

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

web_screenshotA
Read-only

Save a PNG of a page rendered in a real browser, anti-bot handled like web_fetch, and return its path, by default with the image inline. Use when the question is visual: layout, a chart, an image, how a page looks to a person. To read or act on a page use web_snapshot instead: cheaper, and it gives refs, whereas a screenshot cannot be clicked. full_page captures the whole scroll height, mobile renders it as a phone.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to render.
tierNoBrowser tier: browser, stealth, real (default), warm.
proxyNoProxy URL for this run only; web_route sets one per domain.
inlineNoReturn the PNG inline as image content too. Default true, skipped above 3 MB.
mobileNoRender the page as a phone would: phone user agent and viewport.
profileNoProfile saved by web_login whose cookies to use.
timeoutNoTimeout in ms. Default 60000.
full_pageNoCapture the whole scrollable page. Default false (viewport only).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations (readOnlyHint=true, openWorldHint=true) already signal a safe open-world read, so the description doesn't need to restate safety. It does add real behavioral context: anti-bot handling is 'like web_fetch', the return is a path plus an inline image by default, and the inline PNG is skipped above 3 MB. No permission or quota details, but nothing is contradicted.

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

Conciseness4/5

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

Three tightly packed sentences, front-loaded with the action and output, then routing, then flags. Every clause earns its place, though the flag explanations make it slightly denser than an ideal one-screen summary.

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

Completeness4/5

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

There is no output schema, so the description carries the return-value burden and does: it states the returned path and the default inline image behavior, plus the 3 MB caveat. Combined with read-only annotations and 100% schema coverage, an agent has enough to invoke correctly; only niche details (tier semantics, proxy/profile interaction) are left to 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 coverage is 100%, so the baseline is 3. The description goes slightly beyond the schema by explaining inline's 3 MB skip threshold and clarifying what full_page ('whole scroll height') and mobile ('renders it as a phone') actually change about the capture, which is genuinely useful framing for choosing flags.

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

Purpose5/5

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

Names a specific verb and resource ('Save a PNG of a page rendered in a real browser') and immediately distinguishes it from siblings: web_snapshot for reading/acting, web_fetch for anti-bot handling parity. An agent can tell exactly what this produces (a PNG file path) 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 Guidelines5/5

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

Explicit both ways: 'Use when the question is visual: layout, a chart, an image, how a page looks to a person' and 'To read or act on a page use web_snapshot instead: cheaper, and it gives refs, whereas a screenshot cannot be clicked.' This is a clear when/when-not with a named alternative and the tradeoff that selects it.

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

web_snapshotA
Read-only

Read a page as its interactive structure: every button, link and field with its role, accessible name and a short ref such as e12. Use instead of web_fetch when the next step is to click or type, and instead of web_screenshot when a page has to be understood: deterministic, no image, a fraction of the tokens. find keeps only matching nodes, max_depth goes shallower. Returns the nodes; pass a ref to web_act or browser_do so no CSS selector has to be guessed.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to read.
findNoOnly nodes whose name or role contains this, e.g. "add to cart" or "button". Far fewer tokens when you know what you are looking for.
tierNoBrowser tier: browser, stealth, real (default), warm.
limitNoCap on nodes returned. Default 200.
profileNoProfile saved by web_login whose cookies to use.
timeoutNoTimeout in ms. Default 60000.
max_depthNoHow deep into the page to look. 3 or 4 usually reaches the controls that matter.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, and the description adds real behavioral context: deterministic, no image, a fraction of the tokens, and how find/max_depth narrow output. It stops short of covering auth/profile requirements or tier/timeout behavior, 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?

Four tight sentences, front-loaded with the resource and output shape, then routing rules, then token cost rationale. No filler and nothing repeated from structured fields.

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 explains the returned nodes and how to reuse a ref, which is the critical return-value information. It omits guidance on tier/profile/timeout that matters for a 7-param open-world tool, so it is complete but not fully so.

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 each of the 7 parameters is already documented in the schema; the description only restates find and max_depth semantics. Per the baseline rule for high coverage, this is a 3 with no compensating detail added.

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 ('Read a page as its interactive structure: every button, link and field with its role, accessible name and a short ref') and names the siblings it displaces (web_fetch, web_screenshot). An agent can distinguish this from every other read-oriented sibling 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 Guidelines5/5

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

Gives explicit conditions: use instead of web_fetch when the next step is to click or type, instead of web_screenshot when a page must be understood, and pass a ref to web_act or browser_do. Both the selection rule and the downstream handoff are spelled out.

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

web_statusA

Show the current state: learned tiers, cooldowns, address budgets, proxy routes, profiles, open browser sessions, resumable crawls, solver stats and the dashboard URL. Use when something is blocked or slow to see why, and to reset it: clear_cooldown, forget_tier, clear_budget and clear_cache take a domain. Without arguments nothing changes. The history per domain is web_log.

ParametersJSON Schema
NameRequiredDescriptionDefault
configureNoSave browser and session policy settings for later calls; open sessions keep theirs.
clear_cacheNoEmpty the page cache: `true` for everything, or a domain name for just that site.
forget_tierNoDomain whose learned tier should be forgotten.
clear_budgetNoDomain whose reputation spend should be forgotten, for every exit that spent on it.
clear_cooldownNoDomain whose cooldown should be cleared.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=false, so the agent already knows writes are possible. The description adds valuable nuance beyond that: 'Without arguments nothing changes' clarifies that inspection is non-mutating, and it names the four mutating parameters, which is genuinely useful context for a dual read/mutate tool.

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

Conciseness5/5

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

Three sentences, front-loaded with the primary 'show current state' purpose, followed by usage guidance and the read-only-by-default caveat, then a sibling pointer. No filler or redundancy.

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

Completeness4/5

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

There is no output schema, and the description compensates by enumerating the returned state categories, so an agent knows what to expect. It lacks detail on how reset parameters interact or what the mutation returns, leaving a minor gap for a tool with five optional mutating parameters.

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 every parameter, and the description's note that clear_cooldown/forget_tier/clear_budget/clear_cache take a domain largely restates that. It adds no format or edge-case detail beyond the schema, so 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 ('Show') and resource (the current state) and then enumerates exactly what state is exposed (tiers, cooldowns, budgets, routes, sessions, crawls, solver stats, dashboard URL). It also distinguishes itself from the sibling web_log by naming it as the place for per-domain history.

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 concrete trigger ('use when something is blocked or slow to see why') and frames the tool as the entry point for resetting state, plus routes to web_log for history. It does not spell out when-not-to-use or privilege requirements, so it falls short of a full 5.

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

web_watchA

Watch a page, or one css_selector region of it, and report when it changes. add starts a watch (interval_secs, default 3600), list shows what changed and when, check looks now, remove stops. A check that finds nothing costs one conditional request. Watches survive restarts but run only while the server is up. For a single comparison with no watch use web_diff.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe page. Required for add, remove and a single check.
labelNoA name to recognise it by in the list.
actionNoadd (default), list, remove or check.
css_selectorNoWatch only the part of the page this CSS selector finds. Changes elsewhere are ignored, and if a redesign breaks the selector the region is relocated by fingerprint.
interval_secsNoHow often it is worth looking, in seconds. Default 3600, floor 60.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and openWorldHint=true, so the description must add the interesting behavior – and it does: a no-op check costs one conditional request, watches persist across restarts but only run while the server is up, and a broken css_selector is relocated by fingerprint. It stops short of stating auth needs or what a change report looks like.

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

Conciseness5/5

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

Front-loads the core purpose in sentence one, then packs action semantics, cost, persistence limits and the alternative into three tight sentences with no filler.

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

Completeness4/5

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

With no output schema the description still conveys what list/check report and the cost model, and it covers persistence and the sibling alternative. Only the exact shape of a change report and any permission requirements are left unstated.

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 baseline is 3. The description restates the interval_secs default and the action vocabulary rather than adding new syntax or format meaning beyond the schema's own descriptions, so it neither compensates for a gap nor adds much.

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 (watch) and resource (a page or one css_selector region of it) and immediately names the sibling it is not: web_diff for a single comparison. An agent can distinguish it from web_diff/web_snapshot without opening any schema.

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

Usage Guidelines5/5

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

Enumerates each action (add/list/check/remove) with its meaning, and explicitly routes the no-watch single-comparison case to web_diff. That is an explicit when-to-use plus an alternative, 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.

Tool Schema Changelog

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

  1. 29 tool updatesv1.0.3
    • First observedbrowser_close
    • First observedbrowser_do
    • First observedbrowser_open
    • First observedbrowser_setup
    • First observedcaptcha_status
    • First observedreport_captcha
    • First observedsolve_and_continue
    • First observedsolve_hcaptcha
    • First observedsolve_image_captcha
    • First observedsolve_recaptcha_v2
    • First observedsolve_turnstile
    • First observedweb_act
    • First observedweb_capture
    • First observedweb_crawl
    • First observedweb_diff
    • First observedweb_fetch
    • First observedweb_fetch_many
    • First observedweb_log
    • First observedweb_login
    • First observedweb_map
    • First observedweb_notes
    • First observedweb_profile
    • First observedweb_route
    • First observedweb_screenshot
    • First observedweb_search
    • First observedweb_site_search
    • First observedweb_snapshot
    • First observedweb_status
    • First observedweb_watch

TDQS

A4.1/5.0

Scored across 29 tools

Disambiguation4/5

Most tools have clearly distinct roles: web_fetch is for single pages, web_fetch_many for known batches, web_crawl for discovery, web_map for URL listing, web_snapshot for interactive structure, web_act for one-shot actions, and browser_open/browser_do for persistent sessions. The captcha-solving tools overlap in style but each targets a different challenge type, and descriptions explain when to use solve_and_continue versus the token solvers. Minor confusion is possible across the many browser/session and captcha variants, but overall boundaries are clear.

Naming Consistency4/5

All names use consistent lower snake_case with predictable domain prefixes: web_*, browser_*, solve_*, captcha_*, report_*. The convention is not strictly verb_noun throughout (e.g., web_snapshot, web_capture, solve_and_continue), but the prefix-based grouping is systematic and readable. No camelCase or chaotic mixed styles.

Tool Count2/5

29 tools is above the recommended range for a well-scoped MCP server and sits in the 'too many' band under the rubric. While many capabilities are genuinely distinct, several could be consolidated (e.g., captcha solvers, browser session tools, fetch variants), making the surface heavier than necessary.

Completeness5/5

The surface covers the full web-automation lifecycle: discovery (web_search, web_site_search, web_map, web_crawl), reading (web_fetch, web_fetch_many, web_snapshot, web_screenshot, web_capture), interaction (web_act, browser_open/do/close, web_login), captcha handling, proxy routing, status/logging, profiles, watching, diffs, notes, and setup. No obvious major operation for the stated domain is missing.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A locally-hosted MCP server that provides AI assistants with advanced web crawling capabilities, including structured data extraction, deep site crawling, and page screenshots. It enables users to convert single or multiple URLs into clean Markdown content for processing by LLMs without requiring external API keys for basic features.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    A fully local MCP server that provides web search via self-hosted SearXNG and page-to-markdown conversion (static and JS-rendered), all aggregated behind a single endpoint for use with AI assistants.
    MIT