diff --git a/go.mod b/go.mod index 5f7c38e6..01e27a4f 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang-jwt/jwt/v5 v5.3.1 github.com/golang-migrate/migrate/v4 v4.19.1 github.com/lib/pq v1.11.1 - github.com/modelcontextprotocol/go-sdk v1.2.0 + github.com/modelcontextprotocol/go-sdk v1.3.0 github.com/stretchr/testify v1.11.1 github.com/swaggo/http-swagger/v2 v2.0.2 github.com/swaggo/swag v1.16.4 @@ -66,7 +66,7 @@ require ( github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/spec v0.20.6 // indirect github.com/go-openapi/swag v0.19.15 // indirect - github.com/google/jsonschema-go v0.3.0 // indirect + github.com/google/jsonschema-go v0.4.2 // indirect github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/jcmturner/aescts/v2 v2.0.0 // indirect diff --git a/go.sum b/go.sum index ef70e527..ca218f73 100644 --- a/go.sum +++ b/go.sum @@ -125,8 +125,8 @@ github.com/golang-migrate/migrate/v4 v4.19.1/go.mod h1:CTcgfjxhaUtsLipnLoQRWCrjY github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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= -github.com/google/jsonschema-go v0.3.0/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE= +github.com/google/jsonschema-go v0.4.2 h1:tmrUohrwoLZZS/P3x7ex0WAVknEkBZM46iALbcqoRA8= +github.com/google/jsonschema-go v0.4.2/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -205,8 +205,8 @@ github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= -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/modelcontextprotocol/go-sdk v1.3.0 h1:gMfZkv3DzQF5q/DcQePo5rahEY+sguyPfXDfNBcT0Zs= +github.com/modelcontextprotocol/go-sdk v1.3.0/go.mod h1:AnQ//Qc6+4nIyyrB4cxBU7UW9VibK4iOZBeyP/rF1IE= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= diff --git a/pkg/middleware/auth.go b/pkg/middleware/auth.go index 3f1b6d34..185b9738 100644 --- a/pkg/middleware/auth.go +++ b/pkg/middleware/auth.go @@ -2,6 +2,7 @@ package middleware import ( "context" + "errors" "github.com/modelcontextprotocol/go-sdk/mcp" @@ -30,14 +31,12 @@ type UserInfo struct { AuthType string // "oidc", "apikey", etc. } -// NewToolResultError creates an error result. +// NewToolResultError creates an error result using the SDK's SetError method. +// The underlying error is retrievable via CallToolResult.GetError(). func NewToolResultError(errMsg string) *mcp.CallToolResult { - return &mcp.CallToolResult{ - IsError: true, - Content: []mcp.Content{ - &mcp.TextContent{Text: errMsg}, - }, - } + result := &mcp.CallToolResult{} + result.SetError(errors.New(errMsg)) + return result } // NewToolResultText creates a text result. diff --git a/pkg/middleware/mcp.go b/pkg/middleware/mcp.go index a46f2af7..6fbc40b2 100644 --- a/pkg/middleware/mcp.go +++ b/pkg/middleware/mcp.go @@ -3,6 +3,7 @@ package middleware import ( "context" "crypto/rand" + "errors" "fmt" "log/slog" "net/http" @@ -224,14 +225,12 @@ func extractToolName(req mcp.Request) (string, error) { return callParams.Name, nil } -// createErrorResult creates an MCP result for an authorization error. +// createErrorResult creates an MCP error result using the SDK's SetError method. +// The underlying error is retrievable via CallToolResult.GetError(). func createErrorResult(errMsg string) mcp.Result { - return &mcp.CallToolResult{ - IsError: true, - Content: []mcp.Content{ - &mcp.TextContent{Text: errMsg}, - }, - } + result := &mcp.CallToolResult{} + result.SetError(errors.New(errMsg)) + return result } // extractBearerOrAPIKey extracts an auth token from HTTP headers. diff --git a/pkg/platform/platform.go b/pkg/platform/platform.go index fe451f77..f2357c8a 100644 --- a/pkg/platform/platform.go +++ b/pkg/platform/platform.go @@ -745,7 +745,9 @@ func (p *Platform) finalizeSetup() { p.mcpServer = mcp.NewServer(&mcp.Implementation{ Name: p.config.Server.Name, Version: p.config.Server.Version, - }, nil) + }, &mcp.ServerOptions{ + SchemaCache: mcp.NewSchemaCache(), + }) // Add MCP protocol-level middleware. //