Uploads
Three upload methods for cover art and audio files. Cover art is resized to 3000x3000. Audio is transcoded to WAV.
Option A: Base64 Upload
Use upload_file for small local files:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "upload_file",
"arguments": {
"access_token": "<token>",
"type": "coverArt",
"file_name": "cover.jpg",
"file_base64": "<base64>"
}
}
}Accepts raw base64 or data: URLs. Optional mime_type parameter.
Option B: URL Upload
Use upload_file_from_url for large public files:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "upload_file_from_url",
"arguments": {
"access_token": "<token>",
"type": "audio",
"file_url": "https://example.com/track.wav"
}
}
}URL must be publicly accessible (no localhost).
Option C: HTTP Multipart
POST /api/mcp/upload with form-data:
| Field | Value |
|---|---|
file | Binary file |
type | coverArt or audio |
Option D: Chunked Upload
For large local files, use the chunked flow:
1. Initialize
POST /api/upload/init
{
"fileName": "Track.wav",
"fileSize": 2286757,
"fileType": "audio/wav",
"totalChunks": 2,
"sessionId": "uuid-v4",
"type": "audio"
}2. Upload Chunks
POST /api/upload/chunk — Three formats supported:
Multipart: Form-data fields chunk, chunkIndex, sessionId, type
JSON Base64:
{
"sessionId": "uuid-v4",
"chunkIndex": 0,
"type": "audio",
"chunkBase64": "<base64>"
}Raw Bytes: Content-Type: application/octet-stream with headers x-session-id, x-chunk-index, x-upload-type
3. Complete
POST /api/upload/complete
{
"sessionId": "uuid-v4",
"fileName": "Track.wav",
"fileType": "audio/wav",
"type": "audio"
}Limits
| Type | Max Size | Notes |
|---|---|---|
| Cover art | 50 MB | Must be an image |
| Audio | 200 MB | Audio formats or MP4 |
| Chunk | 6 MB | Per chunk |