Skip to main content
MCP carries no file bytes. The only way a file could travel inside the conversation is base64, and that makes the model type every byte as output: a 10 KB logo costs minutes, a photo costs a fortune. Bevel MCP moves files around the conversation instead.

The order of preference

  1. Brand assets, dropped in before the chat. Nothing to upload during the build. See Brand assets.
  2. fetch_brand, for a business with a website. Zero files.
  3. An upload link, for files you hold. One link per batch, valid fifteen minutes.
  4. A share link. A Google Drive or Dropbox link works anywhere a URL is accepted.
  5. Base64, capped at 100 KB, for a tiny logo when nothing else can work.
The assistant calls upload_media {request_upload_url:true, filenames:[…]} (or upload_font with a family) and gets one link that accepts up to ten files. Then: If it can run commands (Claude Code, Codex, Cowork), it uploads the files itself:
The uploader expands globs, hashes every file so a retry returns the same asset, retries a busy link, and prints the id, URL and tone of each image, or the family, weight and format of each font. Any HTTP client that can send a multipart form works too. If it cannot, it hands you the link. It opens a drop page: no login, no encoding. Drop the files in any order, then go back to the chat. Files land in the media library or Custom Fonts as they arrive. On clients that support URL-mode elicitation, the client shows you the link itself. Afterwards the assistant calls check_upload and matches files by file name and tone, never by upload order: the white one is the light logo whichever came first. A font file on any link is installed as one face of the family the link was minted with, or the one typed on the drop page. One file per weight. The library checks the file’s structure, not just its first bytes. Google Drive and Dropbox share links open a viewer page, not the file. The plugin rewrites them to the direct form before fetching, so pasting a share link as url works for images and fonts.

Receipts

Every file is hashed with SHA-256 on the way in. The same bytes, sent again under any name, return the same attachment or the same font face. A lost response and a retry never make a duplicate.
  • It is minted by a connection and dies with it: revoke the connection and the link answers 403.
  • Only a successful file uses one of its slots; a link that keeps failing closes itself.
  • It accepts images up to 20 MB (or the site’s upload limit, whichever is lower) and fonts up to 4 MB.
  • A file that is not really an image or a font is refused by its bytes, whatever its name says.

The bridge

For Claude Desktop, Cursor and Claude Code, @wpbevel/bridge runs on your machine and uploads from your folders with no link and no clicks. See Connecting.