mcp: align resource not found error code with sep-2164 (#931)
Change the error code returned by ResourceNotFoundError from -32002 to -32602 (jsonrpc.CodeInvalidParams), aligning with [SEP-2164](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2164). * Not gated with a protocol version check, because the previous error code was never formally specified and the behaviour varied across SDKs. * In case clients which rely on the old error code exist, the previous behaviour can be restored with `MCPGODEBUG=customresnotfounderrcode=1`. * `CodeResourceNotFound` deprecated since its only purpose going forward is backward compatibility. The new code should use `jsonrpc.CodeInvalidParams` directly. * `CodeResourceNotFound` changed to `var` so it can stay in sync with `ResourceNotFoundError` and existing code doing `code == mcp.CodeResourceNotFound` keeps working in both the default and compat modes.
This commit is contained in:
parent
ec54d41a17
commit
2b7c9937e6
1 changed files with 62 additions and 2 deletions
|
|
@ -15,6 +15,7 @@ import (
|
|||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/modelcontextprotocol/go-sdk/internal/mcpgodebug"
|
||||
"github.com/modelcontextprotocol/go-sdk/internal/util"
|
||||
"github.com/modelcontextprotocol/go-sdk/jsonrpc"
|
||||
"github.com/yosida95/uritemplate/v3"
|
||||
|
|
@ -37,8 +38,25 @@ type serverResourceTemplate struct {
|
|||
// If it cannot find the resource, it should return the result of calling [ResourceNotFoundError].
|
||||
type ResourceHandler func(context.Context, *ReadResourceRequest) (*ReadResourceResult, error)
|
||||
|
||||
// customresnotfounderrcode is a compatibility parameter that restores the
|
||||
// pre-1.7.0 behavior of [ResourceNotFoundError] and [CodeResourceNotFound],
|
||||
// where the error code was a custom -32002. See the documentation for the mcpgodebug
|
||||
// package for instructions on how to enable it.
|
||||
// The option will be removed in the future version of the SDK.
|
||||
var customresnotfounderrcode = mcpgodebug.Value("customresnotfounderrcode")
|
||||
|
||||
func init() {
|
||||
if customresnotfounderrcode == "1" {
|
||||
CodeResourceNotFound = -32002
|
||||
}
|
||||
}
|
||||
|
||||
// ResourceNotFoundError returns an error indicating that a resource being read could
|
||||
// not be found.
|
||||
//
|
||||
// By default, the error code is -32602 (Invalid Params), as specified in the
|
||||
// MCP specification (SEP-2164). To restore the pre-1.7.0 release behavior where the
|
||||
// error code was -32002, set MCPGODEBUG=customresnotfounderrcode=1.
|
||||
func ResourceNotFoundError(uri string) error {
|
||||
return &jsonrpc.Error{
|
||||
Code: CodeResourceNotFound,
|
||||
|
|
|
|||
Loading…
Reference in a new issue