MCP tools
The web_access_fetch, web_access_search, and web_access_sitemap tools, with parameters.
Both the remote and self-hosted servers expose the same three tools. Fetch
and search are read-only; web_access_sitemap creates and manages billed crawl jobs.
web_access_fetch
Fetch any webpage and get clean, LLM-ready Markdown back. Handles proxy rotation, anti-bot protection, CAPTCHAs, and
JavaScript-rendered content automatically. The common case is passing only a url.
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | — | Required. The full http/https URL to fetch. |
format | markdown raw json | markdown | markdown for clean text, raw for the verbatim body, json for a { statusCode, headers, data } envelope. |
method | GET POST PUT PATCH | GET | Use a write method to send a body. |
body | string | object | — | Request body for non-GET. Objects are JSON-stringified. |
headers | object | — | Custom request headers (max 50). Not supported with executeJS. |
countryCode | string(2) | — | ISO 3166-1 alpha-2 country for geolocated proxy routing. |
executeJS | boolean | false | Render JavaScript for SPAs. Cannot be combined with headers. |
actions | array | — | Browser actions to run before the page is captured. See below. |
solveCaptcha | boolean | true | Set false to fail fast instead of solving challenges. |
Returns: Markdown by default; the verbatim body or a JSON envelope when format is set accordingly.
{ "url": "https://example.com/article" }Browser actions
Pass actions when the content you want does not exist in the document until something happens to the page — a click
past a consent gate, a search form submitted, a "load more" button, or rows that render only once scrolled into view.
The sequence runs in a real browser session, and the page is captured after the last step.
Escalate in this order, cheapest first:
- Plain
url— always try this first. executeJS: true— the page renders client-side but needs no interaction.actions— the content requires interaction. Takes tens of seconds and holds a browser session.
If the data is missing at every rung, it is probably not in the HTML at all. Look for the JSON API the page itself calls and fetch that endpoint directly — it is faster and returns exact values.
{
"url": "https://example.com/listings",
"actions": [
{ "type": "wait", "selector": ".card", "timeout": 20000 },
{ "type": "scroll", "direction": "down" },
{ "type": "wait", "milliseconds": 1500 },
{ "type": "scroll", "direction": "down" },
{ "type": "wait", "milliseconds": 1500 }
]
}Waiting on a selector rather than a fixed duration continues as soon as the content is there, so prefer it wherever
you can name one. Up to 50 actions per request, one screenshot at most, and 30s caps any single wait. The full step
vocabulary is in Browser actions.
Returns with actions: a JSON object — data (the final page, Markdown by default), finalUrl, statusCode, and
screenshot when the sequence took one. A failed step still returns successfully, carrying error and
failedActionIndex (0-based, into your actions array) with data holding the page as it stood at that point.
actions cannot be combined with method, body, headers, or format: "raw" — a browser session is always a GET.
Tool surface vs. the full API
The MCP web_access_fetch tool exposes the most common fetch options. Advanced /fetch features — structured
extraction (jsonSchema) and requireWSS — are available on the HTTP
API directly.
web_access_search
Search the web and return structured organic results. Bypasses anti-bot protection on search engines.
| Parameter | Type | Description |
|---|---|---|
query | string | Required. The search query. Be specific for best results. |
Returns: the organic results, each with position, title, URL, snippet, and display URL.
{ "query": "latest developments in AI agents 2026" }web_access_sitemap
Crawl a whole site and map its URLs. Starting from one URL the crawler follows same-domain links breadth-first
(optionally seeded from the site's /sitemap.xml) and records every URL it reaches with fetch status, depth, and
parent. Crawls run asynchronously as sitemap jobs: one tool drives the whole
quote → approve → poll → read lifecycle through its action parameter, and nothing is crawled or billed until the
quote is explicitly approved.
action | Requires | Description |
|---|---|---|
submit | url | Quote a crawl. Returns jobId, estimatedPages, and estimatedCostUsd with status awaiting_approval. Quotes expire after one hour. |
approve | jobId | Start the quoted crawl — the billing-consent step. Fails with 402 on insufficient balance; retry on a 409 partial_state. |
status | jobId | Poll progress: awaiting_approval → running (pending / processed counts) → completed | failed | canceled | token_cap_exceeded. |
results | jobId | Page through discovered URLs. total tells you when to stop paging. |
cancel | jobId | Stop a non-terminal job. Pages already fetched stay billed and readable. |
list | — | Your organization's recent crawl jobs, most recent first. |
| Parameter | Type | Used by | Description |
|---|---|---|---|
action | enum | — | Required. One of the six actions above. |
url | string (URL) | submit | Required for submit. Starting URL. The crawl stays on this hostname. |
maxPages | integer | submit | Maximum pages to crawl (1–10,000, default 10). Each fetched page is billed. |
maxDepth | integer | submit | Maximum link depth from the starting URL (1–100, default 2). |
pathPrefix | string | submit | Only crawl URLs whose path starts with this prefix. |
budgetUsd | number | submit | Spend cap in USD (min 0.0001). Defaults to the quote; the crawl stops with token_cap_exceeded before exceeding it. |
useSitemap | boolean | submit | Also seed the crawl from the site's root /sitemap.xml (one extra billed page; default false). |
jobId | string | job-scoped actions | The id returned by submit. |
limit | integer | results / list | Page size — results default 1000 (max 5,000); list default 20 (max 100). |
offset | integer | results / list | Number of entries to skip. |
Returns: the JSON envelope for the chosen action (quote, status, URL page, or job list) alongside a one-line summary.
{ "action": "submit", "url": "https://example.com", "maxPages": 200, "maxDepth": 3 }Same jobs as the HTTP API
The tool fronts the sitemap endpoints directly — response shapes, statuses, billing,
and result retention (per-URL discoveredUrls is only available while results are live) all match. See the Sitemap
crawl guide for a walkthrough.
Recommended workflow
- Call
web_access_searchto find relevant pages for a query. - Call
web_access_fetchon the most relevant URLs to pull their full content.
To cover a whole site instead of single pages, run web_access_sitemap first (submit → approve → poll → results) to
build the URL list, then web_access_fetch the pages you need.