zenrows avatar

Zenrows Mcp

zenrows/zenrows-mcp

Connects Claude and other MCP clients to ZenRows' scraping infrastructure to fetch content from any website without hitting bot detection. You get two tool families: a single `scrape` call that returns Markdown, HTML, JSON, or screenshots via the Universal Scraper API, and 30+ `browser_*` tools for full automation like clicking, form filling, and session management through their Scraping Browser. Works as either a remote HTTPS server or local stdio process. Useful when you need an AI to pull live data from sites that would normally block automated requests, or when you want to hand off the proxy rotation and anti-bot headaches to managed infrastructure instead of wrestling with Playwright or Puppeteer yourself.

GitHub stars
21
tools
62
auth
Secret needed
transport
STDIO, HTTP
env var
1
last updated
Nov 6, 2026

Install

From registry metadata
$ npx add-mcp https://mcp.zenrows.com/mcp --name zenrows-mcp --header 'Authorization: Bearer ${API_TOKEN}'

Run in your terminal. add-mcp asks which agents to add it to, then asks for each value it needs. Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http zenrows-mcp https://mcp.zenrows.com/mcp --header 'Authorization: YOUR_AUTHORIZATION'

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 62 tools

Verified live against the running server on Nov 6, 2026.

scrapeScrape any webpage and return its content using Zenrows (Fetch). Returns full-page content (markdown/HTML/PDF/screenshot). For structured JSON fields (products, articles, listings), the extract tool returns parsed fields instead of a full page body. By default the request uses...14 params

Scrape any webpage and return its content using Zenrows (Fetch). Returns full-page content (markdown/HTML/PDF/screenshot). For structured JSON fields (products, articles, listings), the extract tool returns parsed fields instead of a full page body. By default the request uses...

Parameters* required
autoparseboolean
Deprecated: general-purpose structured JSON from the page. Prefer the extract tool (extract=auto on a prepared domain, or css_extractor).
css_extractorstring
Extract specific elements using CSS selectors. JSON object mapping names to selectors, e.g. '{"title":"h1","price":".price-tag"}'. Returns JSON instead of full page content.
js_instructionsstring
JSON array of browser interactions to run before scraping. Works in automatic mode (mode=auto), which then renders the page and bills it at the JS rendering rate, or with js_render=true. Example: [...
js_renderboolean
Force JavaScript rendering on every request. Overrides automatic mode (mode=auto), which already renders JavaScript when a page needs it. Leave unset unless you need a fixed configuration.
outputsstring
Comma-separated list of data types to extract as structured JSON. Available: emails, headings, links, menus, images, videos, audios. Use '*' for all types. Returns JSON instead of full page content.
premium_proxyboolean
Force premium residential proxies on every request (10x credit cost). Overrides automatic mode (mode=auto), which already uses premium proxies when a page needs them. Leave unset unless you need a...
proxy_countrystring
Country for geo-targeted scraping. ISO 3166-1 alpha-2 code (e.g. 'US', 'GB', 'DE'). Works in automatic mode (mode=auto); if you set js_render without premium_proxy, it requires premium_proxy=true.
response_typevalue
Output format. 'markdown' (default) preserves structure and is ideal for LLMs. 'plaintext' strips all formatting for pure text extraction. 'pdf' returns a PDF of the page. 'html' returns the raw HT...default: markdown
screenshotboolean
Capture an above-the-fold screenshot of the page. Returns an image instead of text content. Useful for visual verification or debugging.
screenshot_fullpageboolean
Capture a full-page screenshot including content below the fold. Returns an image instead of text content.
screenshot_selectorstring
Capture a screenshot of a specific element using a CSS selector. Example: ".product-card". Returns an image instead of text content.
url*string
The webpage URL to scrape
waitvalue
Milliseconds to wait after page load before capturing content. Max 30000 (30s). Requires js_render=true; without it, including in automatic mode, it may be ignored.
wait_forstring
CSS selector to wait for before capturing. Use when key content loads after the initial page render. Requires js_render=true; without it, including in automatic mode, it may be ignored.
extractExtract structured data from a webpage via Zenrows. Returns JSON fields (products, articles, listings) in "data" rather than a full page body. Set include_html to also get the page HTML. Modes: - auto (default): extract=auto, site-tailored Extract (currently free, billing may...11 params

Extract structured data from a webpage via Zenrows. Returns JSON fields (products, articles, listings) in "data" rather than a full page body. Set include_html to also get the page HTML. Modes: - auto (default): extract=auto, site-tailored Extract (currently free, billing may...

Parameters* required
css_extractorstring
Required when mode=css. JSON map of field→selector, e.g. '{"title":"h1","price":".price"}'
fallback_autoparseboolean
Deprecated, has no effect: Extract no longer falls back to autoparse. Prepare the domain with prepare_domain instead.
include_htmlboolean
mode=auto only: also return the full page HTML. Default false; the HTML is most of the response size.default: false
js_renderboolean
Force JS rendering on every request. Overrides automatic mode (mode=auto), which already renders when needed.
modevalue
Extraction mode: auto (extract=auto, default), css (requires css_extractor), or the deprecated autoparsedefault: auto
mode_autoboolean
Automatic mode (mode=auto) is on by default; leave unset. False sends a plain request without it.
premium_proxyboolean
Force premium residential proxies on every request (10x cost). Overrides automatic mode (mode=auto), which already uses premium proxies when a page needs them.
proxy_countrystring
ISO 3166-1 alpha-2 country code. Works in automatic mode (mode=auto); with js_render or mode_auto=false it requires premium_proxy.
url*string
The webpage URL to extract from
waitvalue
Milliseconds to wait after load. Requires js_render=true; without it, including in automatic mode, it may be ignored.
wait_forstring
CSS selector to wait for before extracting. Requires js_render=true; without it, including in automatic mode, it may be ignored.
prepare_domainPrepare a domain so extract (mode=auto) works on it. Use this when extract returns error REQS007 with reason domain_not_prepared. Send the domain (the host, e.g. shop.example.com; a leading www. is dropped, and each host is prepared separately) and 1 to 5 example URLs of real...3 params

Prepare a domain so extract (mode=auto) works on it. Use this when extract returns error REQS007 with reason domain_not_prepared. Send the domain (the host, e.g. shop.example.com; a leading www. is dropped, and each host is prepared separately) and 1 to 5 example URLs of real...

Parameters* required
domain*string
The host to prepare, e.g. shop.example.com (a URL is accepted; a leading www. is dropped)
example_urls*array
1 to 5 full URLs of real pages on this domain that you want to extract. One works; we recommend 3 or more of the same page type when you can
idempotency_keystring
Optional. Resending the same key with the same body returns the original submission
prepared_domain_statusCheck a domain submitted with prepare_domain, and the account's monthly allowance. Returns status (preparing, ready or failed), state (the current step), roles (one per page kind), a failure code and detail when it failed, the allowance (used, limit, remaining) and "next": wha...1 params

Check a domain submitted with prepare_domain, and the account's monthly allowance. Returns status (preparing, ready or failed), state (the current step), roles (one per page kind), a failure code and detail when it failed, the allowance (used, limit, remaining) and "next": wha...

Parameters* required
domain*string
The domain passed to prepare_domain, e.g. example.com
batch_createSubmit a Batch job: many URLs scraped asynchronously in the cloud (Zenrows Batch API). Suited to large URL lists; scrape and extract handle single pages. Not the same as browser_batch. Tasks use automatic mode (mode=auto) by default: Zenrows enables JS rendering and premium pr...12 params

Submit a Batch job: many URLs scraped asynchronously in the cloud (Zenrows Batch API). Suited to large URL lists; scrape and extract handle single pages. Not the same as browser_batch. Tasks use automatic mode (mode=auto) by default: Zenrows enables JS rendering and premium pr...

Parameters* required
idempotency_keyvalue
Sent as the Idempotency-Key header, up to 128 characters; generated per call when unset. Reusing a key with the identical request within 24 hours returns the original response instead of doing it a...
js_renderboolean
Force js_render on all tasks (5 credits each). Overrides automatic mode (mode=auto), which already renders when needed.
mode_autoboolean
Automatic mode (mode=auto) is on by default; leave unset. False sends plain requests without it.
premium_proxyboolean
Force premium_proxy on all tasks (10 credits each, 25 with js_render). Overrides automatic mode (mode=auto), which already uses premium proxies when a page needs them.
proxy_countrystring
Job-level ISO country code. Works in automatic mode (mode=auto); with js_render alone it requires premium_proxy.
response_typevalue
Job-level output format. Leave unset for the raw HTML, the default.
tasksvalue
Tasks (each needs a url), up to 100,000. Prefer this over urls when you need per-task params.
urlsvalue
Shorthand: list of URLs (converted to tasks), up to 100,000. Ignored when tasks is provided.
waitboolean
If true, poll before returning until the run ends or pauses, or wait_timeout passes; a timeout returns the current state with ok:true
wait_timeoutvalue
Max wait in seconds when wait=true (default 50). Many MCP clients cancel a call after 60 s.
wait_timeout_msvalue
Deprecated: the same wait in milliseconds. Use the seconds parameter instead.
zenrows_paramsvalue
Additional job-level scrape params merged with the flags above. Accepted: allowed_status_codes, autoparse, block_resources, css_extractor, custom_headers, extract, extract_fields, js_instructions,...
batch_statusGet a Batch job's latest run: job_id, run_id, status (pending, running, completed, stopped, failed), stats (total, completed, successful, failed) and the job. A failed run answers ok:false with error.code BATCH_INSUFFICIENT_CREDITS, BATCH_KEY_CAP_REACHED, AUTH_INVALID (subscri...1 params

Get a Batch job's latest run: job_id, run_id, status (pending, running, completed, stopped, failed), stats (total, completed, successful, failed) and the job. A failed run answers ok:false with error.code BATCH_INSUFFICIENT_CREDITS, BATCH_KEY_CAP_REACHED, AUTH_INVALID (subscri...

Parameters* required
job_id*string
Batch job id returned by batch_create or batch_list
batch_waitPoll a Batch job until its run ends (completed, stopped or failed) or pauses, and return its status and stats like batch_status. If the wait runs out first, it returns the current state with ok:true, timed_out:true and a note: call batch_wait again. A paused run returns at onc...3 params

Poll a Batch job until its run ends (completed, stopped or failed) or pauses, and return its status and stats like batch_status. If the wait runs out first, it returns the current state with ok:true, timed_out:true and a note: call batch_wait again. A paused run returns at onc...

Parameters* required
job_id*string
Batch job id returned by batch_create or batch_list
timeoutvalue
Max wait in seconds (default 50). Many MCP clients cancel a call after 60 s.
timeout_msvalue
Deprecated: the same wait in milliseconds. Use the seconds parameter instead.
batch_resultsList a Batch run's result rows, a page at a time: up to limit rows (default 100, max 1000) and next_cursor. Pass next_cursor back as cursor to continue; it is null once every row was read. Each row has task_id, external_id, url, metadata, status (successful, failed, pending, p...5 params

List a Batch run's result rows, a page at a time: up to limit rows (default 100, max 1000) and next_cursor. Pass next_cursor back as cursor to continue; it is null once every row was read. Each row has task_id, external_id, url, metadata, status (successful, failed, pending, p...

Parameters* required
cursorstring
next_cursor from a previous batch_results call
job_id*string
Batch job id returned by batch_create or batch_list
limitvalue
Max rows to return (default 100, max 1000)
run_idvalue
An earlier run's id (from batch_status or batch_rerun). Default: the job's latest run.
statusvalue
Filter rows by status (default all). processing = tasks not finished yet. successful also returns expired rows.
batch_contentRead one Batch task's stored result, by job_id and task_id (from batch_results). A text result (HTML, Markdown, plain text, JSON) comes back inline, cut to max_chars (default 20000); a final note says when it was cut. A binary result (a PDF) is not inlined: the reply gives its...5 params

Read one Batch task's stored result, by job_id and task_id (from batch_results). A text result (HTML, Markdown, plain text, JSON) comes back inline, cut to max_chars (default 20000); a final note says when it was cut. A binary result (a PDF) is not inlined: the reply gives its...

Parameters* required
job_id*string
Batch job id returned by batch_create or batch_list
lookup_cursorvalue
lookup_cursor from a previous batch_content reply on a binary result, to go on looking for its result_url
max_charsvalue
Max characters of a text result to return (default 20000)
run_idvalue
An earlier run's id (from batch_status or batch_rerun). Default: the job's latest run.
task_id*string
task_id from a batch_results row
batch_listList this account's Batch jobs, newest first, each with its latest run's status and stats. Filter by status (open or closed) and type (regular or scheduled). Pass next_cursor as cursor for the next page; a page can hold fewer than limit jobs while next_cursor is still set, so...4 params

List this account's Batch jobs, newest first, each with its latest run's status and stats. Filter by status (open or closed) and type (regular or scheduled). Pass next_cursor as cursor for the next page; a page can hold fewer than limit jobs while next_cursor is still set, so...

Parameters* required
cursorstring
next_cursor from a previous batch_list call
limitvalue
Jobs per page (default 20, max 100)
statusvalue
Only jobs with this job status
typevalue
Only jobs of this type
batch_cancelStop a Batch job's current run for good. No task still waiting is started or billed; tasks already in flight finish (and bill). Results so far stay readable with batch_results. Tasks that never started stay pending: batch_rerun (default failed and pending) runs them later. Ide...1 params

Stop a Batch job's current run for good. No task still waiting is started or billed; tasks already in flight finish (and bill). Results so far stay readable with batch_results. Tasks that never started stay pending: batch_rerun (default failed and pending) runs them later. Ide...

Parameters* required
job_id*string
Batch job id returned by batch_create or batch_list
batch_pausePause a Batch job's current run: it picks up no new tasks until batch_resume. Tasks already in flight still finish and bill; for a hard cost stop use batch_cancel. A paused run still counts as an active job. Idempotent; a run that already ended answers with its final status an...1 params

Pause a Batch job's current run: it picks up no new tasks until batch_resume. Tasks already in flight still finish and bill; for a hard cost stop use batch_cancel. A paused run still counts as an active job. Idempotent; a run that already ended answers with its final status an...

Parameters* required
job_id*string
Batch job id returned by batch_create or batch_list
batch_resumeResume a paused Batch run: it picks up its remaining tasks again, billed as they finish. Idempotent on a run that is not paused; a run that already ended answers with its final status and already_ended:true. Needs credits: BATCH_INSUFFICIENT_CREDITS or BATCH_KEY_CAP_REACHED ot...1 params

Resume a paused Batch run: it picks up its remaining tasks again, billed as they finish. Idempotent on a run that is not paused; a run that already ended answers with its final status and already_ended:true. Needs credits: BATCH_INSUFFICIENT_CREDITS or BATCH_KEY_CAP_REACHED ot...

Parameters* required
job_id*string
Batch job id returned by batch_create or batch_list
batch_rerunStart a new run of a Batch job whose latest run ended (completed, stopped or failed). By default it reruns only the tasks that failed or never started (status ["failed", "pending"]), and carries the others' results over: the recovery after a run that failed on credits or was c...4 params

Start a new run of a Batch job whose latest run ended (completed, stopped or failed). By default it reruns only the tasks that failed or never started (status ["failed", "pending"]), and carries the others' results over: the recovery after a run that failed on credits or was c...

Parameters* required
fullboolean
Rerun every task, not only some (default false)
idempotency_keyvalue
Sent as the Idempotency-Key header, up to 128 characters; generated per call when unset. Reusing a key with the identical request within 24 hours returns the original response instead of doing it a...
job_id*string
Batch job id returned by batch_create or batch_list
statusvalue
Task statuses to rerun (default ["failed", "pending"]). Ignored with full:true.
batch_deleteDelete a Batch job with all its runs and results, for good. A run in flight stops picking up tasks at once, and the job frees its active-job slot. The job reads as not found right away; storage is cleaned up in the background. Idempotent. To keep the results, use batch_cancel...1 params

Delete a Batch job with all its runs and results, for good. A run in flight stops picking up tasks at once, and the job frees its active-job slot. The job reads as not found right away; storage is cleaned up in the background. Idempotent. To keep the results, use batch_cancel...

Parameters* required
job_id*string
Batch job id returned by batch_create or batch_list
crawl_createStart a crawl from one URL (Zenrows Crawl API). Crawl follows the links in each page's HTML up to depth hops (no depth limit when depth is omitted), keeps the URLs that match include_patterns / exclude_patterns, and stays on the start URL's registrable domain (subdomains count...10 params

Start a crawl from one URL (Zenrows Crawl API). Crawl follows the links in each page's HTML up to depth hops (no depth limit when depth is omitted), keeps the URLs that match include_patterns / exclude_patterns, and stays on the start URL's registrable domain (subdomains count...

Parameters* required
depthvalue
Link hops to follow from the start URL. 1 returns the start page's links; 2 also opens those. Omit for no depth limit: the crawl follows links until max_pages or max_items stops it.
discoveryvalue
How the crawl finds the URLs it follows on each page it walks. ['links'] follows the links in each page's HTML, and is what a crawl runs with when you omit this.
exclude_patternsvalue
Drop URLs containing any of these substrings, even if they match include_patterns
idempotency_keyvalue
Sent as the Idempotency-Key header. Reusing a key returns the crawl it created; reusing it with a different body is CRAWL_INVALID_REQUEST.
include_patternsvalue
Keep only URLs containing at least one of these substrings, e.g. ["/product/"]
max_itemsvalue
Stop once this many URLs are kept (default 100)
max_pagesvalue
Stop once this many pages are fetched, each billed as one scrape (default 100). With output_format, every kept URL's page counts too.
output_formatvalue
'html' or 'markdown' also stores each kept URL's page for crawl_content, as fetched or converted to Markdown. Omit for URLs only.
url*string
Start URL: a public http(s) page, such as a listing or category page
webhookvalue
Where to post the crawl's signed events (crawl.started, then one of crawl.completed, crawl.stopped, crawl.failed). Each is signed with the account's webhook signing key, in the X-Signature header.
crawl_getGet a crawl and one page of the URLs it kept: crawl_id, status (running, completed, stopped, failed), the crawl (with coverage: pages_fetched, pages_failed, items_found; webhook when set), results and next_cursor. completed with stop_reason max_items / max_pages means a limit...3 params

Get a crawl and one page of the URLs it kept: crawl_id, status (running, completed, stopped, failed), the crawl (with coverage: pages_fetched, pages_failed, items_found; webhook when set), results and next_cursor. completed with stop_reason max_items / max_pages means a limit...

Parameters* required
crawl_id*string
Crawl id returned by crawl_create (c_…)
cursorstring
next_cursor from a previous crawl_get call, to continue from there
limitvalue
Results in this page (default 100, max 10000)
crawl_resultsList the URLs a crawl kept, in the order it kept them, following the API's pages up to limit. Each result has url and, when the crawl has output_format, content_status (pending, fetched, failed) and, once fetched, content_url: pass it to crawl_content as content. While the cra...3 params

List the URLs a crawl kept, in the order it kept them, following the API's pages up to limit. Each result has url and, when the crawl has output_format, content_status (pending, fetched, failed) and, once fetched, content_url: pass it to crawl_content as content. While the cra...

Parameters* required
crawl_id*string
Crawl id returned by crawl_create (c_…)
cursorstring
next_cursor from a previous crawl_results call, to continue from there
limitvalue
Max results to return in this call (default 100, max 10000)
crawl_contentRead the stored page of one URL a crawl kept, in the crawl's output_format. Works only for crawls created with an output_format, and only for results whose content_status is fetched. Pass crawl_id and content_id: a content id, or content_url from a crawl_results row. Returns t...3 params

Read the stored page of one URL a crawl kept, in the crawl's output_format. Works only for crawls created with an output_format, and only for results whose content_status is fetched. Pass crawl_id and content_id: a content id, or content_url from a crawl_results row. Returns t...

Parameters* required
content_id*string
A content id (ct_…), or content_url from a crawl_results row; its last path segment is the id
crawl_id*string
Crawl id returned by crawl_create (c_…)
max_charsvalue
Max characters of the page to return (default 20000)
crawl_listList this account's crawls, newest first, with status and coverage (no results). Pass next_cursor as cursor for the next page; next_cursor is absent on the last page.2 params

List this account's crawls, newest first, with status and coverage (no results). Pass next_cursor as cursor for the next page; next_cursor is absent on the last page.

Parameters* required
cursorstring
next_cursor from a previous crawl_list call
limitvalue
Crawls per page (default 20, max 100)
crawl_stopStop a running crawl. No page still waiting is fetched or billed; pages already in flight finish. The URLs kept so far stay readable with crawl_results. A stopped crawl cannot resume. Idempotent: a crawl that already ended answers with its final status. A 429, 502, 503 or 504...1 params

Stop a running crawl. No page still waiting is fetched or billed; pages already in flight finish. The URLs kept so far stay readable with crawl_results. A stopped crawl cannot resume. Idempotent: a crawl that already ended answers with its final status. A 429, 502, 503 or 504...

Parameters* required
crawl_id*string
Crawl id returned by crawl_create (c_…)
crawl_waitPoll a crawl until it ends (completed, stopped, or failed) and return its status, its counts and the first 20 URLs (first_urls). For every result, call crawl_download (one file) or crawl_results (pages). A crawl that ends completed with no results and no error finished; it is...2 params

Poll a crawl until it ends (completed, stopped, or failed) and return its status, its counts and the first 20 URLs (first_urls). For every result, call crawl_download (one file) or crawl_results (pages). A crawl that ends completed with no results and no error finished; it is...

Parameters* required
crawl_id*string
Crawl id returned by crawl_create (c_…)
timeoutvalue
Max wait in seconds (default 50). Many MCP clients cancel a call after 60 s.
crawl_downloadSave every result of a crawl to one local file, as JSON lines: url, content_status and, once fetched, content (the page). Returns the file's path and line count, not the results, so a crawl of any size costs one small reply. Read the file with your own tools. The file goes to...3 params

Save every result of a crawl to one local file, as JSON lines: url, content_status and, once fetched, content (the page). Returns the file's path and line count, not the results, so a crawl of any size costs one small reply. Read the file with your own tools. The file goes to...

Parameters* required
crawl_id*string
Crawl id returned by crawl_create (c_…)
overwriteboolean
Replace the file if it exists (default false)
pathvalue
File to write, relative to ~/.zenrows/crawls (default <crawl_id>.jsonl)
account_usageRead the current plan's credit allowance and how much of it is spent. Useful before a large batch, or after a 402 / AUTH004, to see whether the account has credits left and when the allowance renews. The call is free and does not use a concurrency slot. Credit costs per reques...

Read the current plan's credit allowance and how much of it is spent. Useful before a large batch, or after a 402 / AUTH004, to see whether the account has credits left and when the allowance renews. The call is free and does not use a concurrency slot. Credit costs per reques...

No parameters. Call it with no arguments.

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' hosted browser infrastructure and navigates to the given URL in one step. Returns a session_id that every other browse...3 params

Open 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' hosted browser infrastructure and navigates to the given URL in one step. Returns a session_id that every other browse...

Parameters* required
proxy_countrystring
ISO 3166-1 alpha-2 country code for geo-targeted proxy (e.g. 'US', 'GB', 'DE')
proxy_regionstring
World region code for geo-targeted proxy (eu=Europe, na=North America, ap=Asia Pacific, sa=South America, af=Africa, me=Middle East)
url*string
The URL to navigate to
browser_closeClose a browser session and free all associated resources, including the concurrency slot it holds.1 params

Close a browser session and free all associated resources, including the concurrency slot it holds.

Parameters* required
session_id*string
Session ID returned by browser_navigate
browser_go_backNavigate back to the previous page in the browser history.1 params

Navigate back to the previous page in the browser history.

Parameters* required
session_id*string
Session ID returned by browser_navigate
browser_go_forwardNavigate forward to the next page in the browser history.1 params

Navigate forward to the next page in the browser history.

Parameters* required
session_id*string
Session ID returned by browser_navigate
browser_reloadReload the current page of a browser session.1 params

Reload the current page of a browser session.

Parameters* required
session_id*string
Session ID returned by browser_navigate
browser_clickClick an element on the page using a CSS selector.2 params

Click an element on the page using a CSS selector.

Parameters* required
selector*string
CSS selector of the element to click
session_id*string
Session ID returned by browser_navigate
browser_hoverMove the mouse cursor over an element to trigger hover effects.2 params

Move the mouse cursor over an element to trigger hover effects.

Parameters* required
selector*string
CSS selector of the element to hover over
session_id*string
Session ID returned by browser_navigate
browser_typeType text into an input element. Appends to existing content unless clear_first is set.4 params

Type text into an input element. Appends to existing content unless clear_first is set.

Parameters* required
clear_firstboolean
Clear existing content before typing (default false)
selector*string
CSS selector of the input element
session_id*string
Session ID returned by browser_navigate
text*string
Text to type
browser_fillClear an input field and set its value, replacing what was there (browser_type appends instead).3 params

Clear an input field and set its value, replacing what was there (browser_type appends instead).

Parameters* required
selector*string
CSS selector of the input element
session_id*string
Session ID returned by browser_navigate
value*string
Value to fill in
browser_select_optionSelect an option from a <select> dropdown element.3 params

Select an option from a <select> dropdown element.

Parameters* required
selector*string
CSS selector of the <select> element
session_id*string
Session ID returned by browser_navigate
value*string
Value of the option to select
browser_checkCheck a checkbox or radio button.2 params

Check a checkbox or radio button.

Parameters* required
selector*string
CSS selector of the checkbox or radio element
session_id*string
Session ID returned by browser_navigate
browser_uncheckUncheck a checkbox, found by CSS selector, in a browser session.2 params

Uncheck a checkbox, found by CSS selector, in a browser session.

Parameters* required
selector*string
CSS selector of the checkbox element
session_id*string
Session ID returned by browser_navigate
browser_focusMove focus to an element, triggering focus-dependent UI changes.2 params

Move focus to an element, triggering focus-dependent UI changes.

Parameters* required
selector*string
CSS selector of the element to focus
session_id*string
Session ID returned by browser_navigate
browser_press_keyPress a keyboard key. Examples: "Enter", "Tab", "Escape", "ArrowDown", "Control+a".2 params

Press a keyboard key. Examples: "Enter", "Tab", "Escape", "ArrowDown", "Control+a".

Parameters* required
key*string
Key to press (e.g. "Enter", "Tab", "Escape", "ArrowDown", "Control+a")
session_id*string
Session ID returned by browser_navigate
browser_scrollScroll the page in a given direction.3 params

Scroll the page in a given direction.

Parameters* required
direction*string
Scroll directionone of up · down · left · right
distancevalue
Pixels to scroll (default 500)
session_id*string
Session ID returned by browser_navigate
browser_dragDrag an element from its current position to a target element.3 params

Drag an element from its current position to a target element.

Parameters* required
session_id*string
Session ID returned by browser_navigate
source_selector*string
CSS selector of the element to drag
target_selector*string
CSS selector of the drop target
browser_get_accessibility_treeGet the ARIA accessibility tree of the current page as readable text. Shows the page structure and the selectors needed to interact with elements, in fewer tokens than a screenshot. The tree shows all interactive elements (buttons, inputs, links) with their roles, labels, and...1 params

Get the ARIA accessibility tree of the current page as readable text. Shows the page structure and the selectors needed to interact with elements, in fewer tokens than a screenshot. The tree shows all interactive elements (buttons, inputs, links) with their roles, labels, and...

Parameters* required
session_id*string
Session ID returned by browser_navigate
browser_get_urlGet the current URL of the browser session.1 params

Get the current URL of the browser session.

Parameters* required
session_id*string
Session ID returned by browser_navigate
browser_get_titleGet the title of the current page.1 params

Get the title of the current page.

Parameters* required
session_id*string
Session ID returned by browser_navigate
browser_get_textGet the visible text content of an element or the entire page body.2 params

Get the visible text content of an element or the entire page body.

Parameters* required
selectorstring
CSS selector of the element (omit for full page body text)
session_id*string
Session ID returned by browser_navigate
browser_get_attributeGet the value of a specific attribute on an element.3 params

Get the value of a specific attribute on an element.

Parameters* required
attribute*string
Attribute name to retrieve (e.g. 'href', 'src', 'data-id')
selector*string
CSS selector of the element
session_id*string
Session ID returned by browser_navigate
browser_get_htmlGet the HTML source of an element or the full page.2 params

Get the HTML source of an element or the full page.

Parameters* required
selectorstring
CSS selector of the element (omit for full page HTML)
session_id*string
Session ID returned by browser_navigate
browser_query_selector_allFind all elements matching a CSS selector and return their text, HTML, and attributes.2 params

Find all elements matching a CSS selector and return their text, HTML, and attributes.

Parameters* required
selector*string
CSS selector to query
session_id*string
Session ID returned by browser_navigate
browser_screenshotTake a screenshot of the current page or a specific element. Use for visual verification or when the accessibility tree is not sufficient.3 params

Take a screenshot of the current page or a specific element. Use for visual verification or when the accessibility tree is not sufficient.

Parameters* required
full_pageboolean
Capture full page including content below the fold (default false)
selectorstring
CSS selector to capture only a specific element (overrides full_page)
session_id*string
Session ID returned by browser_navigate
browser_generate_pdfRender the current page as a PDF document.4 params

Render the current page as a PDF document.

Parameters* required
landscapeboolean
Landscape orientation (default false)
print_backgroundboolean
Print background graphics (default false)
scalevalue
Page scale factor (default 1)
session_id*string
Session ID returned by browser_navigate
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).3 params

Wait 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).

Parameters* required
selector*string
CSS selector to wait for
session_id*string
Session ID returned by browser_navigate
visibleboolean
Also require the element to be visible, not just present in the DOM (default false)
browser_wait_for_navigationWait for the page to navigate to a new URL. It waits for the next navigation event, so a navigation that already finished is not seen and the call waits until timeout_ms. Pages that update without changing URL (AJAX/SPA) fire no navigation event. Optional timeout_ms (default 3...2 params

Wait for the page to navigate to a new URL. It waits for the next navigation event, so a navigation that already finished is not seen and the call waits until timeout_ms. Pages that update without changing URL (AJAX/SPA) fire no navigation event. Optional timeout_ms (default 3...

Parameters* required
session_id*string
Session ID returned by browser_navigate
timeout_msvalue
How long to wait in milliseconds (default 30000, max 60000)
browser_waitWait for a fixed duration. browser_wait_for_selector waits only until an element appears.2 params

Wait for a fixed duration. browser_wait_for_selector waits only until an element appears.

Parameters* required
ms*integer
Milliseconds to wait (max 30000)
session_id*string
Session ID returned by browser_navigate
browser_evaluateExecute JavaScript in the browser context and return the result. The script can change or delete the session's page state, such as cookies, storage and form data.2 params

Execute JavaScript in the browser context and return the result. The script can change or delete the session's page state, such as cookies, storage and form data.

Parameters* required
script*string
JavaScript expression or function body to evaluate in the page context
session_id*string
Session ID returned by browser_navigate
browser_get_cookiesGet all cookies for the current page.1 params

Get all cookies for the current page.

Parameters* required
session_id*string
Session ID returned by browser_navigate
browser_set_cookiesSet one or more cookies in the browser session. A cookie with the same name, domain and path replaces the existing one.2 params

Set one or more cookies in the browser session. A cookie with the same name, domain and path replaces the existing one.

Parameters* required
cookies*array
Array of cookie objects to set
session_id*string
Session ID returned by browser_navigate
browser_clear_cookiesClear all cookies for the current browser session.1 params

Clear all cookies for the current browser session.

Parameters* required
session_id*string
Session ID returned by browser_navigate
browser_get_local_storageRead one localStorage value in the current page context.2 params

Read one localStorage value in the current page context.

Parameters* required
key*string
Storage key to read
session_id*string
Session ID returned by browser_navigate
browser_set_local_storageWrite one localStorage value in the current page context. An existing value under the same key is replaced.3 params

Write one localStorage value in the current page context. An existing value under the same key is replaced.

Parameters* required
key*string
Storage key to write
session_id*string
Session ID returned by browser_navigate
value*string
Value to store
browser_clear_local_storageDelete every localStorage entry in the current page context.1 params

Delete every localStorage entry in the current page context.

Parameters* required
session_id*string
Session ID returned by browser_navigate
browser_new_tabOpen a new browser tab. Returns a tab_id to use with browser_switch_tab.2 params

Open a new browser tab. Returns a tab_id to use with browser_switch_tab.

Parameters* required
session_id*string
Session ID returned by browser_navigate
urlvalue
URL to open in the new tab (opens blank tab if omitted)
browser_switch_tabSwitch focus to a different browser tab.2 params

Switch focus to a different browser tab.

Parameters* required
session_id*string
Session ID returned by browser_navigate
tab_id*string
Tab ID returned by browser_new_tab
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 unle...3 params

Execute 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 unle...

Parameters* required
actions*array
Ordered list of actions to perform. Each action has a 'type' field plus type-specific parameters.
session_id*string
Session ID returned by browser_navigate
stop_on_errorboolean
Stop executing on the first failed action (default true)

Sponsors

Configuration

ZENROWS_API_KEYsecret

Optional. Without it, the first tool call creates a Free account (5,000 credits/month) you can claim later. ZENROWS_AUTO_SIGNUP=false opts out. Keys: https://app.zenrows.com/account/settings

Readme

Zenrows MCP

Zenrows MCP Server

The Zenrows MCP (Model Context Protocol) server is the standard way AI systems use Zenrows' web data infrastructure. A single connection gives your AI assistant, agent, or application reliable, real-time access to the live web, including the protected web.

npm version MIT License

📚 Full documentation: docs.zenrows.com/mcp/overview


Why Zenrows MCP


View the full README on GitHub

Details

Repository
github.com/zenrows/zenrows-mcp
Categories
Web & Browser Automation, Search & Web Crawling
Package
@zenrows/mcp
Transport
STDIO, HTTP
Auth
Required
Registry
MCP registry, active
Prompts
3
Tools verified
Nov 6, 2026

Related Web & Browser Automation MCP servers

View all
1beycom avatarOneTool MCPbeycom/onetool-mcpOne MCP for devs incl Brave,Google,Tavily,Context7,AWS,Excalidraw,DB,GitHub,DevTools,Playwright20stars
2adelelo13 avatarmac-control-mcpadelelo13/mac-control-mcpNative Swift macOS automation — 153 tools: AX, EventKit, voice, browser DOM, undo.18stars
3mcpware avatarPagecastmcpware/pagecastRecord any browser page as GIF or video via MCP17stars
4aybelatchane avatarTerminal MCP Serveraybelatchane/mcp-server-terminalMCP server for AI agents to interact with terminal applications. Think Playwright for terminals.15stars
5klarlabs-studio avatarScoutklarlabs-studio/scoutBrowser automation MCP server with 84 tools. Pure CDP, DOM diffing, vision hybrid.14stars
6sh6drack avatarZen Mcpsh6drack/zen-mcpMCP server for Zen Browser automation via WebDriver BiDi10stars