Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the ZenRows MCP server

Vendor MCP
Open markdown

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.

Tools
43
What they doRead · write · destructive
18 · 24 · 118 read24 write1 destructive
Users sign in with
OAuth app
Scalekit's or your own

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

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

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

    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

    quickstart.mts
    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)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • zenrowsmcp_batch_resultsList result rows for a ZenRows Batch job.Read-only

    Batch Results

    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.

    Inputs

    job_idstringrequired
    Batch job id.
    statusstring
    Filter results by status (default: all).one of successfulfailedall
  • zenrowsmcp_batch_statusGet status and stats for a ZenRows Batch job, including latest_run.status and latest_run.stats.Read-only

    Batch Status

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

    Inputs

    job_idstringrequired
    Batch job id returned by batch_create.
  • zenrowsmcp_batch_waitPoll batch_status until a ZenRows Batch job reaches a terminal state (completed, stopped, or deleted).Read-only

    Batch Wait

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

    Inputs

    job_idstringrequired
    Batch job id.
    timeout_msinteger
    Max wait time in milliseconds (default 600000).
  • zenrowsmcp_browser_generate_pdfRender the current page as a PDF document.Read-only

    Browser Generate Pdf

    Render the current page as a PDF document.

    Inputs

    session_idstringrequired
    Session ID returned by browser_navigate. Required by all browser_* tools.
    landscapeboolean
    Render PDF in landscape orientation (default false).
    print_backgroundboolean
    Include CSS background graphics in the PDF (default false).
    scalenumber
    Page scale factor for PDF rendering, 0.1–2 (default 1).
  • zenrowsmcp_browser_get_accessibility_treeReturn the accessibility tree of the current page for element discovery and screen-reader testing.Read-only

    Browser Get Accessibility Tree

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

    Inputs

    session_idstringrequired
    Session ID returned by browser_navigate. Required by all browser_* tools.
  • zenrowsmcp_browser_get_attributeGet the value of a specific HTML attribute from an element matching a CSS selector.Read-only

    Browser Get Attribute

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

    Inputs

    attributestringrequired
    HTML attribute name to read, e.g. href, src, data-id.
    selectorstringrequired
    CSS selector identifying the target element, e.g. #submit-button or .product-card.
    session_idstringrequired
    Session ID returned by browser_navigate. Required by all browser_* tools.
  • zenrowsmcp_browser_get_cookiesReturn all cookies set in the current browser session.Read-only

    Browser Get Cookies

    Return all cookies set in the current browser session.

    Inputs

    session_idstringrequired
    Session ID returned by browser_navigate. Required by all browser_* tools.
  • zenrowsmcp_browser_get_htmlReturn the outer HTML of an element or the full page if no selector is given.Read-only

    Browser Get Html

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

    Inputs

    session_idstringrequired
    Session ID returned by browser_navigate. Required by all browser_* tools.
    selectorstring
    CSS selector identifying the target element, e.g. #submit-button or .product-card.