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.
Important
This is an experimental extension. It is not part of the MCP specification and has not been proposed as a SEP. Expect breaking changes while the working group iterates.
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 from a non-empty file, 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.
The reference implementation will live in this repository.
- Working group meeting notes, October 2, 2026
- SEP-2356: Declarative File Inputs
(closed), source of the
x-mcp-filekeyword and inline transfer - SEP-2631: File Objects and Transfer (closed), prior art for transfer descriptors
- SEP-2532: Resource Streaming, related work on getting file bytes from a server
The working group meets weekly and discusses this work in its thread on the MCP 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 block you, and whether anything in the security model would stop you from deploying it.
Apache 2.0. See LICENSE.