Zenaique

An MCP tools/call result comes back. Which content types could it contain?

MCQ·Easy·4.0 · 0·~1 min·Asked atBraintrustScale AiVernacular Ai·Relevant atAnthropic
Attempt it
TL;DR

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.

Memory aid
Sign in to see the mnemonic that makes this stick.
Easy to grasp

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.

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.

Why the resource type exists: lazy fetching
Mixed-type arrays as the default pattern
Tool errors versus protocol errors
Sign in to unlock the full deep dive.

Situations where this technique stops working.

Sign in to see when this approach fails.

2–4 min · Everything important, quickly.

Sign in to see the quick scan of the deep dive.

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.
Sign in to see more production examples.

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?
A

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.

2 more follow-ups an interviewer would ask next. Sign in to reveal them.

Red flags & common mistakes

The phrases that signal junior thinking. Click to expand.

Most common mistake

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.

Sign in to see all red flags and common mistakes.

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.

Sign in to unlock the revision sheet.

Primary sources. Browse if you want the original framing.

Similar questions

Same topic, related formats. Practice these next.

4 curated
Next question
What is the Model Context Protocol (MCP) and what problem does it solve?
MCQ·Easy