> ## Documentation Index
> Fetch the complete documentation index at: https://docs.langdock.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP File Outputs

> Learn how MCP servers can expose files to Langdock through resources. Langdock turns MCP resource content with text or base64 data into downloadable file attachments.

The [MCP specification](https://modelcontextprotocol.io/specification/2025-11-25/server/resources) 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 Langdock, 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:

```json theme={null}
{
  "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`:

```json theme={null}
{
  "contents": [
    {
      "uri": "file:///reports/report.pdf",
      "mimeType": "application/pdf",
      "blob": "<base64-encoded file bytes>"
    }
  ]
}
```

Langdock reads these `contents` entries and stores them as action-style file outputs. The `uri` provides the filename, the `mimeType` tells Langdock 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:

```typescript theme={null}
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 Langdock reads this resource, it attaches `summary.md` to the conversation.

## Requirements

* Return file data in `contents`.
* Include `mimeType`; Langdock 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

```json theme={null}
{
  "contents": [
    {
      "uri": "file:///example.txt",
      "mimeType": "text/plain",
      "text": "Hello world"
    }
  ]
}
```

Langdock stores this as an attachment and returns file access metadata with the result:

```json theme={null}
{
  "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](/en/using-langdock/guides/integrations/mcp/mcp-file-input) - Pass user-provided files into MCP tools
* [Model Context Protocol (MCP)](/en/using-langdock/guides/integrations/mcp/mcp) - Overview of MCP in Langdock
* [Langdock Agent MCP Server](/en/using-langdock/guides/integrations/mcp/langdock-agent-mcp-server) - Expose your Langdock agents as MCP tools
