An MCP tools/call result comes back. Which content types could it contain?
The 2026 spec defines four tools/call content types: text, image (base64 plus mimeType), audio (base64 plus mimeType, added 2025), and resource (URI reference). Mixed arrays are allowed; the set is closed.
Think of a tool result as a small package that can hold different kinds of items. MCP gives tools four kinds of boxes to put things in. A text box holds written messages. An image box holds a picture encoded as data. An audio box holds a sound clip. A resource box holds a card that says 'the actual thing lives at this address, go fetch it when you need it.' A single package can contain several boxes at once, like a written summary next to a chart picture, and the host figures out how to show each piece to the model. Servers cannot invent new box types on their own.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
A tools/call result in MCP carries the tool's output as a typed sequence of content blocks. The four valid types in the 2026 spec, the closed-set policy, and the lazy-fetch resource reference are all design decisions that shape how agents handle multimodal payloads.
This explanation enumerates the types, gives the shape of each, explains why mixed arrays are the normal pattern, walks through the resource type's lazy-fetch benefit, and closes with the distinction between in-result tool errors and JSON-RPC protocol errors.
The result shape and the four content types
A tools/call JSON-RPC response returns {content: ContentBlock[], isError?: boolean}. The content array can be empty, contain one block, or contain many. Each block is a JSON object with a type field as the discriminator.
text is {type: "text", text: string}. A UTF-8 string payload for natural language output, query results, code, status messages, or any other text. The most common type by a wide margin.
image is {type: "image", data: string, mimeType: string}. The data field holds image bytes encoded as base64. The mimeType specifies the format (image/png, image/jpeg, image/webp). Hosts forward this to multimodal models as native image input. Browser automation tools return screenshots this way. Charting tools return generated visualizations. OCR tools can return the original image alongside recognized text.
audio is {type: "audio", data: string, mimeType: string}. Added in the 2025 spec. Same shape as image but for audio bytes (audio/wav, audio/mpeg, audio/ogg). Hosts route this to voice-capable models. Tools that synthesize speech, capture recordings, or produce audio analysis use this type.
resource is {type: "resource", resource: {uri: string, mimeType?: string, text?: string, blob?: string}}. Instead of inlining payload data, the block carries a reference to an MCP resource the host can fetch via resources/read. The tool returns a pointer; the host decides whether and when to dereference it.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
Real products, models, and research that use this idea.
- A browser automation server returns a text description of the loaded page alongside an image screenshot; multimodal models read the screenshot as visual input to decide what to click next.
- A speech synthesis server returns an audio block with a wav payload and a text block describing the utterance; voice-capable hosts route the audio to the user, text-only hosts display the description.
What an interviewer would ask next. Try answering before peeking at the approach.
QWhy does MCP define a resource content type instead of always inlining data in text or image blocks?
Inlining forces the tool to pay token and bandwidth cost on every result regardless of whether the model reads the data. A resource URI lets the host fetch lazily. A search returning twenty matches as pointers becomes twenty small blocks; the model picks the one it wants to inspect and only that one is fetched.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Assuming every tool result is plain text. MCP tools can return images, audio, and resource references in the same array, and a single call can mix types freely.
60 second bullets to scan on the way to the call.
Name all four content types: text, image, audio, resource.
State that the type set is closed and servers cannot define custom types.
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.