batch_cancel
Stop an in-flight Batch job run (POST /jobs/:id/stop).
Scrape and browse the protected web through ZenRows — proxies, anti-bot handling and headless sessions run for you.
LABSCO SUMMARY
The split is worth understanding before you start: scrape and extract are single API calls through ZenRows' fetch infrastructure and are the cheap path for most pages, while the browser session tools open a real browser you drive step by step and have to close afterwards to give the slot back. Two operational details save the most time — read the accessibility tree before interacting rather than guessing selectors, and issue the navigation wait before the click that triggers it, not after.
ZenRows' own server over its web-data infrastructure. One tool scrapes a page to markdown, HTML, PDF or a screenshot; another extracts structured JSON; a batch API fans many URLs out asynchronously; and a full browser-session surface drives a real headless browser behind ZenRows' anti-bot handling.
A ZenRows account. The hosted server at https://mcp.zenrows.com/mcp takes your API key as an Authorization bearer, or OAuth where the client supports it, and does not create accounts for you. Locally it is npx -y @zenrows/mcp on Node.js, reading ZENROWS_API_KEY or a key already stored in ~/.zenrows/secrets.json — and with neither present the stdio path provisions a Free plan account itself, writes the key and claim metadata under ~/.zenrows/ at mode 0600, and prints a claim URL, which ZENROWS_AUTO_SIGNUP=false turns off. The batch tools are in beta and can return BATCH_ACCESS_DENIED, and the automatic extract mode is open beta, currently free with billing possible later.
One command — npx -y @zenrows/mcp
USE CASES
Scrape it to markdown with JS rendering and a premium proxy in the country you need.
Extract structured JSON — automatically, or with the CSS extractor you supply.
Submit them as a batch job, poll it to completion, then read the result rows.
Open a session, read the accessibility tree, fill the form and submit — waiting for navigation before the click.
Query every element matching the selector for its text and attributes, then move to the next page.
Read the cookies out, set them back on a later session, and close the browser to free the slot.
Send the whole action list in a single call against the open session.
Take a screenshot, or render the page to PDF for the record.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
batch_cancelStop an in-flight Batch job run (POST /jobs/:id/stop).
batch_createSubmit a cloud Batch job that fans out many URLs asynchronously (Zenrows Batch API beta).
NOT the same as browser_batch — this hits https://async.api.zenrows.com/v1 with X-API-Key. Use for large URL lists; prefer scrape/extract for one-off pages.
Returns job_id + latest_run.status/stats. Poll with batch_status / batch_wait, then batch_results. If you get BATCH_ACCESS_DENIED, the account lacks Batch beta access.
batch_resultsList result rows for a Batch job (cursor-paginated server-side; returns the full list).
Each row may include task_id, external_id, status, and a short-lived result_url for the body. Download result_url soon — presigned links expire.
batch_statusGet status and stats for a Zenrows Batch job (latest_run.status + latest_run.stats).
batch_waitPoll batch_status until the job reaches a terminal state (completed, stopped, or deleted).
browser_batchExecute a sequence of browser actions in a single call against an existing session.
Use this when you already know the full sequence of steps — it reduces round trips and is faster than calling each tool individually.
Actions run sequentially and stop at the first failure unless stop_on_error is false. Each step result is returned in the results array at the same index.
Note: screenshots in batch results are returned as base64 strings inside the JSON. For proper image rendering, use browser_screenshot directly.
browser_checkCheck a checkbox or radio button.
browser_clear_cookiesClear all cookies for the current browser session.
browser_clickClick an element on the page using a CSS selector. Use browser_get_accessibility_tree first to find the right selector.
browser_closeClose a browser session and free all associated resources. Always call this when done to release the browser slot.
browser_dragDrag an element from its current position to a target element.
browser_evaluateExecute JavaScript in the browser context and return the result.
browser_fillClear an input field and set its value. Preferred over browser_type when replacing the full value.
browser_focusMove focus to an element, triggering focus-dependent UI changes.
browser_generate_pdfRender the current page as a PDF document.
browser_get_accessibility_treeGet the ARIA accessibility tree of the current page as readable text.
Call this first after browser_navigate to understand the page structure before interacting with elements. More token-efficient than a screenshot for finding selectors and understanding layout.
The tree shows all interactive elements (buttons, inputs, links) with their roles, labels, and states — everything needed to drive browser interactions.
browser_get_attributeGet the value of a specific attribute on an element.
browser_get_cookiesGet all cookies for the current page.
browser_get_htmlGet the HTML source of an element or the full page.
browser_get_textGet the visible text content of an element or the entire page body.
browser_get_titleGet the title of the current page.
browser_get_urlGet the current URL of the browser session.
browser_go_backNavigate back to the previous page in the browser history.
browser_go_forwardNavigate forward to the next page in the browser history.
browser_hoverMove the mouse cursor over an element to trigger hover effects.
browser_local_storageRead, write, or clear localStorage in the current page context.
browser_navigateOpen a Zenrows Browser Sessions session and navigate to a URL.
This is the entry point for all browser automation. It creates a new session backed by Zenrows' anti-bot infrastructure and navigates to the given URL in one step.
Returns a session_id that must be passed to every subsequent browser_* tool call. Always call browser_close when done to close the session and free resources.
When to use options:
browser_new_tabOpen a new browser tab. Returns a tab_id to use with browser_switch_tab.
browser_press_keyPress a keyboard key. Examples: "Enter", "Tab", "Escape", "ArrowDown", "Control+a".
browser_query_selector_allFind all elements matching a CSS selector and return their text, HTML, and attributes.
browser_reloadReload the current page.
browser_screenshotTake a screenshot of the current page or a specific element. Use for visual verification or when the accessibility tree is not sufficient.
browser_scrollScroll the page in a given direction.
browser_select_optionSelect an option from a <select> dropdown element.
browser_set_cookiesSet one or more cookies in the browser session.
browser_switch_tabSwitch focus to a different browser tab.
browser_typeType text into an input element. Appends to existing content unless clear_first is set.
browser_uncheckUncheck a checkbox.
browser_waitWait for a fixed duration. Use sparingly — prefer browser_wait_for_selector when possible.
browser_wait_for_navigationWait for the page to navigate to a new URL. IMPORTANT: call this BEFORE the action that triggers navigation (e.g. before browser_click on a submit button), not after — the navigation event may already have fired and this will hang until timeout. If the page stays on the same URL (AJAX/SPA), skip this tool entirely. Optional timeout_ms (default 30000ms).
browser_wait_for_selectorWait until an element matching the CSS selector is stable in the DOM. Set visible=true to also require the element to be visible (not hidden).
extractExtract structured data from a webpage via Zenrows.
Prefer this over scrape when you need JSON fields (products, articles, listings) rather than a full page body. Modes:
Stealth: js_render, premium_proxy, proxy_country, or mode_auto (Adaptive Stealth Mode). For full-page markdown/HTML/screenshots, use scrape instead.
scrapeScrape any webpage and return its content using Zenrows (Fetch).
Use for full-page content (markdown/HTML/PDF/screenshot). For structured JSON fields (products, articles, listings), prefer the extract tool when it fits — it returns parsed fields instead of a full page body.
When to enable options:
Examples: Basic: { url: "https://example.com" } Dynamic: { url: "https://spa.com", js_render: true } Protected:{ url: "https://protected.com", js_render: true, premium_proxy: true }
BEFORE YOU INSTALL
43 tools when we connected. Extract=auto is in open beta, and the batch_ tools may return BATCH_ACCESS_DENIED on accounts without access. browser_batch is a browser tool, not one of the batch_ tools.
npx on PATH
CONTEXT COST
Rated by the size of the 43 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npx -y @zenrows/mcphttps://mcp.zenrows.com/mcpAdd this hosted endpoint to your MCP client.
{
"mcpServers": {
"zenrows": {
"command": "npx",
"args": [
"-y",
"@zenrows/mcp"
],
"env": {
"ZENROWS_API_KEY": "<YOUR_ZENROWS_API_KEY>"
}
}
}
}{
"servers": {
"zenrows": {
"command": "npx",
"args": [
"-y",
"@zenrows/mcp"
],
"env": {
"ZENROWS_API_KEY": "<YOUR_ZENROWS_API_KEY>"
}
}
}
}{
"type": "mcp",
"server_label": "zenrows",
"server_description": "Web scraping MCP server for accessing live web content.",
"server_url": "https://mcp.zenrows.com/mcp",
"authorization": "<YOUR_ZENROWS_API_KEY>",
"require_approval": "never"
}