Skip to main content

Tools Reference

All 51 tools are discovered dynamically — webrain_guide lists them for the LLM. This page is the authoritative reference; descriptions match webrain-mcp/src/tools.rs. Every browser tool also accepts an optional session_id to route to a webrain_open_session pool.
Agent decision guide: browser selection (real Chrome vs obscura vs lightpanda vs fetch_http), how to bypass Cloudflare/CAPTCHA/Turnstile challenges (check the challenge field after webrain_navigate; run scripts/stealth_solve.py for gated pages), and the extraction tool matrix. Call FIRST when unsure which webrain tool/browser to use.
Navigate to a URL and return page state (title, visible text, interactive elements, deduped same-origin links) plus a challenge field (cloudflare_challenge | blocked | captcha) when the page is gated. Use links for one-call crawl / internal-link discovery. If challenge is set, see the Agent Decision Guide for the real-Chrome bypass.Optional request-quality params: disable_resources (block fonts/images/media), network_idle, wait_selector + wait_selector_state, css_selector (narrow returned text), block_trackers.
Re-capture current page state WITHOUT navigating. D1 DOM-fingerprint skip: returns the cached state unchanged when the page hasn’t mutated, saving tokens.
Run arbitrary JavaScript in the current page and return the JSON result. Use for precise structured extraction (e.g. product schemas).
Just-in-time page context: viewport/page size, scroll position, pixels/pages above & below, position %. Tells you when to scroll before interacting. No DOM dump.
Accessibility-tree snapshot: [{role, name, value, css_path}]. Read-only — understand structure, then interact via webrain_navigate/webrain_snapshot element indices. Filters: role, filter (substring on name OR value OR css_path), max_nodes.ARIA cheat-sheet: combobox (dropdown), option (menu item), tab, radio (segmented control), textbox, button. If role=<x> returns [], drop the role filter and filter on the label text.
Semantic-tree text snapshot of the current page: role "name" lines for the LLM, plus the raw AX JSON.
LAST RESORT — full raw HTML (token-heavy, unreadable). Never use for page text: webrain_snapshot/clean/eval/extract_json return text/structure cheaper. Only when the task explicitly asks for HTML markup.
Return captured page errors/warnings (uncaught errors + unhandled rejections) since the last call. Injects a listener on first call.
Take a screenshot of the current page. Returns base64-encoded PNG. full_page captures the full scrollable page.
Requires a real paint engine — real Chrome only. Obscura errors; lightpanda returns a fake placeholder PNG.

Interact

Click an interactive element by its index (from webrain_navigate elements list).
Type text into an input element by its index.
Press a key in the focused element (Enter, Tab, Escape, Backspace, ArrowDown…). Use after webrain_type to submit forms.
Scroll the page up or down. direction: up | down.
Browser navigation: go back, forward, or reload.
Manage browser tabs. new (url, returns id, becomes active) | switch (id) | close (id) | list.
Remove visible fixed/sticky overlays (cookie banners, popups, modals) that block interaction.

Extract

Detect repeated container patterns on the page. Returns candidate base-selectors with occurrence counts for building a webrain_extract_json schema. Zero LLM. min_occurrences (default 3).
CSS-schema extraction: build a JSON array from a base selector + field selectors. Zero-LLM structured extraction.
type: text | attr | html | xpath. adaptive: true auto-relocates the container when the base selector matches nothing (site redesigned).
Regex pattern extraction over the current page: built-ins email/url/phone/price/date/time/ip/uuid + custom [{label, re}]. Scans page HTML (catches href/mailto).
Extract all HTML tables on the current page to JSON. Returns arrays of {header: cell} row objects per <table>. Zero LLM.
Extract JSON-LD / microdata from the current page. Returns parsed <script type="application/ld+json"> blocks — schema.org product/article/organization data. Zero LLM, zero cost.
BM25 relevance filter: score a list of text items against a query, keep the top-k. Zero LLM. Use after extraction to keep only relevant results.
Clean page text: strip nav/footer/script/style/iframe, exclude social/ads links, filter by word length. Returns clean text blob (max 8KB). In-page JS, zero-LLM.

Crawl & Batch

Batch over many URLs using concurrent tabs. op: fetch (read text) | extract (CSS/XPath schema) | interact (async JS interaction, then optional extract) | screenshot (save PNGs to dir).
cdp_urls fans out across N CDP backends round-robin (per-proxy isolation). output persists the full payload to disk. Optional disable_resources, network_idle, wait_selector shared with navigate.
Crawl a website from a seed URL (BFS / DFS / BestFirst). allow/deny URL-regex filters, retry, delay_ms, autothrottle (adaptive backoff), crawldir checkpoint/resume, crawl_timeout_secs.
Discover crawlable URLs from a site’s sitemap. Follows robots.txt Sitemap: → index → leaf sitemaps → every <loc>. Pure HTTP, no browser. Returns {urls, count, sources}.
Auto-scroll the page to trigger infinite-scroll / load-more content. Returns {scrolls, height}. Run before extraction on SPA feeds.
Validate a list of URLs — alive vs dead. Filters 404s/5xx/errors. HEAD first, GET fallback. Use before batch extraction.
No-browser HTTP fetch: GET a URL, return {url, status, text}. 10–100× faster than browser navigation, zero memory — but no JS/SPA/auth. Use for static pages.
Search the web and navigate to the results page. duckduckgo is HTML-lite and scrape-friendly (default); google and bing return plain HTML via HTTP; brave returns an SPA shell — use webrain_navigate to Brave’s URL instead for real results.

Vision

PixelRAG-style tile capture: split the current page into a grid of screenshot tiles (base64 PNGs) so a vision model can read regions — tables/charts/layout survive. tile_width/tile_height (800), max_tiles (16).
Capture the current page as vision tiles, embed each via EMBED_URL (Qwen3-VL-Embedding-2B / vLLM), and add to a cosine index persisted to vision/{tag}.jsonl. Requires EMBED_URL set to a running /embeddings endpoint.
Embed a text query and return the cosine top-k stored tile ids from a vision index — semantic page retrieval. tag, query, k (5).

PDF & Media

Save the current page as PDF (base64-encoded).
Convert a PDF to Markdown (pure Rust on lopdf). Returns page count, pdf_type (TextBased/Scanned/Mixed), confidence, layout (is_complex, pages with tables/columns), full markdown, and per-page texts. Proper ToUnicode CMap decoding fixes LaTeX/CID-font PDFs. Single path or batch paths.
Render PDF pages as base64 PNG images — the vision-model alternative to text extraction (bypasses font encoding issues). Requires --features pdfium. Optional tile_size splits pages into square tiles.
Extract embedded images/figures from a PDF as base64 PNGs — zero system deps. Handles DCTDecode (JPEG) and FlateDecode. Skips JPEG2000/CCITT/JBIG2 (use webrain_pdf_render for those). Works in the default build.
Download single or many files/video/audio. engine http (plain streaming, optional filter_extension) or ytdlp (HLS/DASH/.m3u8, playlists, age/cookie-bound media — full yt-dlp passthrough via args).
Discover media URLs the page loads. With a url: CDP Network capture of the full load — catches JS-loaded .m3u8/.mp4/manifest/player-API requests. Without: Performance API + <video>/<audio>/<source> scan of the current page.
List images on the current page: [{src, alt, width, height}]. Useful for product/photo URLs.

Auth & Sessions

Fully-automatic login from the local vault (or WEBRAIN_USER/WEBRAIN_PASS): the server decrypts the secret in-process and injects it via CDP — the value never passes through the model. Auto-discovers login fields; on a 2FA gate it TOTP-injects if a seed is stored and returns waiting_for_human: true. Reply is status-only.
List vault profiles (service, profile, username, created_at) — names only, never secrets.
Read all cookies (incl. HttpOnly) from the session backend. Use with webrain_setcookies for cross-browser session migration.
Import cookies into the session backend for cross-browser auth. MUST be followed by webrain_batch WITHOUT cdp_urls so set + batch share one connection.
Export the current browser’s auth state (cookies + localStorage) to <profiles_dir>/<service>/<profile>/state.json so a login follows you across machines.
Import auth state from <profiles_dir>/<service>/<profile>/state.json into the current browser. Navigate to the target site first — localStorage is origin-scoped.
Create a named browser session pool. Direct webrain_batch/webrain_navigate calls to it via session_id — use different sessions to isolate tasks or browsers (e.g. one per CDP_URL for parallel subagents).
Destroy a named session pool and its browser backend. The default session cannot be closed.
List all active session pools with their session IDs and CDP URLs — discover sessions for subagent routing.
Stop a Chrome launched by webrain launch (kills the browser process; the persistent profile + cookies remain for the next launch).