Skip to content

downloadFile not implemented on Claude iOS (error -32601) #574

@linxule

Description

@linxule

app.downloadFile() returns JSON-RPC error -32601 (method not found) on Claude iOS. The capability is absent from the host's advertised capabilities.

Environment

  • Host: claude-ios/1.260323.4
  • SDK: @modelcontextprotocol/ext-apps 1.2.2
  • Desktop/web: works as expected

Host capabilities reported on iOS

{
  "openLinks": {},
  "serverTools": { "listChanged": true },
  "serverResources": { "listChanged": true },
  "logging": {},
  "updateModelContext": { "text": {}, "image": {} },
  "message": { "text": {}, "image": {} }
}

No downloadFile entry.

Reproduction

const app = new App({ name: "test", version: "1.0.0" });
await app.connect();

await app.downloadFile({
  contents: [{
    type: "resource",
    resource: {
      uri: "file:///test.txt",
      mimeType: "text/plain",
      text: "hello",
    },
  }],
});
// → MCP error -32601: ui/download-file

This is a minimal text payload — the issue is the missing host handler, not payload size or format.

Context

Discovered while building mcp-music-studio, which exports audio files via downloadFile. Both the EmbeddedResource (blob) and plain text variants fail identically. Android is untested but likely the same.

The runtime capability check (app.getHostCapabilities()?.downloadFile) is a clean detection path — apps can gate on this today and automatically pick up the feature when it ships.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions