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
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"] } } }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" ] } } }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"] } } } }Build the Docker image
Build the image locally from the repository.
bashdocker build -t mcp/puppeteer -f src/puppeteer/Dockerfile .
Examples
Set launch options via environment variable
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{
"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
