Camoufox Playwright MCP
This server provides a Playwright-compatible MCP tool set for browser automation, running by default on stealth-oriented Camoufox (Firefox) but also supporting Chromium, Chrome, Firefox, WebKit, CDP, and remote endpoints.
Navigation & history: browse to URLs, go back, wait for page elements or time.
Interaction: click, type, press keys, hover, drag-and-drop, select dropdown options, fill multi-field forms, upload files.
Inspection: capture accessibility snapshots, search snapshot text/regex, take screenshots, evaluate JavaScript, read console messages.
State & storage (with
storagecapability): manage localStorage, sessionStorage, cookies, full storage-state save/restore.Tabs & dialogs: list/create/close/select tabs, accept or dismiss JavaScript dialogs.
Network: list and inspect network requests, filter by regex, save details to files.
Custom code: run unsafe Python Playwright snippets for advanced automation.
Browser management: resize and close the browser window.
Flexible deployment: stdio or Streamable HTTP transport, persistent or isolated sessions, configurable via CLI, JSON/INI, or environment variables.
Provides browser automation for Firefox, allowing navigation, clicking, form filling, snapshots, and network inspection through the server's Playwright-based tool set.
Click on "Deploy 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., "@Camoufox Playwright MCP go to https://example.com and take a screenshot of the login form"
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.
๐ฆ Camoufox Playwright MCP
The Playwright MCP, on Camoufox. Same tools, harder to detect.
The Playwright MCP tool set, in Python, on Camoufox. Built for sites that fingerprint or block the default browser.
Highlights โข Quickstart โข Client Setup โข Connection Modes โข Configuration โข Tool Reference โข Divergences
โก Highlights
๐ฆ Camoufox by Default: Runs Camoufox, a Firefox build with fingerprint spoofing built in (
navigator.webdrivermasked, canvas/WebGL/audio randomized, hardware details spoofed).๐ญ Same tool set as
@playwright/mcp, runs on Camoufox. Drop-in for the official server's tool contract (browser_navigate,browser_click,browser_snapshot,browser_evaluate,browser_localstorage_*, and the rest). Camoufox masksnavigator.webdriverand randomizes canvas, WebGL, and audio per session. Switch to Chromium, Chrome, Firefox, or WebKit when you don't need stealth.๐ Python-Native Code Generation: Emits clean Python Playwright code snippets instead of JavaScript strings:
await page.get_by_role("button", name="Submit").click()๐ Dual Engine Flexibility: Run
camoufoxby default, or switch to standard Playwright engines (chromium,chrome,firefox,webkit), remote CDP endpoints, or browser extensions.๐ Zero-Install with
uvx: Run on-demand in Claude Desktop, Cursor, Windsurf, Cline, OpenCode, or any MCP client without manual virtualenv management.
Related MCP server: wraith-mcp
๐ค What this is (and isn't)
This server gives you the same tool set as @playwright/mcp: browser_navigate, browser_click, browser_snapshot, and the rest. Drop it into an existing client config and your prompts keep working.
The browser underneath is different. Camoufox is a Firefox build with anti-fingerprinting built in. navigator.webdriver is masked, canvas and WebGL and audio outputs are randomized per session, and hardware details are spoofed. Useful when the site you're driving detects or blocks the default browser. Switch to Chromium, Chrome, Firefox, or WebKit when you don't need that.
Not affiliated with Microsoft or the Playwright team. The browser-level fingerprinting work lives in Camoufox; this server wires it into the MCP tool contract.
๐ Quickstart
Run On-Demand with uvx
No installation required. Needs Python 3.12+ (uvx handles this). The first launch downloads the Camoufox browser (~150MB, one time), so the first tool call can take a few minutes; after that it starts instantly:
# Run the Camoufox browser in headless mode (recommended for AI agents)
uvx camoufox-playwright-mcp --headless
# Pre-download the browser ahead of time ("all" also installs Playwright browsers)
uvx camoufox-playwright-mcp install-browser all
# Run with visible browser window (headed mode)
uvx camoufox-playwright-mcp
# Switch to standard Chrome / Chromium
uvx camoufox-playwright-mcp --browser chrome --headless
# Enable storage & developer capabilities
uvx camoufox-playwright-mcp --headless --caps=storage,devtools,vision๐ป MCP Client Configuration
1. Claude Desktop
Add this to your claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"camoufox": {
"command": "uvx",
"args": [
"camoufox-playwright-mcp",
"--headless"
]
}
}
}2. Cursor (~/.cursor/mcp.json)
Add to your Cursor MCP settings (Cursor Settings > MCP > Add New MCP Server):
{
"mcpServers": {
"camoufox": {
"command": "uvx",
"args": [
"camoufox-playwright-mcp",
"--headless"
]
}
}
}3. Cline / Roo Code / Windsurf / Zed
{
"mcpServers": {
"browser": {
"command": "uvx",
"args": [
"camoufox-playwright-mcp",
"--headless"
]
}
}
}4. OpenCode (opencode.json)
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"camoufox": {
"type": "local",
"command": ["uvx", "camoufox-playwright-mcp", "--headless"],
"enabled": true
}
}
}๐ Transports (stdio & Streamable HTTP)
By default, the server uses stdio transport.
Passing --port starts a Streamable HTTP server listening at /mcp:
uvx camoufox-playwright-mcp --headless --host 127.0.0.1 --port 8931Client configuration for HTTP transport:
{
"mcpServers": {
"camoufox": {
"url": "http://127.0.0.1:8931/mcp"
}
}
}๐ Browser Modes & Connections
1. Persistent Profiles (Default)
By default, the server launches a persistent browser context using an auto-created profile under the user cache directory (~/.cache/camoufox-playwright-mcp/), preserving session state, logins, and cookies across runs:
# Explicit persistent profile directory
uvx camoufox-playwright-mcp --user-data-dir ~/.config/my-browser-profile2. Isolated Ephemeral Sessions
Use --isolated to run with a temporary, in-memory context that leaves no trace on disk:
uvx camoufox-playwright-mcp --isolated --headless3. Connect to Existing Browser over CDP
Connect to an existing Chromium / Chrome instance started with --remote-debugging-port=9222:
uvx camoufox-playwright-mcp --cdp-endpoint http://localhost:92224. Connect to Bound Playwright Endpoint
Connect to a remote Playwright browser server:
uvx camoufox-playwright-mcp --endpoint ws://localhost:30005. Playwright Browser Extension Relay
Attach directly to your existing Chrome or Edge browser tabs via the Playwright Browser Extension:
uvx --from 'camoufox-playwright-mcp[extension]' camoufox-playwright-mcp --extension๐ฆ Camoufox Configuration
When running with --browser camoufox (default), you can customize Camoufox's browser parameters via a JSON configuration file (--config config.json):
{
"browser": {
"provider": "camoufox",
"camoufoxOptions": {
"geoip": true,
"humanize": true,
"os": "windows",
"block_images": false,
"fonts": ["Arial", "Calibri", "Times New Roman"]
}
}
}Key Camoufox Options
Option | Type | Description |
|
| Automatically match timezone, locale, and geolocation to your IP or proxy. |
|
| Add natural, human-like mouse movements and keyboard typing delays. |
|
| Target OS to emulate ( |
|
| Block images to optimize network bandwidth and speed up scraping. |
|
| Spoof WebRTC local IP address to prevent real IP leaks. |
โ๏ธ Configuration (JSON & INI)
Configuration is merged with the following precedence (highest priority last):
Built-in defaults (
browser: camoufox,action timeout: 5000ms,output: file).JSON or INI configuration file (via
--configorCAMOUFOX_MCP_CONFIG).Environment variables (
CAMOUFOX_MCP_*orPLAYWRIGHT_MCP_*).Explicit CLI arguments.
INI Configuration Example (camoufox.ini)
capabilities = storage,devtools,vision
console.level = info
timeouts.action = 8000
timeouts.navigation = 45000
browser.contextOptions.viewport = 1280x720Load with:
uvx camoufox-playwright-mcp --config camoufox.ini๐ Environment Variables
All CLI flags can be set via environment variables:
Variable | Description |
| Default browser ( |
| Set to |
| Set to |
| Proxy server URL |
| Comma-separated list of capabilities ( |
| Output directory for artifacts (screenshots, downloads) |
| Path to JSON/INI configuration file |
(Note: PLAYWRIGHT_MCP_* variables are also supported for backward compatibility).
๐งฐ Available MCP Tools
Same tools as the official Playwright MCP server:
Navigation & Interaction
browser_navigate: Navigate to any URL with automatic wait-for-load.browser_click: Click elements using locators, coordinates, or semantic text.browser_type: Fill input fields (fill semantics, Camoufox humanized typing where available).browser_fill_form: Fill multiple form fields in one call.browser_hover,browser_type,browser_press_key: Natural mouse and keyboard interactions.browser_file_upload: Upload files to file input elements.browser_drag,browser_drop: Perform drag-and-drop operations.
Inspection & Output
browser_snapshot: Capture full accessibility and semantic tree snapshots.browser_take_screenshot: Capture full-page or element screenshots.browser_evaluate: Safely evaluate JavaScript within the page context.browser_console_messages: Retrieve console logs and error streams.
Storage & State (Enable with --caps storage)
browser_localstorage_list,browser_localstorage_get,browser_localstorage_set,browser_localstorage_delete,browser_localstorage_clearbrowser_sessionstorage_list,browser_sessionstorage_get,browser_sessionstorage_set,browser_sessionstorage_delete,browser_sessionstorage_clearbrowser_cookies: Get, set, and clear cookies.browser_storage_state,browser_set_storage_state: Save and restore full storage state files.
Tabs & Network
browser_tabs: Manage multiple tabs (list, switch, create, close).browser_network: Manage routing and network interception.browser_handle_dialog: Accept or dismiss JavaScript alerts, confirms, and prompts.
๐ฌ Intentional Python Divergences & Limitations
This server is designed to follow the official Playwright MCP public contract while providing a Python-native experience:
Python Code Generation: Upstream
@playwright/mcpgenerates JavaScript snippets; this server generates native Python Playwright snippets (await page.get_by_role(...).click()).browser_run_code_unsafe: Executes asynchronous Python Playwright code directly against the activepageinstance.browser.initPage: Accepts Python-native modules defininginit_page(page)ordefault(page).browser_annotate: Intentionally omitted (upstream relies on a Node.js dashboard daemon).browser_pdf_save: PDF generation is supported when running Headless Chromium engines (--browser chromium --headless).
๐งช Testing & Conformance
Run local test and quality gates:
# Lint checks
uv run ruff check .
# Type checking (strict mypy across all source and test files)
uv run mypy src tests
# Unit and integration test suite
uv run pytestRun upstream TypeScript Playwright MCP conformance suite:
cd tests/conformance/upstream
npm ci
npx playwright test --workers=10๐ License
Apache License 2.0. See LICENSE for details.
Available Tools
24 toolsbrowser_clickClickCDestructive
Perform click on a web page
Inputs: target (required), _meta, button, element, +2 more.
browser_closeClose browserCDestructive
Close the page
Inputs: _meta.
browser_console_messagesGet console messagesCRead-only
Returns all console messages
Inputs: all, _meta, level, filename.
browser_dragDrag mouseCDestructive
Perform drag and drop between two elements
Inputs: endTarget (required), startTarget (required), _meta, endElement, +1 more.
browser_dropDrop files or data onto an elementBDestructive
Drop files or MIME-typed data onto an element, as if dragged from outside the page. At least one of "paths" or "data" must be provided.
Inputs: target (required), data, _meta, paths, +1 more.
browser_evaluateEvaluate JavaScriptCDestructive
Evaluate JavaScript expression on page or element
Inputs: function (required), _meta, target, element, +1 more.
browser_file_uploadUpload filesCDestructive
Upload one or multiple files
Inputs: _meta, paths.
browser_fill_formFill formCDestructive
Fill multiple form fields
Inputs: fields (required), _meta.
browser_findFind in page snapshotARead-only
Search the accessibility snapshot of the current page for text or a regular expression. Returns matching snapshot nodes with a few lines of surrounding context (like search snippets), which is cheaper than capturing the whole snapshot when you only need to locate an element and its ref.
Inputs: text, _meta, regex.
browser_handle_dialogHandle a dialogDDestructive
Handle a dialog
Inputs: accept (required), _meta, promptText.
browser_hoverHover mouseCDestructive
Hover over element on page
Inputs: target (required), _meta, element.
browser_network_requestShow network request detailsARead-only
Returns full details (headers and body) of a single network request, or a single part if part is set. Use the number from browser_network_requests.
Inputs: index (required), part, _meta, filename.
browser_network_requestsList network requestsARead-only
Returns a numbered list of network requests since loading the page. Use browser_network_request with the number to get full details.
Inputs: _meta, filter, static, filename.
browser_press_keyPress a keyCDestructive
Press a key on the keyboard
Inputs: key (required), _meta.
browser_resizeResize browser windowDDestructive
Resize the browser window
Inputs: width (required), height (required), _meta.
browser_run_code_unsafeRun Playwright code (unsafe)ADestructive
Run a Python Playwright code snippet. Unsafe: executes arbitrary Python in the Playwright server process with normal builtins/imports and is RCE-equivalent.
Inputs: code, _meta, filename.
browser_select_optionSelect optionCDestructive
Select an option in a dropdown
Inputs: target (required), values (required), _meta, element.
browser_snapshotPage snapshotCRead-only
Capture accessibility snapshot of the current page, this is better than screenshot
Inputs: _meta, boxes, depth, target, +1 more.
browser_tabsManage tabsCDestructive
List, create, close, or select a browser tab.
Inputs: action (required), url, _meta, index.
browser_take_screenshotTake a screenshotARead-only
Take a screenshot of the current page. You can't perform actions based on the screenshot, use browser_snapshot for actions.
Inputs: type, _meta, scale, target, +3 more.
browser_typeType textCDestructive
Type text into editable element
Inputs: text (required), target (required), _meta, slowly, +2 more.
browser_wait_forWait forCRead-only
Wait for text to appear or disappear or a specified time to pass
Inputs: text, time, _meta, textGone.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogโฆ
TDQS
Scored across 24 tools
Most tools have clearly distinct purposes, but 'browser_snapshot' and 'browser_take_screenshot' could confuse agents as both capture page state, and 'browser_type' vs 'browser_fill_form' overlap slightly. Descriptions help differentiate them.
All tools follow a consistent 'browser_<action_or_noun>' pattern using lowercase with underscores. The naming is predictable and uniform, making it easy for agents to infer tool function from the name.
24 tools is well-scoped for a browser automation server, covering navigation, interaction, forms, dialogs, console, network, tabs, and more. Each tool addresses a distinct operation without being excessive.
The tool set covers most common browser automation operations (CRUD-like for page interactions), but lacks a forward navigation tool and explicit waiting for elements beyond text. These minor gaps are workable.
Maintenance
Related MCP Connectors
Official Browserless MCP server: browser automation, scraping, screenshots and PDFs for AI agents.
Web scraping, browser automation, screenshots and AI data extraction for AI agents via MCP.
Web scraping MCP server โ scrape, extract structured data, screenshot any site with anti-bot bypass.
Browser agents and stealth cloud browsers for AI: run web tasks, fill forms, extract data.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI-powered browser automation, web scraping, and testing using Playwright across Chromium, Firefox, and WebKit. It allows users to perform actions like navigation, clicking, typing, and taking screenshots through natural language interfaces.24 npmMIT
- AlicenseAqualityCmaintenanceAn AI-native stealth browser MCP server that uses AI vision navigation and bot detection bypass, enabling natural language browser automation.17MIT
- AlicenseNot gradedqualityNot gradedmaintenanceAn MCP server that enables AI agents to automate browser interactions using Playwright and Cloudflare Workers, supporting tasks like navigation, clicking, typing, and screenshots.8,604 npmApache 2.0
- AlicenseNot gradedqualityDmaintenanceA stealth-enhanced browser automation MCP server for AI agents to interact with websites while bypassing anti-bot detection mechanisms like Cloudflare and reCAPTCHA.9MIT