Skip to main content
Glama

Create upload URL

create-upload-url

Uploads a file (image, video, audio, PDF, or other document) into Canva. Use when the user wants to add, upload, import, or send a file they have — a chat attachment, a local file, or generated content — to Canva, or wants to use such a file in a design, presentation, or their Canva library. Step 1: call this tool to get a single-use upload_url. Step 2: send the raw file bytes as the body of one HTTP POST to that URL with the header "Content-Type: application/octet-stream" — raw bytes only, no multipart form, no base64, no JSON wrapper. The POST response contains resource IDs for the uploaded file: pass them to other Canva tools to reference the file. Each URL allows exactly one upload and expires after a short period; if the URL has been used, has expired, or the upload was rejected, call this tool again for a fresh URL — never retry a used or expired URL. Only for files whose bytes you can access; for a file already at a public URL, prefer a URL-import tool if one is available.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
user_intentNoMandatory description of what the user is trying to accomplish with this tool call. This should always be provided by LLM clients. Please keep it concise (255 characters or less recommended).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
uploadUrlYestime-limited URL to upload the file to: send a single HTTP POST with the raw file bytes as the request body and a content-type header of application/octet-stream — no multipart form, no base64, no JSON wrapper. Valid for exactly one upload
httpMethodYesHTTP method for the upload request; always 'POST'
resultNoteYesreminder of what the upload response contains and how to use it

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses non-obvious behavior well beyond annotations: URL is single-use, expires after a short period, must be consumed with a raw octet-stream POST, must not be retried, and returns resource IDs. This is exactly the kind of operational detail an agent needs and annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured and front-loaded, with a clear purpose statement followed by Step 1/Step 2 instructions. The first sentence is somewhat long with enumerations, but every part contributes useful guidance for correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the full workflow: call this tool, POST raw bytes, handle the response, retry policy, and exclusion of public-URL files. The presence of an output schema means return-value details need not be spelled out, and the description still mentions resource IDs returned by the POST.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, user_intent, is fully documented in the schema with 100% coverage, so the description does not need to repeat it. The description adds context about the broader workflow, but not parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete action: creating a single-use upload URL for files whose bytes the user can access, then uploading those bytes to Canva. It clearly distinguishes itself from URL-import alternatives, which are for files already at a public URL.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use this tool ('when the user wants to add, upload, import, or send a file they have') and when not to ('for a file already at a public URL, prefer a URL-import tool'). It also provides retry guidance, which is essential for correct use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources