Skip to content

File downloads (MCP resources)

Wire containers expose every uploaded file as an MCP resource. Connected agents can fetch the original bytes of a file, not just the entries that come out of analysis. This is how your agent pulls a raw PDF, reads a CSV start to finish, or grabs an image that lives alongside your structured context. Each download costs 2 credits.

Every file in a container is addressable under:

wire://container/{containerId}/file/{fileId}

This is not a fetchable URL on its own. It’s an opaque identifier that only has meaning inside an authenticated MCP session with your container. Clients resolve it by calling the MCP resources/read method, and Wire answers with a short-lived signed download URL.

A resources/read on a wire:// URI returns a download link, and the client fetches the bytes from that link.

┌──────────┐ resources/read ┌──────────────────┐
│ Agent │────────────────────────→ │ Wire MCP server │
│ client │ { uri: "wire://..." } │ │
└──────────┘ └─────────┬────────┘
▲ │ check the credential,
│ │ charge the download,
│ { contents: [{ │ sign a URL
│ uri, mimeType: │
│ "text/uri-list", │
│ text: "https://…" }] } │
└───────────────────────────────────────────┘
│
│ HTTPS GET (out of band)
▼
┌─────────────────────────────┐
│ The file's original bytes │
└─────────────────────────────┘
  1. The agent’s MCP client calls resources/read on a wire:// URI.
  2. Wire checks that the request carries a credential with access to this container, and that the URI names this container and a file in it. A URI for another container is refused.
  3. Wire charges the download, then returns a text/uri-list resource with a single entry: a signed HTTPS URL for that one file.
  4. The client follows the URL over ordinary HTTPS and gets the file’s original bytes.

Downloads need a credential. An anonymous visitor to a public container can use its read tools, but can’t list or download its files.

resources/list returns the container’s files, each with its wire:// URI, its name, and its MIME type. Any valid wire:// URI the agent already has can be passed to resources/read directly, without listing first.

If an agent is installed on the container with a skill, resources/list also includes that skill’s skill:// file. Reading it is free. See Skills and instructions.

If the installed agent ships interactive views, resources/list also includes each view’s ui:// URI, served as text/html;profile=mcp-app to clients that support MCP Apps. Reading a view is free. See Interactive views (MCP Apps).

  • 2 credits each time resources/read returns a download URL for a wire:// file.
  • The charge happens at resources/read, not when a file is listed. If an agent lists 50 files and downloads 3, you pay for 3. A read that fails, such as one for a file that doesn’t exist, costs nothing.
  • The balance floor that applies to tool calls applies here too: when an organization’s balance is too low, resources/read is refused with an insufficient-credits error and no URL.
  • Listing files, and listing or reading an agent’s skill:// files and ui:// views, are free. Only a wire:// file download is charged.

See Limits for every price.

  • About a minute. After that the URL stops working and the agent calls resources/read again, which is charged again. Fetch the file as soon as the URL arrives.
  • The URL is signed for one file. It can’t be used to fetch a different file, even while it’s valid.
  • Claude Desktop, Claude web, MCP Inspector, Continue, Zed: support MCP resources and follow text/uri-list responses.
  • Claude Code (today): agents can call resources/read on a wire:// URI explicitly and follow the returned URL.

Wire stays spec-compliant, so agents on any conforming client can resolve resources as soon as the client supports them.