@@ -30,30 +30,44 @@ func main() {
30
30
lokiQueryTool := handlers .NewLokiQueryTool ()
31
31
s .AddTool (lokiQueryTool , handlers .HandleLokiQuery )
32
32
33
- // Get SSE port from environment variable or use default
34
- ssePort := os .Getenv ("SSE_PORT " )
35
- if ssePort == "" {
36
- ssePort = "8080"
33
+ // Get port from environment variable or use default
34
+ port := os .Getenv ("PORT " )
35
+ if port == "" {
36
+ port = "8080"
37
37
}
38
38
39
- // Create SSE server for HTTP/ SSE connections
39
+ // Create SSE server for legacy SSE connections
40
40
sseServer := server .NewSSEServer (s ,
41
41
server .WithSSEEndpoint ("/sse" ),
42
42
server .WithMessageEndpoint ("/mcp" ),
43
43
)
44
44
45
+ // Create Streamable HTTP server
46
+ streamableServer := server .NewStreamableHTTPServer (s )
47
+
48
+ // Create a multiplexer to handle both protocols on the same port
49
+ mux := http .NewServeMux ()
50
+
51
+ // Register SSE endpoints (legacy support)
52
+ mux .Handle ("/sse" , sseServer ) // SSE event stream
53
+ mux .Handle ("/mcp" , sseServer ) // SSE message endpoint
54
+
55
+ // Register Streamable HTTP endpoint
56
+ mux .Handle ("/stream" , streamableServer ) // Streamable HTTP endpoint
57
+
45
58
// Create a channel to handle shutdown signals
46
59
stop := make (chan os.Signal , 1 )
47
60
signal .Notify (stop , os .Interrupt , syscall .SIGTERM )
48
61
49
- // Start HTTP server in a goroutine
62
+ // Start unified HTTP server
50
63
go func () {
51
- addr := fmt .Sprintf (":%s" , ssePort )
52
- log .Printf ("Starting SSE server on http://localhost%s" , addr )
53
- log .Printf ("SSE Endpoint: http://localhost%s/sse" , addr )
54
- log .Printf ("MCP Endpoint: http://localhost%s/mcp" , addr )
64
+ addr := fmt .Sprintf (":%s" , port )
65
+ log .Printf ("Starting unified MCP server on http://localhost%s" , addr )
66
+ log .Printf ("SSE Endpoint (legacy): http://localhost%s/sse" , addr )
67
+ log .Printf ("SSE Message Endpoint: http://localhost%s/mcp" , addr )
68
+ log .Printf ("Streamable HTTP Endpoint: http://localhost%s/stream" , addr )
55
69
56
- if err := http .ListenAndServe (addr , sseServer ); err != nil && err != http .ErrServerClosed {
70
+ if err := http .ListenAndServe (addr , mux ); err != nil && err != http .ErrServerClosed {
57
71
log .Fatalf ("HTTP server error: %v" , err )
58
72
}
59
73
}()
0 commit comments