Skip to main content
This page lists the tools the Zenrows MCP server exposes at https://mcp.zenrows.com/mcp, how each one is classified, and the parameters, outputs, and errors of the scrape, extract, and account_usage tools. For setup, see Remote MCP server.

Tool classification

The classification comes from each tool’s MCP annotations. Read-only tools retrieve information and change nothing. Write tools change state: a job on your account, or a page inside a cloud browser session. Only batch_cancel is annotated as destructive. Descriptions of the Batch and browser tools are in Batch tools and Browser tools.

Authentication and permissions

The server accepts either of these on every request:
  • OAuth 2.1 with PKCE (S256). Clients discover the authorization server through https://mcp.zenrows.com/.well-known/oauth-protected-resource and can register dynamically at https://mcp.zenrows.com/register. The user signs in at app.zenrows.com, or creates a free account, and approves access.
  • API key as a Bearer token, in the Authorization header. See Authentication.
There is one scope, api. The access token is the account’s API key, so every tool runs with the same permissions as that key. To revoke access, rotate the API key in the dashboard: calls with the old key then fail with AUTH003.

Credits and limits

The Free plan includes 5,000 credits that renew each month; paid plans include larger monthly allowances. Each request costs credits depending on the site and the options used. See Pricing for how each tool is billed and Plans and pricing for plan allowances. When the credits run out, requests fail with AUTH004 until the allowance renews, or the account tops up or upgrades. A key can also have its own credit cap, which returns AUTH014. Each plan also limits how many requests run at once. Requests over that limit fail with AUTH006. account_usage does not count toward the concurrency limit.

Errors

A failed tool call returns a tool result with isError: true. The text of the result contains the Zenrows error as JSON, with a code, a title, and a detail that explains the fix. The full list is in API error codes.

scrape

Fetches one web page and returns its content as Markdown, plain text, HTML, a PDF, a screenshot, or JSON. Built on Fetch. Requests use Adaptive Stealth Mode (mode=auto) by default: Zenrows enables JavaScript rendering and premium proxies only when a page needs them, and you pay only for the configuration that succeeds. Setting js_render or premium_proxy forces that configuration and turns Adaptive Stealth Mode off. Classification: read-only. Makes no changes to the account or to the site it reads.

Parameters

string
required
The URL of the page to fetch.
boolean
default:"false"
Force rendering in a headless browser on every request. Turns Adaptive Stealth Mode off, which already renders when a page needs it.
boolean
default:"false"
Force residential proxies on every request. Costs more credits and turns Adaptive Stealth Mode off, which already switches to them when a site blocks.
string
Two-letter country code (ISO 3166-1 alpha-2), for example US. Works with Adaptive Stealth Mode. Without it (when js_render is set), it requires premium_proxy.
string
default:"markdown"
One of markdown, plaintext, pdf, or html. Ignored when autoparse, css_extractor, outputs, or a screenshot option is set.
boolean
Return the page’s main data as JSON.
string
JSON object mapping field names to CSS selectors, for example {"title":"h1","price":".price"}. Returns JSON.
string
Comma-separated data types to return as JSON: emails, headings, links, menus, images, videos, audios, or * for all.
string
CSS selector to wait for before capturing. Requires js_render; Adaptive Stealth Mode alone ignores it.
integer
Milliseconds to wait after the page loads, up to 30000. Requires js_render; Adaptive Stealth Mode alone ignores it.
string
JSON array of browser actions to run before capturing, for example [{"click":"#load-more"},{"wait":1000}]. Works with Adaptive Stealth Mode, which then renders the page in a browser, or with js_render.
boolean
Return a screenshot of the visible part of the page instead of text.
boolean
Return a screenshot of the full page.
string
Return a screenshot of the element matching this CSS selector.

Output

The page content in the requested format: text for markdown, plaintext, and html; JSON for autoparse, css_extractor, and outputs; an image for screenshots.

Example

Call
Result

extract

Returns a page as structured JSON fields instead of a full page body, for example a product’s name and price. Built on Extract. In its default auto mode, extract works on domains Extract has prepared. The list is available from GET /v1/extract/domains. On other domains it retries once with autoparse. Like scrape, every mode uses Adaptive Stealth Mode (mode=auto) by default. Setting js_render or premium_proxy forces that configuration and turns it off. Classification: read-only. Makes no changes to the account or to the site it reads.

Parameters

string
required
The URL of the page to extract from.
string
default:"auto"
auto uses site-tailored extraction (extract=auto, open beta) on prepared domains. autoparse (deprecated) returns general-purpose JSON on any domain. css uses your own selectors from css_extractor.
string
Required when mode is css. JSON object mapping field names to CSS selectors.
boolean
Force rendering in a headless browser on every request. Turns Adaptive Stealth Mode off.
boolean
Force residential proxies on every request. Costs more credits and turns Adaptive Stealth Mode off.
string
Two-letter country code. Works with Adaptive Stealth Mode. Without it (when js_render is set, or mode_auto is false), it requires premium_proxy.
boolean
default:"true"
Adaptive Stealth Mode (mode=auto) is on by default. Set false to send a plain request without it.
string
CSS selector to wait for before extracting. Requires js_render; Adaptive Stealth Mode alone ignores it.
integer
Milliseconds to wait after the page loads, up to 30000. Requires js_render; Adaptive Stealth Mode alone ignores it.
boolean
default:"true"
When mode is auto and the domain isn’t enabled (AUTH010) or prepared (REQS007) for Extract, retry once with autoparse. See Errors.

Output

A JSON object:

Example

Call
Result (trimmed)

account_usage

Returns the current plan, its credit allowance, how much is spent, and when the period renews. Free, and does not count toward the concurrency limit. Classification: read-only. Makes no changes to the account.

Parameters

None.

Output

The account’s subscription details as JSON, passed through from the Zenrows API. Fields include status, period_starts_at, period_ends_at, usage_credits, credit_limit, usage_percent, plan (name, products, concurrency limit), and api_key.caps.

Example

Call
Result (trimmed)