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

MCP defines five tools/call content types: text, image and audio (base64 plus mimeType; audio added 2025), resource_link (URI pointer) and resource (embedded contents). 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 five 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 link box holds a card that says 'the actual thing lives at this address, go fetch it when you need it.' A resource box holds a whole file or document packed inside. 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 five valid types, the closed-set policy, and the lazy-fetch resource link are all design decisions that shape how agents handle multimodal payloads.

The result shape and the five 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_link is {type: "resource_link", uri: string, name: string, mimeType?: string}. Instead of inlining payload data, the block carries a reference to a resource the host can fetch via resources/read. The tool returns a pointer; the host decides whether and when to dereference it.

resource is {type: "resource", resource: {uri: string, mimeType?: string, text?: string, blob?: string}}. It embeds the resource's contents in the result, as text or a base64 blob.

Why the resource link 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 link 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 five content types: text, image, audio, resource_link, 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