# nodriver — Chrome browser automation

This MCP server gives an AI agent 70 tools for driving Chrome, handling tabs, and collecting page data. Use it for browser automation and web scraping.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 6
- Author: andresolbach
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/andresolbach/nodriver-mcp-server
- Updated: 2026-10-16
- HTML: https://affpapa.org/en/nevibecode/mcp/nodriver-chrome-browser-automation

## What it does

nodriver connects an AI agent to Chrome through MCP and drives the browser over CDP. Its 70 tools cover navigation, form input, accessibility snapshots, screenshots, PDF output, cookies, storage, profiles, device emulation, and network inspection. Selenium and a separate ChromeDriver binary are not part of the setup.

Persistent profiles keep cookies and signed-in sessions between runs. Startup can open a blank tab, selected URLs, or previously open tabs for each profile. Separate browser processes can run side by side, with their own tabs, cookies, and element identifiers. The Cloudflare checkbox helper requires the `[cf]` extra, and its result depends on the challenge and browser configuration.

Start the server with `uvx nodriver-mcp`, then register it in Claude Code with `claude mcp add`. Environment variables named `NODRIVER_HEADLESS`, `NODRIVER_USER_DATA_DIR`, `NODRIVER_BROWSER_PATH`, and `NODRIVER_PROXY` control headless mode, profile storage, the browser path, and proxy settings.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `NODRIVER_HEADLESS`, `NODRIVER_USER_DATA_DIR`, `NODRIVER_BROWSER_PATH`, `NODRIVER_PROXY` — keys and tokens: ask the human for the values, never commit them or put them in shared files.
- Works with: Chrome

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env NODRIVER_HEADLESS=<NODRIVER_HEADLESS> --env NODRIVER_USER_DATA_DIR=<NODRIVER_USER_DATA_DIR> --env NODRIVER_BROWSER_PATH=<NODRIVER_BROWSER_PATH> --env NODRIVER_PROXY=<NODRIVER_PROXY> --transport stdio nodriver-chrome-browser-automation -- uvx nodriver-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from nodriver-mcp <command>

### Codex

**Platform CLI**
```bash
codex mcp add nodriver-chrome-browser-automation --env NODRIVER_HEADLESS=<NODRIVER_HEADLESS> --env NODRIVER_USER_DATA_DIR=<NODRIVER_USER_DATA_DIR> --env NODRIVER_BROWSER_PATH=<NODRIVER_BROWSER_PATH> --env NODRIVER_PROXY=<NODRIVER_PROXY> -- uvx nodriver-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from nodriver-mcp <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "nodriver-chrome-browser-automation": {
            "command": "uvx",
            "args": [
                "nodriver-mcp"
            ],
            "env": {
                "NODRIVER_HEADLESS": "<NODRIVER_HEADLESS>",
                "NODRIVER_USER_DATA_DIR": "<NODRIVER_USER_DATA_DIR>",
                "NODRIVER_BROWSER_PATH": "<NODRIVER_BROWSER_PATH>",
                "NODRIVER_PROXY": "<NODRIVER_PROXY>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from nodriver-mcp <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "nodriver-chrome-browser-automation": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "nodriver-mcp"
            ],
            "env": {
                "NODRIVER_HEADLESS": "<NODRIVER_HEADLESS>",
                "NODRIVER_USER_DATA_DIR": "<NODRIVER_USER_DATA_DIR>",
                "NODRIVER_BROWSER_PATH": "<NODRIVER_BROWSER_PATH>",
                "NODRIVER_PROXY": "<NODRIVER_PROXY>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from nodriver-mcp <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e NODRIVER_HEADLESS=<NODRIVER_HEADLESS> -e NODRIVER_USER_DATA_DIR=<NODRIVER_USER_DATA_DIR> -e NODRIVER_BROWSER_PATH=<NODRIVER_BROWSER_PATH> -e NODRIVER_PROXY=<NODRIVER_PROXY> nodriver-chrome-browser-automation uvx nodriver-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from nodriver-mcp <command>

## When to use it
- drive Chrome through an AI agent
- fill forms and read page content
- keep logins available across browser sessions
- run isolated browsers for separate tasks
- inspect requests and saved response data

## Example prompts
- Open the site, fill in its registration form, and report the result.
- Take an accessibility snapshot of the page and extract its links and visible text.
- Use a separate browser for this task and inspect the network responses behind the page.

## Similar
- [Scrapling MCP Server](https://affpapa.org/en/nevibecode/mcp/scrapling-mcp-server.md) — MCP server · ★ 89899
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119231
- [AIHawk](https://affpapa.org/en/nevibecode/mcp/aihawk.md) — MCP server · ★ 32260
- [Skyvern](https://affpapa.org/en/nevibecode/mcp/skyvern.md) — MCP server · ★ 23283
- [SeleniumBase MCP](https://affpapa.org/en/nevibecode/mcp/seleniumbase-mcp.md) — MCP server · ★ 13181
- [apify-mcp-server](https://affpapa.org/en/nevibecode/mcp/apify-mcp-server.md) — MCP server · ★ 13345

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
