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. Onlybatch_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-resourceand can register dynamically athttps://mcp.zenrows.com/register. The user signs in atapp.zenrows.com, or creates a free account, and approves access. - API key as a Bearer token, in the
Authorizationheader. See Authentication.
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 withAUTH004 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 withisError: 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.
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 formarkdown, 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.
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 includestatus, 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)