capmonster-mcp-patchright
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| STEALTH_PLAYWRIGHT_USER_DATA_DIR | No | Override the default persistent profile directory path. Defaults to ~/.maestro/stealth-playwright-mcp/profiles/default | ~/.maestro/stealth-playwright-mcp/profiles/default |
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_startB | Start a browser session. Defaults to patchright chromium headed Chrome with a persistent profile. |
| browser_statusB | Return current browser status. |
| browser_navigateC | Navigate the active page to a URL. |
| browser_new_pageA | Open a new page/tab and make it active. Optionally navigate to a URL. |
| browser_pagesA | List open pages/tabs with ids, active state, URL, and title. |
| browser_switch_pageA | Switch the active page/tab by pageId from browser_pages. |
| browser_close_pageA | Close a page/tab by pageId, or the active page if omitted. |
| browser_snapshotA | Return a distilled AI-oriented aria snapshot (verbose /url lines dropped and data: URLs collapsed to save tokens). Use [ref=eN] values with browser_click/fill/type/hover/press/wait_for. |
| browser_findA | Search the current page's aria snapshot for text or a regex. Returns matching nodes with their [ref] and a few lines of surrounding context — cheaper than a full browser_snapshot when you only need to locate an element. |
| browser_take_screenshotB | Take a screenshot. Returns base64 if path is omitted. |
| browser_clickC | Click an element by CSS selector or aria ref from browser_snapshot. |
| browser_fillC | Fill an input by CSS selector or aria ref from browser_snapshot. |
| browser_typeA | Type text into an element (CSS selector or aria ref) with human-like input: real per-key events, real Shift keyDown/up for capitals & symbols, variable dwell and inter-key gaps. Verifies the result against the request for input/textarea and errors on mismatch. |
| browser_hoverA | Hover an element by CSS selector or aria ref from browser_snapshot. |
| browser_press_keyC | Press a keyboard key, optionally focused on a selector or aria ref first. |
| browser_wait_forB | Wait for time or for selector/ref state. If no selector/ref, waits timeout milliseconds. |
| browser_evaluateA | Evaluate JavaScript in the active page. Pass 'function' for a function body, 'expression' for a plain expression, or 'script' (deprecated). By default JS runs in an isolated stealth world (DOM is shared, but the page's own window globals are NOT visible). Set world:'main' to run in the page's real world — required to read or call globals the page defined (e.g. a page-registered callback). Pass frameSelector to run inside a specific iframe (including cross-origin ones, e.g. a captcha widget hosted on a different domain) instead of the top-level page — same CSS selector browser_click/browser_fill/browser_type already accept. |
| browser_fingerprint_checkB | Collect browser fingerprint diagnostics from the active page. |
| browser_navigate_backB | Navigate back in browser history. |
| browser_select_optionA | Select options from a element by CSS selector or aria ref. |
| browser_handle_dialogB | Accept or dismiss a JavaScript dialog (alert / confirm / prompt). |
| browser_file_uploadA | Upload files to a by CSS selector or aria ref. |
| browser_network_requestsA | List captured network requests. Set activeOnly=true for in-flight only. |
| browser_network_requestA | Get details for a single network request by stable id from browser_network_requests. Legacy zero-based index is also accepted. |
| browser_console_messagesB | List captured console messages (log / warn / error etc.). |
| browser_resizeA | Resize the active page viewport. |
| browser_dragB | Drag an element from source to target by CSS selector or aria ref. |
| browser_fill_formB | Fill multiple form fields at once. Each field needs selector or ref, and value. |
| browser_run_code_unsafeB | Execute arbitrary JavaScript in page context. Prefer browser_evaluate when possible. Runs in the isolated stealth world by default; set world:'main' to run in the page's real world (page-defined window globals visible/callable). |
| browser_add_init_scriptA | Register JavaScript that runs before any page script, on every navigation (Playwright's page.addInitScript — always in the page's main world). Unlike browser_evaluate, this is proactive: it wins the race against a site's own inline (e.g. Cloudflare/Turnstile checks that run synchronously on document parse), which a reactive evaluate call issued over the MCP connection cannot. Call this BEFORE browser_navigate to the target URL — it has no effect on a page already loaded, only on the page it's called on and future navigations of that same page. Scoped to the current page only. |
| browser_network_state_setA | Set network state: pass offline=true to simulate offline, offline=false to restore connectivity. |
| browser_api_requestA | Make an HTTP request reusing the browser session's cookies/storage (authenticated API calls without re-login). Returns status, headers, and body. |
| browser_get_visible_textA | Get the visible text (document.body.innerText) of the active page. Lighter than a full aria snapshot. |
| browser_get_visible_htmlB | Get page HTML, optionally scoped to a selector. Strips script/style/svg by default for token efficiency. |
| browser_iframe_clickA | Shorthand for clicking inside an iframe. (Most tools now accept a frameSelector directly — prefer browser_click with frameSelector.) |
| browser_iframe_fillA | Shorthand for filling inside an iframe. (Most tools now accept a frameSelector directly — prefer browser_fill with frameSelector.) |
| browser_route_blockA | Block requests by resource type and/or URL pattern (e.g. block images/fonts/media to speed up loads and shrink fingerprint surface). Applies to all pages in the context. |
| browser_route_mockA | Mock matching requests with a canned response (fulfill). Useful for stubbing APIs or bypassing endpoints. |
| browser_route_clearA | Remove all active block/mock routes. |
| browser_storage_saveA | Export current session (cookies + localStorage) as a Playwright storageState. Saves to path, or returns the state JSON if path omitted. |
| browser_storage_loadA | Restore a session from a storageState (cookies + localStorage). Provide a file path or an inline state object. Note: localStorage restore navigates to each origin. |
| browser_cookie_listA | List cookies in the current session, optionally filtered by domain and/or path. |
| browser_cookie_getA | Get a single cookie by name. Returns null if not present. |
| browser_cookie_setA | Set a cookie with optional flags. Provide url, or domain (path defaults to /). If neither given, the active page's origin is used. |
| browser_cookie_deleteC | Delete cookies by name, optionally narrowed by domain/path. |
| browser_cookie_clearA | Clear all cookies in the current session. |
| browser_localstorage_listA | List all localStorage key-value pairs for the active page's origin. |
| browser_localstorage_getB | Get a localStorage item by key. Returns null if absent. |
| browser_localstorage_setB | Set a localStorage item on the active page's origin. |
| browser_localstorage_deleteB | Delete a localStorage item by key. |
| browser_localstorage_clearA | Clear all localStorage for the active page's origin. |
| browser_sessionstorage_listA | List all sessionStorage key-value pairs for the active page's origin. |
| browser_sessionstorage_getB | Get a sessionStorage item by key. Returns null if absent. |
| browser_sessionstorage_setC | Set a sessionStorage item on the active page's origin. |
| browser_sessionstorage_deleteB | Delete a sessionStorage item by key. |
| browser_sessionstorage_clearA | Clear all sessionStorage for the active page's origin. |
| browser_passkey_installA | Install Patchright's virtual WebAuthn authenticator in the current browser context. Call before a page first uses navigator.credentials. |
| browser_passkey_createA | Generate or import a virtual passkey. To import, provide all four key-material fields. Private keys are omitted unless includePrivateKey=true. |
| browser_passkey_listA | List virtual passkeys, optionally filtered by rpId or credential id. Private keys are omitted unless includePrivateKey=true. |
| browser_passkey_deleteA | Delete one virtual passkey by its base64url credential id. |
| browser_video_saveA | Direct the active page's session recording to a specific output path (requires the session to have been started with recordVideo). The .webm finalizes when the page or browser closes. Without a path, returns the pending video location. |
| browser_highlightA | Draw a persistent highlight overlay around an element (by CSS selector or aria ref). Useful for screenshots and video recording to show what the agent is focusing on. Does not affect page behavior. |
| browser_hide_highlightA | Remove highlight overlays. Pass label/selector/ref to remove a specific one, or omit all to clear every highlight. |
| browser_save_blobA | Evaluate JavaScript in the page and write the result straight to a file on disk — the value itself never passes through this tool's response. Use this instead of browser_evaluate whenever you need to get a large/opaque blob (base64 image(s), a full page's HTML, a big JSON dump) out of the live page and into a request body: reading it via browser_evaluate and then re-typing/pasting it into another tool call's arguments (e.g. create_task's imagesBase64/htmlPageBase64) risks silently corrupting it — a dropped character or an unclosed quote partway through a multi-KB string merges what should be several array elements into one, with no clear error. Pass 'function' or 'expression' (same as browser_evaluate); pass encoding:'base64' when the value is a base64 string (a data:...;base64, prefix is stripped automatically) to write raw decoded bytes, or omit it to write the value as UTF-8 text (non-strings are JSON-stringified). |
| browser_save_pdfB | Render the active page to PDF via CDP (works in headed/stealth mode). Saves to path, or returns base64 if path omitted. |
| browser_closeB | Close the browser session. |
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 66 tools
Most tools fall into clear categories (navigation, input, storage, network), but several pairs overlap: browser_run_code_unsafe duplicates browser_evaluate, and browser_iframe_click/browser_iframe_fill are legacy shorthands for browser_click/browser_fill with frameSelector. The detailed descriptions mitigate confusion, so boundary issues are limited to a handful of cases.
All tools share a consistent browser_ prefix and most follow a verb-object or area-action pattern (cookie_get, storage_save, navigate, click). However, some query tools are noun-named instead of verb-named (browser_status, browser_pages, browser_network_requests) and browser_new_page breaks the verb pattern, so it is not fully uniform.
66 tools is far beyond the 3-15 sweet spot and well past the 25+ threshold for too many, making the server heavy for an agent to navigate. The tools are at least organized into coherent families, but the sheer number and 15 near-identical CRUD micro-tools for cookies/localStorage/sessionStorage inflate the surface.
The browser automation surface is extensive, covering navigation, input, network interception, storage, and passkeys, with only minor browser gaps like reload/forward/scroll. However, the server is branded capmonster and browser_save_blob explicitly references create_task, yet no CapMonster task-creation or result-retrieval tools exist, leaving a notable dead end for the intended captcha workflow.