Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @modelcontextprotocol/file-uploads-wg @modelcontextprotocol/core-maintainers
43 changes: 42 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,43 @@
# experimental-ext-file-uploads
Experimental MCP extension for uploading files to tools over MCP. Maintained by the File Uploads Working Group.

Experimental MCP extension for moving files between a client and a tool out of band, so the bytes
stay out of model context and out of JSON-RPC messages. Maintained by the
[File Uploads Working Group](https://modelcontextprotocol.io/community/working-groups/file-uploads).

> [!IMPORTANT]
> This is an [experimental extension](https://modelcontextprotocol.io/extensions/overview#experimental-extensions).
> It is not part of the MCP specification and has not been proposed as a SEP. Expect breaking
> changes while the working group iterates.

## Overview

A server marks file arguments in a tool's input schema. Each file argument contains its metadata
and optional base64 data. When data is absent, the server rejects the call or requests an upload.
The client uploads the bytes and retries with unchanged arguments. A tool returns a file by listing a download target in the result's `_meta`.

The draft is in [`specification/draft/file-uploads.md`](specification/draft/file-uploads.md).
The reference implementation will live in this repository.

## Background

- [Working group meeting notes, October 2, 2026](https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/3412)
- [SEP-2356: Declarative File Inputs](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2356)
(closed), source of the `x-mcp-file` keyword and inline transfer
- [SEP-2631: File Objects and Transfer](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2631)
(closed), prior art for transfer descriptors
- [SEP-2532: Resource Streaming](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2532),
related work on getting file bytes from a server

## Participating

The working group meets weekly and discusses this work in its thread on the
[MCP Discord](https://modelcontextprotocol.io/community/communication#discord). Open an issue or
pull request here for anything specific to the draft.

We want to hear whether the flow fits your storage backend's upload API, which
[open questions](specification/draft/file-uploads.md#open-questions) block you, and whether
anything in the security model would stop you from deploying it.

## License

Apache 2.0. See [LICENSE](LICENSE).
Loading