Puppeteer MCP server
Last verified: 2026-09
Drive a headless Chrome: click, type, screenshot.
Official reference Browser & search No API key Claude Desktop, Cursor, Windsurf, Claude Code, VS Code
What it does
Drives a local headless Chrome: navigate, click, type, screenshot, evaluate JS. Heavier than Fetch. Official reference server; for new setups Playwright is usually the better browser host.
It sits in Browser & search: Three different jobs get mixed up here.
Good for
- Open a JS-rendered docs site and screenshot the page.
- Click through a public wizard the static HTML does not contain.
- Fill a form on a site that has no API.
- Compare what Fetch returns vs what Chrome actually paints.
Tools
- puppeteer_navigate — Open a URL.
- puppeteer_screenshot — Capture the page or a selector.
- puppeteer_click / puppeteer_fill / puppeteer_select / puppeteer_hover — Interact.
- puppeteer_evaluate — Run JavaScript in the page.
Config (Claude Desktop / Cursor / Windsurf)
Paste the JSON below. Same mcpServers shape. Replace placeholder paths and secrets.
Windows paths look like C:\\Users\\you\\project, not /path/to.
Host-side steps →
Claude Desktop
| OS | Config file |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json
(usually C:\Users\<you>\AppData\Roaming\Claude\) |
| Linux | ~/.config/Claude/claude_desktop_config.json |
Cursor
| Scope | macOS / Linux | Windows |
|---|---|---|
| This project | .cursor/mcp.json in the repo root | |
| This user | ~/.cursor/mcp.json |
%USERPROFILE%\.cursor\mcp.json |
Windsurf
| OS | Config file |
|---|---|
| macOS / Linux | ~/.codeium/windsurf/mcp_config.json |
| Windows | %USERPROFILE%\.codeium\windsurf\mcp_config.json |
{
"mcpServers": {
"puppeteer": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-puppeteer"
]
}
}
}
Windsurf remote MCP: use serverUrl instead of url if the block below is HTTP.
One-liner: npx -y @modelcontextprotocol/server-puppeteer
Secrets it wants: none
How to get started
- Install with the JSON below. First run will download Chrome.
- Try a public URL and ask for a screenshot before you point it at a logged-in profile.
- Prefer Playwright if you are starting from scratch.
Access risk
A real browser can see whatever the page shows, including sessions if you reuse a user profile. evaluate() can do anything the page can do.
When to skip it
Skip it if Fetch is enough, or if you want Microsoft's maintained Playwright MCP instead.
Instead: Playwright, Fetch, Browserbase.
Vs alternatives
| Server | Official? | Needs a secret? | Best for |
|---|---|---|---|
| Puppeteer | Yes | No | Drive a headless Chrome: click, type, screenshot. |
| Playwright | No | No | Microsoft's browser automation MCP for Chromium, Firefox, and WebKit. |
| Fetch | Yes | Yes | Fetch a URL and turn the page into readable text. |
| Browserbase | No | Yes | Cloud browsers you do not run locally. |
More in Browser & search
FAQ
Puppeteer or Playwright?
Playwright is the current browser default (Microsoft's MCP). Puppeteer is the older official example. Install one.
Does it use my daily Chrome profile?
Do not point it at that profile. A logged-in session can click delete or submit payment forms.
Can it log into my bank?
Technically, if you give it the profile. Do not.
Headless only?
The official server drives headless Chrome. First run downloads the browser.