Mithwire MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MITHWIRE_NO_EXIT_GUARD | No | Set to 1 to disable the lightweight watchdog process that terminates launched browsers and removes their temporary profiles if the server is killed outright (SIGKILL, OOM, a crash). |
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 | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| session_startA | Launch a new, isolated browser. By default it is ephemeral (no saved state) and headful. Pass profile= to launch a persistent managed profile whose cookies/storage survive across runs. Optional: headless, proxy, proxy_ref, start_url, cookie_file (one-shot cookie injection). engine selects the browser engine: 'cdp' (default) uses the system Chrome with Mithwire CDP/JS patches; 'stealth' uses a CloakBrowser binary with C++ source-level fingerprint patches for zero-lie stealth (requires pip install mithwire-mcp[stealth]). On unsupported platforms, 'stealth' falls back to 'cdp' with a warning. proxy accepts 'http://host:port', 'http://user:pass@host:port', the provider 'scheme:host:port:user:pass' form, or socks5://host:port (authenticated SOCKS not wired yet; use the HTTP endpoint). It can ALSO be a dict {server, username?, password?, rotation_url?} where rotation_url is an optional provider endpoint that rotates the upstream exit IP when hit. proxy_ref is the alternate form: a name pointing at an entry in the proxy registry (see session_proxy_set). The two are mutually exclusive per session — a literal proxy spec wins over a registry reference. When a proxy is set, the session is REFUSED if the proxy fails a pre-launch reachability + credentials probe (no half-launched browser, no fallback to the host's direct connection). On success, the browser identity defaults to the proxy egress (timezone, locale/languages, Accept-Language, geolocation) so the two never disagree; any field set in fingerprint={...} or in the profile's launch_options wins over the proxy default. Pass fingerprint={...} to override any identity field explicitly (timezone_id, languages, latitude/longitude, user_agent, platform, hardware_concurrency, device_memory, screen, webgl_vendor/webgl_renderer); see session_set_fingerprint. webrtc_leak_protection controls the WebRTC IP-leak guard: 'auto' (default; filters public ICE candidates when proxied so the real IP can't leak via STUN), 'filter' (always filter), 'disable' (remove RTCPeerConnection), or 'off'. skip_probe (default false): skip the pre-launch proxy health check entirely. Useful when the proxy has already been verified externally or when the proxy does not support the HTTPS CONNECT tunnel used by the default probe. Identity defaults (timezone, locale) will be derived via an in-browser lookup after launch. probe_timeout (seconds): override the default 8-second proxy probe timeout. Raise for slow residential/mobile proxies; the probe includes an automatic plain-HTTP fallback for proxies that fail the primary HTTPS/CONNECT path. |
| session_set_fingerprintA | Apply identity/anti-detect overrides to a live session via engine-level CDP where possible (propagates to workers and HTTP headers). Accepts any of: timezone_id, locale, languages (list or comma string), accept_language, latitude/longitude/geo_accuracy, user_agent, platform, hardware_concurrency, device_memory (GB), screen {width,height,device_scale_factor,mobile,max_touch_points}, webgl_vendor, webgl_renderer. Note: navigator.languages is best pinned at launch (--lang) since workers can't be rewritten at runtime; reload the page after this call so new-document JS overrides (deviceMemory, WebGL) take effect everywhere. |
| session_rotate_proxyA | Rotate the upstream exit IP for a session whose proxy was launched with a rotation_url. Hits the provider's rotation endpoint, waits a short settle window for the new IP to take over, re-probes through the proxy to confirm the new egress, and (by default) re-aligns the browser identity — timezone, locale, languages, geolocation — to the new egress. Caller-pinned fingerprint fields from session_start or session_set_fingerprint continue to win over the proxy-derived defaults, just like at launch. Returns old + new egress summaries, the (redacted) rotation endpoint, the rotation response payload, and whether the exit IP actually changed. Fails if the session has no proxy or its proxy has no rotation_url. |
| session_listB | List active browser sessions. |
| session_getC | Get one session summary. |
| session_state_pathsB | Get centralized directories used for profiles, proxies, and cookies. |
| session_profile_listB | List saved browser profiles. |
| session_profile_getB | Get one saved profile by name or account alias. |
| session_profile_setB | Create or update a saved profile. |
| session_profile_regenerate_fingerprintB | Regenerate and persist a new fingerprint for a profile using BrowserForge's Bayesian network. The new fingerprint replaces the profile's stored identity; subsequent launches will use it. Optional os ('windows', 'macos', 'linux') and browser (default 'chrome') control the generated identity's platform family. |
| session_profile_deleteC | Delete profile metadata or entire profile directory. |
| session_proxy_listB | List saved proxy registry entries. |
| session_proxy_getC | Get one proxy registry entry by name. |
| session_proxy_setA | Create or update a proxy registry entry. |
| session_proxy_deleteC | Delete a proxy registry entry by name. |
| session_set_policyC | Set runtime policy for one session. |
| session_get_policyC | Get runtime policy for one session. |
| session_set_download_dirC | Set default download directory for one session. |
| session_trace_startC | Start recording session action trace. |
| session_trace_stopC | Stop recording session action trace. |
| session_trace_getC | Read recorded session trace events. |
| session_trace_exportC | Export recorded trace to a JSON file. |
| session_trace_replayC | Replay a trace file against a session. |
| session_stopC | Stop one session by id. |
| session_stop_allB | Stop all active sessions. |
| browser_urlC | Get current URL and page title. |
| browser_navigateC | Navigate to a URL. |
| browser_backC | Navigate one step back in browser history. |
| browser_forwardC | Navigate one step forward in browser history. |
| browser_reloadC | Reload the current page. |
| browser_tab_listB | List open tabs and the active tab. |
| browser_tab_newC | Open a new tab and optionally switch to it. |
| browser_tab_switchC | Switch active tab by tab_id or index. |
| browser_tab_closeC | Close a tab by tab_id or index. |
| browser_tab_currentC | Get the active tab summary. |
| browser_snapshotC | Return a compact snapshot of interactive elements on the page. |
| browser_queryC | Query DOM elements by CSS selector. |
| browser_clickC | Click the first matching selector. |
| browser_mouse_clickA | Native CDP coordinate click at viewport pixel position (x, y). Unlike browser_click (which uses a CSS selector and JS el.click()), this dispatches Input.dispatchMouseEvent through the browser's input pipeline, producing isTrusted events. Use when you need to click by coordinates — e.g. inside iframes or at positions obtained from screenshots/evaluation. |
| browser_mouse_moveB | Move the mouse cursor to viewport pixel position (x, y) via intermediate mouseMoved CDP events. Useful for creating cursor movement trails before a click or for hover interactions. |
| browser_press_holdA | Sustained mouse press at viewport pixel (x, y) for a given duration. Dispatches mousePressed, emits tiny mouseMoved jitter while holding, then mouseReleased. Use for press-and-hold verification challenges or long-press interactions. |
| browser_typeC | Type text into an input selector. |
| browser_handle_dialogC | Set how the next JavaScript dialog should be handled. |
| browser_set_file_inputC | Attach local files to a file input selector. |
| browser_scrollC | Scroll page, to top, to bottom, or to selector. |
| browser_wait_for_selectorC | Wait until selector appears or timeout. |
| browser_wait_for_urlC | Wait for URL substring or regex match. |
| browser_wait_for_textC | Wait until text appears in a selector. |
| browser_wait_for_functionC | Wait for a JavaScript expression to become truthy. |
| browser_wait_for_network_idleC | Wait until in-page network activity is idle. |
| browser_waitC | Wait for a number of seconds. |
| browser_htmlC | Return current page HTML (optionally truncated). |
| browser_console_messagesC | Read captured in-page console messages. |
| browser_network_requestsC | Read captured fetch/xhr request metadata. |
| browser_network_capture_startC | Start CDP-level network capture. |
| browser_network_capture_getC | Read CDP-level network capture rows. |
| browser_network_capture_stopC | Stop CDP-level network capture. |
| browser_network_capture_statusC | Get CDP-level network capture status. |
| browser_downloadsC | Read captured download metadata. |
| browser_cookies_getC | Get all cookies visible to current browser context. |
| browser_cookies_setC | Set cookies into current browser context. |
| browser_cookies_saveC | Save current cookies to a JSON file. |
| browser_cookies_clearC | Clear cookies (all or by domain). |
| browser_storage_getC | Get local/session storage values. |
| browser_storage_setC | Set local/session storage key/value entries. |
| browser_storage_clearC | Clear local/session storage. |
| browser_solve_cloudflareB | Detect and solve a Cloudflare Turnstile challenge by clicking the verification checkbox. |
| browser_take_screenshotC | Capture a screenshot to disk. |
| session_warmupA | Warm a browser session by visiting sites to accumulate realistic browsing state (cookies, localStorage, history). A fresh profile with no history is a strong bot signal; this tool builds a natural footprint. Uses a curated site list by default; pass sites= to override. geo_region filters the built-in list to a country code (e.g. "US", "GB", "DE") plus global sites. |
| browser_evaluateC | Evaluate JavaScript in current page. |
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 70 tools
Most tools have clearly distinct purposes, and descriptions explicitly differentiate potentially overlapping pairs. Some ambiguity exists among the many browser_wait_for_* variants and between browser_network_requests and the browser_network_capture_* group, but the boundaries are generally recoverable from the descriptions.
The set follows a consistent snake_case prefix+action convention (browser_, session_, session_trace_, browser_network_capture_, etc.). Minor deviations are noun-only names like browser_url, browser_html, and browser_snapshot, but overall the pattern is predictable.
With 70 tools, the server far exceeds the typical 3-15 scoped range and lands in the rubric's 50+ extreme-mismatch category. Many fine-grained operations could be consolidated, making the surface unnecessarily heavy for an agent to select from reliably.
The surface covers the full lifecycle for sessions, profiles, proxies, traces, cookies, storage, network capture, and core browser interactions. Only minor gaps exist, such as dedicated select/dropdown or drag-and-drop helpers, which can largely be worked around with existing tools.