loading…
Search for a command to run...
loading…
Enables undetectable web scraping and browser automation for AI agents with 84 tools including stealth navigation, element extraction, network interception, and
Enables undetectable web scraping and browser automation for AI agents with 84 tools including stealth navigation, element extraction, network interception, and auto cookie consent dismissal. Bypasses anti-bot systems like Cloudflare and DataDome while providing LLM-ready markdown output and full Chrome DevTools Protocol access.

The most complete stealth browser MCP server for AI agents.
84 tools. Undetectable by anti-bot systems. Full CDP access.
LLM-ready markdown. Auto cookie consent dismiss (100+ CMPs).
Accessibility snapshots, PDF export, HAR capture, network hooks, element cloning.
An MCP server that gives AI agents (Claude, Cursor, Windsurf, etc.) a fully undetectable browser with 84 automation tools. Built on nodriver + Chrome DevTools Protocol + FastMCP.
Why not Playwright MCP? Playwright is detectable. Sites with Cloudflare, DataDome, or any anti-bot system will block it. ScrapeLab uses nodriver (the successor of undetected-chromedriver) — no navigator.webdriver flag, no automation fingerprints, no detection.
| Feature | ScrapeLab MCP | Playwright MCP | Stealth Browser MCP |
|---|---|---|---|
| Anti-bot bypass (Cloudflare, DataDome) | Yes | No | Yes |
| Markdown output (LLM-ready) | Yes | Yes | No |
| Cookie consent auto-dismiss (100+ CMPs) | Yes | No | No |
| Accessibility snapshots | Yes | Yes | No |
| PDF export | Yes | Yes | No |
| HAR export | Yes | No | No |
| Network interception + hooks | Deep (Python hooks) | Routes only | Deep |
| Element cloning (styles, events, animations) | Full CDP | No | Full CDP |
| Progressive element cloning | Yes | No | Yes |
| Tools | 84 | 61 | 90 |
| Modular sections (enable/disable) | Yes | Capabilities | Yes |
get_page_content returns clean markdown instead of raw HTML — 98-99% smaller, ready for LLM consumption.
| Mode | Engine | Best for | Size reduction |
|---|---|---|---|
readability=False (default) |
html2text | Full page structure, navigation, all content | ~98% |
readability=True |
trafilatura | Article/main content only, precision extraction | ~99% |
Both modes strip scripts, styles, SVGs, cookie banners, navigation chrome, and HTML comments before conversion.
Every navigate call automatically dismisses cookie/GDPR consent popups. No manual clicks, no leftover overlays blocking your scraper.
Three-layer system:
_sp_.destroyMessages(), OneTrust.AllowAll(), __tcfapi, Didomi, Cookiebot) — handles cross-origin iframe popups like SourcePointDisable per-instance with spawn_browser(auto_dismiss_consent=False).
git clone https://github.com/competitorch/ScrapeLabMCP.git
cd ScrapeLabMCP
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"scrapelab-mcp": {
"command": "/path/to/ScrapeLabMCP/.venv/bin/python",
"args": ["/path/to/ScrapeLabMCP/src/server.py"]
}
}
}
Claude Code CLI:
claude mcp add-json scrapelab-mcp '{
"type": "stdio",
"command": "/path/to/.venv/bin/python",
"args": ["/path/to/src/server.py"]
}'
You: "Open a browser and navigate to example.com"
You: "Take a screenshot and get the accessibility snapshot"
You: "Get the page content as markdown"
You: "Export the page as PDF"
You: "Show me all network requests and export as HAR"
| Tool | Description |
|---|---|
spawn_browser |
Launch undetectable browser instance (headless, proxy, custom UA, auto-consent) |
navigate |
Navigate to URL with wait conditions + auto cookie consent dismiss |
close_instance |
Clean shutdown of browser instance |
list_instances |
List all active browser instances |
get_instance_state |
Full page state (URL, cookies, storage, viewport) |
go_back / go_forward |
Browser history navigation |
reload_page |
Reload with optional cache bypass |
get_accessibility_snapshot |
Structured accessibility tree — the fastest way for an LLM to understand a page |
save_as_pdf |
Export page as PDF with full layout control |
| Tool | Description |
|---|---|
query_elements |
Find elements by CSS/XPath with visibility info |
click_element |
Natural click with fallback strategies |
type_text |
Human-like typing |
paste_text |
Instant paste via CDP |
scroll_page |
Directional scrolling |
wait_for_element |
Smart wait with timeout |
execute_script |
Run JavaScript in page context |
select_option |
Dropdown selection |
get_element_state |
Element properties and bounding box |
take_screenshot |
Screenshot (viewport, full page, or element) |
get_page_content |
HTML, text, or markdown (readability=True for article extraction) |
Deep extraction with optional save_to_file=True on every tool.
Style extraction supports method="js" or method="cdp" for maximum accuracy.
| Tool | Description |
|---|---|
extract_element_styles |
300+ CSS properties, pseudo-elements, inheritance chain |
extract_element_structure |
DOM tree, attributes, data attributes, children |
extract_element_events |
Event listeners, inline handlers, framework detection |
extract_element_animations |
CSS animations, transitions, transforms, keyframes |
extract_element_assets |
Images, backgrounds, fonts, icons, videos |
extract_related_files |
Linked CSS/JS files, imports, modules |
clone_element_complete |
Master clone: all of the above in one call (method="comprehensive" or "cdp") |
Lazy-load element data on demand — start lightweight, expand what you need.
| Tool | Description |
|---|---|
clone_element_progressive |
Base structure with element_id for on-demand expansion |
expand_styles / expand_events / expand_children |
Expand specific data categories |
expand_css_rules / expand_pseudo_elements / expand_animations |
Expand detailed styling data |
list_stored_elements / clear_stored_element / clear_all_elements |
Manage stored elements |
Deep network monitoring with interception, search, and standard export formats.
| Tool | Description |
|---|---|
list_network_requests |
All captured requests with type filtering |
get_request_details / get_response_details / get_response_content |
Inspect individual requests |
search_network_requests |
Search by URL pattern, method, status, body content |
modify_headers |
Modify request headers for future requests |
set_network_capture_filters / get_network_capture_filters |
Control what gets captured |
export_network_data / import_network_data |
JSON export/import |
export_har |
Export as HAR 1.2 — importable in Chrome DevTools, Postman, Fiddler |
AI-generated Python functions that intercept and modify network traffic in real-time.
| Tool | Description |
|---|---|
create_dynamic_hook |
Full hook with custom Python function |
create_simple_dynamic_hook |
Template hook (block, redirect, add_headers, log) |
list_dynamic_hooks / get_dynamic_hook_details / remove_dynamic_hook |
Manage hooks |
get_hook_documentation |
Docs for writing hooks (overview, requirements, examples, patterns) |
validate_hook_function |
Validate hook code before deploying |
Direct Chrome DevTools Protocol access for advanced automation.
| Tool | Description |
|---|---|
execute_cdp_command |
Raw CDP command execution |
discover_global_functions / discover_object_methods |
Discover page APIs |
call_javascript_function / execute_function_sequence |
Call JS functions |
inject_and_execute_script |
Inject and run scripts |
inspect_function_signature |
Inspect function signatures |
create_persistent_function |
Functions that survive navigation |
create_python_binding / execute_python_in_browser |
Python-in-browser via py2js |
get_execution_contexts / list_cdp_commands / get_function_executor_info |
CDP introspection |
| Tool | Description |
|---|---|
get_cookies / set_cookie / clear_cookies |
Cookie management |
| Tool | Description |
|---|---|
new_tab / list_tabs / switch_tab / close_tab / get_active_tab |
Full tab lifecycle |
| Tool | Description |
|---|---|
get_debug_view / clear_debug_view / export_debug_logs / get_debug_lock_status |
Debug system |
validate_browser_environment_tool |
Diagnose platform and browser issues |
Load only what you need:
# Full suite (84 tools)
python src/server.py
# Core only — browser + element interaction
python src/server.py --minimal
# Disable specific sections
python src/server.py --disable-cdp-functions --disable-progressive-cloning
# List all sections
python src/server.py --list-sections
| Section | Tools | Description |
|---|---|---|
browser-management |
10 | Core browser ops, accessibility, PDF |
element-interaction |
11 | Click, type, scroll, screenshot, markdown |
element-extraction |
8 | Deep element cloning with save_to_file |
network-debugging |
12 | Network monitoring, HAR export |
cdp-functions |
12 | Raw CDP access |
progressive-cloning |
10 | Lazy element expansion |
cookies-storage |
3 | Cookie management |
tabs |
5 | Tab management |
debugging |
5 | Debug tools |
dynamic-hooks |
7 | Network hook system |
| Variable | Default | Description |
|---|---|---|
SCRAPELAB_IDLE_TIMEOUT |
5 |
Minutes before idle browser instances are auto-closed |
PORT |
8000 |
Port for HTTP/SSE transport |
No compatible browser found — Install Chrome, Chromium, or Edge. Run validate_browser_environment_tool() to diagnose.
Too many tools for your use case — Use --minimal or --disable-<section>.
Browser instances piling up — Instances auto-close after 5 minutes of inactivity (configurable via SCRAPELAB_IDLE_TIMEOUT).
MIT — see LICENSE.
Built by Edoardo Nardi
Stealth engine powered by nodriver
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"scrapelab-mcp": {
"command": "npx",
"args": []
}
}
}