SEP-2164: Standardize resource not found error code (-32602)#2164
Merged
Conversation
5faa2ee to
348d8e7
Compare
348d8e7 to
310784e
Compare
Contributor
|
related: modelcontextprotocol/python-sdk#1821 |
Member
|
Previous discussion (for reference): #1545. |
Contributor
Author
yeah I remember this, but didn't realize it was already so inconsistent. Any client has to handle various values anyway to work with real servers out there, so we might as well just trying and get all servers to converge. |
da439aa to
8e938f2
Compare
9 tasks
Maintainer Activity CheckHi @pja-ant! You're assigned to this SEP but there hasn't been any activity from you in 18 days. Please provide an update on:
If you're no longer able to sponsor this SEP, please let us know so we can find another maintainer. This is an automated message from the SEP lifecycle bot. |
0125e6c to
a2ef384
Compare
a2ef384 to
9d8520d
Compare
yarolegovich
added a commit
to modelcontextprotocol/go-sdk
that referenced
this pull request
May 5, 2026
Change the error code returned by ResourceNotFoundError from -32002 to -32602 (jsonrpc.CodeInvalidParams), aligning with [SEP-2164](modelcontextprotocol/modelcontextprotocol#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.
Resolve conflicts: - docs/specification/draft/changelog.mdx: combine the resource-not-found error-code change with the deterministic-order, SEP-2243, and SEP-2549 minor-change entries from main; renumber the error-code item to 6. - docs/seps/index.mdx: regenerate from source (npm run generate:seps) so SEP-2164 lists alongside the SEPs that landed on main. :house: Remote-Dev: homespace
Contributor
|
/lgtm force This was accepted by CM vote |
5 tasks
This was referenced Jun 6, 2026
Open
Closed
9 tasks
9 tasks
koic
added a commit
to modelcontextprotocol/ruby-sdk
that referenced
this pull request
Jun 14, 2026
…-2164 ## Motivation and Context SEP-2164 (modelcontextprotocol/modelcontextprotocol#2164, merged for the 2026-07-28 spec release) standardizes the resource-not-found error on the JSON-RPC Invalid Params code (-32602), dropping the legacy -32002 code, and both reference SDK implementations attach the requested URI as structured error data (typescript-sdk#2267 throws `InvalidParams` with `data: { uri }`; python-sdk#2344 adds a `ResourceNotFoundError` that maps to `code=-32602, data={"uri": ...}`). The Ruby server already used -32602 (via `error_type: :invalid_params`) for its built-in not-found path (`completion/complete` with an unknown `ref/resource` URI), but the response carried no structured data and the generic "Invalid params" message, and there was no public error class for `resources_read_handler` blocks to raise. The Ruby client never special-cased -32002, so nothing needed removal there. - New public `MCP::Server::ResourceNotFoundError` (modeled on the `URLElicitationRequiredError` precedent): code -32602, message `"Resource not found: <uri>"`, and `data: { uri: <uri> }`. Custom `resources_read_handler` blocks raise it for unknown URIs; the README documents the pattern. - The `completion/complete` `ref/resource` not-found path now raises this class, so its error response gains `data: { uri: }` and a descriptive message instead of the generic "Invalid params" text. - The default `resources/read` behavior (returning empty contents for unknown URIs when no handler is registered) is intentionally unchanged; raising there would alter existing wire behavior. Resolves #379. ## How Has This Been Tested? New tests in `test/mcp/server_test.rb`: - `resources/read` with a handler raising `ResourceNotFoundError` responds with code -32602, message `"Resource not found: file:///missing.txt"`, and `data: { uri: "file:///missing.txt" }` - `completion/complete` with an unknown `ref/resource` URI carries the same code, message, and structured data New test in `test/mcp/client_test.rb` asserts `Client#read_resource` surfaces the -32602 code and the `data` hash unmodified through `Client::ServerError` (regression: no special-casing swallows it). The pre-existing completion error-code tests pass unchanged. `bundle exec rake` (tests, RuboCop, and conformance baseline) passes. ## Breaking Changes None at the JSON-RPC code level (-32602 before and after). The `completion/complete` resource-not-found error response changes shape within the error object: `message` becomes `"Resource not found: <uri>"` instead of `"Invalid params"`, and `data` becomes `{ uri: <uri> }` instead of the message string. Both members are advisory per JSON-RPC 2.0.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This SEP standardizes the error code for resource not found from
-32002to-32602(Invalid Params), aligning with the JSON-RPC specification. Includes the draft spec change.