download_url_to_bucket
Server-side copy of a public URL into a bucket (no transcoding).
The server fetches `source_url` itself and streams the bytes straight into
the bucket via a short-lived presigned upload — use this to ingest an
existing asset into Qencode Media Storage as-is. To store a *transcoded*
result instead, set a `destination` on a transcoding job.
IMPORTANT — this call is synchronous and blocking: it returns only after the
whole file has been fetched and uploaded, and there is no job token or
progress to poll (unlike transcoding). The transfer must finish inside the
presigned upload window (~10 minutes) and is size-capped server-side, so it
suits small/medium assets; very large or slow sources may time out — upload
those out-of-band instead.
Args:
source_url: a publicly reachable `http(s)` URL the server can fetch
directly. Non-http(s) schemes and private/loopback hosts are
rejected up front; a source that responds with a redirect or a
4xx/5xx fails the transfer. HTTP redirects are not followed (SSRF);
the tool returns `status: "redirect_not_followed"` with the
`Location` header when it is a public URL you can pass back in.
bucket: destination bucket name. Must already exist on this account
(see `list_buckets`). An unknown name returns
`status: "bucket_not_found"` with recovery instructions — not an
MCP error. Call `list_buckets` and retry with a listed name; do
not retry the same name.
key: destination object key (e.g. `raw/input.mov`). An existing object
at this key is refused (`status: "object_exists"`) — this tool
does not overwrite. Pick a new key.
Returns `{bucket, key, size_bytes, status: "uploaded"}` on success.
Unknown bucket: `{status: "bucket_not_found", error: "..."}` (same
envelope, `size_bytes` 0). Occupied key: `status: "object_exists"`.
Account suspended: `status: "unavailable"`.
SCOPE — this writes using the caller's existing Qencode sign-in: no
separate storage permission, no second approval prompt. The target bucket
belongs to the WHOLE ACCOUNT and is visible to all of its projects. If that
bucket is public, whatever you ingest becomes readable by anyone with its
URL. Act on an explicit request or clear prior context; never ingest
unprompted.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| bucket | Yes | ||
| source_url | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| error | No | ||
| bucket | Yes | ||
| status | Yes | ||
| location | No | ||
| size_bytes | Yes |