An OpenClaw server configured by URL alone gets SSE, not Streamable HTTP

Kind: idiosyncrasy · Status: current · Last verified: 2026-08-26 · Clients: openclaw, cline · Revisions: 2025-03-26, 2025-11-25

The resolver checks stdio first. If the server is not stdio, it reads an effective transport name from the config's type or transport field, normalized through a shared alias resolver. Streamable HTTP is built only inside if (effectiveTransport === "streamable-http"). When no transport was named, that branch is skipped and the next statement builds an SSE transport unconditionally. SSE is therefore the default for a URL-only server, and also the fallback when a config asks for Streamable HTTP and that resolution returns nothing.

This is the second client entry with an SSE default for a bare URL, and the two arrived by different routes. Cline's extension schema orders a union with SSE first and carries a comment saying why: reordering it would break configs written before Streamable HTTP existed. OpenClaw's is structural — the modern transport is behind a name check and the deprecated one is the fallthrough — with no comment defending it.

The practical consequence is the same either way. An operator who pastes a URL into config and assumes the current transport gets the one deprecated in 2025-03-26, and nothing in either client says so at connect time.

Recorded as an idiosyncrasy on both clients rather than a gap. The spec does not tell a client how to guess a transport from a bare URL, which is arguably the thing worth fixing.

Sources