io.github.ZenRows/zenrows-mcp
REMOTE · MCP.ZENROWS.COM · 2 COMPONENTS
Zenrows MCP server: Fetch, Extract, Batch, and Browser Sessions for AI agents
Available components
Last scanned (7 hours ago)
Scores higher than 96% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Web Scraping
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security91
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability79
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 9976 tokens (~160/item across 62 items; 62 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management65
- Stability check failed: schema churn in the 20 days we've observed: 1 tool removals, 0 breaking changes, 0 auth/transport breaks, 11 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 63 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 61 to 65.
- 3 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 55 to 58.
- 1 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 48 to 51.
- 30 Oct 26 +1
- Tool “crawl_get” rewrote its description, which is the text the model reads security
- Tool “crawl_create” rewrote its description, which is the text the model reads security
- Server version: 2.17.0 → 2.18.0 functional
- “crawl_create” added an optional parameter “webhook” cosmetic
- 27 Oct 26 +1
- Tool “prepare_domain” rewrote its description, which is the text the model reads security
- Tool “extract” rewrote its description, which is the text the model reads security
- Server version: 2.16.1 → 2.17.0 functional
- “prepare_domain” reworded the description of “example_urls” cosmetic
- 25 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 25 to 28.
- 24 Oct 26 0
- Server version: 2.16.0 → 2.16.1 functional
- 23 Oct 26 +1
- Server version: 2.15.1 → 2.16.0 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://mcp.zenrows.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=mcp.zenrows.com | CN=Amazon RSA 2048 M01,O=Amazon,C=US | 23 Aug 2026 | 8 Mar 2027 | RSA 2048 | SHA256-RSA | 99d03b28640db149172985b61808ab4 |
| SANs: mcp.zenrows.com | ||||||
| CN=Amazon RSA 2048 M01,O=Amazon,C=US (CA) | CN=Amazon Root CA 1,O=Amazon,C=US | 23 Aug 2022 | 23 Aug 2030 | RSA 2048 | SHA256-RSA | 77312380b9d6688a33b1ed9bf9ccda68e0e0f |
| CN=Amazon Root CA 1,O=Amazon,C=US (CA) | CN=Starfield Services Root Certificate Authority - G2,O=Starfield Technologies\, Inc.,L=Scottsdale,ST=Arizona,C=US | 25 May 2015 | 31 Dec 2037 | RSA 2048 | SHA256-RSA | 67f944a2a27cdf3fac2ae2b01f908eeb9c4c6 |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of mcp.zenrows.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| zenrows.com. | present | 2371 | 13 | Verified |
| mcp.zenrows.com. | Verified address RRset verified with the apex keys |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer realm="https://app.zenrows.com", scope="api", resource_metadata="https://mcp.zenrows.com/.well-known/oauth-protected-resource/mcp"
Bearer realm="https://app.zenrows.com", scope="api", resource_metadata="https://mcp.zenrows.com/.well-known/oauth-protected-resource/mcp" | Header | Value |
|---|---|
| www-authenticate | Bearer realm="https://app.zenrows.com", scope="api", resource_metadata="https://mcp.zenrows.com/.well-known/oauth-protected-resource/mcp" |
Protected resource metadata
| Document | https://mcp.zenrows.com/.well-known/oauth-protected-resource/mcp |
|---|---|
| Retrieved | Yes |
| Resource | https://mcp.zenrows.com/mcp |
| Authorisation server | https://mcp.zenrows.com |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.zenrows.com/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.zenrows.com/mcp | HTTPS enforced | 301 | https://mcp.zenrows.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
account_usage ~247
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 request: 1 basic, 5 js_render, 10 premium_proxy, 25 both. AUTH004 ("usage exceeded") means this allowance is spent until it renews at the end of the billing period (period_ends_at in this tool's response). Plans and credit options are described at https://www.zenrows.com/pricing. AUTH006 is the concurrency limit, not a credit limit. AUTH014 (Batch: api_key_cap_reached) means this API key hit one of its own credit caps while the account still has credits; other keys keep working. The response's api_key.caps lists the calling key's caps: window, credits, used_credits, remaining_credits, resets_at, and unavailable (usage could not be read). Caps are managed at https://app.zenrows.com/settings/api-keys.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
batch_cancel ~115
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. Idempotent: a run that already ended answers with its final status and already_ended:true. To halt without ending the run, use batch_pause.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Batch job id returned by batch_create or batch_list |
No output schema declared.
No examples provided.
batch_content ~283
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 result_url, presigned for 2 hours. Finding that URL reads the run's results; on a large run one call may run out of time first and answer with lookup_cursor: call batch_content again with it to go on. BATCH_TASK_NOT_READY: the task has not finished; BATCH_TASK_FAILED: it failed (task_error holds its error); BATCH_RESULT_EXPIRED: past the job's retention (14 days by default); rerun to scrape it again.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Batch job id returned by batch_create or batch_list |
| lookup_cursor | – | – | lookup_cursor from a previous batch_content reply on a binary result, to go on looking for its result_url |
| max_chars | – | – | Max characters of a text result to return (default 20000) |
| run_id | – | – | An earlier run's id (from batch_status or batch_rerun). Default: the job's latest run. |
| task_id | string | yes | task_id from a batch_results row |
No output schema declared.
No examples provided.
batch_create ~941
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 proxies only on the pages that need them. Pass just the URLs. Set js_render or premium_proxy (job-level, or per task) only to force a fixed configuration; that turns automatic mode off for those tasks. Cost: the same credits as the regular API, per successful task: 1 for a basic request, 5 with js_render, 10 with premium_proxy, 25 with both; mode=auto bills each task at the configuration that worked. Failed tasks are not billed, except target 404 and 410 answers, billed as on the regular API. Limits: up to 100,000 tasks per call; 3 active jobs per account by default, shared with Crawl (BATCH_QUOTA_EXCEEDED past that); a job frees its slot when its run ends. Creates a closed job with every task in this one call. Each task takes a url plus optional external_id, metadata, method/body (POST tasks) and scrape params. Every call sends an Idempotency-Key, so the bounded retries on network errors and 5xx never create a second job; an error reply carries the key to retry with. Returns job_id, status and stats at once; the job runs asynchronously. Then: batch_wait until it ends, batch_results to list rows (paged), batch_content to read one task's page. A run that ends failed (out of credits, inactive subscription, key cap) answers ok:false with error.code and server_code; batch_rerun recovers it. Submits of 10,000+ tasks keep writing tasks for a while (ingesting:true). Errors: BATCH_INVALID_REQUEST (400, server_code and invalid_tasks say what), BATCH_INSUFFICIENT_CREDITS (402), BATCH_KEY_CAP_REACHED (402, this key's cap), BATCH_QUOTA_EXCEEDED (429, job limit), AUTH_INVALID (401; server_code subscription_inactive means fix Billing), BATCH_ACCESS_DENIED (403, do not retry), BACKEND_UNAVAILABLE. Schedule…
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | – | – | 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 aga… |
| js_render | boolean|null | – | Force js_render on all tasks (5 credits each). Overrides automatic mode (mode=auto), which already renders when needed. |
| mode_auto | boolean|null | – | Automatic mode (mode=auto) is on by default; leave unset. False sends plain requests without it. |
| premium_proxy | boolean|null | – | 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_country | string|null | – | Job-level ISO country code. Works in automatic mode (mode=auto); with js_render alone it requires premium_proxy. |
| response_type | – | – | Job-level output format. Leave unset for the raw HTML, the default. |
| tasks | – | – | Tasks (each needs a url), up to 100,000. Prefer this over urls when you need per-task params. |
| urls | – | – | Shorthand: list of URLs (converted to tasks), up to 100,000. Ignored when tasks is provided. |
| wait | boolean|null | – | 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_timeout | – | – | Max wait in seconds when wait=true (default 50). Many MCP clients cancel a call after 60 s. |
| wait_timeout_ms | – | – | Deprecated: the same wait in milliseconds. Use the seconds parameter instead. |
| zenrows_params | – | – | 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, js… |
No output schema declared.
No examples provided.
batch_delete ~91
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 instead.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Batch job id returned by batch_create or batch_list |
No output schema declared.
No examples provided.
batch_list ~135
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 keep paging until it is null. Deleted jobs are not listed.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string|null | – | next_cursor from a previous batch_list call |
| limit | – | – | Jobs per page (default 20, max 100) |
| status | – | – | Only jobs with this job status |
| type | – | – | Only jobs of this type |
No output schema declared.
No examples provided.
batch_pause ~92
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 and already_ended:true.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Batch job id returned by batch_create or batch_list |
No output schema declared.
No examples provided.
batch_rerun ~323
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 cancelled. Pass status to pick other task statuses, or full:true to scrape every task again. Rerun tasks are billed like new ones. A rerun of only some tasks works up to 10 days after the run started (BATCH_RERUN_WINDOW_EXPIRED after that; full:true still works). BATCH_NO_MATCHING_TASKS: no task has those statuses. BATCH_RUN_NOT_FINISHED: the latest run is still in flight. Sends an Idempotency-Key, so a retry never starts two runs. Returns the new run at once (it writes its tasks first, ingesting:true); call batch_wait.
| Name | Type | Req | Description |
|---|---|---|---|
| full | boolean|null | – | Rerun every task, not only some (default false) |
| idempotency_key | – | – | 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 aga… |
| job_id | string | yes | Batch job id returned by batch_create or batch_list |
| status | – | – | Task statuses to rerun (default ["failed", "pending"]). Ignored with full:true. |
No output schema declared.
No examples provided.
batch_results ~318
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, processing, expired), type, result_url when successful, and error when failed. A result_url is presigned and expires after 2 hours: call batch_results again for a fresh one, or read the body with batch_content. Results are kept 14 days by default; after that a successful row reads as status "expired", with no result_url, and batch_content answers BATCH_RESULT_EXPIRED. Filter with status: all (default), successful, failed, or processing (not finished yet). A sparse filter can return fewer rows than limit with next_cursor still set: keep paging. While the run is still running or writing its tasks, the list is partial.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string|null | – | next_cursor from a previous batch_results call |
| job_id | string | yes | Batch job id returned by batch_create or batch_list |
| limit | – | – | Max rows to return (default 100, max 1000) |
| run_id | – | – | An earlier run's id (from batch_status or batch_rerun). Default: the job's latest run. |
| status | – | – | Filter rows by status (default all). processing = tasks not finished yet. successful also returns expired rows. |
No output schema declared.
No examples provided.
batch_resume ~93
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 otherwise.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Batch job id returned by batch_create or batch_list |
No output schema declared.
No examples provided.
batch_status ~144
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 (subscription_inactive) or BATCH_RUN_FAILED, error.server_code (the failure_reason) and failure_detail; batch_rerun recovers it once fixed. A paused run has paused:true; one still writing its tasks has ingesting:true.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Batch job id returned by batch_create or batch_list |
No output schema declared.
No examples provided.
batch_wait ~194
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 once with paused:true (it does not move until batch_resume). A failed run answers ok:false with error.code and server_code (insufficient_credits, subscription_inactive or api_key_cap_reached). Transient poll errors are retried. A call that carries a progressToken gets a progress notification after each poll.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Batch job id returned by batch_create or batch_list |
| timeout | – | – | Max wait in seconds (default 50). Many MCP clients cancel a call after 60 s. |
| timeout_ms | – | – | Deprecated: the same wait in milliseconds. Use the seconds parameter instead. |
No output schema declared.
No examples provided.
browser_batch ~188
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 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; browser_screenshot returns them as images. A batch can include evaluate, so it can change or delete page state the same way browser_evaluate can.
| Name | Type | Req | Description |
|---|---|---|---|
| actions | array | yes | Ordered list of actions to perform. Each action has a 'type' field plus type-specific parameters. |
| session_id | string | yes | Session ID returned by browser_navigate |
| stop_on_error | boolean|null | – | Stop executing on the first failed action (default true) |
No output schema declared.
No examples provided.
browser_check ~45
Check a checkbox or radio button.
| Name | Type | Req | Description |
|---|---|---|---|
| selector | string | yes | CSS selector of the checkbox or radio element |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_clear_cookies ~34
Clear all cookies for the current browser session.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_clear_local_storage ~36
Delete every localStorage entry in the current page context.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_click ~48
Click an element on the page using a CSS selector.
| Name | Type | Req | Description |
|---|---|---|---|
| selector | string | yes | CSS selector of the element to click |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_close ~40
Close a browser session and free all associated resources, including the concurrency slot it holds.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_drag ~64
Drag an element from its current position to a target element.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
| source_selector | string | yes | CSS selector of the element to drag |
| target_selector | string | yes | CSS selector of the drop target |
No output schema declared.
No examples provided.
browser_evaluate ~76
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.
| Name | Type | Req | Description |
|---|---|---|---|
| script | string | yes | JavaScript expression or function body to evaluate in the page context |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_fill ~67
Clear an input field and set its value, replacing what was there (browser_type appends instead).
| Name | Type | Req | Description |
|---|---|---|---|
| selector | string | yes | CSS selector of the input element |
| session_id | string | yes | Session ID returned by browser_navigate |
| value | string | yes | Value to fill in |
No output schema declared.
No examples provided.
browser_focus ~49
Move focus to an element, triggering focus-dependent UI changes.
| Name | Type | Req | Description |
|---|---|---|---|
| selector | string | yes | CSS selector of the element to focus |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_generate_pdf ~73
Render the current page as a PDF document.
| Name | Type | Req | Description |
|---|---|---|---|
| landscape | boolean|null | – | Landscape orientation (default false) |
| print_background | boolean|null | – | Print background graphics (default false) |
| scale | – | – | Page scale factor (default 1) |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_get_accessibility_tree ~91
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 states — everything needed to drive browser interactions.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_get_attribute ~71
Get the value of a specific attribute on an element.
| Name | Type | Req | Description |
|---|---|---|---|
| attribute | string | yes | Attribute name to retrieve (e.g. 'href', 'src', 'data-id') |
| selector | string | yes | CSS selector of the element |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_get_cookies ~33
Get all cookies for the current page.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_get_html ~55
Get the HTML source of an element or the full page.
| Name | Type | Req | Description |
|---|---|---|---|
| selector | string|null | – | CSS selector of the element (omit for full page HTML) |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_get_local_storage ~47
Read one localStorage value in the current page context.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Storage key to read |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_get_text ~58
Get the visible text content of an element or the entire page body.
| Name | Type | Req | Description |
|---|---|---|---|
| selector | string|null | – | CSS selector of the element (omit for full page body text) |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_get_title ~32
Get the title of the current page.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_get_url ~33
Get the current URL of the browser session.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_go_back ~35
Navigate back to the previous page in the browser history.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_go_forward ~35
Navigate forward to the next page in the browser history.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_hover ~50
Move the mouse cursor over an element to trigger hover effects.
| Name | Type | Req | Description |
|---|---|---|---|
| selector | string | yes | CSS selector of the element to hover over |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_navigate ~234
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 browser_* tool takes. The session holds one concurrency slot until browser_close closes it. When to use options: - proxy_country: geo-restricted content (ISO 3166-1 alpha-2, e.g. "US", "DE") - proxy_region: world region for geo-targeted proxy (eu, na, ap, sa, af, me)
| Name | Type | Req | Description |
|---|---|---|---|
| proxy_country | string|null | – | ISO 3166-1 alpha-2 country code for geo-targeted proxy (e.g. 'US', 'GB', 'DE') |
| proxy_region | string|null | – | 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 | yes | The URL to navigate to |
No output schema declared.
No examples provided.
browser_new_tab ~59
Open a new browser tab. Returns a tab_id to use with browser_switch_tab.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
| url | – | – | URL to open in the new tab (opens blank tab if omitted) |
No output schema declared.
No examples provided.
browser_press_key ~78
Press a keyboard key. Examples: "Enter", "Tab", "Escape", "ArrowDown", "Control+a".
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Key to press (e.g. "Enter", "Tab", "Escape", "ArrowDown", "Control+a") |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_query_selector_all ~53
Find all elements matching a CSS selector and return their text, HTML, and attributes.
| Name | Type | Req | Description |
|---|---|---|---|
| selector | string | yes | CSS selector to query |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_reload ~32
Reload the current page of a browser session.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_screenshot ~90
Take a screenshot of the current page or a specific element. Use for visual verification or when the accessibility tree is not sufficient.
| Name | Type | Req | Description |
|---|---|---|---|
| full_page | boolean|null | – | Capture full page including content below the fold (default false) |
| selector | string|null | – | CSS selector to capture only a specific element (overrides full_page) |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_scroll ~52
Scroll the page in a given direction.
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | yes | Scroll direction |
| distance | – | – | Pixels to scroll (default 500) |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_select_option ~63
Select an option from a <select> dropdown element.
| Name | Type | Req | Description |
|---|---|---|---|
| selector | string | yes | CSS selector of the <select> element |
| session_id | string | yes | Session ID returned by browser_navigate |
| value | string | yes | Value of the option to select |
No output schema declared.
No examples provided.
browser_set_cookies ~63
Set one or more cookies in the browser session. A cookie with the same name, domain and path replaces the existing one.
| Name | Type | Req | Description |
|---|---|---|---|
| cookies | array | yes | Array of cookie objects to set |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_set_local_storage ~67
Write one localStorage value in the current page context. An existing value under the same key is replaced.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Storage key to write |
| session_id | string | yes | Session ID returned by browser_navigate |
| value | string | yes | Value to store |
No output schema declared.
No examples provided.
browser_switch_tab ~47
Switch focus to a different browser tab.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
| tab_id | string | yes | Tab ID returned by browser_new_tab |
No output schema declared.
No examples provided.
browser_type ~81
Type text into an input element. Appends to existing content unless clear_first is set.
| Name | Type | Req | Description |
|---|---|---|---|
| clear_first | boolean|null | – | Clear existing content before typing (default false) |
| selector | string | yes | CSS selector of the input element |
| session_id | string | yes | Session ID returned by browser_navigate |
| text | string | yes | Text to type |
No output schema declared.
No examples provided.
browser_uncheck ~52
Uncheck a checkbox, found by CSS selector, in a browser session.
| Name | Type | Req | Description |
|---|---|---|---|
| selector | string | yes | CSS selector of the checkbox element |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_wait ~56
Wait for a fixed duration. browser_wait_for_selector waits only until an element appears.
| Name | Type | Req | Description |
|---|---|---|---|
| ms | integer | yes | Milliseconds to wait (max 30000) |
| session_id | string | yes | Session ID returned by browser_navigate |
No output schema declared.
No examples provided.
browser_wait_for_navigation ~110
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 30000ms).
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session ID returned by browser_navigate |
| timeout_ms | – | – | How long to wait in milliseconds (default 30000, max 60000) |
No output schema declared.
No examples provided.
browser_wait_for_selector ~91
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).
| Name | Type | Req | Description |
|---|---|---|---|
| selector | string | yes | CSS selector to wait for |
| session_id | string | yes | Session ID returned by browser_navigate |
| visible | boolean|null | – | Also require the element to be visible, not just present in the DOM (default false) |
No output schema declared.
No examples provided.
How do I install the io.github.ZenRows/zenrows-mcp server?
io.github.ZenRows/zenrows-mcp is a hosted endpoint at https://mcp.zenrows.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.zenrows.com
claude mcp add --transport http zenrows-zenrows-mcp 'https://mcp.zenrows.com/mcp'
What is the io.github.ZenRows/zenrows-mcp server?
io.github.ZenRows/zenrows-mcp is listed in the public MCP registry as io.github.ZenRows/zenrows-mcp. Zenrows MCP server: Fetch, Extract, Batch, and Browser Sessions for AI agents. This page covers its hosted endpoint (https://mcp.zenrows.com/mcp).
Is the io.github.ZenRows/zenrows-mcp server safe to use?
io.github.ZenRows/zenrows-mcp scores 88 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.ZenRows/zenrows-mcp server expose?
io.github.ZenRows/zenrows-mcp exposes 62 tools: scrape, extract, prepare_domain, prepared_domain_status, batch_create, and 57 more. Their descriptions and schemas cost roughly 9,855 tokens of context every time the server is loaded.
Does the io.github.ZenRows/zenrows-mcp server require authentication?
Yes. io.github.ZenRows/zenrows-mcp asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the io.github.ZenRows/zenrows-mcp server still maintained?
io.github.ZenRows/zenrows-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.