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. 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"
Render the page in a headless browser. Needed for pages that load their content with JavaScript.
boolean
default:"false"
Route the request through residential proxies, for sites that block other requests. Costs more credits.
string
Two-letter country code (ISO 3166-1 alpha-2), for example US. 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.
integer
Milliseconds to wait after the page loads, up to 30000. Requires js_render.
string
JSON array of browser actions to run before capturing, for example [{"click":"#load-more"},{"wait":1000}]. Requires 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. Other domains return REQS007. 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
Render the page in a headless browser.
boolean
Route the request through residential proxies. Costs more credits.
string
Two-letter country code. Requires premium_proxy or mode_auto.
boolean
Use Adaptive Stealth Mode (mode=auto), which picks rendering and proxies for the site.
string
CSS selector to wait for before extracting. Requires js_render.
integer
Milliseconds to wait after the page loads, up to 30000. Requires js_render.
boolean
default:"true"
When mode is auto and the API returns AUTH010, retry once with autoparse. It does not trigger on REQS007 (domain not prepared); use scrape, or extract with mode: "css". 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)