servers / mcp-camoufox
mcp-camoufox
communitystdiolocaldestructive capablehealthy
MCP server for stealth browser automation via Camoufox — 79 tools, npx install, anti-bot stealth
01Tools · 102
How to read this: tool names here are observed from a live tools/list handshake. The Risk label is a heuristic inferred from the tool name (write/destructive verbs), not from executing the tool — a conservative guess, not a verified capability. We never escalate risk from a description. Found one that's wrong? Tell us — we fix on report.
| Tool | Risk | Side effects | Approval |
|---|---|---|---|
| go_back Navigate back in history. | unknown | unknown | unknown |
| screenshot Take a screenshot of the current page. | unknown | unknown | unknown |
| hover Hover over element by ref ID. | unknown | unknown | unknown |
| uncheck Uncheck a checkbox. | unknown | unknown | unknown |
| browser_launch Launch Camoufox stealth browser and navigate to URL. Browser persists between calls. By default cookies/localStorage persist in ~/.camoufox-mcp/profile. Set fresh_profile=true to start with a clean temp profile (auto-cleaned on browser_close) — useful when switching between accounts on the same domain. | unknown | unknown | unknown |
| navigate Navigate to a URL. | unknown | unknown | unknown |
| browser_close Close the browser. Cookies are preserved in the persistent profile (~/.camoufox-mcp/profile). If the launch used fresh_profile=true, the temp profile is removed. | unknown | unknown | unknown |
| go_forward Navigate forward in history. | unknown | unknown | unknown |
| click Click element by ref ID from browser_snapshot. Auto JS-fallback for overlays. | unknown | unknown | unknown |
| fill Fill input/textarea by ref ID. Clears existing content. | unknown | unknown | unknown |
| reset_profile Delete the persistent profile (~/.camoufox-mcp/profile) entirely. Use to start fresh — cookies, localStorage, history all wiped. Browser must be closed first (call browser_close before this). | unknown | unknown | unknown |
| reload Reload the current page. | unknown | unknown | unknown |
| click_text Click element by visible text. | unknown | unknown | unknown |
| select_option Select option from <select> dropdown. | unknown | unknown | unknown |
| browser_snapshot Get visible interactive elements with ref IDs. Use refs with click/fill. Always call after navigation. On large pages (Outlook, dashboards) the response can be truncated — narrow with roles=["button","textbox"] or paginate with offset/limit. Refs stay stable regardless of filters (every visible element is still numbered). | read | false | unknown |
| click_role Click element by ARIA role and name. | unknown | unknown | unknown |
| check Check checkbox or radio button. | unknown | unknown | unknown |
| type_text Type text char by char via keyboard. | unknown | unknown | unknown |
| wait_for_any_of Race multiple wait conditions — returns the first that matches, so the agent can branch immediately without sequential probes. Each condition is {kind: 'selector'|'text'|'url_contains'|'title_contains', value: string}. Returns the index + kind + value of the winning condition (or 'timeout' if none matched). Ideal for post-login flows where the next page could be any of several (e.g. 'Stay signed in?', 'Skip for now', or the inbox directly). | read | false | unknown |
| get_html Get HTML content from page or element. | read | false | unknown |
| press_key Press key or combo (Enter, Escape, Control+a, etc.). | unknown | unknown | unknown |
| evaluate Execute JavaScript in page context. | unknown | unknown | unknown |
| wait_for Wait for element/text to appear or disappear. | unknown | unknown | unknown |
| get_url Get current URL and title. | read | false | unknown |
| wait_for_navigation Wait for page load to complete. | unknown | unknown | unknown |
| get_text Get visible text from page or element. | read | false | unknown |
| tab_select Switch to a tab by index, or by url_contains (first tab whose URL contains the substring). | unknown | unknown | unknown |
| tab_list List all open tabs. | read | false | unknown |
| cookie_list List cookies. | read | false | unknown |
| upload_file Upload file to file input. | write | true | unknown |
| tab_new Open new tab. | unknown | unknown | unknown |
| cookie_set Set a cookie. | write | true | unknown |
| scroll Scroll the page. | unknown | unknown | unknown |
| network_get List captured network requests (newest first-capped). Each row shows an #id usable with network_get_detail. | read | false | unknown |
| tab_close Close a tab by index (-1 = active), or by url_contains. | unknown | unknown | unknown |
| dialog_handle Set handler for next alert/confirm/prompt. | unknown | unknown | unknown |
| console_get Get captured console messages. | read | false | unknown |
| save_pdf Save page as PDF. | unknown | unknown | unknown |
| navigate_and_snapshot Navigate to URL then return snapshot — combined in one call. | unknown | unknown | unknown |
| get_links Get all links on the page with URL and text. | read | false | unknown |
| sessionstorage_get Get all sessionStorage data or a specific key. | read | false | unknown |
| cookie_delete Delete cookies. Both empty = clear all. | destructive | true | true |
| console_start Start capturing console messages from all tabs. | unknown | unknown | unknown |
| network_get_detail Full request + response detail (headers and text body) for one captured request. Requires network_start(capture_bodies=true) BEFORE the request fired. Identify the request by id (from network_get) or by url substring. | read | false | unknown |
| login_classic Composite login for classic email→password forms (Google, Microsoft, generic SSO). Auto-detects the email field, clicks Next/Continue on multi-step forms, fills the password, submits, and optionally enters a TOTP 2FA code. Collapses the usual 5–8 fill/click/snapshot calls into one. Heuristic — if a form is unusual, fall back to individual fill/click tools. Returns the step log + a fresh snapshot. | read | false | unknown |
| query_selector_all Query elements by CSS selector, return text/attributes of all matches. | read | false | unknown |
| localstorage_clear Clear all localStorage. | unknown | unknown | unknown |
| network_start Start capturing network requests. With capture_bodies=true also records request/response headers + text bodies (json/text/xml/form only, capped at body_limit bytes) so you can inspect API payloads via network_get_detail — no need to pivot to evaluate()+fetch(). | read | false | unknown |
| batch_actions Execute multiple actions in one call. Each action: {type, ref?, value?, text?, key?, url?}. | unknown | unknown | unknown |
| inspect_element Get detailed info about an element (tag, attributes, bounding box, styles). | read | false | unknown |
| localstorage_get Get all localStorage data or a specific key. | read | false | unknown |
| sessionstorage_set Set a sessionStorage item. | write | true | unknown |
| drag_and_drop Drag from one element to another. | destructive | true | true |
| fill_form Fill multiple form fields and optionally submit. | unknown | unknown | unknown |
| get_attribute Get a specific attribute value from an element. | read | false | unknown |
| localstorage_set Set a localStorage item. | write | true | unknown |
| mouse_click_xy Click at exact x,y coordinates. steps>0 adds interpolated pre-movement (human-like). | unknown | unknown | unknown |
| mouse_move Move mouse to x,y. steps>0 interpolates path (human-like). | write | true | unknown |
| frame_evaluate Execute JavaScript inside a specific frame/iframe. | unknown | unknown | unknown |
| set_viewport_size Set viewport width and height. | write | true | unknown |
| click_turnstile Auto-solve Cloudflare Interactive Turnstile checkbox. Locates the widget via in-page selectors AND the Playwright frame API (handles closed shadow roots that document.querySelector misses), polls for render, skips if already solved, then does a humanized real-mouse click with retries + small nudge, verifying the cf-turnstile-response token after each attempt. Managed Challenge full-page interstitials still need mcp-stealth-chrome. | unknown | unknown | unknown |
| list_frames List all frames/iframes in the page. | read | false | unknown |
| get_viewport_size Get current viewport dimensions. | read | false | unknown |
| get_page_errors Get JavaScript errors from the page. | read | false | unknown |
| extract_structured Extract structured data from repeated elements (cards, rows, listings). Auto-deduplicates, filters empty items, extracts direct text only. Use detect_content_pattern first to find correct selectors. | read | false | unknown |
| back_and_snapshot Navigate back + return snapshot. | unknown | unknown | unknown |
| find_by_label Find input element by its label text (<label>). Returns ref. | read | false | unknown |
| page_stats Page statistics: element count, size, load metrics. Use to decide extraction strategy. | read | false | unknown |
| wait_for_url Wait for URL to match a pattern. | unknown | unknown | unknown |
| accessibility_snapshot Get accessibility tree snapshot — compact view of page structure for LLM understanding. | read | false | unknown |
| export_har Export network traffic as HAR file. | unknown | unknown | unknown |
| wait_for_response Wait for a network response matching a URL pattern. | unknown | unknown | unknown |
| server_status Health check — verify server, browser status, active tabs. | read | false | unknown |
| detect_content_pattern Auto-detect repeated content patterns (cards, listings, rows) and suggest CSS selectors. Run this BEFORE extract_structured to find the right selectors. | read | false | unknown |
| wait_and_snapshot Wait for selector/text then return snapshot. Combines wait_for + browser_snapshot in one call. | unknown | unknown | unknown |
| find_by_text Find element by visible text — returns ref ID or null. Skip browser_snapshot if you know exact text. | read | false | unknown |
| cookie_import Import cookies from JSON (from cookie_export). Restores session state. | unknown | unknown | unknown |
| inject_init_script Inject a script that runs before every page load. | unknown | unknown | unknown |
| extract_table Extract data from an HTML table as JSON array. | unknown | unknown | unknown |
| reload_and_snapshot Reload page + return snapshot. | unknown | unknown | unknown |
| find_by_placeholder Find input by placeholder text. Returns ref. | read | false | unknown |
| storage_state_save Save cookies + localStorage to a JSON file. Reload via storage_state_load on a fresh browser to skip login/CF entirely. | unknown | unknown | unknown |
| scrape_page Smart page scraper — auto-detect and extract main content, links, metadata. Strips nav/footer noise. | unknown | unknown | unknown |
| click_and_snapshot Click element by ref + wait + return snapshot. Perfect for buttons that trigger navigation/dialog. | unknown | unknown | unknown |
| cookie_export Export all cookies as JSON string. Use with cookie_import to transfer session. | unknown | unknown | unknown |
| storage_state_load Load cookies + localStorage from a JSON file (created by storage_state_save). Bypass CF/login if session is fresh. | unknown | unknown | unknown |
| humanize_click Click element with humanized mouse approach (3-step Bezier-like curve before click). Use for anti-bot pages. | unknown | unknown | unknown |
| mouse_replay Replay last recorded mouse path with original timing. | unknown | unknown | unknown |
| auth_capture Save current session as named auth state (e.g. logged-in user). Convenience wrapper: storage_state_save to ~/.camoufox-mcp/sessions/<name>.json | unknown | unknown | unknown |
| humanize_type Type text with Gaussian-distributed delays between keystrokes (mean ~80ms, sigma ~30ms). Mimics human typing rhythm. | unknown | unknown | unknown |
| cookie_export_file Export all cookies to a JSON file (Playwright format). | unknown | unknown | unknown |
| mouse_drift Random mouse movements over a duration — builds up mouse history before action (CF/DataDome behavior analysis). | unknown | unknown | unknown |
| detect_anti_bot Heuristic detection of anti-bot vendor on current page (Cloudflare, DataDome, Akamai, PerimeterX, Imperva). | unknown | unknown | unknown |
| click_and_wait Click element then wait for navigation or selector. Atomic — fewer roundtrips than separate click + wait_for. | unknown | unknown | unknown |
| cookie_import_file Import cookies from a JSON file (Playwright format). | unknown | unknown | unknown |
| mouse_record Start recording mouse positions (call mouse_replay later). Returns recorder handle. | read | false | unknown |
| assert_element_visible Assert element exists and is visible. Returns success/fail (no throw). | read | false | unknown |
| wait_for_network_idle Wait until network is idle for N ms (no in-flight requests). Better than fixed timeouts for SPAs. | unknown | unknown | unknown |
| session_warmup Visit innocuous public sites (Google, Wikipedia) to build browsing history before targeting protected site. Helps with CF/DataDome IP scoring. | unknown | unknown | unknown |
| assert_url_matches Assert current URL matches pattern (substring or regex). | unknown | unknown | unknown |
| assert_text_present Assert text is present anywhere on page (case-sensitive substring). | unknown | unknown | unknown |
| describe_page Compact LLM-friendly page summary (title, heading, key buttons, forms). Cheaper than browser_snapshot for agent context. Also returns `intent` — a classified hint of what kind of page this is (login_email, login_password, otp_input, captcha, stay_signed_in, protect_account, error_page, consent, two_factor, account_disabled, content, unknown) — so the agent can branch with one read. | read | false | unknown |
02Install & source
npx -y mcp-camoufox@latest
npx- repohttps://github.com/RobithYusuf/mcp-camoufox
- licenseMIT
- adoption18 stars · 2 forks
05Provenance & freshness
sourcesGitHub repo search [p4]
last_checked2026-07-29 08:57Z
next_check2026-07-31 08:40Z
cadenceevery 48h
verifiedtools_list:passed handshake:passed metadata:passed
index_statusindex — 8 unique facts >= 5
06Badge
Add the “as seen on MCPExplorer” badge to your README.
[](https://mcpexplorer.com/servers/mcp-camoufox)
Next step
This is one server. A loadout combines the right servers, governance, and proven plays for a whole job — assembled deliberately, not tool-dumped.
Explore loadouts →