diff --git a/go.mod b/go.mod index 8a8952bf..bc058008 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.25.0 require ( github.com/BurntSushi/toml v1.6.0 - github.com/modelcontextprotocol/go-sdk v1.1.0 + github.com/modelcontextprotocol/go-sdk v1.2.0 github.com/spf13/cobra v1.10.2 golang.org/x/term v0.38.0 ) diff --git a/go.sum b/go.sum index 76b6e1f9..d4752289 100644 --- a/go.sum +++ b/go.sum @@ -3,6 +3,8 @@ github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/jsonschema-go v0.3.0 h1:6AH2TxVNtk3IlvkkhjrtbUc4S8AvO0Xii0DxIygDg+Q= @@ -13,8 +15,8 @@ github.com/itchyny/gojq v0.12.18 h1:gFGHyt/MLbG9n6dqnvlliiya2TaMMh6FFaR2b1H6Drc= github.com/itchyny/gojq v0.12.18/go.mod h1:4hPoZ/3lN9fDL1D+aK7DY1f39XZpY9+1Xpjz8atrEkg= github.com/itchyny/timefmt-go v0.1.7 h1:xyftit9Tbw+Dc/huSSPJaEmX1TVL8lw5vxjJLK4GMMA= github.com/itchyny/timefmt-go v0.1.7/go.mod h1:5E46Q+zj7vbTgWY8o5YkMeYb4I6GeWLFnetPy5oBrAI= -github.com/modelcontextprotocol/go-sdk v1.1.0 h1:Qjayg53dnKC4UZ+792W21e4BpwEZBzwgRW6LrjLWSwA= -github.com/modelcontextprotocol/go-sdk v1.1.0/go.mod h1:6fM3LCm3yV7pAs8isnKLn07oKtB0MP9LHd3DfAcKw10= +github.com/modelcontextprotocol/go-sdk v1.2.0 h1:Y23co09300CEk8iZ/tMxIX1dVmKZkzoSBZOpJwUnc/s= +github.com/modelcontextprotocol/go-sdk v1.2.0/go.mod h1:6fM3LCm3yV7pAs8isnKLn07oKtB0MP9LHd3DfAcKw10= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= diff --git a/internal/cmd/root.go b/internal/cmd/root.go index 017a5021..2ec495c5 100644 --- a/internal/cmd/root.go +++ b/internal/cmd/root.go @@ -16,6 +16,7 @@ import ( "github.com/githubnext/gh-aw-mcpg/internal/config" "github.com/githubnext/gh-aw-mcpg/internal/logger" + "github.com/githubnext/gh-aw-mcpg/internal/mcp" "github.com/githubnext/gh-aw-mcpg/internal/server" "github.com/spf13/cobra" ) @@ -448,4 +449,5 @@ func SetVersion(v string) { version = v rootCmd.Version = v config.SetGatewayVersion(v) + mcp.SetClientGatewayVersion(v) } diff --git a/internal/mcp/connection.go b/internal/mcp/connection.go index ff07f63e..a913a8c7 100644 --- a/internal/mcp/connection.go +++ b/internal/mcp/connection.go @@ -21,6 +21,17 @@ import ( var logConn = logger.New("mcp:connection") +// gatewayVersion stores the gateway version used in MCP client implementation +// It defaults to "dev" and is set at startup via SetClientGatewayVersion +var gatewayVersion = "dev" + +// SetClientGatewayVersion sets the gateway version for MCP client implementation reporting +func SetClientGatewayVersion(version string) { + if strings.TrimSpace(version) != "" { + gatewayVersion = version + } +} + // parseSSEResponse extracts JSON data from SSE-formatted response // SSE format: "event: message\ndata: {json}\n\n" func parseSSEResponse(body []byte) ([]byte, error) { @@ -76,7 +87,7 @@ type Connection struct { func newMCPClient() *sdk.Client { return sdk.NewClient(&sdk.Implementation{ Name: "awmg", - Version: "1.0.0", + Version: gatewayVersion, }, nil) } diff --git a/internal/server/transport.go b/internal/server/transport.go index 97c2b547..f26994e8 100644 --- a/internal/server/transport.go +++ b/internal/server/transport.go @@ -4,6 +4,7 @@ import ( "context" "log" "net/http" + "time" "github.com/githubnext/gh-aw-mcpg/internal/logger" sdk "github.com/modelcontextprotocol/go-sdk/mcp" @@ -97,7 +98,9 @@ func CreateHTTPServerForMCP(addr string, unifiedServer *UnifiedServer, apiKey st return unifiedServer.server }, &sdk.StreamableHTTPOptions{ - Stateless: false, // Support stateful sessions + Stateless: false, // Support stateful sessions + Logger: logger.NewSlogLoggerWithHandler(logTransport), // Integrate SDK logging with project logger + SessionTimeout: 30 * time.Minute, // Prevent resource leaks from idle connections }) // Wrap SDK handler with detailed logging for JSON-RPC translation debugging