Release notes
-
MCP (Model Context Protocol) support — stateless Streamable HTTP endpoint with on-demand browser provisioning
- Structured error responses: JSON-RPC 2.0 for MCP, W3C for WebDriver, with pod-unreachable vs. internal-error classification
- Modernized reverse proxy (Rewrite API) and a WebSocket upstream connection-leak fix
- Updated browser-controller (v0.0.8) and browser-service (v0.0.7) clients
MCP support
- New /mcp endpoint (POST/GET/DELETE) routed to McpHandler.
- initialize (header-less POST) creates a Browser CR and proxies to the per-pod sidecar; subsequent requests resolve the target pod from the Mcp-Session-Id header — same stateless
pod-routing model as the existing WebDriver/Playwright flows. - Unknown or expired MCP sessions return 404, signaling clients to re-initialize.
Error handling
- New error-classification layer: upstream dial failures are reported as 404 (pod unreachable / session expired); all other failures return 500.
- MCP errors are emitted as JSON-RPC 2.0 objects via the new pkg/jsonrpc package, with centralized codes (InvalidParams, InvalidRequest, InternalError, SessionNotFound).
- WebDriver errors are emitted in the W3C shape via selenium.WriteError.
Proxy
- HTTPReverseProxy migrated from the deprecated Director to the Rewrite API (SetXForwarded, ProxyRequest In/Out), with a typed ResponseModifier.
- WSProxy now closes the upstream connection when a client WebSocket upgrade fails — fixes a connection leak.
Dependencies
- browser-controller v0.0.6 → v0.0.8
- browser-service v0.0.6 → v0.0.7
Misc
- auth.Watch is now guarded behind a non-nil auth store.
- README: MCP usage, error-response reference, and synced build variables.