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.
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
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
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.
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_launchLaunch stealth Chrome via nodriver. Creates persistent profile by default.
browser_closeClose the browser and free the profile lock.
browser_recoverForce-recover from a stuck browser state.
navigateNavigate the active tab to url. wait_until: load|none.
tab_focus⭐ Bring the active tab's browser window to the OS foreground.
request_human_helpHand a headed local browser to the human without blocking the MCP call.
wait_for_humanWait for objective evidence that a local human handoff completed.
go_backGo back in history.
go_forwardGo forward in history.
reloadReload the active tab.
browser_snapshotInject SNAPSHOT_JS and return a ref-indexed list of interactive elements.
screenshotScreenshot active tab. Saves to ~/.mcp-stealth/screenshots/.
get_textReturn the VISIBLE text of an element (by selector or ref) or the whole document.
get_htmlReturn innerHTML (or outerHTML) of element or whole document.
get_urlReturn current URL of active tab.
save_pdfSave current page as PDF via CDP Page.printToPDF.
clickClick an element by ref (from snapshot) or CSS selector. JS fallback on failure.
click_textFind and click the element whose text matches, and report what really happened.
click_roleClick by ARIA role (e.g. button, link, textbox), optional accessible name.
assert_clickableCheck whether a click would actually reach the target — WITHOUT clicking.
hoverHover over element.
fillFill input/textarea via set_value (fast, works for standard inputs).
type_textType into focused element (keystroke-by-keystroke). Use humanize for Gaussian delays.
press_keyPress a single key (Enter, Escape, Tab, ArrowDown, a, etc).
select_optionSelect <option> by value or label.
checkTick a checkbox/radio (idempotent).
uncheckUntick a checkbox.
upload_fileUpload a file via <input type=file>.
mouse_click_xyClick at raw viewport coordinates (CSS px, relative to the viewport).
mouse_moveMove cursor to raw coordinates. humanize=True uses Bezier path.
drag_and_dropDrag from (start_x, start_y) to (end_x, end_y).
wait_forWait until selector exists or text appears on page.
wait_for_changeWait until the page actually CHANGES, and report what changed.
wait_for_navigationWait until the page finishes loading.
wait_for_urlWait until URL matches a regex pattern.
wait_for_responseWait for a network response whose URL matches regex.
tab_listList all open tabs with index, URL, title.
tab_newOpen a new tab and make it active.
tab_selectSwitch to tab at given index (from tab_list).
tab_closeClose tab at index (defaults to active).
cookie_listList all cookies (optionally filtered by URL).
cookie_setSet a cookie on the browser.
cookie_deleteDelete cookies matching name (optionally scoped to domain).
cookie_importBulk-import cookies. Three input modes — pick whichever is easiest:
cookie_exportExport cookies to a JSON file. Cookies-only (use storage_state_save for full session).
localstorage_getGet localStorage — all keys or one specific key.
localstorage_setSet a localStorage entry.
localstorage_clearClear all localStorage for current origin.
sessionstorage_getGet sessionStorage — all keys or one.
sessionstorage_setSet a sessionStorage entry.
sessionstorage_clearClear all sessionStorage for current origin (parity with localstorage_clear).
cache_clearClear the browser HTTP cache (CDP Network.clearBrowserCache).
indexeddb_listList IndexedDB databases for the current origin.
indexeddb_deleteDelete an IndexedDB database by name (scoped to current origin).
evaluateExecute arbitrary JS expression in page context. Returns stringified result.
inject_init_scriptRegister 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_elementReturn tag, attributes, position, text for an element.
get_attributeGet attribute value of element.
query_selector_allReturn count + attrs of all elements matching CSS selector.
get_linksList all <a> links on page.
list_framesList all iframes and their URLs.
frame_evaluateRun JS inside an iframe matching URL pattern.
batch_actionsExecute a list of actions sequentially.
fill_formFill multiple fields then optionally submit.
navigate_and_snapshotNavigate then immediately snapshot — common pattern.
get_viewport_sizeReturn current window dimensions.
set_viewport_sizeResize the browser window.
scrollScroll page via REAL mouseWheel CDP events (not JS scrollBy).
scroll_toSmooth-scroll a specific element into viewport.
dialog_handlePre-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_snapshotReturn ARIA accessibility tree of current page.
console_startBegin capturing console messages + uncaught exceptions of the active tab.
console_getRetrieve captured console messages WITH the capture status.
network_startBegin capturing network requests + responses with full headers.
network_getRetrieve captured network events.
server_statusDiagnostic info about the server, browser, and CDP compatibility patches.
get_page_errorsRetrieve 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_logRead what interception saw, with its status attached.
intercept_stopStop intercepting and let the page make requests normally again.
dry_run⭐ Explore a logged-in account without changing anything.
export_harExport captured network traffic to HAR-like JSON file.
detect_content_patternHeuristically detect the most likely repeating container on page.
extract_structuredExtract structured data from repeating containers.
extract_tableExtract a <table> as JSON rows with optional header keys.
scrape_pageClean 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_captchaSolve a CAPTCHA via CapSolver HTTP API.
verify_cf⭐ Use nodriver's built-in Cloudflare challenge verification.
identity_pinPersist a stable fingerprint + proxy for one browser instance.
identity_showShow the persisted identity pin for an instance.
fingerprint_rotateOverride 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_turnstileAuto-find and click the Cloudflare Turnstile checkbox.
click_element_offsetClick inside element at percentage position (not center).
60 further tools are not listed here. The complete surface is in the source.
BROWSER_LAUNCH_TIMEOUTBROWSER_NAV_TIMEOUTTOOL_ACTION_TIMEOUTB64_INLINE_LIMITrefuses over B64_INLINE_LIMIT with the path + how to shrinkCAPTURE_MAX_EVENTSCAPTURE_MAX_INDEXEDSTORAGE_SNAPSHOT_LIMITRESEARCH_PROXYHTTPS_PROXYALL_PROXYEXA_API_KEYGITHUB_TOKENGH_TOKENAI_VISION_API_KEY3. + AI_VISION_BASE_URL + AI_VISION_MODEL — deprecated (removed in v0.2.0)AI_VISION_BASE_URL3. AI_VISION_API_KEY + + AI_VISION_MODEL — deprecated (removed in v0.2.0)AI_VISION_MODEL3. AI_VISION_API_KEY + AI_VISION_BASE_URL + — deprecated (removed in v0.2.0)AI_VISION_PROVIDERAI_VISION_BASE_URL, AI_VISION_API_KEY, AI_VISION_MODEL,OPENAI_API_KEYUses OpenAI SDK standard env names (, OPENAI_BASE_URL).OPENAI_BASE_URLUses OpenAI SDK standard env names (OPENAI_API_KEY, ).ANTHROPIC_API_KEY4. + ANTHROPIC_MODEL — ClaudeANTHROPIC_MODEL4. ANTHROPIC_API_KEY + — ClaudeOPENAI_MODEL2. OPENAI_API_KEY + OPENAI_BASE_URL + — standard (OpenAI SDK convention)CAPSOLVER_KEYEnable solve_captcha toolBROWSER_IDLE_TIMEOUTAuto-close browsers after idle seconds (0 = never)BROWSER_IDLE_REAPER_INTERVALHow often reaper checks idle stateProgramFilesTool 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.
[](https://m8ven.ai/mcp/robithyusuf/mcp-stealth-chrome)?variant=verified from the URL.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