MCP-RES-003
Server sends no independent JSON-RPC requests on a response stream
“The server MUST NOT send independent JSON-RPC requests on this stream.” — spec anchor
How to fix this
Send only responses on a response stream. To ask the client for something, return an `input_required` result carrying `inputRequests` and let the client retry — that is what replaced server-initiated requests.
Example: failing and passing
POST /mcp HTTP/1.1
Mcp-Method: tools/list
...
HTTP/1.1 200 OK
Content-Type: text/event-stream
X-Accel-Buffering: no
data: {"jsonrpc": "2.0", "id": "srv-1", "method": "roots/list"}
data: {"jsonrpc": "2.0", "id": 1, "result": {"resultType": "complete", "tools": [], "ttlMs": 300000, "cacheScope": "public"}}POST /mcp HTTP/1.1
Mcp-Method: tools/list
...
HTTP/1.1 200 OK
Content-Type: text/event-stream
X-Accel-Buffering: no
data: {"jsonrpc": "2.0", "id": 1, "result": {"resultType": "complete", "tools": [], "ttlMs": 300000, "cacheScope": "public"}}How the validator checks this
Probe P2.1, against a streamable-http server on the modern protocol. What it reports:
- pass
- No server-initiated JSON-RPC request appeared on the … response stream… observed
- fail
- The response stream carried server-initiated JSON-RPC request(s): …. A response stream must carry responses only.
- skip
- No text/event-stream response was returned in this run, so there was no response stream to inspect
Quoted from the probe that runs this check, so it cannot drift from what the validator actually reports.
This rule is checked deterministically: a fail here is a certain violation, not an inference.
Checked in the same request as MCP-HDR-008, MCP-HDR-009, MCP-RES-006, MCP-RES-007, MCP-ERR-003, MCP-ERR-004, MCP-ERR-005, MCP-ERR-008, MCP-CAC-001, MCP-CAC-002, MCP-CAC-003, MCP-CAC-004, MCP-CAC-005, MCP-SCH-001, MCP-SCH-002, MCP-SCH-003, MCP-SCH-004, MCP-SCH-005, MCP-SCH-006, MCP-SCH-007, MCP-SEC-004, MCP-SEC-005, MCP-SEC-006, MCP-DEP-005.
Check your own server against MCP-RES-003
Probe P2.1 checks MCP-RES-003 in the same request as 24 other rules, so one run shows your server's result for this rule next to the rest. Validate a server or read how the validator works.
Background on this topic: the 2026-07-28 migration guide.
Other Result and message shape rules
- MCP-RES-001Every result includes resultType
- MCP-RES-002resultType is a value defined by core or an advertised extension
- MCP-RES-004Accepted notification POST returns 202 with no body
- MCP-RES-005Response is application/json or text/event-stream; SSE terminates with the final response
- MCP-RES-006SSE responses set X-Accel-Buffering: no
- MCP-RES-007tools/list returns a deterministic order