Content Types Reference
Supported Content Types
According to the MCP specification, tool responses can include various content types to provide rich, multimodal results to clients. The following content types are supported:
TextContent
Text content is the most common content type, containing plain text or formatted text responses.
import io.quarkiverse.mcp.server.Tool;
import io.quarkiverse.mcp.server.TextContent;
import io.quarkiverse.mcp.server.ToolResponse;
public class MyTools {
@Tool(description = "Returns a greeting message")
ToolResponse greet(String name) {
return ToolResponse.success(new TextContent("Hello, " + name + "!"));
}
}
ImageContent
Image content allows tools to return images as base64-encoded data with a MIME type.
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;
import io.quarkiverse.mcp.server.Tool;
import io.quarkiverse.mcp.server.ImageContent;
import io.quarkiverse.mcp.server.ToolResponse;
public class MyTools {
@Tool(description = "Returns an image from the filesystem")
ToolResponse getImage(String filename) throws Exception {
byte[] imageData = Files.readAllBytes(Path.of("images", filename));
String base64Image = Base64.getEncoder().encodeToString(imageData);
return ToolResponse.success(new ImageContent(base64Image, "image/png"));
}
}
AudioContent
Audio content allows tools to return audio data as base64-encoded data with a MIME type.
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;
import io.quarkiverse.mcp.server.Tool;
import io.quarkiverse.mcp.server.AudioContent;
import io.quarkiverse.mcp.server.ToolResponse;
public class MyTools {
@Tool(description = "Returns an audio file")
ToolResponse getAudio(String filename) throws Exception {
byte[] audioData = Files.readAllBytes(Path.of("audio", filename));
String base64Audio = Base64.getEncoder().encodeToString(audioData);
return ToolResponse.success(new AudioContent(base64Audio, "audio/wav"));
}
}
EmbeddedResource
Embedded resource content allows tools to embed resource contents directly in the response.
import io.quarkiverse.mcp.server.Tool;
import io.quarkiverse.mcp.server.EmbeddedResource;
import io.quarkiverse.mcp.server.TextResourceContents;
import io.quarkiverse.mcp.server.ToolResponse;
public class MyTools {
@Tool(description = "Returns a file as an embedded resource")
ToolResponse getFileAsResource(String filename) {
String content = "File content for: " + filename;
return ToolResponse.success(
new EmbeddedResource(
new TextResourceContents("file:///" + filename, content, "text/plain")));
}
}
ResourceLink
Resource link content provides a reference to a resource without embedding its content directly.
import io.quarkiverse.mcp.server.Tool;
import io.quarkiverse.mcp.server.ResourceLink;
import io.quarkiverse.mcp.server.ToolResponse;
public class MyTools {
@Tool(description = "Returns a link to a resource")
ToolResponse getResourceLink(String resourceName) {
String uri = "file:///resources/" + resourceName;
return ToolResponse.success(new ResourceLink(uri, "Link to " + resourceName));
}
}
Multiple Content Types
A single tool response can include multiple content types:
import java.util.Base64;
import io.quarkiverse.mcp.server.Tool;
import io.quarkiverse.mcp.server.TextContent;
import io.quarkiverse.mcp.server.ImageContent;
import io.quarkiverse.mcp.server.AudioContent;
import io.quarkiverse.mcp.server.EmbeddedResource;
import io.quarkiverse.mcp.server.ResourceLink;
import io.quarkiverse.mcp.server.TextResourceContents;
import io.quarkiverse.mcp.server.ToolResponse;
public class MyTools {
@Tool(description = "Returns multiple content types in a single response")
ToolResponse getMultipleContents() {
return ToolResponse.success(
new TextContent("Analysis complete"),
new ImageContent(Base64.getEncoder().encodeToString("chart-data".getBytes()), "image/png"),
new AudioContent(Base64.getEncoder().encodeToString("audio-data".getBytes()), "audio/wav"),
new EmbeddedResource(new TextResourceContents("file:///report.txt", "Report data", "text/plain")),
new ResourceLink("file:///full-results.json", "Full analysis results"));
}
}