mcp-stealth-chrome (RobithYusuf/mcp-stealth-chrome) is an MCP server listed on the M8ven Trust Index. It scores 64 out of 100, grade C. It declares 160 tools. No publisher has claimed this listing.

C
Caution
64/100

mcp-stealth-chrome

Provides 133 stealth tools for AI agents to bypass Cloudflare, Turnstile, and reCAPTCHA, including LLM-optimized actions like describe_page and smart_fill.

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

RobithYusuf

Source: Glama

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
🚨
Secret credentials may flow to a network call
2 flows detected: CAPSOLVER_KEY. We can’t prove the destination matches the brand the credential belongs to.
⚠️
Tool descriptions don’t match what handlers do
2 tools describe read intent but their handlers mutate — find_by_image (line 5969: tmp_path.unlink()); list_external_chrome (line 8698: r = subprocess.run()
🔐
You'll be asked for 7 credentials: EXA_API_KEY, GITHUB_TOKEN, GH_TOKEN, AI_VISION_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, CAPSOLVER_KEY
These are read from process.env at runtime. Make sure you trust where they’ll be sent.
// tools this server exposes160 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

browser_launch

Launch stealth Chrome via nodriver. Creates persistent profile by default.

browser_close

Close the browser and free the profile lock.

browser_recover

Force-recover from a stuck browser state.

navigate

Navigate the active tab to url. wait_until: load|none.

tab_focus

⭐ Bring the active tab's browser window to the OS foreground.

request_human_help

Hand a headed local browser to the human without blocking the MCP call.

wait_for_human

Wait for objective evidence that a local human handoff completed.

go_back

Go back in history.

go_forward

Go forward in history.

reload

Reload the active tab.

browser_snapshot

Inject SNAPSHOT_JS and return a ref-indexed list of interactive elements.

screenshot

Screenshot active tab. Saves to ~/.mcp-stealth/screenshots/.

get_text

Return the VISIBLE text of an element (by selector or ref) or the whole document.

get_html

Return innerHTML (or outerHTML) of element or whole document.

get_url

Return current URL of active tab.

save_pdf

Save current page as PDF via CDP Page.printToPDF.

click

Click an element by ref (from snapshot) or CSS selector. JS fallback on failure.

click_text

Find and click the element whose text matches, and report what really happened.

click_role

Click by ARIA role (e.g. button, link, textbox), optional accessible name.

assert_clickable

Check whether a click would actually reach the target — WITHOUT clicking.

hover

Hover over element.

fill

Fill input/textarea via set_value (fast, works for standard inputs).

type_text

Type into focused element (keystroke-by-keystroke). Use humanize for Gaussian delays.

press_key

Press a single key (Enter, Escape, Tab, ArrowDown, a, etc).

select_option

Select <option> by value or label.

check

Tick a checkbox/radio (idempotent).

uncheck

Untick a checkbox.

upload_file

Upload a file via <input type=file>.

mouse_click_xy

Click at raw viewport coordinates (CSS px, relative to the viewport).

mouse_move

Move cursor to raw coordinates. humanize=True uses Bezier path.

drag_and_drop

Drag from (start_x, start_y) to (end_x, end_y).

wait_for

Wait until selector exists or text appears on page.

wait_for_change

Wait until the page actually CHANGES, and report what changed.

wait_for_navigation

Wait until the page finishes loading.

wait_for_url

Wait until URL matches a regex pattern.

wait_for_response

Wait for a network response whose URL matches regex.

tab_list

List all open tabs with index, URL, title.

tab_new

Open a new tab and make it active.

tab_select

Switch to tab at given index (from tab_list).

tab_close

Close tab at index (defaults to active).

cookie_list

List all cookies (optionally filtered by URL).

cookie_set

Set a cookie on the browser.

cookie_delete

Delete cookies matching name (optionally scoped to domain).

cookie_import

Bulk-import cookies. Three input modes — pick whichever is easiest:

cookie_export

Export cookies to a JSON file. Cookies-only (use storage_state_save for full session).

localstorage_get

Get localStorage — all keys or one specific key.

localstorage_set

Set a localStorage entry.

localstorage_clear

Clear all localStorage for current origin.

sessionstorage_get

Get sessionStorage — all keys or one.

sessionstorage_set

Set a sessionStorage entry.

sessionstorage_clear

Clear all sessionStorage for current origin (parity with localstorage_clear).

cache_clear

Clear the browser HTTP cache (CDP Network.clearBrowserCache).

indexeddb_list

List IndexedDB databases for the current origin.

indexeddb_delete

Delete an IndexedDB database by name (scoped to current origin).

evaluate

Execute arbitrary JS expression in page context. Returns stringified result.

inject_init_script

Register a script that runs before page scripts on every navigation of the CURRENT tab. Scope is the active tab/target only — it is NOT auto-applied to other open tabs or to tabs opened later; re-run per tab if needed.

inspect_element

Return tag, attributes, position, text for an element.

get_attribute

Get attribute value of element.

query_selector_all

Return count + attrs of all elements matching CSS selector.

get_links

List all <a> links on page.

list_frames

List all iframes and their URLs.

frame_evaluate

Run JS inside an iframe matching URL pattern.

batch_actions

Execute a list of actions sequentially.

fill_form

Fill multiple fields then optionally submit.

navigate_and_snapshot

Navigate then immediately snapshot — common pattern.

get_viewport_size

Return current window dimensions.

set_viewport_size

Resize the browser window.

scroll

Scroll page via REAL mouseWheel CDP events (not JS scrollBy).

scroll_to

Smooth-scroll a specific element into viewport.

dialog_handle

Pre-arm handler for next alert/confirm/prompt. Call BEFORE action that triggers it.

dialog_auto_handle

⭐ Install a PERSISTENT auto-handler for native browser dialogs. Unlike dialog_handle (one-shot, action baked in at arm time), this one stays armed across many dialogs and reads its config at fire time — call again with new action/types to update without re-arming.

accessibility_snapshot

Return ARIA accessibility tree of current page.

console_start

Begin capturing console messages + uncaught exceptions of the active tab.

console_get

Retrieve captured console messages WITH the capture status.

network_start

Begin capturing network requests + responses with full headers.

network_get

Retrieve captured network events.

server_status

Diagnostic info about the server, browser, and CDP compatibility patches.

get_page_errors

Retrieve JS errors caught on active tab.

fingerprint_audit

⭐ Audit THIS browser's own fingerprint for the leaks detectors look for.

export_curl

⭐ Turn a captured browser request into a runnable curl AND an http_request call.

intercept_start

⭐ See a request — and optionally stop it — BEFORE the server ever gets it.

intercept_log

Read what interception saw, with its status attached.

intercept_stop

Stop intercepting and let the page make requests normally again.

dry_run

⭐ Explore a logged-in account without changing anything.

export_har

Export captured network traffic to HAR-like JSON file.

detect_content_pattern

Heuristically detect the most likely repeating container on page.

extract_structured

Extract structured data from repeating containers.

extract_table

Extract a <table> as JSON rows with optional header keys.

scrape_page

Clean readable text extraction — drops nav, footer, scripts, styles.

storage_state_save

⭐ Save cookies + localStorage of current origin to JSON.

storage_state_load

⭐ Load cookies + localStorage from a saved JSON file.

solve_captcha

Solve a CAPTCHA via CapSolver HTTP API.

verify_cf

⭐ Use nodriver's built-in Cloudflare challenge verification.

identity_pin

Persist a stable fingerprint + proxy for one browser instance.

identity_show

Show the persisted identity pin for an instance.

fingerprint_rotate

Override fingerprint vectors for active tab: user_agent, accept_language, platform (Win32/MacIntel/Linux x86_64), timezone (Asia/Jakarta, etc). Applied via CDP. Persists until next tab creation.

humanize_click

⭐ Click with Bezier-curve mouse approach + randomized dwell.

humanize_type

⭐ Type with Gaussian-distributed keystroke delays.

click_turnstile

Auto-find and click the Cloudflare Turnstile checkbox.

click_element_offset

Click inside element at percentage position (not center).

60 further tools are not listed here. The complete surface is in the source.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configBROWSER_LAUNCH_TIMEOUT
configBROWSER_NAV_TIMEOUT
configTOOL_ACTION_TIMEOUT
configB64_INLINE_LIMITrefuses over B64_INLINE_LIMIT with the path + how to shrink
configCAPTURE_MAX_EVENTS
configCAPTURE_MAX_INDEXED
configSTORAGE_SNAPSHOT_LIMIT
configRESEARCH_PROXY
configHTTPS_PROXY
configALL_PROXY
🔐 secretEXA_API_KEY
🔐 secretGITHUB_TOKEN
🔐 secretGH_TOKEN
🔐 secretAI_VISION_API_KEY3. + AI_VISION_BASE_URL + AI_VISION_MODEL — deprecated (removed in v0.2.0)
configAI_VISION_BASE_URL3. AI_VISION_API_KEY + + AI_VISION_MODEL — deprecated (removed in v0.2.0)
configAI_VISION_MODEL3. AI_VISION_API_KEY + AI_VISION_BASE_URL + — deprecated (removed in v0.2.0)
configAI_VISION_PROVIDERAI_VISION_BASE_URL, AI_VISION_API_KEY, AI_VISION_MODEL,
🔐 secretOPENAI_API_KEYUses OpenAI SDK standard env names (, OPENAI_BASE_URL).
configOPENAI_BASE_URLUses OpenAI SDK standard env names (OPENAI_API_KEY, ).
🔐 secretANTHROPIC_API_KEY4. + ANTHROPIC_MODEL — Claude
configANTHROPIC_MODEL4. ANTHROPIC_API_KEY + — Claude
configOPENAI_MODEL2. OPENAI_API_KEY + OPENAI_BASE_URL + — standard (OpenAI SDK convention)
🔐 secretCAPSOLVER_KEYEnable solve_captcha tool
configBROWSER_IDLE_TIMEOUTAuto-close browsers after idle seconds (0 = never)
configBROWSER_IDLE_REAPER_INTERVALHow often reaper checks idle state
configProgramFiles
// quality suggestions

Tool annotations

No tools have read-only/destructive annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

160/160 tools missing one or more hints — browser_launch (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); browser_close (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); browser_recover (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +157 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Destructive tools are labelled

2 tools perform destructive updates without destructiveHint — find_by_image deletes at line 5969 (tmp_path.unlink()); clone_chrome_profile deletes at line 7011 (shutil.rmtree(target_root))

Add destructiveHint:true to any tool whose handler calls .delete(), .upsert(), .update(), unlink, rm, DELETE, DROP, REPLACE INTO, or any operation that overwrites existing data.

Descriptions match behaviour

2 tools describe read intent but their handlers mutate — find_by_image (line 5969: tmp_path.unlink()); list_external_chrome (line 8698: r = subprocess.run()

Rename the tool, rewrite the description, or move the side-effect into a separate clearly-named tool.

Tool description accuracy

find_by_image: description implies read-only but handler writes/deletes/executes; list_external_chrome: description implies read-only but handler writes/deletes/executes

Update tool descriptions to accurately reflect all capabilities — especially write, delete, or execute operations.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 5 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/robithyusuf/mcp-stealth-chrome?variant=verified)](https://m8ven.ai/mcp/robithyusuf/mcp-stealth-chrome)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: 424a6f805ad2354f47de5aab8a96e6ddfefc8c6c
code hash: afcaedfb7626ba5593a6da4a5d34173a89e8098dfd92b6531e468b97c3a3a547
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client