NewMCP Production is out: 57 lessons, 14 labsSee the course

Free sheet · Lesson 1.3 of MCP Production

Was it the transport, the protocol or the tool?

The triage table from lesson 1.3: each observation, the boundary it points to, and the evidence to collect next, without guessing at the server.

Download the PDF

A4, prints in colour or greyscale. Same sheet the course hands out.

Where this goes next

Lab 1 throws valid and malformed messages at a real server and checks each error code against the spec, so the table above is something you watch happen.

ObservationBoundaryNext evidence
No usable responseTransport outcome uncertainConnection diagnostics and application commit evidence
HTTP 404 without an MCP bodyEndpoint or intermediaryDestination and routing logs
HTTP 404, -32601Unknown protocol methodServer-supported methods
HTTP 400, -32020Missing/malformed/mismatched mirrorExact header/body comparison
HTTP 400, -32022Unsupported versionerror.data.supported and client support
-32700JSON parse failureOriginal bytes with sensitive values removed
-32600Invalid request envelopeObject shape, method, and ID
-32602Invalid parametersMethod/tool contract
result.isError: trueTool execution failureTool result and application evidence

Synthetic examples, not captured incidents:

{"jsonrpc":"2.0","id":"diagnostic-a","error":{"code":-32020,"message":"Header mismatch: Mcp-Name"}}
{"jsonrpc":"2.0","id":"diagnostic-b","result":{"resultType":"complete","isError":true,"content":[{"type":"text","text":"The requested document is unavailable."}]}}

Do not infer a committed write from a status code or infer no write from a timeout.

Sources: Envelope and errors, tool errors, checked 2026-09-09.

More free sheets#