Skip to content

Commit aae9c82

Browse files
authored
Fix tool filtering for SSE missing data: prefix. (#1194)
1 parent 73baeb2 commit aae9c82

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

pkg/mcp/tool_filter.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,13 @@ func processSSEEvents(filterTools map[string]struct{}, buffer []byte, w io.Write
250250
if data, ok := bytes.CutPrefix(line, []byte("data:")); ok {
251251
var toolsListResponse toolsListResponse
252252
if err := json.Unmarshal(data, &toolsListResponse); err == nil && toolsListResponse.Result.Tools != nil {
253+
// We got to the point of processing a real tools list response,
254+
// so we need to write the "data: " prefix first.
255+
_, err := w.Write([]byte("data: "))
256+
if err != nil {
257+
return fmt.Errorf("%w: %v", errBug, err)
258+
}
259+
253260
if err := processToolsListResponse(filterTools, toolsListResponse, w); err != nil {
254261
return err
255262
}

pkg/mcp/tool_filter_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ data: {"type":"info","message":"Processing complete"}
303303
304304
`),
305305
expected: `event: message
306-
{"jsonrpc":"2.0","id":1,"result":{"tools":[{"description":"First","name":"tool1"},{"description":"Third","name":"tool3"}]}}
306+
data: {"jsonrpc":"2.0","id":1,"result":{"tools":[{"description":"First","name":"tool1"},{"description":"Third","name":"tool3"}]}}
307307
308308
event: notification
309309
data: {"type":"info","message":"Processing complete"}
@@ -317,7 +317,7 @@ data: {"type":"info","message":"Processing complete"}
317317
"allowed_tool": {},
318318
},
319319
inputBuffer: []byte("event: message\r\ndata: {\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"tools\":[{\"name\":\"allowed_tool\",\"description\":\"Allowed\"},{\"name\":\"blocked_tool\",\"description\":\"Blocked\"}]}}\r\n\r\n"),
320-
expected: "event: message\r\n{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"tools\":[{\"description\":\"Allowed\",\"name\":\"allowed_tool\"}]}}\n\r\n\r\n",
320+
expected: "event: message\r\ndata: {\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"tools\":[{\"description\":\"Allowed\",\"name\":\"allowed_tool\"}]}}\n\r\n\r\n",
321321
expectError: false,
322322
},
323323
{
@@ -326,7 +326,7 @@ data: {"type":"info","message":"Processing complete"}
326326
"allowed_tool": {},
327327
},
328328
inputBuffer: []byte("event: message\rdata: {\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"tools\":[{\"name\":\"allowed_tool\",\"description\":\"Allowed\"}]}}\r\r"),
329-
expected: "event: message\r{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"tools\":[{\"description\":\"Allowed\",\"name\":\"allowed_tool\"}]}}\n\r\r",
329+
expected: "event: message\rdata: {\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"tools\":[{\"description\":\"Allowed\",\"name\":\"allowed_tool\"}]}}\n\r\r",
330330
expectError: false,
331331
},
332332
{

0 commit comments

Comments
 (0)