What it does
Attach a real file to a task — a PDF, a screenshot, a spreadsheet, anything too large or too binary for an inline deliverable. Reserves a stored file on the task and returns a one-time upload_url. Then PUT the file's raw bytes to that URL with NO Authorization header (e.g. curl -X PUT --data-binary @report.pdf "<upload_url>"): the link itself is the credential, it works for one successful upload, and it expires 15 minutes after this call, so request it right before you upload. Once the PUT succeeds, record the file on the task with update_task as a deliverable {label, kind, artifact_id}, using the artifact_id returned here. To replace a file you already attached, pass its artifact_id — the deliverable keeps pointing at the newest upload. Refused for a read-only token, a task outside this token's project or workspace, a task in Trash, and a file past the size ceilings (25 MB per file, 100 MB across a task, 1 GB across the account).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
task_id | string | Required | The task the file belongs to |
label | string | Required | What the file is, as a human reads it — e.g. "Q3 report" |
filename | string | null | Optional | What the downloaded file should be called. Advisory and sanitised before use — the extension comes from an allow-list, not from you. |
kind | string | Optional | "pdf" for a PDF; "binary" (the default) for anything else. Allowed values pdfbinary |
size_bytes | number | Required | The file's exact size in bytes. The quotas are checked against it now, and the upload is refused if the bytes you PUT are larger. |
artifact_id | string | null | Optional | To replace a file you already uploaded to this task: its artifact_id. Omit to attach a new file. |
Annotations
The hints the server sends with this tool. A host reads them to decide whether to ask you before a call.
- Read-only
readOnlyHint: false - Changes data in your Done account.
- Destructive
destructiveHint: false - Only adds or reads; nothing already there is removed or overwritten.
- Idempotent
idempotentHint: false - Each call can add something new, such as a comment, a run or a task.
- Open world
openWorldHint: false - Touches only your own Done account.
Which tokens can call it
A connection made with OAuth has full access. A token from Settings → Agent access → Extra MCP tokens can be narrowed, and a narrowed token never sees beyond its project or workspace.
- Full accessAllowed
- Read-only tokenRefused
- Single-project tokenAllowed
- Single-workspace tokenAllowed
Try it
With Done connected, ask your assistant something like:
“Attach the PDF report to the quarterly review task.”
Connect Done to your assistant
One MCP endpoint per account, over OAuth or a token. Step-by-step setup for each client: