Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan Now×
Skip to content
World desk7 min

Five MCP Payloads Real Clients Send, and What a Strict Server Does With Each (Revision 2026-07-28)

Five representative MCP payloads under the 2026-07-28 revision, with the validation order a strict server should follow and how it separates tool errors from protocol errors.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A strict MCP server does not trust a payload because it parses as JSON-RPC. It first decides which protocol revision the request belongs to, then checks the envelope, routing headers, declared capabilities, and method parameters before any tool, resource, or prompt handler runs. The examples below use the current 2026-07-28 revision, with one older handshake included only as a comparison point.

“Five” is an editorial selection of representative patterns, not a canonical list defined by the protocol. The five are: a legacy initialize handshake, a tools/call, a resources/read, a prompts/get, and a multi-round input_required retry. A task-polling extension is covered as an alternative fifth case.

As an Amazon Associate I earn from qualifying purchases.

Which protocol revision you are validating against

Every payload check starts with the revision. The official MCP blog announcement of the 2026-07-28 specification (published 2026-07-28) identifies that date as the current revision and states that its lifecycle and transport envelope changed from the earlier 2025-11-25 revision. Mixing the two in one test suite produces false failures, because a request that is valid in one revision can be meaningless in the other.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Aspect Earlier sessionful flow (2025-era comparison) Revision 2026-07-28
Session setup initialize request, then initialized; server returns a session ID initialize and initialized retired; no session setup exchange
Session header Mcp-Session-Id carried on later requests Mcp-Session-Id retired
Version and client identity Sent in the initialize request Carried in request metadata on each request
Streamable HTTP routing headers Not stated in the cited announcement for this flow MCP-Protocol-Version, Mcp-Method, and Mcp-Name are shown in the current examples
Server-initiated input Standalone elicitation/create, sampling/createMessage, and roots/list requests Replaced by multi-round requests using resultType: "input_required" and client retries

The announcement establishes the revision change but does not prescribe one universal rejection response for a revision mismatch. How a server answers a stale envelope depends on its implementation, so the behavior described under payload 1 is a recommendation for a strict server, not a rule every server follows.

The order a strict server checks a request

  1. Determine the protocol revision the request claims, and whether this server serves it.
  2. Validate the JSON-RPC envelope: jsonrpc version, id, method, and params object shape.
  3. On Streamable HTTP, compare routing headers against the body. Mcp-Method and Mcp-Name should agree with the method and target name in the body. This comparison is an implementation check inferred from the documented headers; the sources do not define a single mismatch error.
  4. Confirm that any capability the request depends on was declared by the client for that request.
  5. Validate method parameters against the definition the server advertised: tool input schema, resource URI, or prompt arguments.
  6. Invoke the handler only after steps 1 to 5 pass.
  7. If the tool advertises an output schema, validate its structuredContent before returning it.

Steps 1 to 5 produce protocol-level rejections. Failures inside step 6 belong to the tool, and step 7 belongs to the server’s own output.

Payload 1: legacy initialize handshake

The older flow starts with a JSON-RPC initialize request POSTed by the client. It carries a protocol version, client capabilities, and client info, and the server answers with a session ID that later requests must send back. It remains useful for migration testing because many existing clients and logs still contain it.

A strict server handles it this way:

  • It identifies the request as belonging to the earlier lifecycle before treating it as a current stateless request.
  • It accepts the old envelope only when it intentionally implements that compatibility path. Otherwise it should reject it explicitly, not silently create a session under the newer rules.
  • It does not expect an Mcp-Session-Id on requests that the 2026-07-28 revision governs.

Payload 2: tools/call

A current tools/call is a JSON-RPC request with method: "tools/call", a tool name, an arguments object, and client identity in _meta. Over Streamable HTTP, the 2026-07-28 examples also carry MCP-Protocol-Version, Mcp-Method, and Mcp-Name headers.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
{n  "jsonrpc": "2.0",n  "id": 1,n  "method": "tools/call",n  "params": {n    "name": "search",n    "arguments": { "q": "otters" },n    "_meta": {n      "io.modelcontextprotocol/clientInfo": {n        "name": "my-app",n        "version": "1.0"n      }n    }n  }n}

The TypeScript SDK’s client guide calls a tool by name with a plain arguments object. It also makes an important distinction for error handling. A tool that ran and failed can still return a normal result marked with isError. An unknown tool name or a timeout is a protocol-level failure instead. Clients and tests should check both paths separately.

What a strict server does

  • Checks that name refers to a tool it actually advertises. An unknown name is a protocol-level error, not an isError result.
  • Validates arguments against the selected tool’s input schema before calling the handler. Invalid arguments should never reach handler code.
  • Keeps _meta client identity separate from tool arguments. Client metadata must not be read as a tool parameter.
  • Returns handler failures as results marked with isError, so the client can distinguish a broken tool call from a broken request.
  • If the tool declares an output schema, makes sure its structuredContent conforms, because the SDK client validates returned content against that schema.

Payload 3: resources/read

A client normally reads a resource after discovering it. The request carries a single uri:

{n  "jsonrpc": "2.0",n  "id": 2,n  "method": "resources/read",n  "params": { "uri": "orders://recent" }n}

The response contains content items with a URI and MIME type, plus either text or a base64 blob.

What a strict server does

  • Requires uri to be present and to be a string the server can map to one of its resources.
  • Rejects URIs outside the schemes and paths it publishes, and does not guess at a resource from a partial match.
  • Returns exactly one of text or blob per content item, matching the declared MIME type.
  • Applies its own access control before reading. The SDK example does not define which URIs a given user may read, and that policy belongs to the resource server.

Payload 4: prompts/get

To retrieve a prompt, the client sends its name and an arguments object. The server fills the prompt’s template with those values and returns messages.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
{n  "jsonrpc": "2.0",n  "id": 3,n  "method": "prompts/get",n  "params": {n    "name": "summarize-order",n    "arguments": { "id": "A-1041", "tone": "terse" }n  }n}

What a strict server does

  • Checks the prompt name against the prompts it advertised.
  • Rejects missing required arguments and arguments of the wrong type, using the argument definitions from the prompt’s advertised contract.
  • Decides explicitly how to handle unknown argument keys. Ignoring them silently can hide client bugs, while rejecting them can break clients that send extra fields. The SDK documentation describes the call shape and returned messages, not a universal policy here, so the choice should follow the prompt’s contract.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Payload 5: multi-round input with input_required

The 2026-07-28 revision removes the standalone server-initiated requests for elicitation, sampling, and root listing. In their place, a server can answer an ordinary request with resultType: "input_required", asking the client for more information. The client then retries the original call with an inputResponses field.

The TypeScript migration guide adds two details that matter for implementers. The retry uses a fresh request ID, and the server’s requestState must be echoed back byte-exact. Its automatic driver defaults to a maximum of ten rounds. Those details come from the SDK documentation for the 2026-07-28 revision, so a client that exceeds its own round limit should fail the call rather than loop.

What a strict server does

  • Confirms that the client declared the capabilities needed for the input it is requesting before asking for it.
  • Validates submitted input against the schema it sent before using it. The Python SDK’s dependency guidance recommends schema-aware validation of accepted elicitation content.
  • Verifies that requestState comes back unchanged. A modified or missing state should fail the round rather than being reconstructed.
  • Distinguishes missing, declined, and mismatched content. The migration guide notes that typed input-response readers can make these distinctions.

Alternative fifth case: task capability and polling

The Tasks extension is a separate pattern, not a replacement for tools/call. Support is declared in per-request client capabilities. A server can return a durable task handle, and the client then polls tasks/get with the task ID. When a required task capability is absent, the extension documents error -32003, “Missing required client capability.”

A strict server should reject a task-dependent request that lacks the capability with -32003 instead of falling back silently to a synchronous call, and should treat an unknown task ID on tasks/get as a request error.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Testing checklist for implementers

  • Send one request per payload family under the 2026-07-28 revision and confirm each is accepted only with its required headers and metadata.
  • Send the legacy initialize flow and confirm your server either handles it through a deliberate compatibility path or rejects it explicitly.
  • Send a tool call with invalid arguments and confirm the handler is never invoked.
  • Send a tool that throws and confirm the response is an isError result, not a protocol error.
  • Send a resources/read with an unknown URI and a prompts/get with a missing argument and confirm both are rejected before any content is generated.
  • Alter the requestState in an input round and confirm the server fails the round.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Outdated Drivers Are Slowing You DownFree scan - exact matches

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.