From 6d336ce623fa38cc809e0b1ac80f80aacbada8ee Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Mar 2026 12:47:00 +0000 Subject: [PATCH 1/2] Initial plan From ca35e9610c98ca8c5fdc78119c1dda9437350074 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Mar 2026 12:53:51 +0000 Subject: [PATCH 2/2] go-sdk: upgrade to v1.4.0, fix client version, harden protocol constant, remove HTTPTransport dead code Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com> --- go.mod | 6 ++-- go.sum | 20 ++++++------ internal/mcp/http_transport.go | 7 +++-- internal/server/transport.go | 33 -------------------- internal/server/transport_test.go | 52 ------------------------------- internal/server/unified.go | 2 +- 6 files changed, 19 insertions(+), 101 deletions(-) diff --git a/go.mod b/go.mod index b8dde70f..0faebfc5 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.3.1 + github.com/modelcontextprotocol/go-sdk v1.4.0 github.com/spf13/cobra v1.10.2 golang.org/x/term v0.38.0 ) @@ -25,7 +25,7 @@ require ( github.com/segmentio/encoding v0.5.3 // indirect github.com/spf13/pflag v1.0.9 // indirect github.com/yosida95/uritemplate/v3 v3.0.2 // indirect - golang.org/x/oauth2 v0.30.0 // indirect - golang.org/x/sys v0.39.0 // indirect + golang.org/x/oauth2 v0.34.0 // indirect + golang.org/x/sys v0.40.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 195f0e86..850ac997 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +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/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= 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.4.2 h1:tmrUohrwoLZZS/P3x7ex0WAVknEkBZM46iALbcqoRA8= @@ -15,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.3.1 h1:TfqtNKOIWN4Z1oqmPAiWDC2Jq7K9OdJaooe0teoXASI= -github.com/modelcontextprotocol/go-sdk v1.3.1/go.mod h1:DgVX498dMD8UJlseK1S5i1T4tFz2fkBk4xogC3D15nw= +github.com/modelcontextprotocol/go-sdk v1.4.0 h1:u0kr8lbJc1oBcawK7Df+/ajNMpIDFE41OEPxdeTLOn8= +github.com/modelcontextprotocol/go-sdk v1.4.0/go.mod h1:Nxc2n+n/GdCebUaqCOhTetptS17SXXNu9IfNTaLDi1E= 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= @@ -35,14 +35,14 @@ github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= -golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= +golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= -golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= -golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= +golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= +golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/internal/mcp/http_transport.go b/internal/mcp/http_transport.go index 5be5cb6b..6c04377d 100644 --- a/internal/mcp/http_transport.go +++ b/internal/mcp/http_transport.go @@ -30,6 +30,9 @@ const ( HTTPTransportPlainJSON HTTPTransportType = "plain-json" ) +// MCPProtocolVersion is the MCP protocol version used in initialization requests. +const MCPProtocolVersion = "2024-11-05" + // requestIDCounter is used to generate unique request IDs for HTTP requests var requestIDCounter uint64 @@ -376,11 +379,11 @@ func (c *Connection) initializeHTTPSession() (string, error) { // Create initialize request with MCP protocol parameters initParams := map[string]interface{}{ - "protocolVersion": "2024-11-05", + "protocolVersion": MCPProtocolVersion, "capabilities": map[string]interface{}{}, "clientInfo": map[string]interface{}{ "name": "awmg", - "version": "1.0.0", + "version": version.Get(), }, } diff --git a/internal/server/transport.go b/internal/server/transport.go index 4647d603..c3f7c272 100644 --- a/internal/server/transport.go +++ b/internal/server/transport.go @@ -1,8 +1,6 @@ package server import ( - "context" - "log" "net/http" "time" @@ -12,37 +10,6 @@ import ( var logTransport = logger.New("server:transport") -// HTTPTransport wraps the SDK's HTTP transport -type HTTPTransport struct { - Addr string -} - -// Start implements sdk.Transport interface -func (t *HTTPTransport) Start(ctx context.Context) error { - logTransport.Printf("Starting HTTP transport: addr=%s", t.Addr) - // The SDK will handle the actual HTTP server setup - // We just need to provide the address - log.Printf("HTTP transport ready on %s", t.Addr) - return nil -} - -// Send implements sdk.Transport interface -func (t *HTTPTransport) Send(msg interface{}) error { - // Messages are sent via HTTP responses, handled by SDK - return nil -} - -// Recv implements sdk.Transport interface -func (t *HTTPTransport) Recv() (interface{}, error) { - // Messages are received via HTTP requests, handled by SDK - return nil, nil -} - -// Close implements sdk.Transport interface -func (t *HTTPTransport) Close() error { - return nil -} - // CreateHTTPServerForMCP creates an HTTP server that handles MCP over streamable HTTP transport // If apiKey is provided, all requests except /health require authentication (spec 7.1) func CreateHTTPServerForMCP(addr string, unifiedServer *UnifiedServer, apiKey string) *http.Server { diff --git a/internal/server/transport_test.go b/internal/server/transport_test.go index 6553128a..2c4b29e6 100644 --- a/internal/server/transport_test.go +++ b/internal/server/transport_test.go @@ -468,55 +468,3 @@ func TestCreateHTTPServerForMCP_MCPEndpoint(t *testing.T) { }) } } - -// TestHTTPTransport_Interface tests that HTTPTransport implements sdk.Transport interface -func TestHTTPTransport_Interface(t *testing.T) { - transport := &HTTPTransport{ - Addr: ":8080", - } - - // Test Start - ctx := context.Background() - err := transport.Start(ctx) - assert.NoError(t, err, "Start should not return error") - - // Test Send - err = transport.Send("test message") - assert.NoError(t, err, "Send should not return error") - - // Test Recv - msg, err := transport.Recv() - assert.NoError(t, err, "Recv should not return error") - assert.Nil(t, msg, "Recv should return nil message") - - // Test Close - err = transport.Close() - assert.NoError(t, err, "Close should not return error") -} - -// TestHTTPTransport_MultipleCalls tests HTTPTransport with multiple calls -func TestHTTPTransport_MultipleCalls(t *testing.T) { - transport := &HTTPTransport{ - Addr: "localhost:9090", - } - - ctx := context.Background() - - // Multiple Start calls should not fail - for i := 0; i < 3; i++ { - err := transport.Start(ctx) - assert.NoError(t, err, "Start should not return error on call %d", i) - } - - // Multiple Send calls should not fail - for i := 0; i < 3; i++ { - err := transport.Send(map[string]string{"test": "data"}) - assert.NoError(t, err, "Send should not return error on call %d", i) - } - - // Multiple Close calls should not fail - for i := 0; i < 3; i++ { - err := transport.Close() - assert.NoError(t, err, "Close should not return error on call %d", i) - } -} diff --git a/internal/server/unified.go b/internal/server/unified.go index 3c07003c..69c0773a 100644 --- a/internal/server/unified.go +++ b/internal/server/unified.go @@ -26,7 +26,7 @@ import ( var logUnified = logger.New("server:unified") // MCPProtocolVersion is the MCP protocol version supported by this gateway -const MCPProtocolVersion = "2024-11-05" +const MCPProtocolVersion = mcp.MCPProtocolVersion // MCPGatewaySpecVersion is the MCP Gateway Specification version this implementation conforms to const MCPGatewaySpecVersion = "1.8.0"