Browser MCP Server
Enables AI agents to control browsers with human-like behavior, stealth anti-detection, and 70 tools for navigation, interaction, and monitoring.
README
🌐 Browser MCP Server
The most comprehensive Browser MCP Server for AI agents — 70 tools with human-like behavior, stealth anti-detection, session reuse, multi-browser support, 50+ device presets, and token-optimized outputs.
Built on Playwright + Model Context Protocol.
✨ Key Features
| Feature | Description |
|---|---|
| 🤖 Human-Like Behavior | Bezier curve mouse movements, variable-speed typing, smooth scrolling — evades bot detection |
| 🛡️ Stealth Anti-Detection | WebGL spoofing, canvas fingerprint noise, navigator.webdriver hidden, plugin/language spoofing |
| 🔄 Session Reuse | Connect to existing Chrome via CDP or user-data-dir — keeps cookies, logins, tabs |
| 🌍 Multi-Browser | Chromium, Firefox, WebKit — test across all engines |
| 📱 50+ Device Presets | iPhone, iPad, Pixel, Galaxy, OnePlus, Desktop — full viewport/UA/touch emulation |
| 🌐 Proxy Support | HTTP/HTTPS/SOCKS5 proxy with bypass rules |
| 📊 Network Monitoring | Auto-capture all requests/responses, console logs, filter by type |
| 📸 Visual Annotation | mark_page: numbered boxes on interactive elements — massive token savings |
| 💾 Storage State | Save/load cookies + localStorage for cross-session persistence |
| 🎯 Smart Actions | Natural language commands: "click Login", "type hello into search" |
| 📉 Token Optimized | Compact outputs, configurable truncation — saves 60-80% tokens vs competitors |
| 🎬 Video Recording | Record browser sessions for debugging and replay |
| 📍 Geolocation | Override latitude/longitude for location-based testing |
| 🔒 HTTPS Errors | Ignore certificate errors for internal/staging sites |
🚀 Quick Start
Install
git clone https://github.com/user/browser-mcp-server.git
cd browser-mcp-server
npm install
npx playwright install
npm run build
Run
# Auto-detect: tries CDP on port 9222, falls back to launching a new browser
node dist/index.js
# Connect to existing Chrome (preserves your logged-in sessions)
chrome --remote-debugging-port=9222
node dist/index.js --cdp http://localhost:9222
# Reuse Chrome profile (keeps all cookies, logins, extensions)
node dist/index.js --user-data-dir "C:\Users\you\AppData\Local\Google\Chrome\User Data"
# Launch Firefox with iPhone emulation and proxy
node dist/index.js --browser firefox --device "iPhone 15" --proxy-server http://proxy:8080
VS Code MCP Configuration
Add to .vscode/mcp.json:
{
"servers": {
"browser": {
"type": "stdio",
"command": "node",
"args": ["path/to/browser-mcp-server/dist/index.js"]
}
}
}
Claude Desktop Configuration
Add to claude_desktop_config.json:
{
"mcpServers": {
"browser": {
"command": "node",
"args": ["path/to/browser-mcp-server/dist/index.js"],
"env": {}
}
}
}
🛠️ All 70 Tools
Connection (1)
| Tool | Description |
|---|---|
browser_connect |
Connect to browser (CDP/profile/temp launch). Multi-browser, device emulation, proxy. |
Navigation (5)
| Tool | Description |
|---|---|
navigate |
Navigate to URL with configurable wait conditions |
go_back |
Go back in browser history |
go_forward |
Go forward in browser history |
reload |
Reload current page |
wait_for_navigation |
Wait for page navigation to complete |
Page/Tab Management (4)
| Tool | Description |
|---|---|
list_pages |
List all open tabs |
new_page |
Open new tab (optionally with URL) |
close_page |
Close a tab by ID |
focus_page |
Bring a tab to front/focus |
Interaction — Human-Like (14)
| Tool | Description |
|---|---|
click |
Click element with Bezier curve mouse movement |
type_text |
Type with human-like keystroke timing |
fill_form |
Fill multiple form fields with natural pauses |
select_option |
Select dropdown option by value or label |
check_checkbox |
Check/uncheck checkbox or radio button |
hover |
Hover with natural mouse movement |
press_key |
Press key or combo (Enter, Ctrl+C, Tab, etc.) |
scroll |
Scroll with smooth human-like motion |
scroll_to_element |
Scroll element into view |
wait_for_element |
Wait for element to appear/disappear |
wait_for_text |
Wait for specific text on page |
drag_and_drop |
Drag element to target with natural motion |
upload_file |
Upload file(s) to input |
handle_dialog |
Accept or dismiss browser dialogs |
Reading/Observation — Token-Optimized (14)
| Tool | Description |
|---|---|
get_page_content |
Get visible text (default 4000 chars) |
get_page_html |
Get HTML (truncated to save tokens) |
get_element_text |
Get element text content |
get_element_attribute |
Get element attribute value |
get_element_value |
Get form element value |
element_exists |
Quick true/false existence check |
element_count |
Count elements matching selector |
get_bounding_box |
Get element position and size |
take_screenshot |
Screenshot page or element (PNG/base64) |
get_accessibility_tree |
Compact ARIA accessibility tree |
get_form_elements |
List form elements (compact format) |
get_links |
List page links (deduplicated) |
get_table_data |
Extract table data as structured JSON |
evaluate_javascript |
Run JavaScript in page context |
Cookies & Storage (10)
| Tool | Description |
|---|---|
get_cookies |
Get cookies (compact format) |
set_cookies |
Set cookies |
clear_cookies |
Clear all cookies |
get_local_storage |
Get localStorage |
set_local_storage |
Set localStorage key-value pairs |
get_session_storage |
Get sessionStorage |
set_session_storage |
Set sessionStorage key-value pairs |
clear_storage |
Clear localStorage, sessionStorage, or both |
save_storage_state |
Save cookies + localStorage to JSON file |
load_storage_state |
Load cookies + localStorage from JSON file |
Network Monitoring & Control (8)
| Tool | Description |
|---|---|
wait_for_network_idle |
Wait for all network requests to finish |
wait_for_url |
Wait for URL to match pattern |
wait_for_response |
Wait for network response matching URL |
wait_for_request |
Wait for network request matching URL |
get_network_log |
Get captured network requests/responses |
get_console_logs |
Get captured console messages |
block_urls |
Block URLs by pattern (ads, trackers, etc.) |
set_extra_headers |
Set custom HTTP headers |
Device & Viewport (3)
| Tool | Description |
|---|---|
set_viewport |
Set viewport size for responsive testing |
emulate_device |
Emulate device (50+ presets) |
list_devices |
List all available device presets |
Geolocation & Permissions (3)
| Tool | Description |
|---|---|
set_geolocation |
Override browser geolocation |
grant_permissions |
Grant browser permissions |
clear_permissions |
Clear all granted permissions |
Frame/iFrame Support (3)
| Tool | Description |
|---|---|
list_frames |
List all frames on the page |
execute_in_frame |
Run JavaScript in a specific frame |
click_in_frame |
Click element inside a frame |
PDF (1)
| Tool | Description |
|---|---|
save_as_pdf |
Save page as PDF (A4, Letter, etc.) |
Visual Annotation — mark_page (5)
| Tool | Description |
|---|---|
mark_page |
Annotate page with numbered boxes on interactive elements |
unmark_page |
Remove annotations |
click_element |
Click by index from mark_page |
type_into_element |
Type into element by index from mark_page |
mark_page_and_screenshot |
Mark + screenshot (best for visual agents) |
Smart Tools (2)
| Tool | Description |
|---|---|
get_page_summary |
Ultra-compact page summary (minimal tokens) |
smart_action |
Natural language browser action |
Browser Management (2)
| Tool | Description |
|---|---|
get_browser_info |
Get browser config details |
close_browser |
Close browser and cleanup |
📱 Supported Device Presets (50+)
iPhones: SE, 12 Mini, 12, 12 Pro, 12 Pro Max, 13, 13 Pro, 14, 14 Pro, 14 Pro Max, 15, 15 Pro, 15 Pro Max, 16 Pro Max
iPads: Mini, Air, Pro 11, Pro 12.9, 10th Gen
Android: Pixel 5, 6, 7, 8 Pro, Galaxy S21, S23 Ultra, Z Fold 5, A54, OnePlus 12, Moto G, Xiaomi 14, Huawei P60
Desktop: Chrome 1920x1080, Chrome 1440, Firefox, Safari, Edge, Small Laptop, Ultrawide
Landscape: iPhone Landscape, iPad Landscape, Android Landscape
🔧 CLI Options
CONNECTION:
--cdp <url> Connect via Chrome DevTools Protocol
--user-data-dir <path> Launch browser with user profile
--executable-path <path> Path to browser executable
BROWSER:
--browser <engine> chromium, firefox, or webkit (default: chromium)
--headless Run in headless mode
--timeout <ms> Default action timeout (default: 30000)
VIEWPORT & DEVICE:
--viewport <WxH> Viewport size, e.g. 1920x1080
--device <name> Emulate device preset
NETWORK:
--proxy-server <url> Proxy URL
--proxy-bypass <domains> Domains to bypass proxy
--ignore-https-errors Ignore HTTPS certificate errors
--block-service-workers Block service workers
CONTEXT:
--user-agent <string> Custom user agent
--locale <locale> Browser locale (e.g. en-US)
--timezone <tz> Timezone (e.g. America/New_York)
--color-scheme <scheme> light, dark, or no-preference
--geolocation <lat,lng> Override geolocation
--permissions <list> Comma-separated permissions
SESSION:
--storage-state <path> Load session from JSON file
VIDEO:
--record-video Record browser session
--video-dir <path> Video output directory
Environment Variables
| Variable | CLI Equivalent |
|---|---|
BROWSER_CDP_URL |
--cdp |
BROWSER_USER_DATA_DIR |
--user-data-dir |
BROWSER_EXECUTABLE_PATH |
--executable-path |
BROWSER_ENGINE |
--browser |
BROWSER_PROXY |
--proxy-server |
🐳 Docker
docker build -t browser-mcp-server .
docker run -i browser-mcp-server
docker run -i browser-mcp-server --headless --browser chromium
🏗️ Architecture
src/
├── index.ts # CLI entry point, MCP server setup
├── browser-manager.ts # Browser lifecycle, multi-engine, stealth, tracking
├── tools.ts # All 70 MCP tools with human-like behavior
├── resources.ts # 6 MCP resources (page, cookies, console, network, etc.)
├── human.ts # Human behavior engine (Bezier curves, natural typing)
├── devices.ts # 50+ device emulation presets
├── utils.ts # Shared utilities (selectors, accessibility, text extraction)
└── mark_page.js # Page annotation script (numbered interactive elements)
🔒 Anti-Detection Features
navigator.webdriverset tofalse- Chrome runtime spoofed
- Permissions query overridden
- Plugins and languages spoofed
- WebGL vendor/renderer overridden (Intel Iris)
- Canvas fingerprint noise injection
connection.rttconsistency- Automation command-line flags disabled
- Human-like timing on all interactions
📊 Competitive Advantage
| Feature | This Server | Playwright MCP (Microsoft) | mcp-playwright | Browserbase MCP |
|---|---|---|---|---|
| Human-like behavior | ✅ Bezier curves | ❌ | ❌ | ❌ |
| Stealth anti-detection | ✅ Full suite | ❌ | ❌ | ❌ |
| Session reuse (CDP) | ✅ | ✅ | ❌ | ❌ (cloud) |
| Multi-browser | ✅ 3 engines | ✅ | ✅ | ❌ |
| Device emulation | ✅ 50+ presets | ❌ | ✅ 143 | ❌ |
| Token optimization | ✅ Compact outputs | ❌ | ❌ | ❌ |
| Network monitoring | ✅ Auto-capture | ❌ | ❌ | ❌ |
| mark_page annotation | ✅ | ❌ | ❌ | ❌ |
| Smart natural actions | ✅ | ❌ | ❌ | ❌ |
| Console log capture | ✅ Auto | ✅ | ❌ | ❌ |
| Video recording | ✅ | ❌ | ✅ | ✅ |
| iframe support | ✅ | ✅ | ❌ | ❌ |
| Total tools | 70 | ~20 | ~30 | ~15 |
📄 License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。