> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the ZenRows MCP server

The ZenRows MCP connector routes your AI agent's tool calls to ZenRows's own MCP server through Scalekit. Each user signs in to ZenRows once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 43 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** Developer Tools, Automation
**Tools:** 43: 18 read, 24 write, 1 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=ZENROWSMCP)

## What you can do

- **Scrape webpages**: fetch any page as clean markdown, with JavaScript rendering and premium proxies when needed
- **Extract structured data**: pull products, articles, or listings from a page as JSON fields
- **Drive a live browser**: open pages, click, type, fill forms, scroll, and switch tabs in a browser session
- **Capture page content**: get the visible text, HTML, a screenshot, or a PDF render of the current page
- **Run batch jobs**: submit many URLs at once, check job status, cancel runs, and download the results

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the ZenRows MCP connection

   In **AgentKit > Connections**, create a ZenRows MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for ZenRows MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'zenrowsmcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize ZenRows MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'zenrowsmcp_batch_results',
     toolInput: { job_id: 'YOUR_JOB_ID' },
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "zenrowsmcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize ZenRows MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={"job_id":"YOUR_JOB_ID"},
       tool_name="zenrowsmcp_batch_results",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'zenrowsmcp_batch_results',
  toolInput: {
    job_id: '<job_id>',
  },
  connector: 'zenrowsmcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="zenrowsmcp_batch_results",
    tool_input={
        "job_id": "<job_id>",
    },
    connection_name="zenrowsmcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `zenrowsmcp_batch_results`

Batch Results · Read-only

List result rows for a ZenRows Batch job. Each row may include task_id, external_id, status, and a short-lived result_url; download soon as presigned links expire.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `job_id` (`string`, required): Batch job id.
- `status` (`string`, optional): Filter results by status (default: all). One of: `successful`, `failed`, `all`.

Example input: `{"job_id":"<job_id>"}`

### `zenrowsmcp_batch_status`

Batch Status · Read-only

Get status and stats for a ZenRows Batch job, including latest_run.status and latest_run.stats.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `job_id` (`string`, required): Batch job id returned by batch_create.

Example input: `{"job_id":"<job_id>"}`

### `zenrowsmcp_batch_wait`

Batch Wait · Read-only

Poll batch_status until a ZenRows Batch job reaches a terminal state (completed, stopped, or deleted).

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `job_id` (`string`, required): Batch job id.
- `timeout_ms` (`integer`, optional): Max wait time in milliseconds (default 600000).

Example input: `{"job_id":"<job_id>"}`

### `zenrowsmcp_browser_generate_pdf`

Browser Generate Pdf · Read-only

Render the current page as a PDF document.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `landscape` (`boolean`, optional): Render PDF in landscape orientation (default false).
- `print_background` (`boolean`, optional): Include CSS background graphics in the PDF (default false).
- `scale` (`number`, optional): Page scale factor for PDF rendering, 0.1–2 (default 1).

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_get_accessibility_tree`

Browser Get Accessibility Tree · Read-only

Return the accessibility tree of the current page for element discovery and screen-reader testing.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_get_attribute`

Browser Get Attribute · Read-only

Get the value of a specific HTML attribute from an element matching a CSS selector.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `attribute` (`string`, required): HTML attribute name to read, e.g. href, src, data-id.
- `selector` (`string`, required): CSS selector identifying the target element, e.g. #submit-button or .product-card.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"attribute":"<attribute>","selector":"<selector>","session_id":"<session_id>"}`

### `zenrowsmcp_browser_get_cookies`

Browser Get Cookies · Read-only

Return all cookies set in the current browser session.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_get_html`

Browser Get Html · Read-only

Return the outer HTML of an element or the full page if no selector is given.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `selector` (`string`, optional): CSS selector identifying the target element, e.g. #submit-button or .product-card.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_get_text`

Browser Get Text · Read-only

Return the visible text content of an element or the full page if no selector is given.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `selector` (`string`, optional): CSS selector identifying the target element, e.g. #submit-button or .product-card.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_get_title`

Browser Get Title · Read-only

Return the current page title.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_get_url`

Browser Get Url · Read-only

Return the current page URL.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_query_selector_all`

Browser Query Selector All · Read-only

Return all elements matching a CSS selector as an array of handles.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `selector` (`string`, required): CSS selector identifying the target element, e.g. #submit-button or .product-card.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"selector":"<selector>","session_id":"<session_id>"}`

### `zenrowsmcp_browser_screenshot`

Browser Screenshot · Read-only

Capture a screenshot of the current page or a specific element.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `full_page` (`boolean`, optional): Capture the full scrollable page, not just the visible viewport.
- `selector` (`string`, optional): CSS selector identifying the target element, e.g. #submit-button or .product-card.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_wait`

Browser Wait · Read-only

Pause execution for a specified number of milliseconds.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `ms` (`integer`, required): Milliseconds to pause execution.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"ms":1,"session_id":"<session_id>"}`

### `zenrowsmcp_browser_wait_for_navigation`

Browser Wait For Navigation · Read-only

Wait for a page navigation to complete after triggering a link or form submission.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `timeout_ms` (`integer`, optional): Maximum milliseconds to wait before timing out.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_wait_for_selector`

Browser Wait For Selector · Read-only

Wait until an element matching a CSS selector appears in the DOM.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `selector` (`string`, required): CSS selector identifying the target element, e.g. #submit-button or .product-card.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `visible` (`boolean`, optional): If true, wait until the element is visible in the viewport; if false, wait until present in DOM.

Example input: `{"selector":"<selector>","session_id":"<session_id>"}`

### `zenrowsmcp_extract`

Extract · Read-only

Extract structured data from a webpage using ZenRows. Prefer this over scrape when you need JSON fields (products, articles, listings) rather than a full page body. Supports auto (site-tailored Extract, open beta), autoparse (general-purpose), or css (explicit selector map) modes.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `url` (`string`, required): The webpage URL to extract data from.
- `css_extractor` (`string`, optional): Required when mode=css. JSON map of field to selector, e.g. {"title":"h1","price":".price"}.
- `fallback_autoparse` (`boolean`, optional): When mode=auto and the domain is not in the Extract open beta, retry once with autoparse. Default: `true`.
- `js_render` (`boolean`, optional): Enable headless JavaScript rendering for SPAs and dynamically loaded content.
- `mode` (`string`, optional): Extraction mode: 'auto' (default, site-tailored Extract), 'autoparse' (general-purpose JSON), or 'css' (requires css_extractor). One of: `auto`, `autoparse`, `css`. Default: `auto`.
- `mode_auto` (`boolean`, optional): Enable Adaptive Stealth Mode (mode=auto) for tougher, anti-bot-protected sites.
- `premium_proxy` (`boolean`, optional): Use premium residential proxies to bypass anti-bot protection. Higher credit cost.
- `proxy_country` (`string`, optional): ISO 3166-1 alpha-2 country code for geo-targeted proxy. Requires premium_proxy or mode_auto.
- `wait` (`integer`, optional): Milliseconds to wait after page load before extracting. Max 30000. Requires js_render.
- `wait_for` (`string`, optional): CSS selector to wait for before extracting. Requires js_render.

Example input: `{"url":"<url>"}`

### `zenrowsmcp_scrape`

Scrape · Read-only

Scrape any webpage and return its content using ZenRows. Returns clean markdown by default; supports JavaScript rendering, premium proxies, CSS extraction, and structured output.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `url` (`string`, required): Full URL to navigate to or scrape (must include scheme, e.g. https://).
- `autoparse` (`boolean`, optional): Automatically extract structured data from the page into JSON. Best for product pages, articles, and listings.
- `css_extractor` (`string`, optional): CSS selector map for targeted extraction, e.g. {"title":"h1","price":".price-tag"}. Returns JSON instead of full page content.
- `js_instructions` (`string`, optional): JSON array of browser interactions before scraping, e.g. [{"click":"#load-more"},{"wait":1000}]. Requires js_render=true.
- `js_render` (`boolean`, optional): Enable headless JavaScript rendering. Required for SPAs (React, Vue, Angular) and dynamically loaded content. Default: `false`.
- `outputs` (`string`, optional): Comma-separated data types to extract as structured JSON: emails, headings, links, menus, images, videos, audios. Use * for all.
- `premium_proxy` (`boolean`, optional): Use premium residential proxies to bypass heavy anti-bot protection. Higher credit cost. Default: `false`.
- `proxy_country` (`string`, optional): ISO 3166-1 alpha-2 country code for geo-targeted proxy, e.g. US, GB, DE.
- `response_type` (`string`, optional): 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 HTML source (omits the response_type param; ZenRows default). Ignored when autoparse, css_extractor, outputs, or screenshot params are set. One of: `markdown`, `plaintext`, `pdf`, `html`. Default: `markdown`.
- `screenshot` (`boolean`, optional): Capture an above-the-fold screenshot instead of text content.
- `screenshot_fullpage` (`boolean`, optional): Capture a full-page screenshot including content below the fold.
- `screenshot_selector` (`string`, optional): Capture a screenshot of a specific element by CSS selector instead of the full page.
- `wait` (`integer`, optional): Milliseconds to wait after page load before capturing. Max 30000. Requires js_render=true.
- `wait_for` (`string`, optional): CSS selector to wait for before capturing. Requires js_render=true.

Example input: `{"url":"<url>"}`

### `zenrowsmcp_batch_create`

Batch Create · Write

Submit a cloud Batch job that fans out many URLs asynchronously (ZenRows Batch API, beta). Not the same as browser_batch. Returns a job_id and latest_run status/stats; poll with batch_status or batch_wait, then fetch rows with batch_results.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `js_render` (`boolean`, optional): Job-level js_render applied to all tasks.
- `premium_proxy` (`boolean`, optional): Job-level premium_proxy applied to all tasks.
- `proxy_country` (`string`, optional): Job-level ISO 3166-1 alpha-2 country code. Requires premium_proxy or mode=auto.
- `response_type` (`string`, optional): Job-level response_type applied to all tasks. One of: `markdown`, `plaintext`, `html`, `pdf`.
- `tasks` (`array`, optional): List of tasks, each needing a url. Prefer this over urls when you need per-task params.
- `urls` (`array`, optional): Shorthand list of URLs, converted to tasks. Ignored when tasks is provided.
- `wait` (`boolean`, optional): If true, poll until the job reaches a terminal state before returning.
- `wait_timeout_ms` (`integer`, optional): Max wait time in milliseconds when wait=true (default 600000).
- `zenrows_params` (`object`, optional): Additional job-level zenrows_params merged with the flags above.

Example input: `{}`

### `zenrowsmcp_browser_batch`

Browser Batch · Write

Execute a sequence of browser actions in a single call against an existing session. Actions run sequentially and stop at the first failure unless stop_on_error is false.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `actions` (`array`, required): Ordered list of actions to perform. Each action has a 'type' field plus type-specific parameters.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `stop_on_error` (`boolean`, optional): If true (default), stop executing actions when one fails. Set false to continue on errors.

Example input: `{"actions":[],"session_id":"<session_id>"}`

### `zenrowsmcp_browser_check`

Browser Check · Write

Check a checkbox or radio button by CSS selector.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `selector` (`string`, required): CSS selector identifying the target element, e.g. #submit-button or .product-card.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"selector":"<selector>","session_id":"<session_id>"}`

### `zenrowsmcp_browser_clear_cookies`

Browser Clear Cookies · Write

Clear all cookies for the current browser session.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_click`

Browser Click · Write

Click an element identified by a CSS selector.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `selector` (`string`, required): CSS selector identifying the target element, e.g. #submit-button or .product-card.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"selector":"<selector>","session_id":"<session_id>"}`

### `zenrowsmcp_browser_close`

Browser Close · Write

Close a browser session and free its resources. Always call this when done to avoid session leaks.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_drag`

Browser Drag · Write

Drag an element from a source to a target CSS selector.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `source_selector` (`string`, required): CSS selector for the element to drag from.
- `target_selector` (`string`, required): CSS selector for the element to drop onto.

Example input: `{"session_id":"<session_id>","source_selector":"<source_selector>","target_selector":"<target_selector>"}`

### `zenrowsmcp_browser_evaluate`

Browser Evaluate · Write

Execute a JavaScript expression in the page context and return its result.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `script` (`string`, required): JavaScript expression to evaluate in the page context. Return value is serialized to JSON.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"script":"<script>","session_id":"<session_id>"}`

### `zenrowsmcp_browser_fill`

Browser Fill · Write

Fill an input, textarea, or contenteditable element with text.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `selector` (`string`, required): CSS selector identifying the target element, e.g. #submit-button or .product-card.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `value` (`string`, required): Text value to set (fill) or option value to select.

Example input: `{"selector":"<selector>","session_id":"<session_id>","value":"<value>"}`

### `zenrowsmcp_browser_focus`

Browser Focus · Write

Move keyboard focus to an element identified by a CSS selector.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `selector` (`string`, required): CSS selector identifying the target element, e.g. #submit-button or .product-card.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"selector":"<selector>","session_id":"<session_id>"}`

### `zenrowsmcp_browser_go_back`

Browser Go Back · Write

Navigate to the previous page in the browser history.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_go_forward`

Browser Go Forward · Write

Navigate to the next page in the browser history.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_hover`

Browser Hover · Write

Move the mouse pointer over an element identified by a CSS selector.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `selector` (`string`, required): CSS selector identifying the target element, e.g. #submit-button or .product-card.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"selector":"<selector>","session_id":"<session_id>"}`

### `zenrowsmcp_browser_local_storage`

Browser Local Storage · Write

Read, write, or clear localStorage in the current page context.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `action` (`string`, required): Operation: get a value, set a value, or clear all. One of: `get`, `set`, `clear`.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `key` (`string`, optional): localStorage key to read or write.
- `value` (`string`, optional): Text value to set (fill) or option value to select.

Example input: `{"action":"get","session_id":"<session_id>"}`

### `zenrowsmcp_browser_navigate`

Browser Navigate · Write

Open a ZenRows browser session and navigate to a URL. Returns a session_id required by all subsequent browser_* tools; always call browser_close when done.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `url` (`string`, required): Full URL to navigate to or scrape (must include scheme, e.g. https://).
- `proxy_country` (`string`, optional): ISO 3166-1 alpha-2 country code for geo-targeted proxy, e.g. US, GB, DE.
- `proxy_region` (`string`, optional): World region for geo-targeted proxy: eu, na, ap, sa, af, or me.

Example input: `{"url":"<url>"}`

### `zenrowsmcp_browser_new_tab`

Browser New Tab · Write

Open a new browser tab and navigate to a URL in the current session.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `url` (`string`, optional): Full URL to navigate to or scrape (must include scheme, e.g. https://).

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_press_key`

Browser Press Key · Write

Simulate pressing a keyboard key, optionally combined with modifier keys.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `key` (`string`, required): localStorage key to read or write.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"key":"<key>","session_id":"<session_id>"}`

### `zenrowsmcp_browser_reload`

Browser Reload · Write

Reload the current page.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"session_id":"<session_id>"}`

### `zenrowsmcp_browser_scroll`

Browser Scroll · Write

Scroll the page in a given direction by a specified pixel distance.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `direction` (`string`, required): Scroll direction. One of: `up`, `down`, `left`, `right`.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `distance` (`integer`, optional): Pixels to scroll (default 500).

Example input: `{"direction":"up","session_id":"<session_id>"}`

### `zenrowsmcp_browser_select_option`

Browser Select Option · Write

Select an option in a <select> element by value or label.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `selector` (`string`, required): CSS selector identifying the target element, e.g. #submit-button or .product-card.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `value` (`string`, required): Text value to set (fill) or option value to select.

Example input: `{"selector":"<selector>","session_id":"<session_id>","value":"<value>"}`

### `zenrowsmcp_browser_set_cookies`

Browser Set Cookies · Write

Set one or more cookies in the current browser session.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `cookies` (`array`, required): Array of cookie objects to set. Each object requires name and value; domain, path, expires, secure, and http_only are optional.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"cookies":[],"session_id":"<session_id>"}`

### `zenrowsmcp_browser_switch_tab`

Browser Switch Tab · Write

Switch focus to a different tab in the current session by tab ID.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `tab_id` (`string`, required): Numeric tab ID returned by browser_new_tab.

Example input: `{"session_id":"<session_id>","tab_id":"<tab_id>"}`

### `zenrowsmcp_browser_type`

Browser Type · Write

Type text into the focused element character by character, simulating real keyboard input.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `selector` (`string`, required): CSS selector identifying the target element, e.g. #submit-button or .product-card.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.
- `text` (`string`, required): Text to type character by character into the focused element.
- `clear_first` (`boolean`, optional): If true, clear the existing field value before typing.

Example input: `{"selector":"<selector>","session_id":"<session_id>","text":"<text>"}`

### `zenrowsmcp_browser_uncheck`

Browser Uncheck · Write

Uncheck a checkbox identified by a CSS selector.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `selector` (`string`, required): CSS selector identifying the target element, e.g. #submit-button or .product-card.
- `session_id` (`string`, required): Session ID returned by browser_navigate. Required by all browser_* tools.

Example input: `{"selector":"<selector>","session_id":"<session_id>"}`

### `zenrowsmcp_batch_cancel`

Batch Cancel · Destructive

Stop an in-flight ZenRows Batch job run.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `job_id` (`string`, required): Batch job id to stop.

Example input: `{"job_id":"<job_id>"}`

## Related

Other Developer Tools connectors ([all 94](/agentkit/connectors/?category=developer-tools)):

- [GitHub](/agentkit/connectors/github/): Scalekit connector, OAuth, 217 tools
- [Datadog](/agentkit/connectors/datadog/): Scalekit connector, API key, 105 tools
- [Linear](/agentkit/connectors/linear/): Scalekit connector, OAuth, 62 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
