@@ -3,6 +3,7 @@ package main
33
44import (
55 "flag"
6+ "fmt"
67 "log"
78 "os"
89 "os/signal"
@@ -14,6 +15,30 @@ import (
1415 "github.com/StacklokLabs/osv-mcp/pkg/osv"
1516)
1617
18+ // TransportMode defines the type for transport modes used by the MCP server.
19+ type TransportMode string
20+
21+ const (
22+ // TransportSSE represents the Server-Sent Events transport mode.
23+ TransportSSE TransportMode = "sse"
24+ // TransportHTTPStream represents the HTTP streaming transport mode.
25+ TransportHTTPStream TransportMode = "http-stream"
26+ )
27+
28+ func getTransportMode () (TransportMode , error ) {
29+ mode := strings .ToLower (strings .TrimSpace (os .Getenv ("MCP_TRANSPORT" )))
30+ if mode == "" {
31+ return TransportSSE , nil // default
32+ }
33+
34+ switch TransportMode (mode ) {
35+ case TransportSSE , TransportHTTPStream :
36+ return TransportMode (mode ), nil
37+ default :
38+ return "" , fmt .Errorf ("invalid MCP_TRANSPORT: %q (allowed: sse, http-stream)" , mode )
39+ }
40+ }
41+
1742// getMCPServerPort returns the port number from MCP_PORT environment variable.
1843// If the environment variable is not set or contains an invalid value,
1944// it returns the default port 8080.
@@ -40,9 +65,10 @@ func main() {
4065 // Parse command-line flags
4166 addr := flag .String ("addr" , ":" + port , "Address to listen on" )
4267 flag .Parse ()
43- mode := strings .ToLower (strings .TrimSpace (os .Getenv ("MCP_TRANSPORT_MODE" )))
44- if mode == "" {
45- mode = "sse" // Default to "sse" if MCP_TRANSPORT_MODE is not set
68+
69+ mode , err := getTransportMode ()
70+ if err != nil {
71+ log .Fatalf ("Error getting transport mode: %v" , err )
4672 }
4773
4874 // Create OSV client
@@ -61,9 +87,9 @@ func main() {
6187 errChan := make (chan error , 1 )
6288 go func () {
6389 switch mode {
64- case "stream" :
90+ case TransportHTTPStream :
6591 errChan <- mcpServer .ServeHTTPStream (* addr )
66- default :
92+ case TransportSSE :
6793 errChan <- mcpServer .ServeSSE (* addr )
6894 }
6995 }()
0 commit comments