real-browser-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HEADLESS | No | Run browser headless (no visible window). Values: true/false/1/0/yes/no. | auto (CI + no-display detection) |
| TURNSTILE | No | Assist with Cloudflare Turnstile challenges. Values: true/false/1/0/yes/no/on/off. | false |
| AI_HEALING | No | Auto-repair broken CSS selectors in click/type. Values: true/false/1/0/yes/no/on/off. | true |
| ENABLE_BLOCKER | No | Block ads and trackers. Values: true/false/1/0/yes/no/on/off. | true |
| CHROME_NO_SANDBOX | No | Force-disable or force-enable the Chromium OS sandbox. Values: true/1/yes/false/0. | auto (CI/root detection) |
| REAL_BROWSER_LOG_LEVEL | No | Structured JSON log verbosity. Values: debug/info/warn/error. | info |
| REAL_BROWSER_VIDEO_DIR | No | Where recordVideo writes .webm recordings. | $TMPDIR/real-browser-mcp/videos |
| REAL_BROWSER_USER_AGENT | No | Override/rotate the browser User-Agent. A comma-separated list rotates one entry per browser_init call. | auto (built from Chromium version) |
| REAL_BROWSER_ALLOW_DECRYPT | No | Opt-in for extract_data's auto key-discovery AES conversion. Values: true/1/yes. | off |
| REAL_BROWSER_SEND_PROGRESS | No | Emit notifications/progress JSON-RPC messages to the MCP client. Values: true/1. | off |
| REAL_BROWSER_TOOL_TIMEOUT_MS | No | Hard watchdog budget per tool call in milliseconds (integer). | 120000 |
| REAL_BROWSER_ALLOW_PRIVATE_NETWORK | No | Allow navigate/replay_request/redirect_tracer to target localhost/private IPs (off by default — SSRF guard). Values: true/1/yes. | off |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| browser_initB | Initialize a browser session with configurable options: headless mode, proxy, viewport, video recording, resource filtering, biometric anti-detection hardware spoofing (WebGL, Canvas, AudioContext), and WebRTC leak protection. Automatically recovers stale sessions. |
| navigateB | Navigate to a URL or manage browser tabs (list, switch, new tab, close tab). Supports configurable wait conditions, timeout, automatic retry on failure, and waitForChallenge to auto-solve Cloudflare-style JS challenges. |
| get_contentB | Get page content in multiple formats: html, text, markdown, rawHttp, or elements. Extracts text, attributes, or bounding box coordinates. Can save directly to a file. |
| waitB | Wait for a selector, navigation event, networkidle state, or a fixed timeout before continuing. |
| clickA | Click or drag a page element by CSS selector or annotation ID. Supports drag-and-drop / slider manipulation via dragTo, iframe context, hover before click, video player API, and automatic retry with fallback selectors. |
| typeB | Type text into an input field with configurable keystroke delay, field clearing, and iframe support. |
| browser_closeA | Close the browser session and release all browser resources. |
| solve_captchaB | Automate form completion and interactive widget verification on web pages. Supports JavaScript-based challenge widgets, image text transcription, and intelligent form field mapping for QA and automated browsing workflows. |
| random_scrollA | Scroll the page with configurable direction, amount, and automatic lazy-load triggering. |
| redirect_tracerA | Trace the complete redirect chain of a URL. Tracks HTTP 301/302, JavaScript navigation (window.location, setTimeout), and meta refresh tags. Returns the full path with status codes and headers. |
| extract_dataB | Extract structured data from the current page in multiple modes: regex, json, meta, structured, auto, apiDiscovery, parse (string conversion), transform (data format conversion), or links (all links including nested iframes). |
| press_keyC | Press keyboard keys with configurable modifier keys, repeat count, and keystroke delay. |
| deep_analysisA | Inspect the current page in depth: DOM structure, scripts, stylesheets, accessibility, performance metrics, SEO tags, response headers, loaded technologies, and content-loading strategy recommendations. |
| network_recorderB | Record, inspect, and control network activity. Supports 14 actions: start, stop, get, clear, get_media, get_navigations, get_api_calls, get_intercepted_apis, get_websockets, get_graphql, export_har, block_urls (block images/trackers to boost speed 3x-5x), mock_route (intercept & mock API responses), clear_routes. |
| media_extractorB | Extract and control media from the current page. Supports 6 actions: extract (find video/audio/HLS/DASH/download URLs including nested iframes), list_iframes, switch_iframe, player_control (play/pause/seek/sources via player API), decode_url (inspect converted string and token formats), batch_extract. |
| execute_jsA | Execute custom JavaScript in the page context with async support, return value capture, and iframe targeting. Also supports action="fetch" to replay HTTP requests with the page session (cookies/auth inherited, 30s timeout, structured status/headers/body output). |
| storage_inspectorA | Inspect and manage client-side storage & sessions. Supports 7 actions: cookies (get all current cookies), save_session (persist cookies & storage state to file), load_session (restore state from file without re-logging), clear_cookies, autosave (auto-save session on every navigation), indexeddb, service_workers. |
| see_pageA | Capture a snapshot of the current page. Returns a screenshot image together with optional full-page text, an interactive element map (buttons, links, inputs with position and selector), and an iframe inventory — all in a single call. Workflow: Call once with fullPage:true and annotate:true. From that snapshot, run all planned actions (click, type, scroll, wait, extract) as a steps array without re-capturing the page. Call see_page again only when the page genuinely changes (new navigation, modal, or dynamic content load). |
| async_jobA | Poll or cancel background jobs started with async:true on media_extractor batch_extract, see_page steps, or execute_js. Read-only except cancel. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
Core interaction tools (click, type, press_key, wait, navigate) are clearly distinct, but the read/extract cluster overlaps heavily: get_content, extract_data, see_page, and deep_analysis all retrieve page information, and an agent must read long descriptions to choose. Several tools (network_recorder, media_extractor, storage_inspector, extract_data) bundle many actions behind one name, adding internal selection ambiguity.
Most names are snake_case, but conventions are mixed: noun-first compounds (browser_init, browser_close), verb-first (get_content, execute_js), and bare verbs (wait, navigate, click, type). Individually readable, yet there is no single predictable pattern to infer names.
19 tools is on the heavy side for a browser automation server, and the multi-action mega-tools effectively expand the surface well beyond 19. Most tools are justified by real capabilities, but some inspection tools could be folded into see_page/extract_data.
The lifecycle is well covered: init/close, navigation and tabs, interaction, scrolling, waiting, content/media/network/storage extraction, captcha, redirect tracing, and async jobs. Minor gaps exist for dropdown selection, file upload, and dialog/alert handling, but agents can work around these with execute_js.