diff --git a/cmd/cmd.go b/cmd/cmd.go index 233bae9..d81f303 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -21,13 +21,13 @@ func init() { &flagPkg.Mode, "t", "stdio", - "Transport type (stdio, sse or http)", + "Transport type (stdio, sse, http, or network)", ) flag.StringVar( &flagPkg.Mode, "transport", "stdio", - "Transport type (stdio, sse or http)", + "Transport type (stdio, sse, http, or network)", ) flag.StringVar( &host, diff --git a/gitea-mcp-network b/gitea-mcp-network new file mode 100755 index 0000000..7709fcb Binary files /dev/null and b/gitea-mcp-network differ diff --git a/gitea-mcp-v0.3.0 b/gitea-mcp-v0.3.0 new file mode 100755 index 0000000..31f2a57 Binary files /dev/null and b/gitea-mcp-v0.3.0 differ diff --git a/operation/operation.go b/operation/operation.go index c571202..9a5be72 100644 --- a/operation/operation.go +++ b/operation/operation.go @@ -2,6 +2,7 @@ package operation import ( "fmt" + "net/http" "gitea.com/gitea/gitea-mcp/operation/issue" "gitea.com/gitea/gitea-mcp/operation/pull" @@ -59,8 +60,21 @@ func Run() error { if err := httpServer.Start(fmt.Sprintf(":%d", flag.Port)); err != nil { return err } + case "network": + // Network mode: serve both HTTP and SSE on same port with different URLs + streamableServer := server.NewStreamableHTTPServer(mcpServer) + sseServer := server.NewSSEServer(mcpServer) + + // Create custom HTTP mux + mux := http.NewServeMux() + mux.Handle("/mcp", streamableServer) + mux.Handle("/sse", sseServer) + + // Start single HTTP server + log.Infof("Gitea MCP server listening on :%d (/mcp, /sse)", flag.Port) + return http.ListenAndServe(fmt.Sprintf(":%d", flag.Port), mux) default: - return fmt.Errorf("invalid transport type: %s. Must be 'stdio', 'sse' or 'http'", flag.Mode) + return fmt.Errorf("invalid transport type: %s. Must be 'stdio', 'sse', 'http' or 'network'", flag.Mode) } return nil }