!+streamablehandler TODO: Until we have a way to clean up abandoned sessions, this test will leak goroutines (see #499)
()
| 20 | |
| 21 | // TODO: Until we have a way to clean up abandoned sessions, this test will leak goroutines (see #499) |
| 22 | func ExampleStreamableHTTPHandler() { |
| 23 | // Create a new streamable handler, using the same MCP server for every request. |
| 24 | // |
| 25 | // Here, we configure it to serves application/json responses rather than |
| 26 | // text/event-stream, just so the output below doesn't use random event ids. |
| 27 | server := mcp.NewServer(&mcp.Implementation{Name: "server", Version: "v0.1.0"}, nil) |
| 28 | handler := mcp.NewStreamableHTTPHandler(func(r *http.Request) *mcp.Server { |
| 29 | return server |
| 30 | }, &mcp.StreamableHTTPOptions{JSONResponse: true}) |
| 31 | httpServer := httptest.NewServer(handler) |
| 32 | defer httpServer.Close() |
| 33 | |
| 34 | // The SDK is currently permissive of some missing keys in "params". |
| 35 | resp := mustPostMessage(`{"jsonrpc": "2.0", "id": 1, "method":"initialize", "params": {}}`, httpServer.URL) |
| 36 | fmt.Println(resp) |
| 37 | // Output: |
| 38 | // {"jsonrpc":"2.0","id":1,"result":{"capabilities":{"logging":{}},"protocolVersion":"2025-11-25","serverInfo":{"name":"server","version":"v0.1.0"}}} |
| 39 | } |
| 40 | |
| 41 | // !-streamablehandler |
| 42 |
nothing calls this directly
no test coverage detected
searching dependent graphs…