Add more stealth patterns (Cloudflare Turnstile bypass, fingerprint hardening)
Context
WaveXisMCP has a basic stealth mode (stealth=true) that hides navigator.webdriver, fakes plugins/languages/chrome runtime, and patches navigator.permissions. This is enough for basic bot detection, but more advanced anti-bot systems (Cloudflare Turnstile, DataDome, PerimeterX) require deeper fingerprint hardening.
Competitors like zendriver-mcp and nodriver-mcp have built-in Cloudflare bypass. Adding more stealth patterns would close this gap.
What needs to happen
In wavexis (the library)
Extend wavexis/actions/stealth.py with additional patches:
- Canvas fingerprint — add noise to
HTMLCanvasElement.prototype.toDataURL and toBlob
- WebGL fingerprint — spoof
WEBGL_debug_renderer_info vendor/renderer
- AudioContext fingerprint — add noise to
AudioContext.prototype.createAnalyser
- Font enumeration — spoof
document.fonts and font measurement results
- ClientRects fingerprint — add subtle noise to
getClientRects and getBoundingClientRect
- Navigator properties — spoof
navigator.hardwareConcurrency, navigator.deviceMemory, navigator.platform (already partially done)
- WebRTC leak prevention — override
RTCPeerConnection to prevent local IP leaks
- Cloudflare Turnstile — detect and wait for Turnstile challenges, auto-solve simple ones
In wavexis-mcp
No changes needed — the stealth=true flag already passes through to the backend.
Implementation notes
- Each patch should be a separate JS string that can be injected via
Page.addScriptToEvaluateOnNewDocument (CDP) or script.addPreloadScript (BiDi)
- Patches should be toggleable (e.g.,
stealth_level=1 for basic, stealth_level=2 for advanced)
- Must not break legitimate functionality (e.g., canvas noise should be deterministic per-session, not random per-call)
- Add tests that verify the patches are injected and don't throw errors
Getting started
- Read
wavexis/actions/stealth.py to see the existing patches
- Read how stealth JS is injected in
wavexis/backend/cdp.py and wavexis/backend/bidi.py
- Research fingerprinting techniques (check out fingerprintjs for reference)
- Add patches one at a time, with tests
- Open a PR per patch group for easier review
References
Add more stealth patterns (Cloudflare Turnstile bypass, fingerprint hardening)
Context
WaveXisMCP has a basic stealth mode (
stealth=true) that hidesnavigator.webdriver, fakes plugins/languages/chrome runtime, and patchesnavigator.permissions. This is enough for basic bot detection, but more advanced anti-bot systems (Cloudflare Turnstile, DataDome, PerimeterX) require deeper fingerprint hardening.Competitors like zendriver-mcp and nodriver-mcp have built-in Cloudflare bypass. Adding more stealth patterns would close this gap.
What needs to happen
In
wavexis(the library)Extend
wavexis/actions/stealth.pywith additional patches:HTMLCanvasElement.prototype.toDataURLandtoBlobWEBGL_debug_renderer_infovendor/rendererAudioContext.prototype.createAnalyserdocument.fontsand font measurement resultsgetClientRectsandgetBoundingClientRectnavigator.hardwareConcurrency,navigator.deviceMemory,navigator.platform(already partially done)RTCPeerConnectionto prevent local IP leaksIn
wavexis-mcpNo changes needed — the
stealth=trueflag already passes through to the backend.Implementation notes
Page.addScriptToEvaluateOnNewDocument(CDP) orscript.addPreloadScript(BiDi)stealth_level=1for basic,stealth_level=2for advanced)Getting started
wavexis/actions/stealth.pyto see the existing patcheswavexis/backend/cdp.pyandwavexis/backend/bidi.pyReferences