Skip to content

Daemon crashes on startup with Chrome 151: "data did not match any variant of untagged enum Message" #61

Description

@affligem2001

Summary

On Windows 11 with Chrome 151, the gsd-browser daemon dies during startup. The Rust CDP message deserializer rejects messages emitted by this Chrome build, so every MCP browser_* tool and the gsd-browser CLI (navigate / set-viewport / etc.) hangs or crashes. There is no working session.

Environment

  • @opengsd/gsd-browser: 0.2.2 (latest published)
  • Chrome: 151.0.7922.170 (C:\Program Files\Google\Chrome\Application\chrome.exe)
  • OS: Windows 11 Home 26200
  • Node: >=16

Symptoms / logs

Daemon startup logs the following, then exits:

WARN WS Invalid message: data did not match any variant of untagged enum Message
daemon exited during startup with status exit code: 1

The first line points at the untagged-enum CDP Message deserializer failing to match a frame from Chrome 151. The daemon then terminates with exit code 1 before it is ready, so no browser session is ever established.

Additional observation (may be a second, separable issue)

Loopback fetches from the controlled browser are refused with:

localNetworkAccessRequestPolicy: PermissionBlock

Chrome 151 enforces the Local Network Access permission gate; automating http://localhost:* targets requires the LocalNetworkAccess check to be disabled on launch. Worth surfacing in docs even independent of the deserializer crash.

Impact

Complete loss of the tool surface on this machine — no MCP browser tools and no CLI navigation are usable against Chrome 151.

Workaround in use

Bypassing the daemon entirely: launching headless Chrome with --remote-debugging-port=9222 (and LocalNetworkAccess checks disabled) and driving it over a raw CDP WebSocket from a small Node script. Functional, but a parallel path rather than a fix.

Likely root cause

The untagged Message enum in the daemon's CDP deserializer doesn't cover a message shape/variant introduced (or changed) in Chrome 151's protocol output. A tolerant/#[serde(other)]-style fallback, or updating the protocol schema to Chrome 151, would likely resolve it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions