@apexradius/apex-browser-mcp
v1.5.0
Published
Stealth browser automation + media download MCP — named tabs, CDP, yt-dlp, screenshots, transcripts for YouTube/Instagram/TikTok/Facebook
Maintainers
Readme
apex-browser-mcp
Stealth browser automation MCP server for Claude. Replaces both @playwright/mcp and chrome-devtools-mcp with a single package — one Chrome instance, one config, one tool surface.
Why this over @playwright/mcp:
- Engine-level stealth via
rebrowser-playwright— passes Cloudflare/DataDome detection - Named tab management with per-tab mutex (concurrent-safe)
- Full CDP access alongside high-level Playwright API
browser_snapshot_optimizedreturns only interactive elements (~80% fewer tokens)- Element-level screenshots with
browser_inspect_element
Install
npm install -g @apexradius/apex-browser-mcp
npx playwright install chromiumClaude Code Config
Add to your ~/.mcp.json:
{
"mcpServers": {
"apex-browser": {
"command": "apex-browser-mcp",
"args": []
}
}
}Options
| Flag | Default | Description |
|------|---------|-------------|
| --headless | false | Run headless (disables GPU fingerprint) |
| --user-data-dir | ~/.apex-browser-data | Chrome profile directory |
| --viewport | 1280x720 | Viewport size (WxH) |
| --timeout | 15000 | Action timeout (ms) |
| --nav-timeout | 120000 | Navigation timeout (ms) |
| --attach | — | Attach to running Chrome (ws://... or localhost:9222) |
Env var overrides: APEX_BROWSER_HEADLESS, APEX_BROWSER_VIEWPORT, APEX_BROWSER_TIMEOUT, APEX_BROWSER_USER_DATA_DIR
Tools
All tools accept optional tab_id (default: "default").
Navigation
| Tool | Parameters | Description |
|------|-----------|-------------|
| browser_navigate | url, tab_id? | Navigate to URL |
| browser_navigate_back | tab_id? | Go back |
| browser_navigate_forward | tab_id? | Go forward |
| browser_reload | tab_id? | Reload |
| browser_wait_for | condition, value?, tab_id? | Wait for selector/url/networkIdle/load |
Interaction
| Tool | Parameters | Description |
|------|-----------|-------------|
| browser_click | selector, tab_id? | Click element |
| browser_type | selector, text, tab_id? | Type into element |
| browser_fill_form | fields[], tab_id? | Fill multiple fields at once |
| browser_select_option | selector, value, tab_id? | Select dropdown |
| browser_press_key | key, tab_id? | Press keyboard key |
| browser_hover | selector, tab_id? | Hover over element |
| browser_drag | sourceSelector, targetSelector, tab_id? | Drag and drop |
| browser_file_upload | selector, filePath, tab_id? | Upload file |
| browser_handle_dialog | action, promptText?, tab_id? | Accept/dismiss dialog |
Capture
| Tool | Parameters | Description |
|------|-----------|-------------|
| browser_snapshot | tab_id? | Full accessibility tree |
| browser_snapshot_optimized | tab_id? | Interactive elements only (~80% fewer tokens) |
| browser_take_screenshot | fullPage?, tab_id? | Screenshot (base64 PNG) |
| browser_inspect_element | selector, tab_id? | Screenshot of specific element |
| browser_console_messages | tab_id? | Console log/error messages |
| browser_network_requests | tab_id? | Intercepted network requests |
Scripting
| Tool | Parameters | Description |
|------|-----------|-------------|
| browser_evaluate | script, tab_id? | Execute JavaScript |
| browser_trace_start | outputPath, tab_id? | Start Playwright trace |
| browser_trace_stop | tab_id? | Stop and save trace |
Tab Management
| Tool | Parameters | Description |
|------|-----------|-------------|
| browser_tabs | — | List all named tabs |
| browser_new_tab | tab_id, url? | Create named tab |
| browser_close_tab | tab_id | Close tab |
| browser_resize | width, height, tab_id? | Resize viewport |
| browser_attach | endpoint | Attach to running Chrome |
| browser_set_stealth_profile | profile | standard/aggressive/camoufox |
CDP / Advanced
| Tool | Parameters | Description |
|------|-----------|-------------|
| cdp_send | method, params?, tab_id? | Raw CDP command |
| browser_performance | tab_id? | Performance metrics |
| browser_intercept_network | patterns[], tab_id? | Network request interception |
| browser_mouse_move | x, y, tab_id? | Move mouse |
| browser_mouse_click | x, y, button?, tab_id? | Click at coordinates |
| browser_mouse_wheel | deltaX, deltaY, tab_id? | Scroll |
| browser_mouse_drag | startX, startY, endX, endY, tab_id? | Low-level drag |
Examples
Multi-tab research:
browser_new_tab(tab_id="docs", url="https://docs.example.com")
browser_new_tab(tab_id="app", url="https://app.example.com")
browser_snapshot_optimized(tab_id="docs") # lightweight read
browser_click(selector="#submit", tab_id="app")Network interception + CDP performance:
browser_intercept_network(patterns=["**/*.js"], tab_id="default")
browser_navigate(url="https://example.com")
browser_performance() # CPU time, layout, scripting metricsElement-level screenshot for vision:
browser_inspect_element(selector=".error-message")License
MIT — Apex Radius Labs
