Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

To connect Zen Browser to an MCP client, run Zen with its WebDriver BiDi debugging port open, install the zen-mcp server, register that server as a local MCP command, and start a new client session. On macOS, the essential commands are:

/Applications/Zen.app/Contents/MacOS/zen --remote-debugging-port 9222
npm install -g zen-mcp

After adding zen-mcp to your client configuration, the client should expose the server’s zen_* tools for tabs, page inspection, screenshots, forms, JavaScript, and navigation.

What this setup does

This is a local bridge. Your MCP client (such as Claude Code or Cursor) starts zen-mcp; the server then connects to the running Zen Browser over WebDriver BiDi through a WebSocket. The project describes its approach as “No Selenium. No Playwright. No browser drivers. Just WebSocket.” It does not add Selenium, Playwright, or a separate browser driver.

The repository documents 20 tools grouped into four areas:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Browse: navigate, list, select, open, and close tabs.
  • See: inspect page structure, read page text, inspect form fields, and take screenshots.
  • Interact: click, fill, select options, toggle controls, submit forms, press keys, and scroll.
  • Utility: evaluate JavaScript, wait for page conditions, and reconnect.

That combination is suitable for research, data extraction, form completion, and lightweight browser workflows. It is not a read-only connection: an agent can change pages, submit forms, and interact with an authenticated profile.

Prerequisites

  • Zen Browser installed on the computer where the MCP client runs.
  • Node.js 20 or newer, with npm available on your PATH.
  • An MCP client that can launch a local stdio server command.
  • A free local TCP port, using 9222 in the documented example.

Install Zen and Node.js using their normal installers for your operating system. The command and application path below are the repository’s macOS example; on another operating system, use that installation’s Zen executable path and equivalent argument syntax.

Step 1: Start Zen with remote debugging

macOS executable command

Quit Zen first if it is already running, then launch the executable with the debugging port:

/Applications/Zen.app/Contents/MacOS/zen --remote-debugging-port 9222

Keep this Zen process running while the MCP client uses it. The repository also suggests launching the application bundle with arguments:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
open /Applications/Zen.app --args --remote-debugging-port 9222

Only one process needs to own the port. If another application is listening on 9222, choose an unused port and use the corresponding server setting if the version of zen-mcp you install supports a custom port.

Check the startup before configuring the client

  • Confirm that Zen opened normally rather than exiting immediately.
  • Confirm that you started the same Zen profile you intend to expose.
  • Leave the terminal or application process running; closing it ends the debugging endpoint.

Step 2: Install zen-mcp

Global npm installation

The shortest setup installs the published command globally:

npm install -g zen-mcp

Verify that your shell can find it:

which zen-mcp
zen-mcp --help

On Windows, use the platform’s equivalent command lookup (for example, where zen-mcp). If the command is not found after installation, fix npm’s global bin directory in your PATH or invoke the installed executable by its full path.

Run from a cloned repository

For a local checkout, clone the project, install dependencies, and point the MCP client at its server file:

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
git clone https://github.com/sh6drack/zen-mcp.git
cd zen-mcp
npm install
node server.mjs

The client normally starts the command for you, so do not run a second copy manually unless you are diagnosing the connection. A local checkout is useful when you need to inspect or update the server independently of the global npm package.

Step 3: Register the server in an MCP client

Claude Code

Add a server entry to the MCP configuration used by Claude Code:

{
  "mcpServers": {
    "zen-browser": {
      "command": "zen-mcp"
    }
  }
}

If you use the cloned checkout instead, replace the command with the absolute path to Node and the repository’s server.mjs. Absolute paths avoid failures caused by a client starting with a different working directory or PATH.

Cursor and other MCP clients

Cursor and other clients use the same basic information: a server name and a local command. Open the client’s MCP settings, add a local or stdio server, set the command to zen-mcp, and save. If the UI requests a JSON configuration, the equivalent entry is:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
{
  "mcpServers": {
    "zen-browser": {
      "command": "zen-mcp"
    }
  }
}

Some clients call the field “Command,” “Executable,” or “stdio server.” Do not enter an HTTP URL for this setup; the documented bridge is a locally launched process.

Start a fresh session

Restart the client or create a new chat/session after saving the configuration. The repository says the zen_* tools should then appear. Ask the client to list open tabs as a harmless smoke test before allowing it to fill a form or run JavaScript.

Step 4: Use the tools safely

Navigation and tabs

  1. Ask the agent to list existing tabs.
  2. Open a new tab or select a specific tab.
  3. Navigate to the target URL.
  4. Wait for the page condition or load state you need.

Keeping tab selection explicit prevents an agent from acting on the wrong page when several windows are open.

Inspection and extraction

Use page-structure inspection before clicking. Read visible text and inspect form fields to discover labels, names, and available controls. For dynamic pages, wait for a selector or condition rather than assuming the initial HTML is complete.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Interaction

The interaction tools cover clicks, text entry, option selection, toggles, key presses, scrolling, and multi-field form filling. Treat submit, delete, purchase, and account-setting controls as confirmation points: inspect the page, summarize the intended action, and require human approval before the final click.

Screenshots and JavaScript

Take a screenshot when visual state matters, and use JavaScript evaluation only when a normal inspection or interaction tool cannot express the operation. JavaScript runs in the connected browser context, so it can read or modify page state available to that profile.

Security and profile isolation

An agent attached to an existing browser session may read and interact with authenticated pages, cookies, and other profile state. This is the same trust concern highlighted in Chrome for Developers’ “Get started with Chrome DevTools for agents” guidance and applies to Zen as well.

  • Use a separate Zen profile for MCP work whenever possible.
  • Do not connect an untrusted agent to a profile containing email, banking, administration, or corporate sessions.
  • Review the current tab and URL before every sensitive action.
  • Assume that page text, cookies, and authenticated content are available to the agent.
  • Close the debugging-enabled browser when the workflow is complete.

Common errors and fixes

“Cannot connect to Zen Browser”

Cause: Zen was started normally, the debugging port is wrong, or the browser process has exited.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Fix: Quit Zen, relaunch it with --remote-debugging-port 9222, keep it running, and then restart the MCP client session. If you selected another port, ensure the server and browser use the same one.

“Maximum number of active sessions”

Cause: A previous or crashed connection left a zombie session.

Fix: Close client sessions and restart Zen. The repository gives this macOS recovery command:

killall zen && zen

After the restart, launch Zen again with the debugging argument and reconnect the client.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

WebSocket connection dropped

Cause: Zen restarted, the debugging process ended, or the network endpoint became unavailable.

Fix: Use the server’s zen_reconnect utility. If that fails, restart Zen with the debugging port and create a new MCP session.

Tools do not appear

Cause: The client has not reloaded its configuration, cannot find zen-mcp, or the JSON is malformed.

Fix: Run which zen-mcp, use an absolute executable path if necessary, validate the JSON, and restart the client rather than only reopening the chat.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

File upload or drag-and-drop fails

File uploads and drag-and-drop are currently unsupported because of WebDriver BiDi limitations in this project. Use a supported text/form interaction, a manually completed upload, or a different automation path for that step.

An advanced browser command is unavailable

Some BiDi commands available in Chrome may not yet be available in Firefox-derived Zen. Replace the operation with the documented inspection, interaction, wait, or JavaScript tools, or complete that specific step manually.

Reliability, performance, and operating costs

Keep sessions short and explicit

Reuse one running Zen process for a focused workflow, but reconnect after crashes or long idle periods. Listing tabs and waiting for selectors makes workflows more deterministic than issuing clicks immediately after navigation.

Control page complexity

Large pages, client-side rendering, redirects, and authentication can increase wait time. Ask the agent to wait for a meaningful selector or page condition, and limit extraction to the fields required for the task.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Local resource use

The browser, Node process, and MCP client all run locally. The documented project does not provide an independent uptime, latency, or adoption statistic, so treat reliability as dependent on your machine, Zen version, network, and the specific site.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

If your goal is a clean website image rather than interactive browsing, ScreenshotNeo provides a one-request screenshot API. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be disabled. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the page verdict and billing status in X-Page-Verdict and X-Billed headers. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients.

See the parameter reference in the ScreenshotNeo documentation. The following calls capture Stripe’s homepage; replace the URL with your target.

cURL

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)

Node.js

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));

ScreenshotNeo includes full-page and element capture, device presets and custom viewports, dark mode, retina scale, PDF controls, HTML/CSS rendering, custom CSS and JavaScript, clicks, selector waits, network-idle waits, request blocking, headers, cookies, user agents, timezone and geolocation, transparent backgrounds, resizing, configurable caching, signed links, asynchronous webhooks, bulk capture for up to 100 URLs per call, a usage API, and an OpenAPI specification. Its Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots, and every feature is available on every plan. Sign up for the free plan.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

When to choose Zen MCP instead

Use Zen MCP when an agent must operate a live browser: inspect a page, move through tabs, fill controls, evaluate page JavaScript, or handle a workflow that depends on an existing session. Use an API such as ScreenshotNeo when the deliverable is a repeatable screenshot or PDF and you do not need interactive tab or form control.

Frequently Asked Questions

Can I connect zen-mcp to a Zen window that is already open?

Only if that Zen process was started with the remote debugging option. A normally launched window does not expose the endpoint required by the server; restart Zen with –remote-debugging-port 9222.

Does zen-mcp require Selenium or Playwright?

No. The project uses WebDriver BiDi over WebSocket and explicitly says it uses no Selenium, Playwright, or browser drivers.

Which operations are not supported?

File uploads and drag-and-drop are unsupported because of current WebDriver BiDi limitations. Some advanced commands documented for Chrome may also be unavailable in Firefox-derived Zen.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What should I do before letting an agent use a logged-in account?

Use a separate browser profile or a trusted agent, inspect the active tab, and remember that the connection can read authenticated pages, cookies, and profile state and can perform write actions.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.