
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 toolsVerified 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...
autoparsebooleancss_extractorstringjs_instructionsstringjs_renderbooleanoutputsstringpremium_proxybooleanproxy_countrystringresponse_typevaluescreenshotbooleanscreenshot_fullpagebooleanscreenshot_selectorstringurl*stringwaitvaluewait_forstringextractExtract 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...
css_extractorstringfallback_autoparsebooleaninclude_htmlbooleanjs_renderbooleanmodevaluemode_autobooleanpremium_proxybooleanproxy_countrystringurl*stringwaitvaluewait_forstringprepare_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...
domain*stringexample_urls*arrayidempotency_keystringprepared_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...
domain*stringbatch_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...
idempotency_keyvaluejs_renderbooleanmode_autobooleanpremium_proxybooleanproxy_countrystringresponse_typevaluetasksvalueurlsvaluewaitbooleanwait_timeoutvaluewait_timeout_msvaluezenrows_paramsvaluebatch_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...
job_id*stringbatch_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...
job_id*stringtimeoutvaluetimeout_msvaluebatch_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...
cursorstringjob_id*stringlimitvaluerun_idvaluestatusvaluebatch_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...
job_id*stringlookup_cursorvaluemax_charsvaluerun_idvaluetask_id*stringbatch_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...
cursorstringlimitvaluestatusvaluetypevaluebatch_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...
job_id*stringbatch_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...
job_id*stringbatch_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...
job_id*stringbatch_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...
fullbooleanidempotency_keyvaluejob_id*stringstatusvaluebatch_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...
job_id*stringcrawl_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...
depthvaluediscoveryvalueexclude_patternsvalueidempotency_keyvalueinclude_patternsvaluemax_itemsvaluemax_pagesvalueoutput_formatvalueurl*stringwebhookvaluecrawl_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...
crawl_id*stringcursorstringlimitvaluecrawl_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...
crawl_id*stringcursorstringlimitvaluecrawl_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...
content_id*stringcrawl_id*stringmax_charsvaluecrawl_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.
cursorstringlimitvaluecrawl_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...
crawl_id*stringcrawl_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...
crawl_id*stringtimeoutvaluecrawl_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...
crawl_id*stringoverwritebooleanpathvalueaccount_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...
proxy_countrystringproxy_regionstringurl*stringbrowser_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.
session_id*stringbrowser_go_backNavigate back to the previous page in the browser history.1 params
Navigate back to the previous page in the browser history.
session_id*stringbrowser_go_forwardNavigate forward to the next page in the browser history.1 params
Navigate forward to the next page in the browser history.
session_id*stringbrowser_reloadReload the current page of a browser session.1 params
Reload the current page of a browser session.
session_id*stringbrowser_clickClick an element on the page using a CSS selector.2 params
Click an element on the page using a CSS selector.
selector*stringsession_id*stringbrowser_hoverMove the mouse cursor over an element to trigger hover effects.2 params
Move the mouse cursor over an element to trigger hover effects.
selector*stringsession_id*stringbrowser_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.
clear_firstbooleanselector*stringsession_id*stringtext*stringbrowser_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).
selector*stringsession_id*stringvalue*stringbrowser_select_optionSelect an option from a <select> dropdown element.3 params
Select an option from a <select> dropdown element.
selector*stringsession_id*stringvalue*stringbrowser_checkCheck a checkbox or radio button.2 params
Check a checkbox or radio button.
selector*stringsession_id*stringbrowser_uncheckUncheck a checkbox, found by CSS selector, in a browser session.2 params
Uncheck a checkbox, found by CSS selector, in a browser session.
selector*stringsession_id*stringbrowser_focusMove focus to an element, triggering focus-dependent UI changes.2 params
Move focus to an element, triggering focus-dependent UI changes.
selector*stringsession_id*stringbrowser_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".
key*stringsession_id*stringbrowser_scrollScroll the page in a given direction.3 params
Scroll the page in a given direction.
direction*stringup · down · left · rightdistancevaluesession_id*stringbrowser_dragDrag an element from its current position to a target element.3 params
Drag an element from its current position to a target element.
session_id*stringsource_selector*stringtarget_selector*stringbrowser_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...
session_id*stringbrowser_get_urlGet the current URL of the browser session.1 params
Get the current URL of the browser session.
session_id*stringbrowser_get_titleGet the title of the current page.1 params
Get the title of the current page.
session_id*stringbrowser_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.
selectorstringsession_id*stringbrowser_get_attributeGet the value of a specific attribute on an element.3 params
Get the value of a specific attribute on an element.
attribute*stringselector*stringsession_id*stringbrowser_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.
selectorstringsession_id*stringbrowser_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.
selector*stringsession_id*stringbrowser_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.
full_pagebooleanselectorstringsession_id*stringbrowser_generate_pdfRender the current page as a PDF document.4 params
Render the current page as a PDF document.
landscapebooleanprint_backgroundbooleanscalevaluesession_id*stringbrowser_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).
selector*stringsession_id*stringvisiblebooleanbrowser_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...
session_id*stringtimeout_msvaluebrowser_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.
ms*integersession_id*stringbrowser_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.
script*stringsession_id*stringbrowser_get_cookiesGet all cookies for the current page.1 params
Get all cookies for the current page.
session_id*stringbrowser_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.
cookies*arraysession_id*stringbrowser_clear_cookiesClear all cookies for the current browser session.1 params
Clear all cookies for the current browser session.
session_id*stringbrowser_get_local_storageRead one localStorage value in the current page context.2 params
Read one localStorage value in the current page context.
key*stringsession_id*stringbrowser_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.
key*stringsession_id*stringvalue*stringbrowser_clear_local_storageDelete every localStorage entry in the current page context.1 params
Delete every localStorage entry in the current page context.
session_id*stringbrowser_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.
session_id*stringurlvaluebrowser_switch_tabSwitch focus to a different browser tab.2 params
Switch focus to a different browser tab.
session_id*stringtab_id*stringbrowser_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...
actions*arraysession_id*stringstop_on_errorbooleanSponsors
Configuration
ZENROWS_API_KEYsecretOptional. 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 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.
📚 Full documentation: docs.zenrows.com/mcp/overview
Why Zenrows MCP
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