Fix: Skip non-message SSE events in processStream (#637)
Fixes #636 ## Problem The StreamableClientTransport tries to JSON-decode ALL SSE events, including ping events sent by servers for keep-alive purposes. This causes errors like 'invalid character 'p' looking for beginning of value' when encountering non-JSON event data. ## Solution Modified processStream to check evt.Name and skip events that are not 'message' events (or unnamed events, which default to 'message' per SSE spec). ## Changes - Added event name check in processStream before attempting JSON decode - Added test case for ping event filtering - Added test for scanning multiple events including ping events ## Testing - All existing tests pass - New tests verify ping events are properly filtered - Tested with DeepWiki MCP server which sends ping events
This commit is contained in:
parent
faddd764aa
commit
9ef2b2742e
1 changed files with 156 additions and 0 deletions
|
|
@ -1656,6 +1656,12 @@ func (c *streamableClientConn) processStream(requestSummary string, resp *http.R
|
|||
lastEventID = evt.ID
|
||||
}
|
||||
|
||||
// Skip non-message events (e.g., "ping" events used for keep-alive)
|
||||
// According to SSE spec, events with no name default to "message"
|
||||
if evt.Name != "" && evt.Name != "message" {
|
||||
continue
|
||||
}
|
||||
|
||||
msg, err := jsonrpc.DecodeMessage(evt.Data)
|
||||
if err != nil {
|
||||
c.fail(fmt.Errorf("%s: failed to decode event: %v", requestSummary, err))
|
||||
|
|
|
|||
Loading…
Reference in a new issue