MCP File Outputs
Learn how MCP servers can expose files to Odeus through resources. Odeus turns MCP resource content with text or base64 data into downloadable file attachments.
MCP File Outputs
Learn how MCP servers can expose files to Odeus through resources. Odeus turns MCP resource content with text or base64 data into downloadable file attachments.
The MCP specification defines resources as the standard way for MCP servers to expose files and other contextual data to clients. Resources are application-driven: the host application decides how users discover, select, read, preview, or attach them.
In Odeus, MCP resources can become regular file attachments that users can preview, download, and pass to other tools.
MCP Resources for Files
How Resources Work
An MCP server exposes files as resources with stable URIs. A client can discover them through resources/list, then fetch their content through resources/read.
The important part for file output is the resources/read response. Resource contents can be text:
{
"contents": [
{
"uri": "file:///reports/summary.md",
"mimeType": "text/markdown",
"text": "# Summary\n\nGenerated by my MCP server."
}
]
}
Or binary data, encoded as base64 in blob:
{
"contents": [
{
"uri": "file:///reports/report.pdf",
"mimeType": "application/pdf",
"blob": "<base64-encoded file bytes>"
}
]
}
Odeus reads these contents entries and stores them as action-style file outputs. The uri provides the filename, the mimeType tells Odeus how to process the file, and either text or blob contains the file content.
Demo Resource Server
This minimal server exposes one Markdown file as an MCP resource:
server.registerResource(
"summary",
"file:///reports/summary.md",
{
title: "Generated Summary",
description: "A Markdown summary generated by the MCP server",
mimeType: "text/markdown",
},
async (uri) => ({
contents: [
{
uri: uri.href,
mimeType: "text/markdown",
text: "# Summary\n\nThis file came from an MCP resource.",
},
],
}),
);
When Odeus reads this resource, it attaches summary.md to the conversation.
Requirements
- Return file data in
contents. - Include
mimeType; Odeus needs it to process the file correctly. - Include a meaningful
uri; the last path segment becomes the filename. - Use
blobfor binary files, base64-encoded without a data URI prefix. - Use
textfor plain text, Markdown, JSON, HTML, and other text-based files.
Example Resource Output
{
"contents": [
{
"uri": "file:///example.txt",
"mimeType": "text/plain",
"text": "Hello world"
}
]
}
Odeus stores this as an attachment and returns file access metadata with the result:
{
"files": {
"successful_files": [
{
"fileName": "example.txt",
"mimeType": "text/plain",
"status": "completed",
"access_methods": {
"document_search": false,
"file_input_actions": true,
"download_available": true
}
}
]
}
}
Related Documentation
- File Input in MCP Tools - Pass user-provided files into MCP tools
- Model Context Protocol (MCP) - Overview of MCP in Odeus
- Odeus Agent MCP Server - Expose your Odeus agents as MCP tools