examples: Fix SSE streaming issue by moving logging from HTTP to MCP middlewarre (#614)

In `examples/http`, previous HTTP-level logging middleware blocked SSE
streaming because `handler.ServeHTTP()` does not return until the
connection closes for GET requests (SSE streams).
This prevented response headers from being sent to the client.

Changes:
- Replace HTTP-level logging handler with MCP middleware pattern
- Implement logging at the MCP protocol layer using mcp.Middleware
- Add middleware to server using AddReceivingMiddleware()
- Simplify main.go by removing HTTP handler wrapping

This allows SSE streams to work properly while still providing detailed
logging for all MCP protocol-level method calls.

Fixes #632
This commit is contained in:
Spring_MT 2025-11-12 01:56:52 +09:00 • committed by GitHub
commit 35dfcf21c9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -117,6 +117,9 @@ func runServer(url string) {
Version: "1.0.0",
}, nil)
// Add MCP-level logging middleware.
server.AddReceivingMiddleware(createLoggingMiddleware())
// Add the cityTime tool.
mcp.AddTool(server, &mcp.Tool{
Name: "cityTime",
@ -128,13 +131,11 @@ func runServer(url string) {
return server
}, nil)
handlerWithLogging := loggingHandler(handler)
log.Printf("MCP server listening on %s", url)
log.Printf("Available tool: cityTime (cities: nyc, sf, boston)")
// Start the HTTP server with logging handler.
if err := http.ListenAndServe(url, handlerWithLogging); err != nil {
// Start the HTTP server.
if err := http.ListenAndServe(url, handler); err != nil {
log.Fatalf("Server failed: %v", err)
}
}