From 7fa7efae55e0eacb7cdfeb11a886c3e7b87e9009 Mon Sep 17 00:00:00 2001 From: Adam Koszek Date: Wed, 23 Jul 2025 10:56:53 -0700 Subject: [PATCH 1/4] Make example more usable. --- examples/sse/main.go | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/examples/sse/main.go b/examples/sse/main.go index 99b83e65..05edf5f0 100644 --- a/examples/sse/main.go +++ b/examples/sse/main.go @@ -7,13 +7,30 @@ package main import ( "context" "flag" + "fmt" "log" "net/http" + "os" "github.com/modelcontextprotocol/go-sdk/mcp" ) -var httpAddr = flag.String("http", "", "use SSE HTTP at this address") +var ( + httpAddr = flag.String("http", "", "use SSE HTTP at this address (deprecated, use -host and -port instead)") + host = flag.String("host", "localhost", "host to listen on") + port = flag.String("port", "8080", "port to listen on") +) + +func usage() { + fmt.Fprintf(os.Stderr, "Usage: %s [options]\n\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "This program runs MCP servers over SSE HTTP.\n\n") + fmt.Fprintf(os.Stderr, "Options:\n") + flag.PrintDefaults() + fmt.Fprintf(os.Stderr, "\nEndpoints:\n") + fmt.Fprintf(os.Stderr, " /greeter1 - Greeter 1 service\n") + fmt.Fprintf(os.Stderr, " /greeter2 - Greeter 2 service\n") + os.Exit(1) +} type SayHiParams struct { Name string `json:"name"` @@ -30,8 +47,11 @@ func SayHi(ctx context.Context, cc *mcp.ServerSession, params *mcp.CallToolParam func main() { flag.Parse() - if httpAddr == nil || *httpAddr == "" { - log.Fatal("http address not set") + var addr string + if *httpAddr != "" { + addr = *httpAddr + } else { + addr = fmt.Sprintf("%s:%s", *host, *port) } server1 := mcp.NewServer(&mcp.Implementation{Name: "greeter1"}, nil) @@ -40,7 +60,7 @@ func main() { server2 := mcp.NewServer(&mcp.Implementation{Name: "greeter2"}, nil) mcp.AddTool(server2, &mcp.Tool{Name: "greet2", Description: "say hello"}, SayHi) - log.Printf("MCP servers serving at %s", *httpAddr) + log.Printf("MCP servers serving at %s", addr) handler := mcp.NewSSEHandler(func(request *http.Request) *mcp.Server { url := request.URL.Path log.Printf("Handling request for URL %s\n", url) @@ -53,5 +73,8 @@ func main() { return nil } }) - http.ListenAndServe(*httpAddr, handler) + + if err := http.ListenAndServe(addr, handler); err != nil { + log.Fatalf("Failed to start server on %s: %v", addr, err) + } } From 8692d3a2b816fca8a023e4522fd2de7aaa956484 Mon Sep 17 00:00:00 2001 From: Adam Koszek Date: Wed, 23 Jul 2025 11:04:35 -0700 Subject: [PATCH 2/4] Better way to show usage. --- examples/sse/main.go | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/examples/sse/main.go b/examples/sse/main.go index 05edf5f0..aa1dad4e 100644 --- a/examples/sse/main.go +++ b/examples/sse/main.go @@ -19,19 +19,9 @@ var ( httpAddr = flag.String("http", "", "use SSE HTTP at this address (deprecated, use -host and -port instead)") host = flag.String("host", "localhost", "host to listen on") port = flag.String("port", "8080", "port to listen on") + showUsage = flag.Bool("usage", false, "show usage information") ) -func usage() { - fmt.Fprintf(os.Stderr, "Usage: %s [options]\n\n", os.Args[0]) - fmt.Fprintf(os.Stderr, "This program runs MCP servers over SSE HTTP.\n\n") - fmt.Fprintf(os.Stderr, "Options:\n") - flag.PrintDefaults() - fmt.Fprintf(os.Stderr, "\nEndpoints:\n") - fmt.Fprintf(os.Stderr, " /greeter1 - Greeter 1 service\n") - fmt.Fprintf(os.Stderr, " /greeter2 - Greeter 2 service\n") - os.Exit(1) -} - type SayHiParams struct { Name string `json:"name"` } @@ -45,8 +35,22 @@ func SayHi(ctx context.Context, cc *mcp.ServerSession, params *mcp.CallToolParam } func main() { + flag.Usage = func() { + fmt.Fprintf(os.Stderr, "Usage: %s [options]\n\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "This program runs MCP servers over SSE HTTP.\n\n") + fmt.Fprintf(os.Stderr, "Options:\n") + flag.PrintDefaults() + fmt.Fprintf(os.Stderr, "\nEndpoints:\n") + fmt.Fprintf(os.Stderr, " /greeter1 - Greeter 1 service\n") + fmt.Fprintf(os.Stderr, " /greeter2 - Greeter 2 service\n") + os.Exit(1) + } flag.Parse() + if *showUsage { + flag.Usage() + } + var addr string if *httpAddr != "" { addr = *httpAddr From 5f2b816993ff96116c99adbb3f89ed0d04624366 Mon Sep 17 00:00:00 2001 From: Adam Koszek Date: Wed, 23 Jul 2025 15:27:56 -0700 Subject: [PATCH 3/4] Simplify --- examples/sse/main.go | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/examples/sse/main.go b/examples/sse/main.go index aa1dad4e..f1986f4a 100644 --- a/examples/sse/main.go +++ b/examples/sse/main.go @@ -16,10 +16,8 @@ import ( ) var ( - httpAddr = flag.String("http", "", "use SSE HTTP at this address (deprecated, use -host and -port instead)") host = flag.String("host", "localhost", "host to listen on") port = flag.String("port", "8080", "port to listen on") - showUsage = flag.Bool("usage", false, "show usage information") ) type SayHiParams struct { @@ -47,16 +45,7 @@ func main() { } flag.Parse() - if *showUsage { - flag.Usage() - } - - var addr string - if *httpAddr != "" { - addr = *httpAddr - } else { - addr = fmt.Sprintf("%s:%s", *host, *port) - } + addr := fmt.Sprintf("%s:%s", *host, *port) server1 := mcp.NewServer(&mcp.Implementation{Name: "greeter1"}, nil) mcp.AddTool(server1, &mcp.Tool{Name: "greet1", Description: "say hi"}, SayHi) @@ -78,7 +67,5 @@ func main() { } }) - if err := http.ListenAndServe(addr, handler); err != nil { - log.Fatalf("Failed to start server on %s: %v", addr, err) - } + log.Fatal(http.ListenAndServe(addr, handler)) } From 75853915fbe1d2d89c8cfe5983a6ffd95a5674c5 Mon Sep 17 00:00:00 2001 From: Adam Koszek Date: Fri, 25 Jul 2025 20:17:50 -0700 Subject: [PATCH 4/4] Fix formatting. --- examples/sse/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/sse/main.go b/examples/sse/main.go index ee1501ef..59412b15 100644 --- a/examples/sse/main.go +++ b/examples/sse/main.go @@ -16,8 +16,8 @@ import ( ) var ( - host = flag.String("host", "localhost", "host to listen on") - port = flag.String("port", "8080", "port to listen on") + host = flag.String("host", "localhost", "host to listen on") + port = flag.String("port", "8080", "port to listen on") ) type SayHiParams struct {