Skip to main content
Glama
blink-new
by blink-new
README.md
# Browser MCP

A Model Context Protocol (MCP) server for browser automation using Puppeteer. This enables AI assistants like Claude, GPT, and other LLM-powered tools to navigate web pages, take screenshots, click elements, fill forms, and interact with web content.

## Features

- **Navigation**: Navigate to URLs, go back/forward, reload pages
- **Screenshots**: Capture full-page or viewport screenshots
- **Interaction**: Click, type, hover, scroll, select dropdown options
- **Content Extraction**: Get page content, titles, and links
- **JavaScript Execution**: Run custom scripts in the browser context
- **Wait Conditions**: Wait for elements or timeouts

## Installation

### Prerequisites

- Node.js 18+ (LTS recommended)
- npm, pnpm, or bun

### Install via npx (Recommended)

You can run the server directly without installation:

```bash
npx github:blink-new/browser-mcp
```

### Install Globally

```bash
npm install -g github:blink-new/browser-mcp
```

### Install from Source

```bash
git clone https://github.com/blink-new/browser-mcp.git
cd browser-mcp
npm install
npm run build
```

## Setup Instructions

### Ubuntu / Debian Linux

1. **Install Node.js 18+**:
   ```bash
   curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
   sudo apt-get install -y nodejs
   ```

2. **Install Chromium dependencies**:
   ```bash
   sudo apt-get install -y \
     libnss3 \
     libatk1.0-0 \
     libatk-bridge2.0-0 \
     libcups2 \
     libdrm2 \
     libxkbcommon0 \
     libxcomposite1 \
     libxdamage1 \
     libxfixes3 \
     libxrandr2 \
     libgbm1 \
     libasound2 \
     libpango-1.0-0 \
     libcairo2 \
     libatspi2.0-0
   ```

3. **Configure your MCP client** (see Configuration section below)

### macOS

1. **Install Node.js 18+** (using Homebrew):
   ```bash
   brew install node
   ```
   
   Or using nvm:
   ```bash
   curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
   nvm install 20
   nvm use 20
   ```

2. **Configure your MCP client** (see Configuration section below)

### Windows

1. **Install Node.js 18+**:
   - Download and install from [nodejs.org](https://nodejs.org/)
   - Or use winget: `winget install OpenJS.NodeJS.LTS`

2. **Configure your MCP client** (see Configuration section below)

## Configuration

### OpenCode

Add to your `~/.config/opencode/opencode.json`:

```json
{
  "mcp": {
    "browser": {
      "type": "local",
      "command": ["npx", "-y", "github:blink-new/browser-mcp"],
      "enabled": true
    }
  }
}
```

### Claude Desktop

Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):

```json
{
  "mcpServers": {
    "browser": {
      "command": "npx",
      "args": ["-y", "github:blink-new/browser-mcp"]
    }
  }
}
```

### Cursor / VS Code with MCP Extension

Add to your MCP configuration:

```json
{
  "mcpServers": {
    "browser": {
      "command": "npx",
      "args": ["-y", "github:blink-new/browser-mcp"]
    }
  }
}
```

### With Environment Variables

For headless servers or containers:

```json
{
  "mcp": {
    "browser": {
      "type": "local",
      "command": ["npx", "-y", "github:blink-new/browser-mcp"],
      "environment": {
        "BROWSER_MCP_NO_SANDBOX": "true",
        "BROWSER_MCP_HEADLESS": "true"
      },
      "enabled": true
    }
  }
}
```

## Environment Variables

| Variable | Description | Default |
|----------|-------------|---------|
| `BROWSER_MCP_HEADLESS` | Run browser in headless mode | `true` |
| `BROWSER_MCP_NO_SANDBOX` | Disable Chrome sandbox (required for Docker/root) | `false` |
| `BROWSER_MCP_EXECUTABLE_PATH` | Path to Chrome/Chromium executable | Auto-detected |
| `BROWSER_MCP_ARGS` | Additional Chrome arguments (comma-separated) | None |

## Available Tools

### Navigation

| Tool | Description |
|------|-------------|
| `browser_navigate` | Navigate to a URL |
| `browser_back` | Go back to previous page |
| `browser_forward` | Go forward to next page |
| `browser_reload` | Reload current page |

### Screenshots & Content

| Tool | Description |
|------|-------------|
| `browser_screenshot` | Take a screenshot (supports fullPage option) |
| `browser_title` | Get the page title |
| `browser_content` | Get HTML content (optional selector) |
| `browser_links` | Get all links on the page |

### Interaction

| Tool | Description |
|------|-------------|
| `browser_click` | Click on an element by CSS selector |
| `browser_type` | Type text into an input field |
| `browser_hover` | Hover over an element |
| `browser_select` | Select an option from a dropdown |
| `browser_scroll` | Scroll up or down |

### Utilities

| Tool | Description |
|------|-------------|
| `browser_wait` | Wait for time or element |
| `browser_evaluate` | Execute JavaScript |
| `browser_close` | Close the browser |

## Examples

### Navigate and Screenshot

```
User: Go to example.com and take a screenshot
AI: [Uses browser_navigate with url="https://example.com"]
AI: [Uses browser_screenshot]
```

### Fill a Form

```
User: Fill out the contact form on the page
AI: [Uses browser_type with selector="#name" text="John Doe"]
AI: [Uses browser_type with selector="#email" text="john@example.com"]
AI: [Uses browser_click with selector="#submit"]
```

### Extract Data

```
User: Get all the links from this page
AI: [Uses browser_links]
```

## Troubleshooting

### Linux: Browser fails to launch

If you see errors about missing libraries, install the Chromium dependencies:

```bash
sudo apt-get install -y libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2
```

### Docker/Root: Sandbox errors

Use the `--no-sandbox` flag:

```bash
BROWSER_MCP_NO_SANDBOX=true npx github:blink-new/browser-mcp
```

Or in your config:
```json
{
  "environment": {
    "BROWSER_MCP_NO_SANDBOX": "true"
  }
}
```

### macOS: Puppeteer can't find Chrome

The bundled Chromium should work automatically. If not, specify the path:

```bash
BROWSER_MCP_EXECUTABLE_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" npx github:blink-new/browser-mcp
```

### Windows: Long path errors

Run PowerShell as Administrator and enable long paths:

```powershell
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
```

## Docker Support

Example Dockerfile:

```dockerfile
FROM node:20-slim

# Install Chromium dependencies
RUN apt-get update && apt-get install -y \
    libnss3 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libcups2 \
    libdrm2 \
    libxkbcommon0 \
    libxcomposite1 \
    libxdamage1 \
    libxfixes3 \
    libxrandr2 \
    libgbm1 \
    libasound2 \
    libpango-1.0-0 \
    libcairo2 \
    && rm -rf /var/lib/apt/lists/*

ENV BROWSER_MCP_NO_SANDBOX=true
ENV BROWSER_MCP_HEADLESS=true

CMD ["npx", "-y", "github:blink-new/browser-mcp"]
```

## Development

```bash
# Clone the repository
git clone https://github.com/blink-new/browser-mcp.git
cd browser-mcp

# Install dependencies
npm install

# Run in development mode
npm run dev

# Build
npm run build

# Run production build
npm start
```

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

MIT License - see [LICENSE](LICENSE) for details.

## Credits

- Built with [Puppeteer](https://pptr.dev/)
- Uses [Model Context Protocol SDK](https://github.com/modelcontextprotocol/sdk)