modelcontextprotocol / modelcontextprotocol/ext-apps
`downloadFile` not implemented on Claude iOS (error -32601)
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 2.9k
- Forks
- 387
- Avg merge
- 3h 21m
- Merged PRs (30d)
- 6
Description
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-apps1.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.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with App.downloadFile and app.getHostCapabilities(), then reproduce the minimal text payload on Claude iOS 1.260323.4 and compare its advertised capabilities with desktop/web behavior. Done means the iOS host advertises downloadFile and the provided reproduction succeeds without error -32601.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, typescript
- Domain
- api, mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100