Ultimate undetectable browser automation MCP server with CDP-level access
Project description
Stealth Browser MCP
Undetectable browser automation for MCP-compatible AI agents.
Bypass Cloudflare, antibot systems, and social media blocks with real browser instances powered by nodriver + Chrome DevTools Protocol + FastMCP.
Table of Contents
- Demo
- Features
- Quickstart
- Modular Architecture
- Toolbox
- Stealth vs Playwright MCP
- Troubleshooting
- Examples
- Showcase
- Roadmap
- Contributing
- Support
- License
Demo
Stealth Browser MCP bypassing Cloudflare, cloning UI elements, and intercepting network traffic — all through AI chat commands.
Features
- Antibot bypass — Works on Cloudflare, Queue-It, and other protection systems that block traditional automation
- 90 tools across 11 sections — From basic navigation to advanced CDP function execution
- Modular loading — Run the full 90-tool arsenal or a minimal 22-tool core; disable what you don't need
- Pixel-accurate element cloning — Extract complete elements with all CSS, DOM structure, events, and assets via CDP
- Network interception — Inspect every request, response, header, and payload through your AI agent
- Dynamic hook system — AI-generated Python functions that intercept and modify network traffic in real-time
- Instant text input — Paste large content via CDP or type with human-like keystrokes and newline support
- Cross-platform — Windows, macOS, Linux, Docker, and CI/CD pipelines with automatic environment detection
- Browser support — Chrome, Chromium, and Microsoft Edge (automatic detection)
- Clean MCP integration — No custom brokers or wrappers; works with Claude Code, Claude Desktop, Cursor, and any MCP client
Quickstart
1. Clone and install
git clone https://github.com/vibheksoni/stealth-browser-mcp.git
cd stealth-browser-mcp
python -m venv venv
# Activate virtual environment
# Windows:
venv\Scripts\activate
# Mac/Linux:
source venv/bin/activate
pip install -r requirements.txt
2. Add to your MCP client
Claude Code CLI (recommended):
Windows:
claude mcp add-json stealth-browser-mcp "{\"type\":\"stdio\",\"command\":\"C:\\path\\to\\stealth-browser-mcp\\venv\\Scripts\\python.exe\",\"args\":[\"C:\\path\\to\\stealth-browser-mcp\\src\\server.py\"]}"
Mac/Linux:
claude mcp add-json stealth-browser-mcp '{
"type": "stdio",
"command": "/path/to/stealth-browser-mcp/venv/bin/python",
"args": ["/path/to/stealth-browser-mcp/src/server.py"]
}'
Replace
/path/to/stealth-browser-mcp/with your actual project path.
Manual JSON configuration (Claude Desktop, Cursor, etc.)
Windows (%APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"stealth-browser-mcp": {
"command": "C:\\path\\to\\stealth-browser-mcp\\venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\stealth-browser-mcp\\src\\server.py"],
"env": {}
}
}
}
Mac/Linux (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"stealth-browser-mcp": {
"command": "/path/to/stealth-browser-mcp/venv/bin/python",
"args": ["/path/to/stealth-browser-mcp/src/server.py"],
"env": {}
}
}
}
FastMCP CLI (untested)
pip install fastmcp
fastmcp install claude-desktop src/server.py --with-requirements requirements.txt
# OR
fastmcp install claude-code src/server.py --with-requirements requirements.txt
# OR
fastmcp install cursor src/server.py --with-requirements requirements.txt
3. Test it
Restart your MCP client and ask your agent:
"Use stealth-browser to navigate to https://example.com and take a screenshot."
Modular Architecture
Choose exactly what functionality you need. Run the full 90-tool suite or strip it down to 22 core tools.
| Mode | Tools | Use Case |
|---|---|---|
| Full (default) | 90 | Complete browser automation and debugging |
Minimal (--minimal) |
22 | Core browser automation only |
Custom (--disable-*) |
Your choice | Disable specific sections |
python src/server.py --minimal
python src/server.py --disable-cdp-functions --disable-dynamic-hooks
python src/server.py --list-sections
Available sections:
| Section | Tools | Description |
|---|---|---|
browser-management |
11 | Core browser operations |
element-interaction |
11 | Page interaction and manipulation |
element-extraction |
9 | Element cloning and extraction |
file-extraction |
9 | File-based extraction tools |
network-debugging |
5 | Network monitoring and interception |
cdp-functions |
13 | Chrome DevTools Protocol execution |
progressive-cloning |
10 | Advanced element cloning |
cookies-storage |
3 | Cookie and storage management |
tabs |
5 | Tab management |
debugging |
6 | Debug and system tools |
dynamic-hooks |
10 | AI-powered network hooks |
Toolbox
Browser Management
| Tool | Description |
|---|---|
spawn_browser() |
Create undetectable browser instance |
navigate() |
Navigate to URLs |
close_instance() |
Clean shutdown of browser |
list_instances() |
Manage multiple sessions |
get_instance_state() |
Full browser state information |
go_back() |
Navigate back in history |
go_forward() |
Navigate forward in history |
reload_page() |
Reload current page |
hot_reload() |
Reload modules without restart |
reload_status() |
Check module reload status |
Element Interaction
| Tool | Description |
|---|---|
query_elements() |
Find elements by CSS/XPath |
click_element() |
Natural clicking |
type_text() |
Human-like typing with newline support |
paste_text() |
Instant text pasting via CDP |
scroll_page() |
Natural scrolling |
wait_for_element() |
Smart waiting |
execute_script() |
Run JavaScript |
select_option() |
Dropdown selection |
get_element_state() |
Element properties |
Element Extraction (CDP-accurate)
| Tool | Description |
|---|---|
extract_complete_element_cdp() |
Complete CDP-based element clone |
clone_element_complete() |
Complete element cloning |
extract_complete_element_to_file() |
Save complete extraction to file |
extract_element_styles() |
300+ CSS properties via CDP |
extract_element_styles_cdp() |
Pure CDP styles extraction |
extract_element_structure() |
Full DOM tree |
extract_element_events() |
React/Vue/framework listeners |
extract_element_animations() |
CSS animations/transitions |
extract_element_assets() |
Images, fonts, videos |
extract_related_files() |
Related CSS/JS files |
File-Based Extraction
| Tool | Description |
|---|---|
extract_element_styles_to_file() |
Save styles to file |
extract_element_structure_to_file() |
Save structure to file |
extract_element_events_to_file() |
Save events to file |
extract_element_animations_to_file() |
Save animations to file |
extract_element_assets_to_file() |
Save assets to file |
clone_element_to_file() |
Save complete clone to file |
list_clone_files() |
List saved clone files |
cleanup_clone_files() |
Clean up old clone files |
Network Debugging and Interception
| Tool | Description |
|---|---|
list_network_requests() |
List captured network requests |
get_request_details() |
Inspect headers and payload for a request |
get_response_content() |
Get response data from a request |
modify_headers() |
Add custom headers to requests |
spawn_browser(block_resources=[...]) |
Block tracking scripts, ads, etc. |
create_dynamic_hook() |
Create Python functions to intercept/modify requests |
create_simple_dynamic_hook() |
Quick hook creation with presets |
list_dynamic_hooks() |
List active hooks with statistics |
get_dynamic_hook_details() |
Inspect hook source code |
remove_dynamic_hook() |
Remove a hook |
get_hook_documentation() |
Request object structure and HookAction types |
get_hook_examples() |
10 detailed examples: blockers, redirects, proxies |
get_hook_requirements_documentation() |
Pattern matching and best practices |
get_hook_common_patterns() |
Ad blocking, API proxying, auth injection |
validate_hook_function() |
Validate hook code before deployment |
CDP Function Execution
| Tool | Description |
|---|---|
execute_cdp_command() |
Direct CDP commands (use snake_case) |
discover_global_functions() |
Find JavaScript functions |
discover_object_methods() |
Discover object methods (93+ methods) |
call_javascript_function() |
Execute any function |
inject_and_execute_script() |
Run custom JS code |
inspect_function_signature() |
Inspect function details |
create_persistent_function() |
Functions that survive reloads |
execute_function_sequence() |
Execute function sequences |
create_python_binding() |
Create Python-JS bindings |
execute_python_in_browser() |
Execute Python code via py2js |
get_execution_contexts() |
Get JS execution contexts |
list_cdp_commands() |
List available CDP commands |
get_function_executor_info() |
Get executor state info |
Progressive Element Cloning
| Tool | Description |
|---|---|
clone_element_progressive() |
Initial lightweight structure |
expand_styles() |
On-demand styles expansion |
expand_events() |
On-demand events expansion |
expand_children() |
Progressive children expansion |
expand_css_rules() |
Expand CSS rules data |
expand_pseudo_elements() |
Expand pseudo-elements |
expand_animations() |
Expand animations data |
list_stored_elements() |
List stored elements |
clear_stored_element() |
Clear specific element |
clear_all_elements() |
Clear all stored elements |
Cookie and Storage
| Tool | Description |
|---|---|
get_cookies() |
Read cookies |
set_cookie() |
Set cookies |
clear_cookies() |
Clear cookies |
get_instance_state() |
localStorage and sessionStorage snapshot |
execute_script() |
Read/modify storage via JS |
Tabs
| Tool | Description |
|---|---|
list_tabs() |
List open tabs |
new_tab() |
Create new tab |
switch_tab() |
Change active tab |
close_tab() |
Close tab |
get_active_tab() |
Get current tab |
Page Analysis and Debugging
| Tool | Description |
|---|---|
take_screenshot() |
Capture screenshots |
get_page_content() |
HTML and metadata |
get_debug_view() |
Debug info with pagination |
clear_debug_view() |
Clear debug logs |
export_debug_logs() |
Export logs (JSON/pickle/gzip) |
get_debug_lock_status() |
Debug lock status |
validate_browser_environment_tool() |
Diagnose platform issues and browser compatibility |
Stealth vs Playwright MCP
| Feature | Stealth Browser MCP | Playwright MCP |
|---|---|---|
| Cloudflare / Queue-It | Consistently bypasses | Commonly blocked |
| Banking / Gov portals | Works | Frequently blocked |
| Social media automation | Full automation | Captchas and bans |
| UI element cloning | CDP-accurate extraction | Limited |
| Network debugging | Full request/response inspection via AI | Basic |
| API reverse engineering | Payload inspection through chat | Manual tools only |
| Dynamic hook system | AI-generated Python functions for real-time interception | Not available |
| Modular architecture | 11 sections, 22–90 tools | Fixed ~20 tools |
| Total tools | 90 (customizable) | ~20 |
Tested on: LinkedIn, Instagram, Twitter/X, Amazon, banking portals, government sites, Cloudflare-protected APIs, Nike SNKRS, Ticketmaster, Supreme.
Troubleshooting
No compatible browser found
Install Chrome, Chromium, or Microsoft Edge. The server auto-detects the first available browser. Run validate_browser_environment_tool() to diagnose.
Tools hang or return malformed JSON
Debug output was printing to stdout, corrupting the MCP JSON-RPC protocol. This was fixed in #8. Pull the latest master branch.
Browser crashes on Linux / Docker / CI
Run with --sandbox=false or ensure your environment supports sandboxing. The server auto-detects root and container environments and adjusts accordingly.
Too many tools cluttering the AI chat
Use --minimal for 22 core tools, or selectively disable sections:
python src/server.py --disable-cdp-functions --disable-dynamic-hooks --disable-progressive-cloning
Module not found errors Make sure you activated the virtual environment and installed dependencies:
pip install -r requirements.txt
Examples
- Market research — Extract pricing and features from competitors, output a comparison table
- UI cloning — Recreate a pricing section with exact fonts, styles, and interactions
- Inventory monitoring — Watch a product page and alert when stock changes
- API reverse engineering — Intercept requests, map endpoints, and inspect data flow
All driven from a single AI agent conversation.
Showcase
Augment Code hero clone — A user asked Claude to clone the hero section from augmentcode.com. The agent spawned a stealth browser, navigated to the site, extracted the complete element via CDP (styles, structure, assets), and generated a pixel-accurate HTML recreation with responsive design and animations. The entire process took under two minutes of conversation.
View the recreation | Full walkthrough
Roadmap
See the live plan in ROADMAP.md. Contributions welcome.
Contributing
Read CONTRIBUTING.md and open a PR. First-time contributors welcome.
If this project saves you time, star the repo — it helps more than you think.
Support
If this tool saved you time or made you money, consider supporting development:
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file iflow_mcp_vibheksoni_stealth_browser_mcp-0.2.6.tar.gz.
File metadata
- Download URL: iflow_mcp_vibheksoni_stealth_browser_mcp-0.2.6.tar.gz
- Upload date:
- Size: 87.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03e3c4c787e8bed17336716516ce0f551901815bca71585b551dccce749ce03f
|
|
| MD5 |
6c80a02c7e9c5f3396a0c1076f63e828
|
|
| BLAKE2b-256 |
2ac69a1a72c9628e755ebc2e8497a02304414bf8f144d1f5962563e8892a83c1
|
File details
Details for the file iflow_mcp_vibheksoni_stealth_browser_mcp-0.2.6-py3-none-any.whl.
File metadata
- Download URL: iflow_mcp_vibheksoni_stealth_browser_mcp-0.2.6-py3-none-any.whl
- Upload date:
- Size: 90.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a4e6b7ba16a6899893b187cdd13f94908274b16077c072385a7e68e796905ed
|
|
| MD5 |
63aa5f59ef7141574e57acf661753aeb
|
|
| BLAKE2b-256 |
c58fb9db2273a602ed7b3ae96bc6e9e66730a86baaac9e8d43f02a5ea6787691
|