MCP Server Archived reference Limited info

Puppeteer

MCP server that lets LLMs drive a real browser via Puppeteer: navigate, click, fill forms, screenshot, and run JavaScript.

docker build -t mcp/puppeteer -f src/puppeteer/Dockerfile .
Puppeteer preview image

What it is

A Model Context Protocol server that provides browser automation using Puppeteer. It lets LLMs interact with web pages, take screenshots, and execute JavaScript in a real browser environment. It exposes tools for navigation, clicking, hovering, filling, selecting and evaluating scripts, plus resources for console logs and screenshots.

Who it's for

  • Developers who want an LLM to interact with live web pages through an MCP client such as Claude Desktop or VS Code
  • Users who need screenshots, console log capture or JavaScript execution in a real browser
  • Users who want to customize Puppeteer launch options for their automation

Requirements

Requirements

  • An MCP client such as Claude Desktop or VS Code
  • Either NPX (to run @modelcontextprotocol/server-puppeteer) or Docker (to run the mcp/puppeteer image)

Setup

  1. Claude Desktop with NPX (opens a browser window)

    Add this server entry to the Claude Desktop MCP configuration.

    json
    {
      "mcpServers": {
        "puppeteer": {
          "command": "npx",
          "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
        }
      }
    }
  2. Claude Desktop with Docker (headless chromium)

    The Docker implementation uses headless chromium, whereas the NPX version opens a browser window.

    json
    {
      "mcpServers": {
        "puppeteer": {
          "command": "docker",
          "args": [
            "run",
            "-i",
            "--rm",
            "--init",
            "-e",
            "DOCKER_CONTAINER=true",
            "mcp/puppeteer"
          ]
        }
      }
    }
  3. VS Code manual install (NPX)

    Add this block to your User Settings (JSON) file (open it via Ctrl + Shift + P and Preferences: Open User Settings (JSON)). Optionally use .vscode/mcp.json in your workspace, where the mcp key is not needed.

    json
    {
      "mcp": {
        "servers": {
          "puppeteer": {
            "command": "npx",
            "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
          }
        }
      }
    }
  4. Build the Docker image

    Build the image locally from the repository.

    bash
    docker build -t mcp/puppeteer -f src/puppeteer/Dockerfile .

Examples

Set launch options via environment variable

json
json
{
  "mcpServers": {
    "mcp-puppeteer": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-puppeteer"],
      "env": {
        "PUPPETEER_LAUNCH_OPTIONS": "{ \"headless\": false, \"executablePath\": \"C:/Program Files/Google/Chrome/Application/chrome.exe\", \"args\": [] }",
        "ALLOW_DANGEROUS": "true"
      }
    }
  }
}

What it does: Customizes the browser through the PUPPETEER_LAUNCH_OPTIONS JSON string in the MCP config's env parameter.

Navigate with launch options

json
json
{
  "url": "https://example.com",
  "launchOptions": {
    "headless": false,
    "defaultViewport": { "width": 1280, "height": 720 }
  }
}

What it does: Arguments for the puppeteer_navigate tool that set launch options per call; a non-null launchOptions value restarts the browser.

Pros & cons

Pros

  • Pro:Covers a range of browser actions: navigate, click, hover, fill, select, screenshot and JavaScript evaluation
  • Pro:Exposes console logs and screenshots as MCP resources
  • Pro:Launch options can be customized via environment variable or per tool call
  • Pro:Offers both NPX (visible browser window) and Docker (headless chromium) setups

Cons

  • Con:Can access local files and local/internal IP addresses since it runs a browser on your machine, so sensitive data may be exposed
  • Con:The repository is under the servers-archived path, which suggests it is no longer in the active servers collection
  • Con:Dangerous launch args such as --no-sandbox and --disable-web-security throw errors unless allowDangerous is enabled

Images