Error responses carry "id": null, which the MCP schema does not allow
I maintainer di solito rispondono entro 1 giorno
@koic ci sta già lavorando.
Dal 15/10/2026.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- Mezza giornata
- Idoneità per principianti
- 45/100
Direzione di ricerca
Start with the error builders json_rpc_error_response and invalid_request_response, then JsonRpcHandler.error_response, and trace where handle_json and StreamableHTTPTransport#handle_request produce "id": null. Run the repro in the issue, then the tests that assert id: null on purpose. Done means error responses omit id when the request id cannot be read, those tests are updated, and the output validates against the MCP JSONRPCErrorResponse schema.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
When the server can't read a request's id, its error response has "id": null. Plain JSON-RPC 2.0 asks for that, and the tests say it's on purpose. MCP narrows it, though: the id of an error response is optional and, if present, a string or an integer.
- Error responses MUST include the same ID as the request they correspond to (except in error cases where the ID could not be read due a malformed request).
The shape right above it is id?: string | number (Basic Protocol, Error Responses, same in 2026-07-28), and JSONRPCErrorResponse in schema.json has id as an optional RequestId. So these responses don't validate against the schema.
With 1.7.0 (main at 9d12f51 is the same):
server = MCP::Server.new(name: "repro", version: "1.0.0", tools: [], capabilities: { tools: {} })
server.handle_json('{"jsonrpc":"2.0","id":true,"method":"tools/list"}')
# => {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"Invalid Request","data":"Request ID must match validation pattern, or be an integer or null"}}
transport = MCP::Server::Transports::StreamableHTTPTransport.new(server, stateless: true, enable_json_response: true)
env = Rack::MockRequest.env_for("/mcp", method: "POST", input: '{"jsonrpc":"2.0","id":1,"method":"tools/list"}', "CONTENT_TYPE" => "text/plain", "HTTP_ACCEPT" => "application/json")
transport.handle_request(Rack::Request.new(env)).last.first
# => {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"Unsupported Media Type: Content-Type must be application/json"}}
The other HTTP-level errors (406, 405, a body that isn't an object, ...) go through the same json_rpc_error_response and invalid_request_response. The refusal in #605 would follow too, since it goes through JsonRpcHandler.error_response.
Leaving id out when it's unknown would match the schema. The TypeScript SDK sends id: null in the same places, so it's a question of which spec wins; I'd go with the MCP schema, since that's what implementations get checked against (the conformance suite's wire-schema-valid check, for example). I'll open a PR with the change.
- Lingua principale
- Ruby
- Stelle
- 924
- Fork
- 136
- Merge medio
- 1g 5h
- PR unite (30g)
- 37
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di modelcontextprotocol/ruby-sdk
-
Empty members in the Accept header cause a 500Forse già presa @koic l’ha presa oggi. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
modelcontextprotocol/ruby-sdk#609 ·
I maintainer di solito rispondono entro 1 giorno
-
String request ids are limited to letters, digits, "_" and "-"Forse già presa @koic l’ha presa 1 giorno fa. Apertabug
modelcontextprotocol/ruby-sdk#603 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Methods of undeclared capabilities return -32603 instead of -32601Forse già presa @koic l’ha presa 1 giorno fa. Apertabug
modelcontextprotocol/ruby-sdk#602 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Requests with "id": null are run like notificationsForse già presa @koic l’ha presa 1 giorno fa. Apertabug
modelcontextprotocol/ruby-sdk#601 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Support modelcontextprotocol/experimental-ext-triggers-eventsForse già presa @koic l’ha presa 4 giorni fa. Apertaenhancement
modelcontextprotocol/ruby-sdk#594 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di modelcontextprotocol/ruby-sdk
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
TheOdinProject/curriculum#31465 ·
I maintainer di solito rispondono entro 1 giorno
-
agent:triaged bug bughunt pm:bundler priority:p1
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
SocketDev/socket-patch#1573 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Generated server webpack config keeps Rspack's manifest and CSS extraction pluginsForse già presa @justin808 l’ha presa oggi. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
shakacode/react_on_rails#5184 ·
I maintainer di solito rispondono entro 1 giorno
-
bug chat verified
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 6 giorni
-
🐞 bug pending triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
CircuitVerse/CircuitVerse#8031 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno