From 1ea7df32677ac8348362401abcb4fb7600c4f44b Mon Sep 17 00:00:00 2001 From: Adam Koszek Date: Sun, 27 Jul 2025 05:23:52 -0700 Subject: [PATCH] mcp/examples: Make example more usable. (#160) I'm making this example more useful for debugging: - `-port` is supported - `-host` is supported - error handling is there. --- examples/sse/main.go | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/examples/sse/main.go b/examples/sse/main.go index 3289ee1..59412b1 100644 --- a/examples/sse/main.go +++ b/examples/sse/main.go @@ -7,13 +7,18 @@ 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 ( + host = flag.String("host", "localhost", "host to listen on") + port = flag.String("port", "8080", "port to listen on") +) type SayHiParams struct { Name string `json:"name"` @@ -28,11 +33,19 @@ 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 httpAddr == nil || *httpAddr == "" { - log.Fatal("http address not set") - } + 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) @@ -40,7 +53,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 +66,5 @@ func main() { return nil } }) - log.Fatal(http.ListenAndServe(*httpAddr, handler)) + log.Fatal(http.ListenAndServe(addr, handler)) }