createmcps.com

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

The server sends its own JSON-RPC request (roots/list, with an id) on the response stream before the final response.
Violates MCP-RES-003 · HTTP
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"}}
The response stream carries only the final response to the client's request.
Complies with MCP-RES-003 · HTTP
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