Problem
The WebStandard core throws a clear assertion when a stateless transport is reused:
Stateless transport cannot be reused across requests. Create a new transport per request.
The Node wrapper (StreamableHTTPServerTransport via @hono/node-server) converts that assertion into a bare 500 with an empty body — no onerror, no rejection. Combined with Client.connect() unconditionally sending notifications/initialized, a stock official-client <-> official-stateless-server pair fails with an opaque 500, giving no signal that the per-request assembly pattern is required.
Suggestion
- Surface the assertion through
onerror (or reject from handleRequest) so the failure is observable and debuggable.
- Document the per-request pattern ("create a new transport per request") prominently in the stateless guide — it is currently invisible through the Node wrapper.
Context
Observed while integrating the 2026-07-28 stateless core (@modelcontextprotocol/sdk 1.30.0) as an official protocol face. Our workaround (per-request assembly + a notification-dropping client transport) is documented in our project's known-issues log.
Problem
The WebStandard core throws a clear assertion when a stateless transport is reused:
Stateless transport cannot be reused across requests. Create a new transport per request.The Node wrapper (
StreamableHTTPServerTransportvia@hono/node-server) converts that assertion into a bare500with an empty body — noonerror, no rejection. Combined withClient.connect()unconditionally sendingnotifications/initialized, a stock official-client <-> official-stateless-server pair fails with an opaque 500, giving no signal that the per-request assembly pattern is required.Suggestion
onerror(or reject fromhandleRequest) so the failure is observable and debuggable.Context
Observed while integrating the 2026-07-28 stateless core (
@modelcontextprotocol/sdk1.30.0) as an official protocol face. Our workaround (per-request assembly + a notification-dropping client transport) is documented in our project's known-issues log.