Last verified
Puppeteer MCP Server
ListedControl a headless Chrome browser from Claude for scraping, testing, and screenshots
Install
npx -y @modelcontextprotocol/server-puppeteerTools exposed
- puppeteer_navigate
- puppeteer_screenshot
- puppeteer_click
- puppeteer_fill
- puppeteer_evaluate
- puppeteer_hover
- puppeteer_select
"Claude navigated five pages, extracted the pricing table, and formatted it as CSV — no Selenium script needed."
Puppeteer MCP Server
The Puppeteer MCP Server is an official MCP reference implementation that controls a headless Chromium browser on behalf of Claude. It provides seven tools covering navigation, screenshots, clicks, form fills, JavaScript evaluation, hovering, and select-box interaction — covering the bulk of web and browsing automation needs.
How does it work?
The server spawns a Puppeteer-managed Chromium instance when it starts and keeps it alive for the session. Each MCP tool call translates to a Puppeteer API call. Screenshots are returned as base64 PNGs; text extraction calls return the page’s inner text or evaluated JavaScript result. Browser state (cookies, local storage, navigation history) persists across tool calls within a single session.
For workflows that involve both web pages and local file output, combining the Puppeteer MCP server with the Filesystem MCP server lets Claude scrape a page and write the extracted data to a local CSV in one session.
When to use it
Use the Puppeteer MCP server for web scraping, end-to-end test authoring, screenshot documentation, or navigating web-based dashboards that lack an API. It is particularly useful for extracting structured data from legacy internal tools that have no export function.
Frequently asked questions
Does the Puppeteer MCP server run in headless mode?
Yes, by default it launches Chrome in headless mode. Set the `PUPPETEER_HEADFUL` environment variable to `true` to open a visible browser window — useful when debugging automation scripts or when a site's bot detection requires a non-headless fingerprint.
Can Claude interact with pages that require login?
Yes. Claude can call `puppeteer_navigate` to the login page, use `puppeteer_fill` for credentials, and `puppeteer_click` on the submit button. Cookies persist for the session. Avoid hardcoding credentials in prompts; instead, pass them via environment variables.
What is the difference between puppeteer_evaluate and puppeteer_screenshot?
`puppeteer_evaluate` runs arbitrary JavaScript in the page context and returns the result as text — useful for extracting data from the DOM. `puppeteer_screenshot` captures a PNG of the current viewport and returns it as a base64-encoded image for Claude to describe or save.