web_url_read
Fetch a URL and get clean Markdown content. Use after search to read page text, with options to extract headings, sections, or paragraphs for token-efficient reading.
Instructions
Fetch a URL and convert its HTML content to clean Markdown.
Use after search (or its variants) when you have a URL and want the
actual page text, not just the search snippet. Lightweight HTTP +
HTML→Markdown — handles ~80% of the static-HTML web (Wikipedia, docs
sites, blogs, news, GitHub READMEs).
What this DOES NOT handle: • JavaScript-rendered pages (React/Vue/Angular SPAs) — content loads after the initial HTML, which we don't execute. Returns minimal or empty markdown for these. • Bot-protected pages (Cloudflare challenge, captcha) — typically fail with HTTP 403/503. • Binary resources (PDF, images, archives) — returns an explanatory hint instead of garbled bytes.
For those cases, fall back to a Chromium-backed reader (e.g. Crawl4AI
exposed via the SearXNG-Compose reader profile).
Token-efficient extraction modes (priority order — first one set wins): • readHeadings:true — returns ONLY the heading list (hierarchical TOC). Cheapest survey of a long page. • section:'' — returns content under first matching heading, up to the next same-or-higher heading. Use after readHeadings to jump. • paragraphRange:'3-7' — 1-indexed paragraph slice; supports 'N' (single) or 'N-M' (range). • startChar + maxLength — character window pagination. Response includes total_length and truncated so you can plan follow-up calls.
If no extraction mode is set, returns the full Markdown.
Recommended workflow for long pages:
web_url_read(url, readHeadings: true) ← TOC scan
web_url_read(url, section: '') ← targeted read Far more token-efficient than fetching the full page up front.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTP(S) URL to fetch and convert to Markdown. Static pages only — for JavaScript-rendered SPAs and bot-protected sites, use a Chromium-backed reader instead. | |
| section | No | Substring match against headings (case-insensitive). Returns content under the FIRST heading containing this text, up to the next heading at the same or higher level. Use after readHeadings to read a targeted section without dumping the whole page. | |
| maxLength | No | Maximum characters to return. Use with startChar for paginated reading; the response includes `total_length` and `truncated` so you can plan follow-up calls. | |
| startChar | No | Character offset where extraction begins. Default 0. | |
| readHeadings | No | When true, returns ONLY the page's heading list as a hierarchical TOC (token-cheap survey). Pair with a follow-up call using `section` to read the chunk you actually want. | |
| paragraphRange | No | 1-indexed paragraph range, syntax 'N' or 'N-M' (e.g. '3-7' for paragraphs 3–7, '5' for paragraph 5 alone). Useful for sequential reading of long pages without re-fetching. |