Context
WaveXisMCP currently supports Chrome/Edge (via CDP) and Firefox (via BiDi). Safari is the only major browser we don't support. Playwright MCP supports it — this is one of the few areas where they beat us.
Safari doesn't support CDP and its BiDi support is experimental/incomplete. The path forward is WebDriver Classic (W3C HTTP-based protocol) via safaridriver, which is pre-installed on macOS.
What needs to happen
In wavexis (the library)
- New file wavexis/backend/webdriver.py — WebDriverBackend class implementing AbstractBackend
- HTTP client using stdlib urllib or httpx (no Selenium dependency)
- Auto-launch safaridriver from /usr/bin/safaridriver
- Translate our backend methods to WebDriver Classic commands (POST/GET HTTP)
- Implement: navigate, screenshot, click, type, eval, cookies, tabs, get_title, get_url
- Unsupported methods raise UnsupportedOperationError
- BrowserOptions.browser accepts 'safari'
- BackendManager registers the webdriver backend
- Unit tests for the new backend
In wavexis-mcp (this repo)
- SessionOpenInput.browser accepts 'safari'
- When browser='safari', auto-select webdriver backend
- Unsupported tools return error with suggestion: 'Safari does not support this feature. Use backend=cdp or bidi with Chrome/Firefox.'
What works vs what doesn't
| Category |
WebDriver Classic |
Tools |
| Navigate, screenshot, click, type, eval, cookies, tabs |
Yes |
~72 (core) |
| Network interception, HAR, mock, throttle |
No |
20 |
| DevTools (performance, trace, coverage, debugging) |
No |
31 |
| Video recording, screencast |
No |
4 |
| BiDi events, raw BiDi |
No |
- |
| Storage (localStorage, IndexedDB) |
Partial (via executeScript) |
18 |
| Emulation (device, geolocation, timezone) |
No |
9 |
| A11y snapshot |
Partial (via executeScript) |
4 |
~72 of 220 tools would work (core tier). The rest returns a clear error.
Constraints
- macOS only — safaridriver does not exist on Windows/Linux
- Core tools only — 72/220
- CI can't test it — GitHub Actions Ubuntu has no Safari (manual testing required)
Getting started
- Read wavexis/backend/abstract.py to understand the AbstractBackend interface
- Read wavexis/backend/bidi.py for a reference implementation
- Check wavexis_mcp/session.py to see how backends are selected
- Join the discussion below if you have questions!
References
Context
WaveXisMCP currently supports Chrome/Edge (via CDP) and Firefox (via BiDi). Safari is the only major browser we don't support. Playwright MCP supports it — this is one of the few areas where they beat us.
Safari doesn't support CDP and its BiDi support is experimental/incomplete. The path forward is WebDriver Classic (W3C HTTP-based protocol) via safaridriver, which is pre-installed on macOS.
What needs to happen
In wavexis (the library)
In wavexis-mcp (this repo)
What works vs what doesn't
~72 of 220 tools would work (core tier). The rest returns a clear error.
Constraints
Getting started
References