Puppeteer Real Browser MCP Server
Supports handling Cloudflare Turnstile captchas through the solve_captcha tool.
Supports browsing Google websites and handling reCAPTCHA challenges through dedicated captcha solving capabilities.
Leverages Puppeteer for browser automation with enhanced stealth capabilities, including realClick and realCursor methods to avoid detection.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Puppeteer Real Browser MCP Servergo to amazon.com and search for wireless headphones under $100"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Puppeteer Real Browser MCP Server
Give an MCP-compatible AI assistant a local Chrome browser that it can open, navigate, read, and control.
Under maintenance: This project is still changing. The
mainbranch may be newer than the package published on npm. The npm badge above shows the published version used by@latest.
What it does
This package runs as a local Model Context Protocol (MCP) server. Your MCP client starts the server, and the server starts one Chrome process for browser automation.
Main features:
Opens a visible browser by default, with optional headless mode
Navigates pages and reads HTML or text
Finds elements, clicks, types, waits, and scrolls
Uses
rebrowser-puppeteer-coreand a small set of anti-detection settingsDetects Chrome on Windows, macOS, and Linux
Supports a custom Chrome path, proxy, and dedicated automation profile
Tracks the exact Chrome process it starts and closes only that process
Enforces a content-first workflow before page interaction
No browser automation is invisible. Websites may still detect it or block it.
Related MCP server: Cloudflare Playwright MCP
Safety and current limits
Please read this before using the server:
Use it only on websites you are allowed to automate.
Review tool calls before approving logins, forms, purchases, downloads, or other sensitive actions.
The browser and file tools run with your normal user permissions.
The server supports one browser session at a time.
solve_captchais currently a placeholder. It does not use a CAPTCHA-solving service. Browser startup only makes a best-effort click on detected Turnstile widgets.save_content_as_markdownis listed by the server, but the current workflow validator blocks it. This is a known code issue.
Requirements
Node.js 18 or newer
npm and
npx(included with the normal Node.js installer)Google Chrome or Chromium
An MCP client that can start a local
stdioserver
Claude Desktop is available on macOS and Windows. Other MCP clients can use this server on Linux.
Quick start
You do not need to install this package globally. npx can download and run
the published package when your MCP client needs it.
The -y option prevents an npm install question from blocking the MCP server
while it starts.
Claude Desktop
Open Claude Desktop → Settings → Developer → Edit Config.
Add this server inside
mcpServers:
{
"mcpServers": {
"puppeteer-real-browser": {
"command": "npx",
"args": [
"-y",
"puppeteer-real-browser-mcp-server@latest"
]
}
}
}Save the file.
Fully quit Claude Desktop, then open it again.
Claude Desktop stores this file here:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
See the official local MCP server guide for the current Claude Desktop steps.
Claude Code
Run:
claude mcp add --transport stdio puppeteer-real-browser \
-- npx -y puppeteer-real-browser-mcp-server@latestThen check the connection:
claude mcp get puppeteer-real-browserInside Claude Code, /mcp also shows server status.
The default scope is local to the current project. Add --scope user before
the server name if you want the server in all your projects. See the official
Claude Code MCP guide for scope details.
Cursor
Create .cursor/mcp.json in one project, or ~/.cursor/mcp.json for all
projects:
{
"mcpServers": {
"puppeteer-real-browser": {
"command": "npx",
"args": [
"-y",
"puppeteer-real-browser-mcp-server@latest"
]
}
}
}Restart Cursor after saving the file. See the official Cursor MCP guide for current configuration locations and formats.
Other MCP clients
Use a local stdio server with this command and argument list:
command: npx
args: -y puppeteer-real-browser-mcp-server@latestThe server communicates through standard input and standard output. Your MCP client must keep the process open while it uses the tools.
Test the setup
Ask your AI assistant:
Start the browser, open https://example.com, read the page text, and then close the browser.
The expected tool order is:
browser_init → navigate → get_content → browser_closeAvailable tools
The server exposes 11 tools.
Tool | Purpose | Required input |
| Start or reuse the managed Chrome session | None |
| Open a URL |
|
| Read full-page or selected HTML/text | None |
| Find a CSS selector from element text |
|
| Click an element |
|
| Clear and type into an input |
|
| Wait for a selector, navigation, or time |
|
| Scroll with varied timing and distance | None |
| Return a placeholder attempt result |
|
| Save as |
|
| Close the managed browser and reset workflow state | None |
Content-first workflow
The server blocks blind interaction. Use this order:
browser_init → navigate → get_content → find_selector → click or typeAfter a new navigation, call get_content again before clicking or typing.
You can call wait after navigation when a page loads content slowly.
Browser configuration
Browser options are inputs to browser_init. They are not top-level MCP
server settings.
Option | Meaning |
| Set |
| Proxy URL such as |
| Dedicated automation profile path. |
| Set |
| Connection and setup timeout in ms. |
| Delay operations in ms. |
| Absolute path to a Chrome executable. |
| Custom flags; replaces the server flag list. |
| Content-priority suggestion settings. |
contentPriority is an object with prioritizeContent and
autoSuggestGetContent Boolean values. It changes suggestions, but it does not
remove the required content-first workflow.
Example request:
{
"headless": true,
"proxy": "http://proxy.example.com:8080",
"connectOption": {
"timeout": 60000,
"slowMo": 100
},
"customConfig": {
"chromePath": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
}
}Chrome path
The server first checks these environment variables:
CHROME_PATHPUPPETEER_EXECUTABLE_PATH
If neither points to a file, the server checks common Chrome and Chromium locations. On Windows, it also checks the registry and common portable paths.
You can set CHROME_PATH in the MCP client configuration:
{
"mcpServers": {
"puppeteer-real-browser": {
"command": "npx",
"args": [
"-y",
"puppeteer-real-browser-mcp-server@latest"
],
"env": {
"CHROME_PATH": "/absolute/path/to/chrome"
}
}
}
}PROXY_URL is not a supported environment variable. Pass a proxy to
browser_init instead.
Browser ownership protection
The server keeps the exact launcher handle and process ID for the Chrome process it starts. Normal close, startup failure, timeout, MCP disconnect, and signal shutdown all clean up through that handle. It does not search for or close Chrome by process name.
For safety, the server rejects settings that could attach to another browser or take ownership of a personal Chrome profile:
customConfig.userDataDircustomConfig.portcustomConfig.portStrictModecustomConfig.handleSIGINTconnectOption.browserURLconnectOption.browserWSEndpointconnectOption.transport--remote-debugging-port,--remote-debugging-pipe, and--user-data-dirinside custom Chrome flags
Use profilePath for persistent automation data. The directory must be
absolute and either empty or already marked as owned by this server.
Troubleshooting
The MCP server does not appear
Check the tools are installed:
node --version npm --version npx --versionCheck that Node.js is version 18 or newer.
Check the JSON file for missing commas or quotes.
Fully quit and reopen the MCP client.
If a desktop app cannot find
npx, use its absolute path ascommand. Runwhich npxon macOS/Linux orwhere npxon Windows to find it.
Claude Desktop logs are stored here:
macOS:
~/Library/Logs/ClaudeWindows:
%APPDATA%\Claude\logs
Chrome is not found
Find the real Chrome executable, then set CHROME_PATH in the MCP client
configuration. Common examples are:
Windows:
C:/Program Files/Google/Chrome/Application/chrome.exemacOS:
/Applications/Google Chrome.app/Contents/MacOS/Google ChromeLinux:
/usr/bin/google-chromeor/usr/bin/chromium
Do not run the MCP client as Administrator or use sudo npm install -g only to
solve a Chrome path problem.
The server looks stuck when run in a terminal
This can be normal. A stdio MCP server waits for protocol messages from an MCP
client. Use the MCP Inspector instead of typing into the process.
Test the published package:
npx -y @modelcontextprotocol/inspector \
npx puppeteer-real-browser-mcp-server@latestSee the official MCP Inspector guide for usage details.
A page action is blocked
Follow the required workflow:
browser_initnavigateget_contentfind_selectorwhen you need a selectorclickortype
If the page changed, call get_content again.
A browser connection times out
Check that the Chrome path exists.
Close the current managed browser with
browser_close, then start it again.Increase
connectOption.timeoutin thebrowser_initinput.Check whether security software is blocking the child Chrome process.
Include the full error message when reporting the problem.
Get help
Search or open a GitHub issue. Include:
Operating system
Node.js and npm versions
MCP client name and version
Chrome version and executable path
Full error message
Exact steps that reproduce the problem
Do not include passwords, cookies, tokens, or private page content.
Development
Run from source
git clone https://github.com/withLinda/puppeteer-real-browser-mcp-server.git
cd puppeteer-real-browser-mcp-server
npm ci
npm run buildTest the local build with the MCP Inspector:
npx -y @modelcontextprotocol/inspector node dist/index.jsTo use the local build in an MCP client, use an absolute path:
{
"mcpServers": {
"puppeteer-real-browser-local": {
"command": "node",
"args": [
"/absolute/path/to/puppeteer-real-browser-mcp-server/dist/index.js"
]
}
}
}Project structure
src/index.ts MCP stdio server and request handlers
src/tool-definitions.ts Tool names and input schemas
src/browser-manager.ts Browser state, detection, and configuration
src/managed-browser-session.ts Owned Chrome launch and cleanup
src/handlers/ Tool implementations
src/*.test.ts Unit and regression tests
test/integration/ MCP protocol integration tests
test/e2e/ Real-browser tests
test/safety/ Browser cleanup safety guard
scripts/check-packaged-server.ts Package smoke testTest workflow
Use TDD for behavior changes: write one failing test, make it pass, then clean up the code.
# Browser cleanup safety guard
npm run test:safety
# Fast source tests
npm run test:unit
# MCP protocol integration tests
npm run test:integration
# Build the package
npm run build
# Test the built npm package shape and stdio lifecycle
npm run test:package:smoke:built
# Real Chrome tests
npm run test:e2e
# Release-focused automated checks
npm run test:allDuring TDD, use npm run test:watch. Before running real-browser tests, note
the Chrome processes already open on your machine. After testing, verify that
only the Chrome process started by the test was closed.
Contributing
Issues and pull requests are welcome. For a code change:
Create a focused branch.
Add a failing test for one behavior.
Make the smallest code change that passes the test.
Refactor while tests stay green.
Run the safety, source, build, and package checks.
Explain the root cause, solution, prevention, and verification in the commit message.
License
This project uses the MIT License.
Acknowledgments
The original implementation and public API were based on
puppeteer-real-browser
by ZFC Digital. The current source replaces that end-of-life runtime dependency
with an internal managed launcher built from chrome-launcher,
rebrowser-puppeteer-core, and ghost-cursor.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/withLinda/puppeteer-real-browser-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server