Troubleshooting¶
Common issues and their solutions when using WaveXisMCP.
Browser not found¶
Symptom: BrowserError: Could not find Chrome or Edge
Cause: WaveXisMCP auto-detects Chrome then Edge, but neither is installed or the path is wrong.
Solution:
- Install Google Chrome or Microsoft Edge.
-
If Chrome is installed in a non-standard location, set the
WAVEXIS_BROWSER_PATHenvironment variable: -
Verify the path is correct by running the browser manually.
Session limit reached¶
Symptom: RuntimeError: Maximum number of sessions (1000) reached
Cause: Too many concurrent sessions. The default limit is 1000.
Solution:
- Close unused sessions with
wavexis_session_close. - Use
wavexis_session_listto see active sessions. - Use
wavexis_cleanup_all(or restart the server) to close all sessions. - For long-running workflows, reuse a single session instead of opening new ones.
- Use stateless mode (pass
urldirectly to tools) for one-shot operations — no session needed.
Rate limit exceeded¶
Symptom: RuntimeError: Rate limit exceeded. Retry after 500ms
Cause: The token bucket rate limiter is throttling tool calls. Default: 60 calls/second with burst of 10.
Solution:
- Increase the rate limit:
wavexis-mcp --rate-limit=120 --rate-burst=20 - For high-throughput CI/CD, disable rate limiting by setting a very high limit:
wavexis-mcp --rate-limit=10000 - If using HTTP transport, consider running multiple WaveXisMCP instances behind a load balancer.
URL rejected as internal/private¶
Symptom: ValueError: URL resolves to a private/internal IP and is blocked
Cause: WaveXisMCP blocks navigation to private IPs (localhost, 10.x.x, 172.16.x, 192.168.x, 169.254.x) and cloud metadata endpoints by default to prevent SSRF.
Solution:
-
If you intentionally need to navigate to internal URLs (e.g., local development), set the environment variable:
-
This applies to
validate_urlandvalidate_websocket_url. - Warning: Only enable this in trusted environments. Never enable in production with untrusted LLM output.
WebSocket endpoint rejected¶
Symptom: ValueError: WebSocket URL scheme 'http' is not allowed
Cause: connect_endpoint and remote_url only accept ws:// and wss:// schemes.
Solution:
- Use
ws://for unencrypted orwss://for encrypted WebSocket connections. - Example:
wavexis_session_open(connect_endpoint="ws://localhost:9222")
UNC paths not allowed (Windows)¶
Symptom: ValueError: UNC paths are not allowed: '\\server\share\file.png'
Cause: WaveXisMCP rejects UNC paths (\\server\share) for security reasons on Windows.
Solution:
- Map the network share to a drive letter (e.g.,
Z:) and use the drive path instead. - Or copy the file to a local directory and use the local path.
- Set
WAVEXIS_MCP_OUTPUT_DIRto a local directory.
Output path outside allowed directory¶
Symptom: ValueError: Output path '...' is outside the allowed output directory
Cause: All file outputs (screenshots, PDFs, traces) must be within the output directory configured by WAVEXIS_MCP_OUTPUT_DIR (defaults to the current working directory). Paths that escape this directory are rejected.
Solution:
-
Set
WAVEXIS_MCP_OUTPUT_DIRto a directory that contains all your output paths: -
Use relative paths (they are resolved against the output directory).
- Symlinks that escape the output directory are also rejected.
Element not found / stale element¶
Symptom: RuntimeError: element not found or RuntimeError: element is stale
Cause: The CSS selector doesn't match any element, or the element was removed from the DOM after the selector was resolved.
Solution:
- Use
wavexis_dom_getto inspect the current DOM and verify the selector. - Add a wait before interacting:
wavexis_navigate(url="...", wait_timeout=5000). - Use
wavexis_actfor natural language interaction — it handles element matching automatically. - WaveXisMCP auto-retries stale element errors (2 retries, 100ms delay) for
click,fill,hover,tap,select_option, anddouble_click. If the element is persistently stale, the selector may need updating. - Use
wavexis_findto locate elements by text content instead of CSS selectors.
Chrome crashes or hangs¶
Symptom: Browser process crashes, hangs, or becomes unresponsive.
Solution:
- Ensure Chrome is up to date.
- Try
headless=falseto see the browser window for debugging. - Check available memory — Chrome uses ~200-500MB per session.
- Reduce the number of concurrent sessions.
- Use
--capsto limit loaded tools (fewer tiers = less overhead). - If using Docker, ensure sufficient shared memory:
docker run --shm-size=2g ... - Check
dmesgfor OOM killer events on Linux.
HTTP transport not accessible remotely¶
Symptom: HTTP server is reachable locally but not from other machines.
Solution:
-
By default, WaveXisMCP binds to
127.0.0.1. Use--allow-remoteto bind to0.0.0.0: -
Warning:
--allow-remotedisables authentication. Use behind a reverse proxy with authentication (nginx, Caddy, etc.). - Ensure firewall rules allow traffic on the configured port.
BiDi backend not working with Firefox¶
Symptom: WavexisError: Could not connect to the BiDi endpoint at ws://localhost:4444/session
Solution:
- Install geckodriver and ensure it is in your PATH. The BiDi backend auto-launches geckodriver from PATH when no driver is running.
- Windows:
choco install geckodriveror download from github.com/mozilla/geckodriver/releases - macOS:
brew install geckodriver - Linux:
sudo apt install geckodriveror download from the releases page - Ensure Firefox is installed and up to date.
- Use
backend="bidi"andbrowser="firefox"when opening a session: - If you already have geckodriver running on port 4444, the backend will connect to it automatically.
- Requires
wavexis>=2.18.0for Firefox support.
Tool not found / not registered¶
Symptom: LLM tries to call a tool but gets "tool not found"
Cause: The tool belongs to a capability tier that is not enabled.
Solution:
- Check which tiers are enabled:
wavexis-mcp --helpshows the current caps. - Enable the required tier:
wavexis-mcp --caps=core,devtools,a11y - Enable all tiers:
wavexis-mcp --caps=all - See Configuration for the full tier list.
Memory leak / growing memory usage¶
Symptom: Server memory grows over time and doesn't stabilize.
Solution:
- Close sessions when done:
wavexis_session_close. - Use
wavexis_session_listto check for leaked sessions. - Rate limiter buckets are cleaned up on session close. If using stateless mode extensively, restart the server periodically.
- Check for orphaned Chrome processes:
ps aux | grep chrome(Linux) or Task Manager (Windows). - The lifespan handler cleans up all sessions on shutdown, but hard kills (SIGKILL) may leave orphaned browsers.
Getting help¶
If none of these solutions work:
- Open an issue on GitHub
- Check existing issues for similar problems
- Include the WaveXisMCP version (
wavexis-mcp --help), your OS, Chrome version, and the full error message.