We use cookies to enhance your experience and measure how the site performs. Choose "Essential Only" to disable analytics. Read our Privacy Policy.

    Odeus Docs

    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 blob for binary files, base64-encoded without a data URI prefix.
    • Use text for 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