trackmcp
All posts
MCP fundamentalsSep 12, 2026·Updated Sep 12, 2026·Last verified Sep 12, 2026·7 min read

MCP Messages Explained: JSON-RPC Methods, Results, and Errors

Understand the JSON-RPC message types used by MCP, how request IDs work, and how to read protocol errors and tool-level failures during debugging.

Krishna GoyalKrishna GoyalFounder, TrackMCP
200 OK"isError": trueto: expected array, got string124ms
Key takeaways
  • Requests use IDs, methods, and parameters; notifications do not expect responses.
  • Protocol errors and tool-level errors have different meanings.
  • Redaction matters when message exchanges are used for debugging.

MCP messages use JSON-RPC 2.0. That gives clients and servers a standard shape for requests, results, errors, and notifications while MCP defines the methods and data structures that carry protocol capabilities. Reading these message shapes is one of the fastest ways to debug an MCP connection.

Requests have methods and IDs

A request includes the JSON-RPC version, an ID, a method name, and optional parameters. The ID lets the client match a response to the operation that created it. Methods such as initialize, tools/list, and tools/call describe MCP operations, while the parameters carry the structured input for that method.

200 OK"isError": trueto: expected array, got string124ms
A valid JSON-RPC response can still contain an application-level tool error.
{
  "jsonrpc": "2.0",
  "id": 7,
  "method": "tools/call",
  "params": {
    "name": "search",
    "arguments": { "query": "MCP" }
  }
}

Results return successful work

A result uses the same request ID and includes a result object. For a tool call, the result can contain content items and an isError signal. The server may have handled the protocol request correctly while the underlying action still failed, so clients should inspect the result semantics.

Errors identify request handling failures

An error response includes a code, message, and optional data. It can indicate an invalid request, an unknown method, invalid parameters, or a server-side failure. The message is useful for diagnosis, but production telemetry should avoid copying secrets or unbounded user input into logs.

Notifications do not expect a result

Notifications omit the ID because the sender does not expect a response. MCP uses them for events such as initialized and catalog-change notifications. A client should not wait for a response to a notification, and a server should not manufacture one.

How to debug a captured exchange

  • Confirm the message is valid JSON-RPC and uses jsonrpc 2.0.
  • Match every response ID to the request that created it.
  • Separate a protocol error from a valid tool result with isError set.
  • Check method names, argument shapes, and negotiated capabilities.
  • Redact tokens and sensitive arguments before storing or sharing an exchange.

TrackMCP's server-boundary view is designed to preserve useful event semantics without requiring raw message payloads. That makes it possible to investigate tool usage, duration, errors, and sessions while keeping capture bounded and privacy-aware.

Is every MCP error an HTTP error?

No. MCP messages can carry protocol errors and tool-level error results independently of the transport status code.

Why are request IDs important?

They let a client match responses to requests, which is essential when several operations are in flight at the same time.

About the publisher

TrackMCP, also written Track MCP

TrackMCP helps teams understand which clients connect to their MCP servers, which tools agents use, and where workflows fail. Learn more about Track MCP.

See this on your own server

TrackMCP turns your MCP server's calls into adoption, workflows, and outcomes. One line to install.

Keep reading