Skip to main content
Glama

Server Details

The Canva MCP server connects AI assistants (like Claude, ChatGPT, and Cursor) to Canva's API, enabling them to create and manage designs directly within chat conversations. Key capabilities include generating new designs from prompts, autofilling templates, searching and resizing existing designs, importing files from URLs, exporting designs as PDFs or images, and managing folders and comments without switching between tools.

Ownership verified
Status
Healthy
Uptime
60.4% over 41 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

B3.3/5.0

Scored across 35 tools

Disambiguation2/5

Multiple tools have overlapping purposes: create-design, create-design-from-candidate, generate-design, create-design-from-brand-template, and import-design-from-url all create designs with different sources/methods, and the descriptions contain complex conditional logic rather than clear boundaries. Similarly, get-design-thumbnail and get-design-pages both provide page thumbnails, and search-brand-templates vs list-brand-kits could be confused. The heavy use of LEGACY-ONLY flags and brand exceptions adds ambiguity.

Naming Consistency3/5

The tool names generally follow a verb_noun pattern (e.g., get-design, list-comments, create-folder), but there are inconsistent exceptions like 'merge-designs' (verb without hyphen), 'resize-design' (verb_noun but no hyphen), and 'perform-editing-operations' (verb-object with an adjective). Also, some names like 'get-design-candidates' and 'create-design-from-candidate' are verbose and less uniform.

Tool Count2/5

With 35 tools, this is a heavy toolset. While the server covers a broad design platform, many tools are highly specialized (e.g., get-design-candidates for widget polling) and could be consolidated or hidden. The count exceeds the typical range for coherence, making it harder for agents to select the right tool.

Completeness4/5

The toolset covers a wide range of design workflows: create, read (get-design, get-design-content), update (perform-editing-operations, commit-editing-transaction), delete (cancel-editing-transaction), and additional operations like resizing, merging, importing, exporting, comments, and folder management. Minor gaps exist, such as lack of a direct 'delete-design' tool and limited user collaboration features, but core lifecycle is well-covered.

Available Tools

35 tools
cancel-editing-transactionDiscard Design EditsA
Destructive
Inspect

Undo or discard all unsaved changes in an active Canva editing transaction.

Use to cancel a set of in-progress edits or finish editing without saving.

The unsaved changes will be permanently lost, and the transaction_id can no longer be used. Returns confirmation that the changes were discarded.

ParametersJSON 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).
transaction_idYesExact ID of the active editing transaction whose changes to discard. Use the transaction_id returned when that editing transaction was started.

TDQS

A4.2/5.0
Behavior4/5

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

The description goes beyond the destructiveHint annotation by stating that unsaved changes are permanently lost and the transaction_id can no longer be used. It also mentions the return behavior ('confirmation that the changes were discarded'), which is useful since there is no output schema.

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

Conciseness5/5

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

The description is short, front-loaded with the core action, and every sentence adds relevant information. There is no filler or repetition beyond what is needed for clarity.

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

Completeness4/5

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

For a cancellation tool with a destructive annotation, the description covers what happens, the side effect on transaction_id, and the confirmation return. With no output schema, a bit more detail about the confirmation response could be useful, but the current description is sufficient for an agent to invoke the tool safely.

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?

Schema coverage is 100%, so the schema already explains transaction_id and user_intent. The description adds only minor context by calling the transaction 'active' and noting the ID comes from the start operation, but it does not materially improve parameter understanding 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?

The description clearly states the action ('Undo or discard all unsaved changes') and the specific resource ('active Canva editing transaction'). It also signals the opposite of saving, which differentiates it from the sibling commit-editing-transaction without needing to open that tool.

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

Usage Guidelines4/5

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

The description explicitly says when to use the tool: 'cancel a set of in-progress edits or finish editing without saving.' It does not name the commit sibling as the alternative for saving, but the context is clear enough for an agent to choose correctly.

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

comment-on-designAdd Comment To DesignAInspect

Leave a new comment on an existing Canva design as a note to self or for collaborators to read.

Use to give feedback, ask a question about a design, flag an issue, or add context for people working on it. The comment is visible to everyone who has access to the design.

Returns the created comment and its comment_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
design_idYesID of the existing Canva design to comment on. Design IDs start with "D".
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).
message_plaintextYesThe text content of the comment to add.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only state readOnlyHint=false and destructiveHint=false. The description adds that the comment is visible to all design collaborators and that the call returns the created comment and comment_id, which is important side-effect and outcome information. It could mention permission requirements, but this is adequate.

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

Conciseness5/5

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

The description is compact and front-loaded with the core action, followed by use cases, visibility, and return value. Every sentence adds useful information without redundancy.

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

Completeness4/5

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

For a simple create tool with no output schema, the description covers main use cases, visibility, and return shape. A small gap is the absence of explicit guidance to use reply-to-comment when the user is responding to an existing comment, and it doesn't resolve the user_intent 'mandatory' wording in the schema.

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?

Schema description coverage is 100%, and all three parameters have their own descriptions, so the tool description doesn't need to elaborate on them. It adds no new parameter semantics beyond implying the comment body is message_plaintext; baseline 3 is appropriate.

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?

The description opens with a specific verb and resource: 'Leave a new comment on an existing Canva design.' It also clarifies scope by saying 'new comment' and 'visible to everyone who has access,' which distinguishes this top-level comment action from sibling tools like reply-to-comment.

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

Usage Guidelines4/5

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

It explicitly lists when to use the tool: giving feedback, asking a question, flagging an issue, or adding context for collaborators. It doesn't mention exclusions or direct the agent to reply-to-comment for responses to existing comments, so it falls short of full alternative routing.

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

commit-editing-transactionSave Design EditsA
Destructive
Inspect

Make all draft changes in an active Canva editing transaction permanent.

Use to save a completed set of edits, including text, layout, or media updates.

Show the user a preview of the design and obtain their explicit approval before calling this tool.

Saving applies all draft changes to the design, closes the editing transaction, and makes its transaction_id invalid. Returns confirmation that the changes were saved.

ParametersJSON 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).
transaction_idYesExact ID of the active editing transaction whose draft changes should be saved.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already flag destructiveHint: true, so the description adds value by disclosing the concrete consequences: 'apply all draft changes to the design, closes the editing transaction, and makes its transaction_id invalid.' It also mentions return behavior ('Returns confirmation'). This goes beyond the annotation without contradicting it.

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

Conciseness5/5

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

Four sentences, each earning its place: purpose, use case, approval requirement, and operational effect. Front-loaded with the main action. No redundancy or filler.

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

Completeness4/5

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

For a destructive mutation with two well-documented parameters and no output schema, this description covers purpose, usage gating, behavioral consequences, and return confirmation. It could mention error scenarios (e.g., already-closed transaction) but that is a minor omission given the clarity provided.

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?

Schema coverage is 100% with clear descriptions for both parameters: transaction_id is 'Exact ID of the active editing transaction' and user_intent is described. The description adds no new parameter-specific details beyond restating that the transaction is active and that the id becomes invalid—context already implied by the schema's phrasing. Baseline 3 is appropriate.

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 specific verb ('make permanent'), resource ('all draft changes in an active Canva editing transaction'), and scope ('text, layout, or media updates'). Clearly distinguishes from sibling cancel-editing-transaction by describing the permanent save action and from start-editing-transaction by implying an existing transaction.

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 instructs when to use it ('to save a completed set of edits') and provides a mandatory precondition: 'Show the user a preview of the design and obtain their explicit approval before calling this tool.' This gives the agent clear decision and action guidance, including a human-in-the-loop step.

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

copy-designCopy DesignAInspect

Duplicate an existing Canva design, or copy selected pages from it, into a new design.

Use to make a separate working copy, create an independent cloned, forked, or backup version, or preserve the original before making changes. For a single source design only. Not for combining pages from more than one design.

Creates a new design. The source design remains unchanged. Returns the new design's design_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
design_idYesID of the existing Canva design to copy.
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).
page_numbersNoPages to include in the new design, numbered from 1. For example, use [1, 3, 5] to copy pages 1, 3, and 5. Omit to copy every page.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations are all false with no hints about effects, so the description carries the burden. It clearly states that the tool creates a new design, leaves the source unchanged, and returns the new design_id. This meaningfully explains the behavioral outcome beyond the schema.

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

Conciseness5/5

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

The description is concise and well-structured: the core action is in the first line, usage scenarios follow, and the key side-effect/result is stated last. Every sentence earns its place with no filler.

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?

For a low-complexity tool with a fully documented schema and no output schema, the description covers what the tool does, when to use it, what it creates, the source immutability, and the returned design_id. Nothing essential is missing for correct invocation.

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?

Schema description coverage is 100%, so the schema already documents design_id and page_numbers thoroughly. The description adds a small hint by mentioning 'copy selected pages', but does not go beyond the schema's explicit parameter documentation.

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?

The description uses a specific verb ('Duplicate') and resource ('existing Canva design'), and explains the page-selection variation. It distinguishes itself from siblings by explicitly stating it is not for combining pages from more than one design, setting it apart from merge-designs.

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?

The description explicitly lists when to use the tool: making a separate working copy, cloning, forking, backing up, or preserving the original. It also gives clear exclusion criteria: single source design only and not for combining pages from multiple designs.

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

create-design-from-brand-templateCreate Design from Brand TemplateAInspect

Create a new Canva design from a brand template. Optionally select specific pages to include. If the user has already provided a brand template ID (a string starting with "BTM"), call this tool directly with that ID — do NOT call search-brand-templates first. Only use search-brand-templates when no ID has been provided and you need to discover one. If you need to fill template fields with custom data, use the autofill-design tool instead.

ParametersJSON 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).
page_numbersNoOptional 1-based page numbers to include from the brand template. Omit to use all pages.
brand_template_idYesThe ID of the brand template to create a design from.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate this is a mutating operation (readOnlyHint=false, destructiveHint=false), so the description doesn't need to restate that. The description adds useful context about page selection and the direct-call behavior, but it doesn't disclose what happens if the template ID is invalid, whether the design is created in a specific folder, or what the response contains. With annotations covering the basic safety profile, a 3 is appropriate.

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

Conciseness5/5

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

The description is compact and front-loaded: the core action is stated first, followed by the optional behavior, then the routing guidance. Every sentence earns its place, and the guidance is actionable without being verbose.

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

Completeness4/5

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

For a creation tool with no output schema, the description covers the main decision points: when to call directly, when to search, and when to use autofill. It doesn't describe the return value or error cases, but the routing guidance and parameter semantics are strong enough that an agent can invoke the tool correctly in most scenarios.

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?

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds context for `page_numbers` (optional, 1-based, omit for all pages) and `brand_template_id` (direct-call behavior), but it doesn't add meaning beyond what the schema already provides. Baseline 3 is correct.

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?

The description states a specific verb ('Create') and resource ('a new Canva design from a brand template'), and explicitly distinguishes itself from the sibling `search-brand-templates` and `autofill-design`. It also clarifies the optional page selection behavior, making the tool's purpose unambiguous.

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?

The description provides explicit when-to-use guidance: call directly when a brand template ID is already known, do NOT call `search-brand-templates` first, and use `autofill-design` instead when custom data needs to be filled. This is strong routing guidance that leaves little to inference.

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

create-design-from-candidateCreate Design From CandidateAInspect

LEGACY-ONLY — DO NOT CALL WHEN create-design IS AVAILABLE. If create-design is in the tool list, you MUST NOT call this tool. Call create-design instead. BRAND EXCEPTION: create-design cannot apply a brand kit or base a design on a brand template. When the user asks for an on-brand design — their brand kit, their brand colours, fonts or logo, or a brand template to base the design on — call this tool instead of create-design. All instructions below apply when create-design is absent from the tool list, and whenever the request is an on-brand one. A failed create-design call does not make it unavailable.

Create a new Canva design from a generation job candidate ID. This converts an AI-generated design candidate into an editable Canva design. If successful, returns a design summary containing a design ID that can be used with the editing_transaction_tools. To make changes to the design, first call this tool with the candidate_id from generate-design results, then use the returned design_id with start-editing-transaction and subsequent editing tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesID of the design generation job that created the candidate design. This is returned in the generate-design response.
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).
candidate_idYesID of the candidate design to convert into an editable Canva design. This is returned in the generate-design response for each design candidate.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation profile is covered. The description adds context beyond annotations: the create-then-edit sequential workflow (call this first, then use returned design_id with start-editing-transaction and editing tools), and the requirement to obtain candidate_id from generate-design results. It does not contradict the annotations.

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?

The description is longer than average but every block earns its place given the complex routing requirements. The 'LEGACY-ONLY' warning and brand exception are front-loaded before the core workflow. Slight redundancy exists (the DO NOT CALL constraint is stated twice), and the routing block could be tightened, but the structure is effective and information-dense rather than padded.

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

Completeness4/5

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

For a tool in a 33-sibling ecosystem with no output schema, the description handles the return value itself ('design summary containing a design ID') and the cross-tool sequencing with generate-design and start-editing-transaction. One minor gap: the routing condition references create-design, which is not actually present in this tool list — the conditional is somewhat hypothetical here, though the description does gracefully state it applies 'when create-design is absent from the tool list.'

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the provenance of both job_id and candidate_id ('returned in the generate-design response') and the ordering requirement linking them to the generate-design pipeline. This ties each parameter to its upstream source, which the schema alone does not convey.

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 specific verb and resource — 'Create a new Canva design from a generation job candidate ID' — and clarifies the mechanism: 'converts an AI-generated design candidate into an editable Canva design.' This distinguishes it from generate-design (which produces candidates) and create-design-from-brand-template (brand-templated variants), so an agent can separate it from siblings without opening schemas.

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?

Exceptionally explicit routing: it names the preferred alternative (create-design), forbids calling this tool when that alternative is present, and carves out a precise brand exception ('brand kit, brand colours, fonts or logo, brand template'). It also notes that a failed create-design call does not make this tool available. This is textbook when-to-use vs when-not-to-use guidance.

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

create-folderCreate FolderAInspect

Create a Canva folder to organise related work.

Use to set up a project folder, add a subfolder within an existing folder, or keep designs, images, and folders together. Returns the new folder, including its folder_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new Canva folder.
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).
parent_folder_idYesID of the Canva folder that will contain the new folder. Use "root" to create the folder at the top level.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate this is a non-read-only, non-destructive mutation. The description adds useful behavioral context by stating that it returns the new folder including its folder_id. It does not discuss permissions or edge cases, but the annotation coverage lowers the burden.

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?

The description is concise and front-loaded with the core action. The use-case sentence adds value, though 'keep designs, images, and folders together' slightly overlaps with 'organise related work'. Overall, every sentence earns its place.

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

Completeness4/5

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

For a simple create operation, the description covers purpose, use cases, and the return value. Since there is no output schema, mentioning the returned folder_id is helpful. The 'root' special value for parent_folder_id is already covered in the schema.

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?

Schema description coverage is 100%, so the parameters are already well documented. The description does not add significant parameter-level meaning beyond what the schema provides, which makes the baseline score of 3 appropriate.

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?

The description uses a specific verb and resource: 'Create a Canva folder'. It clearly states the purpose ('organise related work') and is distinct from sibling tools like search-folders, list-folder-items, and move-item-to-folder.

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

Usage Guidelines4/5

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

It provides clear context for when to use the tool: setting up a project folder, adding a subfolder, or keeping related items together. It does not explicitly name alternatives or exclusions, but the use cases are specific enough for an agent to select it correctly.

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

create-upload-urlCreate upload URLAInspect

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.

ParametersJSON 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

ParametersJSON Schema
NameRequiredDescription
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

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.

export-designExport DesignA
Read-only
Inspect

Export an existing Canva design as a downloadable file to save and use outside Canva.

Use when a selected design needs to be printed, attached to an email, sent or shared as a file outside Canva, converted to another file type, or downloaded as selected pages.

Only call after you have confirmed that the selected design supports the requested format. Returns a download URL for the exported file.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYesExport settings for the downloadable file.
design_idYesID of the existing Canva design to export. Design IDs start with "D".
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).

TDQS

A4/5.0
Behavior3/5

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

Annotations already mark this as readOnly and non-destructive, and the description does not contradict them. It adds useful context by stating that the operation returns a download URL and requires prior format-support confirmation, but it does not disclose async behavior, rate limits, or other side effects beyond the annotation-covered safety profile.

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

Conciseness5/5

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

The description is three short, front-loaded paragraphs: purpose, when-to-use, and precondition/return behavior. Every sentence adds distinct information without redundancy or filler.

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

Completeness4/5

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

For an export tool with no output schema, the description covers the core outcome (download URL), the key precondition, and representative use cases. It does not address failure modes or asynchronous timing, but the schema carries parameter-level detail, making this sufficient for a 3-parameter tool.

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?

Schema description coverage is 100%, and every parameter (design_id, format, user_intent) along with the nested format fields has a descriptive entry in the input schema. The tool description does not repeat or add parameter semantics, so the baseline 3 applies.

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?

The description names a specific verb and resource ('Export an existing Canva design as a downloadable file') and enumerates concrete use cases: printing, emailing, sharing, converting, or downloading selected pages. This clearly distinguishes it from sibling tools like get-design or get-design-pages, which retrieve design data rather than produce a downloadable artifact.

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

Usage Guidelines4/5

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

It provides explicit 'Use when...' conditions covering five concrete scenarios and a hard precondition: 'Only call after you have confirmed that the selected design supports the requested format.' It does not name alternatives or explicit when-not-to-use cases, so it stops short of a 5.

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

generate-designGenerate Design with AIA
Read-only
Inspect

LEGACY-ONLY — DO NOT CALL WHEN create-design IS AVAILABLE. If create-design is in the tool list, you MUST NOT call this tool. Call create-design instead. BRAND EXCEPTION: create-design cannot apply a brand kit or base a design on a brand template. When the user asks for an on-brand design — their brand kit, their brand colours, fonts or logo, or a brand template to base the design on — call this tool instead of create-design. All instructions below apply when create-design is absent from the tool list, and whenever the request is an on-brand one. A failed create-design call does not make it unavailable.

Generate professionally designed content in Canva including visual designs (posters, social media posts, presentations, flyers) and text-based documents (memos, articles, newsletters, proposals, reports, business plans, requirements documents).

Each extra slide adds significant latency (e.g. 15 slides can take 3x longer than 5). Keep to 1-5 slides unless the user explicitly requests more.

Use this tool when the user asks you to write, create, generate, or draft ANY document or visual design. Examples:
- "Write a memo..." → use this tool to create a Canva Doc
- "Generate a business proposal..." → use this tool to create a Canva Doc
- "Draft a product overview..." → use this tool to create a Canva Doc

DO NOT use this tool for fixed-format visual designs when prepare-design-generation is available.
Do NOT use this tool when the user just wants advice, explanations, or information.
DO NOT use this tool when the user's message contains a URL and their intent is to create a design FROM that URL — use import-design-from-url instead.

Use the 'query' parameter to tell AI what you want to create.
The tool doesn't have context of previous requests. ALWAYS include details from previous queries for each iteration.
The tool provides best results with detailed context. ALWAYS look up the chat history and provide as much context as possible in the 'query' parameter.
Ask for more details when the tool returns this error message 'Common queries will not be generated'.
The generated designs are design candidates for users to select from.
Ask for a preferred design and use 'create-design-from-candidate' tool to add the design to users' account.
The IDs in the URLs are not design IDs. Do not use them to get design or design content.
When using the 'asset_ids' parameter, assets are inserted in the order provided. For small designs with few image slots, only supply the images the user wants. For multi-page designs like presentations, supply images in the order of the slides.
The tool will return a list of generated design candidates, including a candidate ID, preview thumbnail and url.
Before editing, exporting, or resizing a generated design, follow these steps:
1. call 'create-design-from-candidate' tool with 'job_id' and 'candidate_id' of the selected design
2. call other tools with 'design_id' in the response

For presentations, target 1-5 slides by default (length: "short"). Format the query string with these sections in order (use the headers exactly):
1. **Presentation Brief**
  Include:

* **Title** (working title for the deck)
* **Topic / Scope** (1–2 lines; include definitions if terms are uncommon)
* **Key Messages** (3–5 crisp takeaways)
* **Constraints & Assumptions** (timebox, brand, data limits, languages, etc.)
* **Style Guide** (tone, color palette, typography hints, imagery style)

2. **Narrative Arc**
  A one-paragraph outline of the story flow (e.g., Hook → Problem → Insight → Solution → Proof → Plan → CTA). Keep transitions explicit.

3. **Slide Plan**
  Provide numbered slides with **EXACT titles** and detailed content. For each slide, include all of the following subsections in this order (use the labels exactly):

  * **Slide {N} — "{Exact Title}"**
  * **Goal:** one sentence describing the purpose of the slide.
  * **Bullets (3–6):** short, parallel phrasing; facts, examples, or specifics (avoid vague verbs).
  * **Visuals:** explicit recommendation (e.g., "Clustered bar chart of X by Y (2022–2025)", "Swimlane diagram", "2×2 matrix", "Full-bleed photo of <subject>").
  * **Data/Inputs:** concrete values, sources, or placeholders to be filled (if unknown, propose realistic ranges or example figures).
  * **Speaker Notes (2–4 sentences):** narrative details, definitions, and transitions.
  * **Asset Hint (optional):** reference to an asset by descriptive name or index if assets exist (e.g., "Use Asset #3: 'logo_dark.svg' as corner mark").
  * **Transition:** one sentence that logically leads into the next slide.

> Ensure the Slide Plan forms a **cohesive story** (each slide's Goal and Transition should support the Narrative Arc).

**Quality checklist (the model must self-check before finalizing)**

* Titles are unique, concise (≤ 65 characters), and action-or insight-oriented.
* Each slide has 3–6 bullets; no paragraph walls; numbers are specific where possible.
* Visuals are concrete (chart/diagram names + variables/timeframes); tables are used only when necessary.
* Terminology is defined once and used consistently; acronyms expanded on first use.
* Transitions form an intelligible narrative; the story arc is obvious from titles alone.
* No placeholders like "[TBD]" or "[insert]". If data is unknown, propose realistic figures and label as "example values".
* All required headers and subsections are present, in the exact order above.
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesQuery describing the design to generate. Ask for more details to avoid errors like 'Common queries will not be generated'. When 'verbatim' is true, this must be the exact markdown text the user wants in the document (do not summarize or reformat it).
lengthNoPresentation length. Only provide this for presentations when the user explicitly requests a specific length. "short" = 1-5 slides, "balanced" = 5-15 slides, "comprehensive" = 15+ slides. If omitted, defaults to "short".
verbatimNoSet this to true whenever the user supplies their own text/markdown and wants it placed into a Canva Doc exactly as written — i.e. they say "verbatim", "as-is", "word for word", "exactly as written", or "don't rewrite/summarize/reword/change it". When true, the query is rendered into the document with NO AI rewriting, so pass the user's literal markdown in "query" (do not summarize or reformat it). Only honoured for design_type "doc"; ignored for any other design type (normal AI-assisted generation is used instead). Supports #/## headings, paragraphs, **bold**, *italics*, and bullet/numbered lists; tables, links, code blocks, and images are not supported.
asset_idsNoOptional list of asset IDs to insert into the generated design. Assets are inserted in order, so provide them in the intended sequence. For presentations, order should match slide sequence.
design_typeYesThe design type to generate. Options and their descriptions: - 'business_card': A [business card](https://www.canva.com/create/business-cards/); professional contact information card. - 'card': A [card](https://www.canva.com/create/cards/); for various occasions like birthdays, holidays, or thank you notes. - 'desktop_wallpaper': A desktop wallpaper; background image for computer screens. - 'doc': A [Canva Doc](https://www.canva.com/docs/); Modern, collaborative documents for business communications and written content. Use this for: memos, articles, technical articles, newsletters, requirements documents (product requirements, business requirements), agendas, strategic plans, go-to-market plans, business proposals, solution proposals, event proposals, company announcements, product overviews, summaries, and other text-heavy professional documents. Canva Docs are web-first with dynamic layouts optimized for online collaboration and interactive content. NOT for: Visual proposal templates with graphics (use 'proposal'), data-heavy reports with charts (use 'report'), traditional fixed-layout templates (use 'document'). - 'document': A [document](https://www.canva.com/create/documents/); traditional page-based document template with fixed layouts. For most business writing, use "doc" instead. - 'email': An [email](https://www.canva.com/emails/); use this for designing email newsletters, promotional emails, and marketing campaigns intended to be sent to recipients. - 'facebook_cover': A [Facebook cover](https://www.canva.com/create/facebook-covers/); banner image for your Facebook profile or page. - 'facebook_post': A Facebook post; ideal for sharing content on Facebook. - 'flyer': A [flyer](https://www.canva.com/create/flyers/); single-page promotional material. - 'infographic': An [infographic](https://www.canva.com/create/infographics/); for visualizing data and information. - 'instagram_post': An [Instagram post](https://www.canva.com/create/instagram-posts/); perfect for sharing content on Instagram. Generated at 1080x1350px (portrait, 4:5 ratio). - 'invitation': An invitation; for events, parties, or special occasions. - 'logo': A [logo](https://www.canva.com/create/logos/); for creating brand identity. - 'phone_wallpaper': A phone wallpaper; background image for mobile devices. - 'photo_collage': A [photo collage](https://www.canva.com/create/photo-collages/); for combining multiple photos into one design. - 'pinterest_pin': A Pinterest pin; vertical image optimized for Pinterest. - 'postcard': A [postcard](https://www.canva.com/create/postcards/); for sending greeting cards through the mail. - 'poster': A [poster](https://www.canva.com/create/posters/); large format print for events or decoration. - 'presentation': A [presentation](https://www.canva.com/presentations/); lets you create and collaborate for presenting to an audience. - 'proposal': A [proposal](https://www.canva.com/create/proposals/); visually-designed business proposal template with graphics and structured layouts. For text-focused proposals, use "doc" instead. - 'report': A [report](https://www.canva.com/create/reports/); visually-designed report template with charts, graphics, and data visualization. For text-focused reports, use "doc" instead. - 'resume': A [resume](https://www.canva.com/create/resumes/); professional document for job applications. - 'twitter_post': A Twitter post; optimized for sharing on Twitter/X. - 'your_story': A Story; vertical format for Instagram and Facebook Stories. - 'youtube_banner': A [YouTube banner](https://www.canva.com/create/youtube-banners/); channel header image for YouTube - 'youtube_thumbnail': A [YouTube thumbnail](https://www.canva.com/create/youtube-thumbnails/); eye-catching image for video previews.
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).
brand_kit_idNoID of the brand kit to base the generated design on. IMPORTANT: Before calling this tool, ALWAYS ask the user if they want to create an on-brand design. If they say yes, use the list-brand-kits tool to show available brand kits and let the user select one. Only call this tool after the user has confirmed their brand kit selection. If the user prefers not to use a brand kit, proceed without this parameter.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, which the description supports by clarifying that generated designs are non-persistent candidates until create-design-from-candidate is called. It adds critical behavioral context: no context between calls, latency tradeoffs, error handling, and the requirement to provide detailed query context. Does not contradict annotations.

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?

The description is long, but every section earns its place: the legacy warning is front-loaded, usage is clarified early, and the presentation format is essential structured detail. The use of headers and numbered steps keeps it navigable despite length. Not excessively verbose for the tool's complexity.

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?

Given 7 parameters, many design types, and a complex presentation format, the description is remarkably complete. It explains the full lifecycle (candidate generation → selection → create-design-from-candidate), error handling, asset ordering, verbatim mode, brand kit flow, and even a quality checklist for presentations. No output schema exists, so the description's explanation of what it returns ('list of generated design candidates, including a candidate ID, preview thumbnail and url') fully compensates.

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

Parameters4/5

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

Schema has 100% coverage of all 7 parameters with descriptions, so the baseline is 3. The description adds extra semantic nuance beyond schema: ordering of asset_ids, verbatim handling specifics, mandatory user_intent, and the requirement to ask before using brand_kit_id. This elevates it above bare schema reliance.

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 specific verb ('Generate professionally designed content in Canva') and resource, and immediately distinguishes itself from create-design via the LEGACY-ONLY and brand exception. The description clearly identifies both visual and text-based designs, making it impossible to confuse with siblings like import-design-from-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?

Explicit, actionable guidance: says when to call (whenever user asks to write/create/generate/draft), when NOT to call (create-design available, prepare-design-generation, URL import, advice-only requests), and lists concrete examples mapping user phrasing to this tool. Also covers the brand-kit exception precisely.

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

get-assetsGet Assets MetadataA
Read-only
Inspect

Get names, tags, types, creation dates, and thumbnails for images and videos in a Canva design.

Use when you need to check which image or video is the target on a page, look up its details, or preview it before changing it.

Not for design metadata or editing the media itself.

Returns the metadata and thumbnail for each item in the same order as the supplied asset_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_idsYesIDs of the images or videos to inspect. When checking which media is the target on a page, include every image and video ID from that page.
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).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already convey readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it guarantees 'Returns the metadata and thumbnail for each item in the same order as the supplied asset_ids,' which informs the caller about output ordering. This is a meaningful behavioral trait not implied by the schema or annotations.

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

Conciseness5/5

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

The description is compact yet comprehensive. It opens with the core purpose, then the usage context, then exclusions, and finally the return behavior. Each sentence earns its place without redundancy, making it easy for an agent to parse quickly.

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

Completeness4/5

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

Without an output schema, the description must delineate the return value. It states the tool returns metadata and thumbnails and preserves input order, which covers essentials. While it does not enumerate each metadata field in the response structure (e.g., exact JSON shape), it lists the fields in the opening sentence. Given the tool's read-only nature and the schema's thorough parameter descriptions, it is sufficiently complete for correct invocation.

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?

Schema description coverage is 100%, and the schema already provides detailed descriptions for both parameters. 'asset_ids' includes guidance on usage ('When checking which media is the target on a page, include every image and video ID from that page'), and 'user_intent' is clearly mandatory. The description adds little beyond the schema, so a baseline score of 3 is appropriate.

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?

The description explicitly states the resource (images and videos in a Canva design) and the exact fields returned (names, tags, types, creation dates, thumbnails). It also differentiates from siblings by stating it is 'Not for design metadata or editing the media itself,' making it distinct from get-design-content and perform-editing-operations.

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

Usage Guidelines4/5

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

The description provides clear usage context: 'Use when you need to check which image or video is the target on a page, look up its details, or preview it before changing it.' It also gives exclusions: 'Not for design metadata or editing the media itself.' However, it does not explicitly name alternative tool names (e.g., get-design-content or perform-editing-operations), so the guidance is strong but not fully explicit about alternatives.

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

get-brand-template-datasetGet Brand Template DatasetA
Read-only
Inspect

Determine whether a Canva Brand Template has fillable data fields and, if so, list their names and types. A Brand Template is a reusable, on-brand layout.

Use to check if the template can be populated with data, whether a reusable template can be autofilled, or see the fields available in a selected Brand Template. Not for an individual existing design.

Requires a brand_template_id. Returns each field's name and data type. An empty object means the Brand Template cannot be autofilled.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYesID of the brand template to get the dataset schema for
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).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already state readOnlyHint and destructiveHint, so the description correctly avoids repetition. It adds value by disclosing return behavior ('Returns each field's name and data type') and the edge case ('An empty object means...'). It also states the requirement for a brand_template_id, though the param name mismatch with schema is a minor flaw.

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?

The description is organized into three short paragraphs: purpose, usage, and return details. It is front-loaded with the core action and avoids excessive fluff, though the second paragraph could be merged with the first for tighter structure.

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

Completeness4/5

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

For a simple read-only tool with one required param, the description covers the return format and the empty-object case. It also clarifies scope ('Not for an individual existing design'). The only notable gap is the param name inconsistency ('brand_template_id' vs 'template_id'), which could confuse an agent.

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?

Schema description coverage is 100%, so the schema fully documents both parameters. The description adds no additional parameter-level meaning beyond restating that 'brand_template_id' is required, which actually conflicts with the schema's 'template_id' naming. This does not improve on schema coverage.

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?

The description clearly states the tool's purpose with a specific verb ('Determine... list') and resource ('Brand Template'). It explicitly differentiates from sibling tools by noting 'Not for an individual existing design,' which sets it apart from get-design and similar tools.

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

Usage Guidelines4/5

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

The description provides clear usage scenarios ('Use to check if the template can be populated with data...') and an exclusion ('Not for an individual existing design'). It does not name a specific alternative sibling, but the guidance is sufficient to route the agent appropriately.

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

get-designGet Design InformationA
Read-only
Inspect

Look up the record for one existing Canva design, including what type of design it is (such as doc, presentation, whiteboard, sheet), its title, owner, edit and view links, thumbnail, created and updated times, and page count.

Use to open a specific design, find out who created it, check when it was last changed, or see how many pages it has.

Not for folders or image assets. Do not use for reading or summarizing a design's text or for per-slide thumbnails. Returns the design's metadata and access links.

ParametersJSON Schema
NameRequiredDescriptionDefault
design_idYesID of the existing Canva design, usually returned by a previous Canva tool. Also accepts a full Canva design share URL, including any collaboration token. Do not extract the ID from a share URL. Does not accept a Canva shortlink; resolve it to its full URL first.
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).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds useful behavioral context: it returns metadata and access links only, does not summarize content, and does not provide per-slide thumbnails. This goes beyond the annotations by clarifying the scope of what the tool can and cannot do, while remaining consistent with the read-only nature.

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?

The description is well-organized and front-loaded: it starts with what is returned, then gives usage scenarios, then explicit exclusions. It is slightly verbose in repeating the metadata list and final 'Returns metadata' line, but every sentence earns its place and the structure aids comprehension.

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

Completeness4/5

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

With no output schema, the description compensates by enumerating the returned fields (type, title, owner, links, thumbnail, timestamps, page count) and explicitly stating limitations. It lacks details on error conditions or permission requirements, but for a read-only lookup tool with rich annotations and sibling context, this is adequate.

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?

Schema description coverage is 100%, with the schema already providing detailed semantics for design_id (including URL acceptance and shortlink caveat) and user_intent. The description adds minimal parameter-level meaning beyond 'one existing Canva design,' so the baseline of 3 is appropriate since the schema carries the parameter documentation burden.

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?

The description states a specific action ('Look up the record for one existing Canva design') and explicitly enumerates the metadata returned: design type, title, owner, links, thumbnail, timestamps, page count. It also distinguishes itself from siblings by explicitly stating it is not for folders, image assets, text content, or per-slide thumbnails, which clearly separates it from get-design-content, get-design-pages, and get-design-thumbnail.

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

Usage Guidelines4/5

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

The description gives clear use cases ('open a specific design, find out who created it, check when it was last changed, or see how many pages it has') and explicit exclusions ('Not for folders or image assets. Do not use for reading or summarizing a design's text or for per-slide thumbnails'). It does not name the specific sibling tools to use instead, but the guidance is clear enough for correct selection.

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

get-design-candidatesGet Design CandidatesC
Read-only
Inspect

Internal tool for widget UI polling.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesThe job ID returned from generate-design
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).

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. It adds only the vague notion of 'widget UI polling' without explaining polling semantics, repeated-call expectations, status behavior, or what the response represents.

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

Conciseness2/5

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

The description is short but under-specified, not concise in a useful way. 'Internal tool' is filler, and the single sentence does not convey enough information to justify its brevity.

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

Completeness2/5

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

With no output schema, the description needed to explain what design candidates are, how they relate to generate-design, and what the tool returns. It does none of this, leaving the agent to guess the tool's purpose and expected response.

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?

Schema description coverage is 100%, so the schema already documents job_id and user_intent. The description adds no parameter-specific meaning, but the baseline of 3 is appropriate because the schema carries the burden.

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

Purpose2/5

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

The description, 'Internal tool for widget UI polling,' is vague and does not state that the tool retrieves design candidates. It offers no specific verb plus resource, and it fails to differentiate itself from sibling tools like generate-design or create-design-from-candidate.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. It does not mention that it should be used after generate-design or before create-design-from-candidate, and it lacks any exclusions or alternative routing.

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

get-design-contentGet Design Text ContentA
Read-only
Inspect

Extract rich text from an existing Canva design for read-only use.

Use to read the wording in a design, pull copy from selected pages, summarize a presentation or document, or quote text without making changes.

Not for rewriting, translating, correcting, or updating the text in a design. Does not return presenter notes, sheet cell data, or non-text design content. Returns the rich text content for every page, or specified pages of the selected design.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNoOptional array of page numbers to get content from. If not specified, content from all pages will be returned. Pages are indexed using one-based numbering, so the first page in a design has the index value `1`.
design_idYesID of the existing Canva design whose rich text you want to retrieve, usually returned by a previous Canva tool. You can also provide a full Canva design share URL exactly as received; this preserves any collaboration token needed for access. Resolve Canva shortlinks before using this field.
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).
content_typesYesTypes of content to retrieve. Currently, only `richtexts` is supported so use the `start-editing-transaction` tool to get other content types

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with "for read-only use" and "without making changes." It adds behavioral exclusions beyond annotations: it does not return presenter notes, sheet cell data, or non-text content, and it returns content per page or specified pages.

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?

The description is compact and front-loaded with the core action, followed by use cases and exclusions. There is minor repetition of the read-only idea ("read-only use" and "without making changes"), but every sentence contributes useful guidance.

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

Completeness4/5

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

Given the tool's moderate complexity bugschema richness, the description covers purpose, scope, exceptions, and return scope. There is no output schema, but the description states that rich text for every page or specified pages is returned. No critical call-blocking information is missing.

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?

Schema description coverage is 100%, so the schema already documents design_id, pages, content_types, and user_intent in detail. The description adds no new parameter-specific meaning, but none is needed because the schema carries the burden completely.

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?

The description starts with a specific verb and resource: "Extract rich text from an existing Canva design for read-only use." It clearly distinguishes this from editing tools and from related retrieval tools by explicitly excluding presenter notes and non-text content, so an agent can tell it apart from siblings like get-presenter-notes and perform-editing-operations.

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

Usage Guidelines4/5

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

The description gives a clear "Use to" list (read wording, pull copy, summarize, quote) and a clear "Not for" list (rewriting, translating, correcting, updating). It does not explicitly name alternative sibling tools in the description text, but the when/when-not guidance is strong enough to steer an agent away from misuse.

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

get-design-pagesGet Design PagesA
Read-only
Inspect

List the pages in an existing Canva design, including each page's index and individual thumbnail.

Use to browse a design's pages or slides, see each page thumbnail in order, show what a specific page looks like, or get a range of page previews. Do not use to retrieve a thumbnail that reflects uncommitted changes in an active editing transaction.

Requires a design with individual pages; Canva Docs do not have pages. Returns only the requested pages, without the design's total page count.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of pages to return, from 1 to 100. Use with "offset" to retrieve the next range of pages.
offsetNoPage number to start from. Use for pagination; for example, use 21 to start at page 21.
design_idYesID of the existing Canva design, usually returned by a previous Canva tool. You can also provide a full Canva design share URL, including its collaboration token. Resolve Canva shortlinks before using this field.
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).

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool read-only and non-destructive, and the description adds valuable behavioral context beyond that: thumbnails do not reflect uncommitted editing-transaction changes, only the requested pages are returned, and the total page count is not included. This sets accurate expectations without contradicting the annotations.

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

Conciseness5/5

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

The description is front-loaded with the core action, followed by use cases, exclusions, and return limitations. Every sentence earns its place, and there is no redundant restating of the tool name or title.

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?

For a read-only list operation with no output schema, the description sufficiently explains what the agent will get (page index and thumbnail), what it will not get (total page count), and when it is not appropriate. Combined with fully documented parameters and annotations, the agent has enough context to call it correctly.

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?

Schema description coverage is 100%, so the parameters are already well documented; the description adds little parameter-specific detail beyond the notion of ranges and requested pages. Per the baseline for full schema coverage, a 3 is appropriate.

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?

The description opens with a specific verb and resource: 'List the pages in an existing Canva design' and specifies the returned content (page index and thumbnail). It clearly distinguishes itself from sibling get-design-thumbnail by focusing on per-page previews, and it narrows applicability with 'Canva Docs do not have pages.'

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?

It provides explicit use cases ('browse a design's pages or slides, see each page thumbnail in order, show what a specific page looks like, or get a range of page previews') and explicit exclusions ('Do not use to retrieve a thumbnail that reflects uncommitted changes...' and 'Canva Docs do not have pages'). This tells an agent when to choose the tool and when to avoid it.

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

get-design-thumbnailGet Design Page ThumbnailA
Read-only
Inspect

Get the thumbnail for a particular page of the design in the specified editing transaction. This tool needs to be used with the start-editing-transaction tool to obtain an editing transaction ID. You need to provide the transaction ID and a page index to get the thumbnail of that particular page. Each call can only get the thumbnail for one page. Retrieving the thumbnails for multiple pages will require multiple calls of this tool.IMPORTANT: ALWAYS ALWAYS ALWAYS show the preview to the user of EACH thumbnail you get in the response in the chat, EVERY SINGLE TIME you call this tool

ParametersJSON Schema
NameRequiredDescriptionDefault
page_indexYesRequired page index to get the thumbnail for. Pages are indexed using one-based numbering, so the first page in a design has the index value `1` (1 for the first page, 2 for the second page, and so on).
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).
transaction_idYesThe editing transaction ID. This must be the exact `transaction_id` value returned in the `start-editing-transaction` tool response for the editing transaction to get a thumbnail for.

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the readOnlyHint and destructiveHint annotations, the description adds valuable behavioral context: one-call-per-page, dependence on an editing transaction, and the non-negotiable instruction to show every thumbnail preview to the user. No contradiction with annotations exists.

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?

The description is front-loaded with the core purpose and keeps the needed operational details in a compact sequence. The all-caps emphasis is redundant in wording but serves a real functional purpose, so the length remains justified.

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

Completeness4/5

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

The description covers the prerequisite workflow, the one-page-per-call constraint, and the required user-facing display behavior. It does not describe the exact response payload, but the absence of an output schema is mitigated by the clear instruction to show the returned thumbnail preview.

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 input schema already provides full descriptions for transaction_id and page_index, including the one-based indexing rule and the exact source of the transaction ID. The description mostly restates these requirements without adding deeper semantic meaning beyond what the schema already provides.

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?

The description clearly states the resource and action: getting the thumbnail for a specific page of a design within an editing transaction. It distinguishes this from sibling tools like get-design-pages or get-design by focusing specifically on thumbnail retrieval tied to a transaction ID and page index.

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

Usage Guidelines4/5

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

The description explicitly specifies the prerequisite of using start-editing-transaction to get the transaction ID, and clearly states that each call retrieves one page's thumbnail. It does not name alternatives or exclusions, but the context is unambiguous and actionable.

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

get-export-formatsGet Export FormatsA
Read-only
Inspect

Check which export file types an existing Canva design supports, including page availability for each type.

Use to confirm whether it can be downloaded as a PDF, PNG, JPG, GIF, PowerPoint, video, or CSV before creating a file. Returns the supported formats and available pages for that design.

ParametersJSON Schema
NameRequiredDescriptionDefault
design_idYesID of the design to get export formats for. Design ID starts with "D".
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).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds meaningful behavioral context: this is a preflight check that returns supported formats and available pages rather than performing the export itself.

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

Conciseness5/5

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

The description is compact, front-loaded with the core action, and every sentence adds useful information: what the tool checks, when to use it, and what it returns. No wasted words.

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

Completeness4/5

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

For a simple read-only query tool with no output schema, the description covers the key facts an agent needs: what it checks, when to invoke it, and what it returns. More detail about the exact response shape would be nice, but it is not necessary for correct selection and invocation.

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?

Schema description coverage is 100%, so the schema already documents design_id and user_intent. The description only lightly reinforces that the design must exist, adding little beyond the structured parameter definitions. This meets the baseline for high schema coverage.

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?

The description uses a specific verb ('Check') and identifies a clear resource: export file types supported by an existing Canva design, including page availability. It also lists concrete formats (PDF, PNG, JPG, GIF, PowerPoint, video, CSV), which clearly distinguishes this look-up tool from siblings like export-design or get-design-pages.

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

Usage Guidelines4/5

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

The description gives explicit context: use it to confirm downloadability before creating/exporting a file. It does not explicitly name alternatives or state when not to use it, but the timing and purpose are clear enough to guide tool selection.

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

get-presenter-notesGet Presenter NotesA
Read-only
Inspect

Get presenter notes from an existing Canva presentation for read-only use.

Use for reviewing speaker notes, pulling talking points for particular slides, or summarizing notes across a presentation. Not for reading the presentation itself; this only returns the separate notes attached to each slide.

Returns presenter notes from every page, or the specified page numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNoOptional array of page numbers to get notes from. If not specified, notes from all pages will be returned. Pages are indexed using one-based numbering, so the first page in a design has the index value `1`.
design_idYesID of the existing Canva presentation whose presenter notes you want to retrieve.
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).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond annotations: that only the separate notes are returned, not slide content, and that results cover every page or only requested pages. No contradiction with annotations exists.

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

Conciseness5/5

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

Three tightly organized paragraphs: purpose first, use cases and exclusions second, return behavior last. Every sentence earns its place, and the most decision-relevant information (read-only, scope boundary) is front-loaded. No filler or repetition of schema details.

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

Completeness4/5

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

For a read-only retrieval tool with a single required parameter and no output schema, the description covers what the agent needs: the target resource, the return scope (notes per page), and how to limit to specific pages. Minor omissions like behavior when a slide has no notes or note format are acceptable given the tool's simplicity and supporting annotations.

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?

Schema description coverage is 100%, with all three parameters (design_id, pages, user_intent) already documented, including one-based page numbering and default all-pages behavior. The description's final sentence reinforces the pages semantics ('from every page, or the specified page numbers') but adds little beyond what the schema already provides, so the baseline of 3 applies.

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?

The description states a specific verb and resource ('Get presenter notes from an existing Canva presentation') and explicitly differentiates from siblings with 'Not for reading the presentation itself; this only returns the separate notes attached to each slide.' This unambiguously separates it from get-design, get-design-content, and get-design-pages without needing to open their schemas.

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

Usage Guidelines4/5

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

The description gives clear when-to-use scenarios ('reviewing speaker notes, pulling talking points for particular slides, or summarizing notes across a presentation') and an explicit exclusion ('Not for reading the presentation itself'). It stops short of naming the specific alternative tool to use for presentation content, so it misses full 5-level routing, but the boundary is clear.

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

import-design-from-urlImport Design From Public HTTPS URLAInspect

Convert content at a public URL into a new Canva design.

Use to turn a publicly hosted PDF, slide deck (PowerPoint or Keynote), document (Word, Pages, or Markdown), spreadsheet (Excel, CSV, or Numbers), webpage or HTML, or design file (Photoshop or Illustrator) into a Canva design.

Only call with a public HTTPS URL. Do not use for local, private, or agent-generated files, or to break a flat PNG, JPEG, or WEBP into separately editable layers.

Each call creates one design and returns its design_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic HTTPS URL for the source to convert. Does not accept Canva design URLs, OpenAI file URLs, local paths, private files, or agent-generated files. For static HTML, each top-level Canva page element must have data-document-role="page" and page elements cannot be nested. Use optional data-label and data-speaker-notes attributes for page titles and presenter notes. Do not add page annotations to interactive HTML.
nameYesName for the new Canva design.
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).
intended_design_typeNoRequested Canva output format. Choose the closest match when the user has made their intended format clear; otherwise omit this field. Use "other" only when the intended format is clear but is not listed.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, but do not explain creation semantics. The description adds that 'Each call creates one design and returns its design_id,' which is valuable behavioral context. It also discloses the limitation regarding flat images, helping the agent set expectations. No contradiction with annotations.

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

Conciseness5/5

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

The description is front-loaded with the core action, followed by supported formats, exclusions, and return behavior. Each sentence serves a purpose: scope, eligibility, counter-indications, and outcome. No redundancy or fluff.

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?

For a creation tool with no output schema, the description covers what the agent needs: supported inputs, key constraints, creation count, and return value (design_id). The input schema supplements with detailed URL and format parameters. Together the definition is complete enough to invoke correctly.

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?

Schema description coverage is 100%, so the schema already documents all four parameters, including the detailed URL constraints and enum options. The description itself adds little param-specific detail, but it does reinforce the public-URL restriction. Baseline 3 applies because the schema carries the semantic burden.

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?

Begins with a specific verb and resource: 'Convert content at a public URL into a new Canva design.' It names the exact domain (public HTTPS sources) and the artifact (a new Canva design), and enumerates supported file types. This clearly separates it from sibling creation tools like generate-design or create-design-from-brand-template, which use different sources.

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 states when to use ('Use to turn a publicly hosted...') and when not to ('Do not use for local, private, or agent-generated files, or to break a flat PNG, JPEG, or WEBP'). This gives the agent unambiguous selection criteria without needing to infer from the schema. The 'Only call with a public HTTPS URL' constraint is direct and actionable.

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

list-brand-kitsList Brand KitsA
Read-only
Inspect

Find or browse the Canva Brand Kits available to the user. A Brand Kit is an organisation's high-level home for brand styles and assets, such as colors, fonts, and logos.

Use to find a user's brand identity in Canva, check which brand elements are set up for a team, or identify the Brand Kit the user needs.

Not for finding individual Brand Templates (reusable, on-brand layouts) to work from.

Returns each Brand Kit's brand_kit_id, name, and thumbnail.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of Brand Kits to return.
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).
continuationNoExact token returned by the previous Brand Kit search with the same query. Omit for a new search or browse.
resolve_icon_thumbnailsNoWhen true, resolve each brand kit icon_id to a square icon thumbnail URL (extra asset lookups). Prepare-design-generation widget only; omit for agent calls.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: the results are limited to kits 'available to the user' and it states exactly what is returned (brand_kit_id, name, thumbnail). It does not discuss pagination, but the continuation parameter schema covers that.

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

Conciseness5/5

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

Five short, purposeful sentences. The core action is front-loaded, the domain definition earns its place, the exclusion is relevant, and the return shape is stated without redundancy.

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?

Despite having no output schema, the description names the returned fields. The tool is low-complexity, annotations cover the read-only/destructive profile, the sibling distinction is clear, and the input schema handles parameter semantics. Nothing essential is missing for correct invocation.

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?

Schema description coverage is 100%, so the baseline is 3. The tool description does not add parameter-level detail, but it doesn't need to because the schema already explains limit, user_intent, continuation, and resolve_icon_thumbnails clearly.

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?

The description opens with a specific verb and resource: 'Find or browse the Canva Brand Kits available to the user.' It clearly defines what a Brand Kit is and explicitly contrasts with Brand Templates, so an agent can distinguish it from search-brand-templates and other siblings.

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?

The description gives concrete reasons to use the tool: find a user's brand identity, check team brand elements, or identify the needed Brand Kit. It also provides an explicit exclusion ('Not for finding individual Brand Templates'), which semantically routes the agent toward the sibling search-brand-templates tool.

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

list-commentsList Design CommentsA
Read-only
Inspect

Browse all comments or threads attached to an existing Canva design.

Use to review feedback, see discussion points, or check mentions.

Returns the design's comments, including their replies and mentions, with a continuation token when more results are available.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of comments to return per page.
design_idYesID of the existing Canva design whose comments to return. Design IDs start with "D".
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).
continuationNoExact continuation token returned by the previous call for the same design. Omit for the first page.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it returns replies and mentions and provides a continuation token for pagination. No contradiction with annotations exists.

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

Conciseness5/5

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

The description is three focused sentences with the primary action front-loaded, followed by concise use cases and return behavior. There is no filler or redundant repetition of schema details.

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

Completeness4/5

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

For a simple read-only list operation with rich schema documentation and annotations, the description is largely complete: it states the resource, the use cases, return contents, and pagination behavior. The absence of an output schema makes the return-value summary especially useful, though ordering/filtering behavior is not mentioned but is not essential.

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?

Schema description coverage is 100%, so all four parameters are already documented in the schema. The tool description does not add significant parameter-level meaning beyond the schema, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb ('Browse') and resource ('all comments or threads attached to an existing Canva design'), making the tool's function clear. It is distinguishable from mutating siblings like comment-on-design and reply-to-comment, though it does not explicitly name or contrast those alternatives.

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

Usage Guidelines4/5

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

The description gives clear use contexts: 'review feedback, see discussion points, or check mentions.' It does not explicitly state when to avoid this tool or prefer a sibling like list-replies, but the provided use cases are specific enough for an agent to select it appropriately.

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

list-folder-itemsList Folder ItemsA
Read-only
Inspect

Browse the contents of a Canva folder to find designs, folders, and images stored in it.

Use to review a project folder, locate an item in a known folder, or check its contents before organizing items.

Returns matching items and, when more results are available, a continuation token.

ParametersJSON Schema
NameRequiredDescriptionDefault
sort_byNoOrder the results by creation date, last modified date, or title, in ascending or descending order.
folder_idYesID of the Canva folder to list. Use "root" to list items at the top level.
item_typesNoTypes of items to return. Omit to return designs, folders, and images.
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).
continuationNoExact continuation token returned by the previous call with the same folder, filters, and sort order. Omit for the first page.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds meaningful behavioral context beyond that: results are filtered ('matching items') and pagination is handled via a continuation token. This helps the agent understand multi-page behavior and that the response shape is a list, not a single object.

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

Conciseness5/5

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

Three short sentences with no filler. The core action is front-loaded in sentence one, usage context in sentence two, and the pagination behavior in sentence three. Every sentence earns its place and the description is easy to scan.

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

Completeness4/5

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

For a read-only browse tool, the description covers the essential decision points: what items are returned, when to use it, and how pagination works. With no output schema, some detail about the shape of returned items would be useful, but the annotation-provided safety profile and the clear continuation-token note make this adequate for an agent to call it correctly.

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?

Schema description coverage is 100%, so the baseline is 3. The description reinforces the item_types parameter by naming designs, folders, and images, and mentions the continuation token that maps to the continuation parameter, but it does not add new semantic meaning beyond what the schema already documents.

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?

The description opens with a specific verb and resource: 'Browse the contents of a Canva folder to find designs, folders, and images stored in it.' This clearly states what the tool does and distinguishes it from sibling search tools like search-designs and search-folders, which find items across folders rather than browsing one known folder. The phrase 'stored in it' further narrows scope to a single folder's contents.

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

Usage Guidelines4/5

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

The second sentence gives concrete use cases: 'review a project folder, locate an item in a known folder, or check its contents before organizing items.' This tells an agent when to reach for this tool, and 'known folder' implicitly contrasts with search tools for unknown locations. However, it does not explicitly name alternatives or state when not to use it, so it stops short of full differentiation.

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

list-repliesList Comment RepliesA
Read-only
Inspect

Read the replies in a specific comment thread on a Canva design.

Use to see who has replied to a comment and what they said.

Not for reviewing all comments attached to a design or adding a reply.

Returns the selected comment's replies and, when more results are available, a continuation token.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of replies to return per page.
design_idYesID of the Canva design containing the comment. Design IDs start with "D".
comment_idYesID of the top-level comment whose replies to return.
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).
continuationNoExact continuation token returned by the previous call for the same design and comment. Omit for the first page.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description only needs to add value beyond safety. It does so by disclosing pagination behavior: returns the selected comment's replies and a continuation token when more results exist. This is useful behavioral context that annotations don't provide.

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

Conciseness5/5

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

Four short sentences, each earning its place: the action, the intended use, the exclusions, and the return/pagination behavior. No redundancy or filler.

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?

Despite having no output schema, the description states what is returned (replies and optional continuation token), and the schema documents all parameters and constraints. Nothing an agent needs to invoke this correctly is missing.

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?

Schema description coverage is 100%, so parameters are already fully documented. The description adds minimal extra meaning by referring to 'a specific comment thread' and the continuation token, but the schema already covers these concepts. Baseline 3 is appropriate.

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?

Description uses a specific verb ('read') and resource ('replies in a specific comment thread on a Canva design'), and explicitly differentiates from reviewing all comments or adding a reply. This cleanly separates it from siblings like list-comments, reply-to-comment, and comment-on-design.

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?

States exactly when to use it ('Use to see who has replied to a comment and what they said') and when not to ('Not for reviewing all comments attached to a design or adding a reply'). Though it doesn't name alternative tools, the use-case exclusions are explicit enough for an agent to route correctly.

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

merge-designsMerge DesignsA
Destructive
Inspect

Restructure a Canva design by combining designs, inserting or removing whole pages, or changing page order.

Use to make a new presentation from selected pages, add slides from another design, merge separate designs together, rearrange a design's flow, or remove entire pages.

Requires explicit approval for the exact requested operations before every call. Deleting pages is permanent.

Not for changing text, images, or other content within a page.

Returns the completed design result, including its design_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesWhether to create a new design from pages in existing designs, or change the pages in one existing design.
titleNoTitle for the new design. Required when "type" is "create_new_design". Optional when "type" is "modify_existing_design", where it renames the design.
design_idNoID of the existing Canva design whose pages will change. Required when "type" is "modify_existing_design". Design IDs start with "D".
operationsYesPage operations to perform, in order. Each operation runs before the next, so page numbers refer to the design's updated page structure. When "type" is "create_new_design", only "insert_pages" operations are accepted. When "type" is "modify_existing_design", every operation type is accepted.
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).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already include destructiveHint=true, and the description adds valuable context: 'Deleting pages is permanent' and 'Requires explicit approval for the exact requested operations before every call.' It also states the return behavior. No contradiction with annotations.

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

Conciseness5/5

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

The description is efficiently organized: main purpose first, then use cases, then warnings and exclusions, then return value. Every sentence earns its place and there is no repetition or filler.

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

Completeness4/5

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

For a tool with a rich input schema and no output schema, the description adequately covers scope, safety, exclusions, and the return value. It could go slightly further by naming the sibling tool for content edits, but the provided context is sufficient for correct selection and invocation.

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?

Schema description coverage is 100%, so the schema carries the parameter documentation burden. The description summarizes the operation types ('inserting or removing whole pages, or changing page order') but adds no parameter-level detail beyond that baseline.

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?

The description states a specific verb and resource: 'Restructure a Canva design by combining designs, inserting or removing whole pages, or changing page order.' It clearly distinguishes page-level structural changes from content-level editing, so an agent can tell it apart from siblings like perform-editing-operations.

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

Usage Guidelines4/5

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

It provides concrete use cases: making a new presentation, adding slides, merging designs, rearranging flow, and removing pages. It also gives a clear exclusion: 'Not for changing text, images, or other content within a page.' It does not name an alternative sibling tool, but the when-to-use and when-not-to-use guidance is clear.

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

move-item-to-folderMove Item To FolderAInspect

Relocate an existing Canva design, folder, or image into a destination Canva folder. Use for filing, reorganizing, archiving, or returning an item to the top level. This changes the item's location. Returns confirmation of the move.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesID of the existing Canva design, folder, or image to move.
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).
to_folder_idYesID of the destination Canva folder. Use "root" to move the item to the top level.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate non-read-only and non-destructive behavior. The description adds value by explicitly stating 'This changes the item's location' and 'Returns confirmation of the move,' which clarifies side effects and return behavior beyond what annotations provide.

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

Conciseness5/5

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

Three short sentences with no filler. The core action, use cases, side effect, and return value are all conveyed efficiently, and the most important information appears first.

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

Completeness4/5

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

For a simple three-parameter mutation tool with complete schema coverage and annotations, the description covers purpose, use cases, behavioral change, and return behavior. It is complete enough for an agent to call it correctly, though it omits potential edge cases like moving a folder into itself or the exact structure of the confirmation.

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?

Schema description coverage is 100%, so the schema already explains item_id, user_intent, and to_folder_id. The description reinforces that the tool moves designs, folders, or images and that 'root' means top level, but it does not add meaningful semantic detail 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?

The description uses a specific verb ('Relocate') with a clear resource ('existing Canva design, folder, or image') and destination ('destination Canva folder'). It is distinct from all sibling tools, none of which perform moving, so an agent can identify it unambiguously.

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

Usage Guidelines4/5

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

The description gives concrete use cases: 'filing, reorganizing, archiving, or returning an item to the top level.' This provides clear context for when to use the tool, though it does not explicitly name alternatives like copy-design or create-folder or state when not to use this tool.

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

perform-editing-operationsEdit DesignAInspect

Apply one or more draft changes to the content or layout of an existing Canva design within an active editing transaction.

Use to revise, rewrite, or translate text; replace, insert, position, or resize images and videos on a page; remove page elements; edit text formatting; update a design title; or label fixed-page elements.

Not for changing a design's page structure or order.

Changes are temporary until saved. Show the user a preview of their changes and obtain explicit approval before saving changes.

Returns the updated page state for further changes, previewing, saving, or discarding.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNoThe list of all pages in the design. This must be the `pages` array returned by the last call to `perform-editing-operations` or if this is the first call the `start-editing-transaction` tool. Used to determine which pages are responsive and editable.
operationsYesThe editing operations to perform on the design in this editing transaction. Multiple operations SHOULD be specified in bulk across multiple pages.
page_indexYesRequired page index of the first page that is going to be updated as part of this update. Multiple operations SHOULD be specified in bulk across multiple pages, this just needs to specify the first page in the set of pages to be updated. Pages are indexed using one-based numbering, so the first page in a design has the index value `1`.
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).
transaction_idYesThe editing transaction ID. This must be the exact `transaction_id` value returned in the `start-editing-transaction` tool response for the editing transaction to perform editing operations on.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only mark the tool as read-write and non-destructive; the description adds crucial workflow semantics: changes are draft and temporary, explicit user approval is required before saving, and the response returns updated page state. This meaningfully extends beyond the structured annotations.

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

Conciseness5/5

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

The description is five short sentences with the core action front-loaded, a compact use-case list, an explicit exclusion, and workflow reminders about preview and approval. Every sentence earns its place with no filler or repetition.

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

Completeness4/5

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

For a complex multi-operation mutation tool with no output schema, the description gives the essential workflow context: active transaction, temporary unsaved changes, preview/approval requirement, and the returned updated page state. It appropriately relies on the fully covered input schema for parameter details.

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?

Schema description coverage is 100%, so the input schema already documents all parameters. The description adds high-level operation categories but does not provide additional meaning for specific parameters beyond the schema, which is acceptable given full coverage.

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?

The first sentence names the verb ('apply'), the resource ('existing Canva design'), and the scope ('within an active editing transaction'). The list of concrete uses and the 'Not for changing a design's page structure or order' negative make it easy to distinguish from related transaction tools.

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

Usage Guidelines4/5

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

The description explicitly states when to use the tool with 'Use to revise, rewrite, or translate text...' and clearly excludes page-structure changes. It also gives workflow guidance about previewing and obtaining approval before saving, though it does not name a specific alternative tool for the excluded cases.

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

reply-to-commentReply To CommentAInspect

Add a response to an existing comment in a Canva design.

Use to answer a reviewer's question, acknowledge or clarify feedback, continue a discussion, or provide a follow-up on a specific comment.

The reply is visible to everyone with access to the design.

Returns the created reply and its comment_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
design_idYesID of the Canva design containing the comment. Design IDs start with "D".
comment_idYesID of the existing comment to reply to in the specified design.
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).
message_plaintextYesThe text content of the reply to add.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish that this is not read-only and not destructive. The description adds meaningful behavioral context beyond those hints: the reply is visible to everyone with design access, and the tool returns the created reply along with its comment_id. This helps the agent set expectations for side effects and output.

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

Conciseness5/5

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

The description is compact and front-loaded with the core action, followed by relevant use cases, visibility behavior, and return value. Every sentence contributes information the agent needs; there is no filler or repetition of the schema.

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?

For a simple, additive write operation, the description is complete: it states the action, the context in which to use it, the visibility side effect, and the return value. The remaining details, such as message length limits and design_id format, are already fully covered by the input schema.

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?

Schema description coverage is 100%, so the schema already documents all four parameters (design_id, comment_id, user_intent, message_plaintext). The description adds no parameter-specific details beyond referring to 'existing comment' and 'reply', so the baseline of 3 is appropriate.

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?

The description opens with the specific verb 'Add' and the precise resource ('response to an existing comment in a Canva design'). This clearly distinguishes it from sibling tools like comment-on-design, which creates a new top-level comment, and list-replies, which only reads replies.

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

Usage Guidelines4/5

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

It gives concrete use cases: answering a reviewer's question, acknowledging or clarifying feedback, continuing a discussion, and providing a follow-up. It does not explicitly name alternative tools or state when not to use this tool, but the 'existing comment' framing strongly implies the boundary against creating new comments.

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

resize-designResize DesignAInspect

Adapt a Canva design to a different canvas size, keeping its content while rearranging and resizing its layout.

Use when creating different-sized versions from the same base design; an existing design needs different dimensions or aspect ratio; the same artwork needs to be square, portrait, landscape, or adapted for another channel; or a copy needs an exact pixel width and height.

Not for resizing a single element.

Each call creates a new resized design and leaves the original unchanged. Returns the new design's design_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
design_idYesID of the existing Canva design to resize. Design IDs start with "D".
design_typeYesTarget design type (preset or custom). Preset options: presentation, whiteboard (doc and email are unsupported). Custom options: width and height in pixels.
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).

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses a key side-effect guarantee: each call creates a new resized design and leaves the original unchanged. It also states the return value ('Returns the new design's design_id'), which is especially useful because no output schema is provided.

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

Conciseness5/5

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

The description is compact and front-loaded: core behavior first, followed by usage conditions, an exclusion, and the return value. Every sentence earns its place without repeated information.

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?

For a 3-parameter tool with a fully documented schema, the description covers the input context, the exclusion case, the non-destructive behavior, and the return value. The missing output schema is mitigated by explicitly stating that the new design_id is returned.

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?

Schema description coverage is 100%, and the schema already documents design_id, design_type, preset/custom options, width, height, and user_intent. The description adds little beyond the schema, so the baseline of 3 is appropriate.

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?

The description names a specific operation: 'Adapt a Canva design to a different canvas size' while keeping its content and rearranging/resizing the layout. It differentiates itself from copy-only or edit-only tools and explicitly excludes element-level resizing, so an agent can identify what the tool does.

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

Usage Guidelines4/5

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

It provides a clear 'Use when' list with concrete triggering conditions, including different dimensions, aspect ratios, channel adaptation, and exact pixel sizes. It also states a clear exclusion ('Not for resizing a single element'), though it does not name a specific alternative sibling tool.

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

search-brand-templatesSearch Brand TemplatesA
Read-only
Inspect

Find or browse the user's Canva Brand Templates: reusable, on-brand layouts. Some include data fields that can be autofilled.

Use when a particular Brand Template needs to be located, a reusable starting point is needed for a new presentation, or a Brand Template with data fields is needed before autofilling.

Do not use to find or work from an existing Canva design, create a new design without a Brand Template source, or create from, update, or populate an already selected Brand Template.

Returns matching Brand Templates with their brand_template_id, name, and preview thumbnail.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of Brand Templates to return in one page.
queryNoOptional title or type to search for. Provide only when the user explicitly names or describes the Brand Template they want; otherwise omit or pass an empty string to browse all available Brand Templates.
datasetNoFilter by data-field availability. Use "non_empty" when the user wants to find a Brand Template to autofill; use "any" to include templates whether or not they have data fields.
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).
brand_kit_idNo
continuationNoExact token returned by a previous search. Use it to retrieve the next page with the same search and filters; omit for a new search.
design_typesNoOptional Brand Template types to include. A Brand Template is returned if it matches at least one specified type. Currently supports "presentation" only.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: it returns matching templates with brand_template_id, name, and preview thumbnail, and notes that some templates include data fields that can be autofilled. It doesn't describe pagination behavior in detail, but the continuation parameter covers that. Slight gap: no mention of rate limits or auth, but not critical for a read-only search tool.

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

Conciseness5/5

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

The description is well-structured: a clear first sentence stating the core function, a when-to-use paragraph, a when-not-to-use paragraph, and a brief return-value statement. Every sentence earns its place, and the most important information is front-loaded. It's appropriately sized for a tool with 7 parameters and complex routing logic.

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

Completeness4/5

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

For a read-only search tool with 86% schema coverage and no output schema, the description is quite complete. It covers the tool's scope, exclusions, return values, and the key decision point about data fields. The only minor gap is that it doesn't explicitly state that results are paginated or that 'continuation' should be used for subsequent pages, but the schema's 'continuation' parameter description covers that. The description is complete enough for an agent to select and invoke this tool correctly.

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

Parameters4/5

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

Schema description coverage is 86%, so the schema already documents most parameters well. The description adds value by explaining the 'dataset' filter's purpose (find templates to autofill) and the 'query' parameter's usage rule (only provide when user explicitly names/describes a template). The 'user_intent' parameter is described as mandatory for LLM clients, which is important context. The description doesn't add much for 'brand_kit_id' or 'continuation', but the schema covers those adequately.

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?

The description clearly states the tool's purpose: find or browse Canva Brand Templates, and distinguishes it from related tools by specifying it works with Brand Templates, not existing designs. It names the resource (Brand Templates) and the action (search/browse), and explicitly contrasts with 'search-designs' and 'create-design-from-brand-template'.

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?

The description provides explicit when-to-use guidance: when a Brand Template needs to be located, when a reusable starting point is needed, or when a template with data fields is needed before autofilling. It also gives explicit when-not-to-use guidance: not for existing designs, not for creating new designs without a template source, and not for creating/updating/populating an already selected template. This is exemplary.

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

search-designsSearch DesignsA
Read-only
Inspect

Locate or browse the user's existing Canva designs. Find specific design documents they own or that have been shared with them.

Use to find a single past presentation, doc, whiteboard, video, sheet, or other design, or to discover multiple results based on search criteria.

Not for locating reusable templates.

Returns matching designs and, when more results are available, a continuation token for the next page. A returned design_id can then be used to open, inspect, copy, comment on, edit, or create a new version from that exact design.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of designs to return.
queryNoOptional text to match against a design's title or content. Use the user's keywords, such as a project name, topic, or phrase. If supplied, "sort_by" must be "relevance".
sort_byNoHow to order results. Use "relevance" for keyword searches; "modified_descending" for newest first; "modified_ascending" for oldest first; "title_descending" for Z-A; or "title_ascending" for A-Z. Omit to use "relevance".
ownershipNoWhose designs to search. Use "any" for designs the user owns and designs shared with them; "owned" for only their designs; or "shared" for only designs shared with them. Omit to use "any".
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).
continuationNoThe exact token returned by the previous search with the same query, filters, and sort order. Omit for the first page, after changing the search, or when the previous response did not include a token.
design_typesNoOptional design types to include. A design is returned if it matches any supplied type. Currently, only "presentation" is supported.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is covered. The description adds valuable behavioral detail about pagination via a 'continuation token' and explains that results include enough information to act on a specific design, which goes beyond the structured annotations.

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

Conciseness5/5

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

The description is compact and front-loaded: purpose in the first sentence, usage in the second, exclusion in the third, and return behavior in the fourth. No filler or redundant statements; every sentence earns its place.

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?

For a read-only search tool with 100% schema coverage and no output schema, the description is complete: it explains what is returned, how pagination works, and how results can be used. It also disambiguates from template search, leaving no crucial gap for correct invocation.

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?

Schema coverage is 100% with detailed parameter descriptions, so the description carries little additional parameter-level meaning. It reinforces that search criteria are broad and that the result can be a singular design or multiple results, but it does not add new semantics 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?

The description states the specific verb and resource: 'Locate or browse the user's existing Canva designs' and explicitly excludes 'reusable templates,' distinguishing it from search-brand-templates. It also clarifies that it covers designs owned or shared, making its scope unmistakable.

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?

The description gives explicit usage context: 'Use to find a single past presentation... or to discover multiple results based on search criteria.' It also provides a clear exclusion ('Not for locating reusable templates') and notes that returned design_ids can be used downstream, guiding the agent on when and how to use this tool.

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

search-foldersSearch FoldersA
Read-only
Inspect

Find or browse Canva folders the user owns or that are shared with them.

Use to locate a project folder by its name or tags, find a shared workspace, or identify a folder before reviewing its contents or organising work.

Not for finding designs, images, or subfolders within a known folder.

Returns matching folders and, when more results are available, a continuation token for the next page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of folders to return per page.
queryNoText to match against folder names and tags. Omit to browse all of the user's available folders.
ownershipNoWhich folders to return. Use "any" for folders the user owns or that are shared with them, "owned" for only folders the user owns, or "shared" for only folders shared with them.
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).
continuationNoExact continuation token returned by the previous call with the same search query and ownership filter. Omit for the first page.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish readOnlyHint and non-destructive behavior; the description adds value by disclosing the output behavior: 'Returns matching folders and, when more results are available, a continuation token for the next page'. It also confirms the scope of owned/shared folders, but does not mention ordering or result limits beyond the schema.

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

Conciseness5/5

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

Four sentences, front-loaded with the core purpose and then exclusions and return behavior. There is no filler, and every sentence earns its place.

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?

For a read-only search tool with annotations, 100% schema coverage on parameters, and no output schema, the description is complete: it covers scope, use cases, exclusions, and pagination. No essential information for choosing or calling it correctly is missing.

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?

Schema description coverage is 100%, so the baseline is 3; the description mostly restates concepts already in the schema (matching by names/tags, owned/shared scope, continuation token). It does not add meaningfully new parameter semantics beyond what the schema provides.

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?

Description opens with a specific verb+resource: 'Find or browse Canva folders the user owns or that are shared with them'. It distinguishes itself from siblings by explicitly stating it is 'Not for finding designs, images, or subfolders', which separates it from search-designs and list-folder-items.

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

Usage Guidelines4/5

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

It gives concrete use cases ('locate a project folder by name or tags', 'find a shared workspace', 'identify a folder before reviewing contents') and clear when-not-to-use guidance. It stops short of naming the sibling tool to choose instead, so the routing is slightly less explicit than a 5.

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

start-editing-transactionStart Editing DesignAInspect

Prepare an existing Canva design for editing by opening a draft transaction.

Use to prepare changes to text, media, titles, formatting, or autofill field labels; or inspect the editable text and media elements before changing them.

Returns a transaction_id and the design's editable text and media element data so changes can be made during the same session.

ParametersJSON Schema
NameRequiredDescriptionDefault
design_idYesID of the existing Canva design to edit. Design IDs start with "D".
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).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so it is known to be a mutating but non-destructive operation. The description adds the transactional nature ('draft transaction', 'same session') and what it returns (transaction_id and editable element data). It does not mention the need to later commit or cancel, but the transaction concept is adequately disclosed.

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

Conciseness5/5

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

The description is three sentences totaling about 60 words, with the core purpose front-loaded in the first sentence. Every sentence contributes: purpose, usage scenarios, and return value. No fluff or redundant phrasing.

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

Completeness4/5

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

Given there is no output schema, the description covers what is returned (transaction_id and editable data). It does not spell out the transaction lifecycle (commit/cancel) or error conditions, but the sibling tools make the next steps predictable, and the description is sufficient for an agent to initiate the intended workflow.

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?

Schema coverage is 100% for both parameters (design_id and user_intent), and each has a clear description in the schema. The tool description does not add new parameter-specific guidance beyond reiterating that it returns element data, which is output-related. Since the schema already documents parameters, a baseline 3 is appropriate.

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?

The description opens with a specific verb ('Prepare') and resource ('an existing Canva design'), then states the outcome ('opening a draft transaction'). It enumerates exact use cases (text, media, titles, formatting, autofill labels) and clarifies it is for preparing changes or inspecting elements, distinguishing it from read-only tools like get-design-content and from the commit/cancel siblings.

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

Usage Guidelines4/5

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

The description explicitly says 'Use to prepare changes...' and 'or inspect the editable text and media elements before changing them,' which gives clear when-to-use context. It does not explicitly name alternatives or exclusions, but the phrasing implies this is the prerequisite step before modification, and the sibling list makes the transaction flow obvious.

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

upload-asset-from-urlUpload Asset From URLAInspect

Import media from an existing public URL into Canva.

Use to upload a publicly hosted image, photo, logo, graphic, or video into Canva; add it to the user's Canva library or uploads; or save it for later use in a Canva design.

Only call with a public HTTPS URL whose content is already publicly accessible. Do not use for local, private, or agent-generated files. Does not place the imported media into a Canva design.

Returns a media_id for the imported file.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesExisting public HTTPS URL of the image, photo, logo, graphic, or video to import into Canva. The media must already be publicly accessible at this URL.
nameYesName to give the imported media in Canva.
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).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false, so it's a non-destructive write. The description adds meaningful context: it imports media, adds to library/uploads, returns a media_id, and does not place into a design. It also warns about URL accessibility, which is beyond the annotations. Slight gap: no mention of what happens on failure or whether it overwrites, but that's not critical.

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

Conciseness5/5

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

The description is four sentences, each earning its place: opening purpose, typical use cases, explicit constraints and exclusions, and return value. It is front-loaded with the core action and avoids fluff. Efficient and well-structured.

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

Completeness4/5

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

For a simple 3-parameter tool with no output schema, the description covers the essentials: what it does, when to use it, constraints, and the return value (media_id). It also clarifies what it doesn't do. No critical missing information for an agent to call it correctly, though it could optionally mention error conditions or file type limitations.

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 input schema provides 100% description coverage for all three parameters, including detailed descriptions for 'url' and 'name'. The tool description largely reiterates the URL requirement and adds the return of media_id, but doesn't add substantial new meaning beyond the schema. Baseline of 3 is appropriate given the high schema coverage.

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?

The description states a specific action and resource: 'Import media from an existing public URL into Canva.' It clearly differentiates itself from siblings by noting 'Does not place the imported media into a Canva design,' which distinguishes it from import-design-from-url. The verb 'import' and the resource 'media' are unambiguous.

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?

The description gives explicit guidance: 'Use to upload a publicly hosted image...' and 'Only call with a public HTTPS URL whose content is already publicly accessible. Do not use for local, private, or agent-generated files.' It also clarifies what the tool does not do (place into design). This is direct when-to-use and when-not-to-use guidance without requiring inference.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 27 tool updates
    • Changedcancel-editing-transaction1 field changed
      • changedInput schema / properties / transaction_id / description
        Previous value: -"The transaction ID of the editing transaction to cancel. This must be the exact `transaction_id` value returned in the `start-editing-transaction` tool response for the editing transaction to cancel."New value: +"Exact ID of the active editing transaction whose changes to discard. Use the transaction_id returned when that editing transaction was started."
    • Changedcomment-on-design2 fields changed
      • changedInput schema / properties / design_id / description
        Previous value: -"ID of the design to comment on. You can find the design ID by using the `search-designs` tool."New value: +"ID of the existing Canva design to comment on. Design IDs start with \"D\"."
      • changedInput schema / properties / message_plaintext / description
        Previous value: -"The text content of the comment to add"New value: +"The text content of the comment to add."
    • Changedcommit-editing-transaction1 field changed
      • changedInput schema / properties / transaction_id / description
        Previous value: -"The transaction ID of the editing transaction to commit. This must be the exact `transaction_id` value returned in the `start-editing-transaction` tool response for the editing transaction to commit."New value: +"Exact ID of the active editing transaction whose draft changes should be saved."
    • Changedcopy-design2 fields changed
      • changedInput schema / properties / design_id / description
        Previous value: -"The ID of the source design to copy."New value: +"ID of the existing Canva design to copy."
      • changedInput schema / properties / page_numbers / description
        Previous value: -"Optional 1-based page numbers to include in the copy. Omit to copy all pages."New value: +"Pages to include in the new design, numbered from 1. For example, use [1, 3, 5] to copy pages 1, 3, and 5. Omit to copy every page."
    • Changedcreate-folder2 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Name of the folder to create"New value: +"Name for the new Canva folder."
      • changedInput schema / properties / parent_folder_id / description
        Previous value: -"ID of the parent folder. Use 'root' to create at the top level"New value: +"ID of the Canva folder that will contain the new folder. Use \"root\" to create the folder at the top level."
    • Changedexport-design10 fields changed
      • changedInput schema / properties / design_id / description
        Previous value: -"ID of the design to export. Design ID starts with \"D\"."New value: +"ID of the existing Canva design to export. Design IDs start with \"D\"."
      • changedInput schema / properties / format / description
        Previous value: -"Format options for the export"New value: +"Export settings for the downloadable file."
      • changedInput schema / properties / format / properties / as_single_image / description
        Previous value: -"Use for types: png. When true, multi-page designs are merged into a single image"New value: +"Optional PNG setting. True merges a multi-page design into one image."
      • changedInput schema / properties / format / properties / export_quality / description
        Previous value: -"Use for types: pdf, png, jpg, gif, pptx, mp4. Export quality (regular or pro)"New value: +"Optional export quality for PDF, PNG, JPG, GIF, PPTX, or MP4."
      • changedInput schema / properties / format / properties / height / description
        Previous value: -"Use for types: png, jpg, gif. Height of the exported image in pixels"New value: +"Optional output height in pixels for PNG, JPG, or GIF exports."
      • changedInput schema / properties / format / properties / lossless / description
        Previous value: -"Use for types: png. Whether to use lossless compression (default: true)"New value: +"Optional PNG compression setting. True uses lossless compression; defaults to true."
      • changedInput schema / properties / format / properties / size / description
        Previous value: -"Use for types: pdf. Paper size for PDF export"New value: +"Optional paper size for PDF exports."
      • changedInput schema / properties / format / properties / transparent_background / description
        Previous value: -"Use for types: png. Whether to use a transparent background (default: false)"New value: +"Optional PNG background setting. True exports a transparent background; defaults to false."
      • changedInput schema / properties / format / properties / type / description
        Previous value: -"Format to export the design as."New value: +"Format to export as. Use a type confirmed as supported by the selected design."
      • changedInput schema / properties / format / properties / width / description
        Previous value: -"Use for types: png, jpg, gif. Width of the exported image in pixels"New value: +"Optional output width in pixels for PNG, JPG, or GIF exports."
    • Changedget-assets2 fields changed
      • changedInput schema / properties / asset_ids / description
        Previous value: -"Required array of asset IDs to get the asset metadatas of, as part of this call."New value: +"IDs of the images or videos to inspect. When checking which media is the target on a page, include every image and video ID from that page."
      • changedInput schema / properties / asset_ids / items / description
        Previous value: -"ID of the asset"New value: +"ID of an image or video to inspect."
    • Changedget-design1 field changed
      • changedInput schema / properties / design_id / description
        Previous value: -"ID of the design to get information for, or a full Canva design share URL"New value: +"ID of the existing Canva design, usually returned by a previous Canva tool. Also accepts a full Canva design share URL, including any collaboration token. Do not extract the ID from a share URL. Does not accept a Canva shortlink; resolve it to its full URL first."
    • Changedget-design-content1 field changed
      • changedInput schema / properties / design_id / description
        Previous value: -"ID of the design to get content of, or a full Canva design share URL"New value: +"ID of the existing Canva design whose rich text you want to retrieve, usually returned by a previous Canva tool. You can also provide a full Canva design share URL exactly as received; this preserves any collaboration token needed for access. Resolve Canva shortlinks before using this field."
    • Changedget-design-pages3 fields changed
      • changedInput schema / properties / design_id / description
        Previous value: -"The design ID to get pages from, or a full Canva design share URL"New value: +"ID of the existing Canva design, usually returned by a previous Canva tool. You can also provide a full Canva design share URL, including its collaboration token. Resolve Canva shortlinks before using this field."
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of pages to return (for pagination)"New value: +"Maximum number of pages to return, from 1 to 100. Use with \"offset\" to retrieve the next range of pages."
      • changedInput schema / properties / offset / description
        Previous value: -"The page index to start the range of pages to return, for pagination. The first page in a design has an index value of 1"New value: +"Page number to start from. Use for pagination; for example, use 21 to start at page 21."
    • Changedget-presenter-notes1 field changed
      • changedInput schema / properties / design_id / description
        Previous value: -"ID of the design to get presenter notes from"New value: +"ID of the existing Canva presentation whose presenter notes you want to retrieve."
    • Changedimport-design-from-url3 fields changed
      • changedInput schema / properties / intended_design_type / description
        Previous value: -"The design type the user appears to want to create from this URL. Choose the closest match based on the user request and the URL. If unclear, omit this field. Use other only when the intended design type is clear but none of the listed options fit."New value: +"Requested Canva output format. Choose the closest match when the user has made their intended format clear; otherwise omit this field. Use \"other\" only when the intended format is clear but is not listed."
      • changedInput schema / properties / name / description
        Previous value: -"Name for the new design"New value: +"Name for the new Canva design."
      • changedInput schema / properties / url / description
        Previous value: -"Public HTTPS URL to the file to import. MUST START WITH https://. Examples: https://example.com/file.pdf, https://example.com/site.zip, https://raw.githubusercontent.com/user/repo/main/design.zip CRITICAL: If user input is a local path (starts with /, C:\\, file://, or mentions Downloads/Documents/Desktop), DO NOT USE THIS TOOL. If it looks like a Canva design URL, DO NOT call this tool."New value: +"Public HTTPS URL for the source to convert. Does not accept Canva design URLs, OpenAI file URLs, local paths, private files, or agent-generated files. For static HTML, each top-level Canva page element must have data-document-role=\"page\" and page elements cannot be nested. Use optional data-label and data-speaker-notes attributes for page titles and presenter notes. Do not add page annotations to interactive HTML."
    • Changedlist-brand-kits2 fields changed
      • changedInput schema / properties / continuation / description
        Previous value: -"Token for getting the next page of results. Use the continuation token from the previous response."New value: +"Exact token returned by the previous Brand Kit search with the same query. Omit for a new search or browse."
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of brand kits to return."New value: +"Maximum number of Brand Kits to return."
    • Changedlist-comments3 fields changed
      • changedInput schema / properties / continuation / description
        Previous value: -"\n            Pagination token for the current search context.\n\n            CRITICAL RULES:\n            - ONLY set this parameter if the previous response included a continuation token.\n            - If no continuation token was returned → OMIT this parameter completely. NEVER EVER fabricate a token.\n            - Do not set to null, empty string, or any other value when no token was provided.\n\n            Usage:\n            - First request: omit this parameter\n            - Previous response had continuation token: use that exact token\n            - Previous response had NO continuation token: omit this parameter\n            - New search query: omit this parameter\n            "New value: +"Exact continuation token returned by the previous call for the same design. Omit for the first page."
      • changedInput schema / properties / design_id / description
        Previous value: -"ID of the design to get comments for. You can find the design ID using the `search-designs` tool."New value: +"ID of the existing Canva design whose comments to return. Design IDs start with \"D\"."
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of comments to return (1-100). Defaults to 50 if not specified."New value: +"Maximum number of comments to return per page."
    • Changedlist-folder-items4 fields changed
      • changedInput schema / properties / continuation / description
        Previous value: -"\n            Pagination token for the current search context.\n\n            CRITICAL RULES:\n            - ONLY set this parameter if the previous response included a continuation token.\n            - If no continuation token was returned → OMIT this parameter completely. NEVER EVER fabricate a token.\n            - Do not set to null, empty string, or any other value when no token was provided.\n\n            Usage:\n            - First request: omit this parameter\n            - Previous response had continuation token: use that exact token\n            - Previous response had NO continuation token: omit this parameter\n            - New search query: omit this parameter\n            "New value: +"Exact continuation token returned by the previous call with the same folder, filters, and sort order. Omit for the first page."
      • changedInput schema / properties / folder_id / description
        Previous value: -"ID of the folder to list items from. Use 'root' to list items at the top level"New value: +"ID of the Canva folder to list. Use \"root\" to list items at the top level."
      • changedInput schema / properties / item_types / description
        Previous value: -"Filter items by type. Can be 'design', 'folder', or 'image'"New value: +"Types of items to return. Omit to return designs, folders, and images."
      • changedInput schema / properties / sort_by / description
        Previous value: -"Sort the items by creation date, modification date, or title"New value: +"Order the results by creation date, last modified date, or title, in ascending or descending order."
    • Changedlist-replies4 fields changed
      • changedInput schema / properties / comment_id / description
        Previous value: -"ID of the comment to list replies from. You can find comment IDs using the `list-comments` tool."New value: +"ID of the top-level comment whose replies to return."
      • changedInput schema / properties / continuation / description
        Previous value: -"\n            Pagination token for the current search context.\n\n            CRITICAL RULES:\n            - ONLY set this parameter if the previous response included a continuation token.\n            - If no continuation token was returned → OMIT this parameter completely. NEVER EVER fabricate a token.\n            - Do not set to null, empty string, or any other value when no token was provided.\n\n            Usage:\n            - First request: omit this parameter\n            - Previous response had continuation token: use that exact token\n            - Previous response had NO continuation token: omit this parameter\n            - New search query: omit this parameter\n            "New value: +"Exact continuation token returned by the previous call for the same design and comment. Omit for the first page."
      • changedInput schema / properties / design_id / description
        Previous value: -"ID of the design containing the comment. You can find the design ID using the `search-designs` tool."New value: +"ID of the Canva design containing the comment. Design IDs start with \"D\"."
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of replies to return (1-100). Defaults to 50 if not specified."New value: +"Maximum number of replies to return per page."
    • Changedmerge-designs8 fields changed
      • changedInput schema / properties / design_id / description
        Previous value: -"ID of the design to modify (required for modify_existing_design, must start with \"D\")."New value: +"ID of the existing Canva design whose pages will change. Required when \"type\" is \"modify_existing_design\". Design IDs start with \"D\"."
      • addedInput schema / properties / design_id / maxLength
        Added value: +11
      • addedInput schema / properties / design_id / minLength
        Added value: +11
      • addedInput schema / properties / design_id / pattern
        Added value: +"^D[a-zA-Z0-9_-]+$"
      • changedInput schema / properties / operations / description
        Previous value: -"List of operations to perform. For create_new_design, only insert_pages operations are allowed. For modify_existing_design, all operation types are allowed."New value: +"Page operations to perform, in order. Each operation runs before the next, so page numbers refer to the design's updated page structure. When \"type\" is \"create_new_design\", only \"insert_pages\" operations are accepted. When \"type\" is \"modify_existing_design\", every operation type is accepted."
      • changedInput schema / properties / operations / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "after_page_number": {
        -        "description": "Insert after this page number (0 to insert at beginning, omit to append at end)",
        -        "minimum": 0,
        -        "type": "integer"
        -      },
        -      "source": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "design_id": {
        -            "description": "ID of the source design (must start with \"D\")",
        -            "type": "string"
        -          },
        -          "page_numbers": {
        -            "description": "One-based page numbers to insert. If omitted, all pages are inserted.",
        -            "items": {
        -              "exclusiveMinimum": 0,
        -              "type": "integer"
        -            },
        -            "type": "array"
        -          },
        -          "type": {
        -            "const": "design",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "type",
        -          "design_id"
        -        ],
        -        "type": "object"
        -      },
        -      "type": {
        -        "const": "insert_pages",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "source"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "from_page_numbers": {
        -        "description": "One-based page numbers to move",
        -        "items": {
        -          "exclusiveMinimum": 0,
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "to_after_page_number": {
        -        "description": "Move pages to after this page number (0 to move to beginning)",
        -        "minimum": 0,
        -        "type": "integer"
        -      },
        -      "type": {
        -        "const": "move_pages",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "from_page_numbers",
        -      "to_after_page_number"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "page_numbers": {
        -        "description": "One-based page numbers to delete",
        -        "items": {
        -          "exclusiveMinimum": 0,
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "type": {
        -        "const": "delete_pages",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "page_numbers"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "after_page_number": {
        +        "description": "Insert after this 1-based page number. Use 0 to insert at the beginning, or omit to append to the end.",
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "source": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "design_id": {
        +            "description": "ID of the source design (must start with \"D\")",
        +            "maxLength": 11,
        +            "minLength": 11,
        +            "pattern": "^D[a-zA-Z0-9_-]+$",
        +            "type": "string"
        +          },
        +          "page_numbers": {
        +            "description": "One-based page numbers to insert. If omitted, all pages are inserted.",
        +            "items": {
        +              "exclusiveMinimum": 0,
        +              "type": "integer"
        +            },
        +            "type": "array"
        +          },
        +          "type": {
        +            "const": "design",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "type",
        +          "design_id"
        +        ],
        +        "type": "object"
        +      },
        +      "type": {
        +        "const": "insert_pages",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "source"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "from_page_numbers": {
        +        "description": "Pages to move, using 1-based page numbers.",
        +        "items": {
        +          "exclusiveMinimum": 0,
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "to_after_page_number": {
        +        "description": "Move the pages after this 1-based page number. Use 0 to move them to the beginning.",
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "type": {
        +        "const": "move_pages",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "from_page_numbers",
        +      "to_after_page_number"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "page_numbers": {
        +        "description": "One-based page numbers to delete",
        +        "items": {
        +          "exclusiveMinimum": 0,
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "type": {
        +        "const": "delete_pages",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "page_numbers"
        +    ],
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / title / description
        Previous value: -"Title for the new design (required for create_new_design). Optional for modify_existing_design to rename the design."New value: +"Title for the new design. Required when \"type\" is \"create_new_design\". Optional when \"type\" is \"modify_existing_design\", where it renames the design."
      • changedInput schema / properties / type / description
        Previous value: -"Whether to create a new design or modify an existing one. Use \"create_new_design\" to combine pages from multiple designs into a new design. Use \"modify_existing_design\" to insert, move, or delete pages in an existing design."New value: +"Whether to create a new design from pages in existing designs, or change the pages in one existing design."
    • Changedmove-item-to-folder2 fields changed
      • changedInput schema / properties / item_id / description
        Previous value: -"ID of the item to move (design, folder, or image)"New value: +"ID of the existing Canva design, folder, or image to move."
      • changedInput schema / properties / to_folder_id / description
        Previous value: -"ID of the destination folder. Use 'root' to move to the top level"New value: +"ID of the destination Canva folder. Use \"root\" to move the item to the top level."
    • Changedperform-editing-operations1 field changed
      • changedInput schema / properties / operations / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "title": {
        -        "description": "The new title for the design",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "update_title",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "title"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "element_id": {
        -        "description": "The ID of the element to replace the text of.",
        -        "type": "string"
        -      },
        -      "text": {
        -        "description": "The new text to replace the existing text with.",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "replace_text",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "element_id",
        -      "text"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "alt_text": {
        -        "description": "The alternate text of the new asset",
        -        "type": "string"
        -      },
        -      "asset_id": {
        -        "description": "ID of the asset",
        -        "maxLength": 50,
        -        "minLength": 1,
        -        "pattern": "^[a-zA-Z0-9_-]+$",
        -        "type": "string"
        -      },
        -      "asset_type": {
        -        "description": "The type of the new asset",
        -        "enum": [
        -          "image",
        -          "video"
        -        ],
        -        "type": "string"
        -      },
        -      "element_id": {
        -        "description": "The ID of the element to replace the text of.",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "update_fill",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "element_id",
        -      "asset_type",
        -      "asset_id",
        -      "alt_text"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "alt_text": {
        -        "description": "The alternate text of the asset",
        -        "type": "string"
        -      },
        -      "asset_id": {
        -        "description": "ID of the asset",
        -        "maxLength": 50,
        -        "minLength": 1,
        -        "pattern": "^[a-zA-Z0-9_-]+$",
        -        "type": "string"
        -      },
        -      "asset_type": {
        -        "description": "The type of the asset to insert",
        -        "enum": [
        -          "image",
        -          "video"
        -        ],
        -        "type": "string"
        -      },
        -      "height": {
        -        "description": "Height in pixels. Must be > 0. If not specified, a default height will be used",
        -        "exclusiveMinimum": 0,
        -        "type": "number"
        -      },
        -      "left": {
        -        "description": "Left position in pixels. If not specified, a default position will be used",
        -        "type": "number"
        -      },
        -      "opacity": {
        -        "description": "Opacity value. Range: [0, 1], default: 1",
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "page_id": {
        -        "description": "The ID of the page to insert the fill into",
        -        "type": "string"
        -      },
        -      "rotation": {
        -        "description": "Rotation in degrees. Range: [-180.0, 180.0], default: 0",
        -        "maximum": 180,
        -        "minimum": -180,
        -        "type": "number"
        -      },
        -      "top": {
        -        "description": "Top position in pixels. If not specified, a default position will be used",
        -        "type": "number"
        -      },
        -      "type": {
        -        "const": "insert_fill",
        -        "type": "string"
        -      },
        -      "width": {
        -        "description": "Width in pixels. Must be > 0. If not specified, a default width will be used",
        -        "exclusiveMinimum": 0,
        -        "type": "number"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "page_id",
        -      "asset_type",
        -      "asset_id",
        -      "alt_text"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "element_id": {
        -        "description": "The ID of the element to delete.",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "delete_element",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "element_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "element_id": {
        -        "description": "The ID of the element to find and replace the text in.",
        -        "type": "string"
        -      },
        -      "find_text": {
        -        "description": "The text that is needs to be found to be replaced.",
        -        "type": "string"
        -      },
        -      "replace_text": {
        -        "description": "The new text to replace the existing text with.",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "find_and_replace_text",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "element_id",
        -      "find_text",
        -      "replace_text"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "element_id": {
        -        "description": "The ID of the element to reposition.",
        -        "type": "string"
        -      },
        -      "left": {
        -        "description": "Left position in pixels (relative to page).",
        -        "type": "number"
        -      },
        -      "top": {
        -        "description": "Top position in pixels (relative to page).",
        -        "type": "number"
        -      },
        -      "type": {
        -        "const": "position_element",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "element_id",
        -      "top",
        -      "left"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "description": "Resizes an existing element (image, video, text, etc.) to a new size on the page. IMPORTANT: For TEXT elements, only specify width (height is auto-calculated). For IMAGE/VIDEO elements: if preserve_aspect_ratio=true, specify ONLY width OR height (the other is calculated); if preserve_aspect_ratio=false, specify both width and height.",
        -    "properties": {
        -      "element_id": {
        -        "description": "The ID of the element to resize.",
        -        "type": "string"
        -      },
        -      "height": {
        -        "description": "The height in pixels of the element. For TEXT elements: do NOT provide height - it will be automatically calculated. For other elements: if preserve_aspect_ratio is true, provide either width OR height (not both) - the other dimension will be calculated. If preserve_aspect_ratio is false, provide both width and height.",
        -        "type": "number"
        -      },
        -      "preserve_aspect_ratio": {
        -        "default": false,
        -        "description": "Whether to preserve the aspect ratio of the element. If true, provide only ONE dimension (width or height) - the other will be calculated automatically. If false, provide both dimensions.",
        -        "type": "boolean"
        -      },
        -      "type": {
        -        "const": "resize_element",
        -        "type": "string"
        -      },
        -      "width": {
        -        "description": "The width in pixels of the element. Required unless preserve_aspect_ratio is true and height is provided.",
        -        "type": "number"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "element_id"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "element_id": {
        -        "description": "The ID of the text element to format.",
        -        "type": "string"
        -      },
        -      "formatting": {
        -        "additionalProperties": false,
        -        "description": "The formatting options to apply to the text",
        -        "properties": {
        -          "color": {
        -            "description": "Text color in hex format",
        -            "pattern": "^#[0-9A-Fa-f]{6}$",
        -            "type": "string"
        -          },
        -          "decoration": {
        -            "description": "Text decoration: none or underline",
        -            "enum": [
        -              "none",
        -              "underline"
        -            ],
        -            "type": "string"
        -          },
        -          "font_size": {
        -            "description": "The size of text in pixels. Must be between 1 and 800",
        -            "maximum": 800,
        -            "minimum": 1,
        -            "type": "integer"
        -          },
        -          "font_style": {
        -            "description": "Font style: normal or italic",
        -            "enum": [
        -              "normal",
        -              "italic"
        -            ],
        -            "type": "string"
        -          },
        -          "font_weight": {
        -            "description": "Font weight: normal or bold",
        -            "enum": [
        -              "normal",
        -              "bold"
        -            ],
        -            "type": "string"
        -          },
        -          "line_height": {
        -            "description": "Line height multiplier. Range: [0.5, 2.5]",
        -            "maximum": 2.5,
        -            "minimum": 0.5,
        -            "type": "number"
        -          },
        -          "link": {
        -            "anyOf": [
        -              {
        -                "const": "",
        -                "type": "string"
        -              },
        -              {
        -                "format": "uri",
        -                "type": "string"
        -              }
        -            ],
        -            "description": "URL string. Setting to empty string removes any existing link"
        -          },
        -          "list_level": {
        -            "description": "List nesting level. 0 removes list formatting (not a list item). 1 is the outermost level, with higher values (e.g., 2, 3, etc.) increasing the nesting depth.",
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          "list_marker": {
        -            "description": "List marker style (only applies when list_level > 0): none, disc, circle, square, decimal, lower-alpha, or lower-roman",
        -            "enum": [
        -              "none",
        -              "disc",
        -              "circle",
        -              "square",
        -              "decimal",
        -              "lower-alpha",
        -              "lower-roman"
        -            ],
        -            "type": "string"
        -          },
        -          "strikethrough": {
        -            "description": "Strikethrough style: none or strikethrough",
        -            "enum": [
        -              "none",
        -              "strikethrough"
        -            ],
        -            "type": "string"
        -          },
        -          "text_align": {
        -            "description": "Text alignment: start, center, or end",
        -            "enum": [
        -              "start",
        -              "center",
        -              "end"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "type": {
        -        "const": "format_text",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "element_id",
        -      "formatting"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "description": "Connects or removes an autofill field label on a text or image element. This is only supported on fixed-page designs.",
        -    "properties": {
        -      "autofill_field_label": {
        -        "description": "The autofill field label to connect to the element. Omit this property to remove an existing autofill field mapping.",
        -        "type": "string"
        -      },
        -      "element_id": {
        -        "description": "The ID of the text or image element to connect to an autofill field.",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "update_autofill_field",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "element_id"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "title": {
        +        "description": "The new title for the design",
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "update_title",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "title"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element_id": {
        +        "description": "The ID of the element to replace the text of.",
        +        "type": "string"
        +      },
        +      "text": {
        +        "description": "The new text to replace the existing text with.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "replace_text",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "element_id",
        +      "text"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "alt_text": {
        +        "description": "The alternate text of the new asset",
        +        "type": "string"
        +      },
        +      "asset_id": {
        +        "description": "ID of the asset",
        +        "maxLength": 50,
        +        "minLength": 1,
        +        "pattern": "^[a-zA-Z0-9_-]+$",
        +        "type": "string"
        +      },
        +      "asset_type": {
        +        "description": "The type of the new asset",
        +        "enum": [
        +          "image",
        +          "video"
        +        ],
        +        "type": "string"
        +      },
        +      "element_id": {
        +        "description": "The ID of the image or video element whose fill should be replaced.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "update_fill",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "element_id",
        +      "asset_type",
        +      "asset_id",
        +      "alt_text"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "alt_text": {
        +        "description": "The alternate text of the asset",
        +        "type": "string"
        +      },
        +      "asset_id": {
        +        "description": "ID of the asset",
        +        "maxLength": 50,
        +        "minLength": 1,
        +        "pattern": "^[a-zA-Z0-9_-]+$",
        +        "type": "string"
        +      },
        +      "asset_type": {
        +        "description": "The type of the asset to insert",
        +        "enum": [
        +          "image",
        +          "video"
        +        ],
        +        "type": "string"
        +      },
        +      "height": {
        +        "description": "Height in pixels. Must be > 0. If not specified, a default height will be used",
        +        "exclusiveMinimum": 0,
        +        "type": "number"
        +      },
        +      "left": {
        +        "description": "Left position in pixels. If not specified, a default position will be used",
        +        "type": "number"
        +      },
        +      "opacity": {
        +        "description": "Opacity value. Range: [0, 1], default: 1",
        +        "maximum": 1,
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "page_id": {
        +        "description": "The ID of the page to insert the fill into",
        +        "type": "string"
        +      },
        +      "rotation": {
        +        "description": "Rotation in degrees. Range: [-180.0, 180.0], default: 0",
        +        "maximum": 180,
        +        "minimum": -180,
        +        "type": "number"
        +      },
        +      "top": {
        +        "description": "Top position in pixels. If not specified, a default position will be used",
        +        "type": "number"
        +      },
        +      "type": {
        +        "const": "insert_fill",
        +        "type": "string"
        +      },
        +      "width": {
        +        "description": "Width in pixels. Must be > 0. If not specified, a default width will be used",
        +        "exclusiveMinimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "page_id",
        +      "asset_type",
        +      "asset_id",
        +      "alt_text"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element_id": {
        +        "description": "The ID of the element to delete.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "delete_element",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "element_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element_id": {
        +        "description": "The ID of the element to find and replace the text in.",
        +        "type": "string"
        +      },
        +      "find_text": {
        +        "description": "The text that is needs to be found to be replaced.",
        +        "type": "string"
        +      },
        +      "replace_text": {
        +        "description": "The new text to replace the existing text with.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "find_and_replace_text",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "element_id",
        +      "find_text",
        +      "replace_text"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element_id": {
        +        "description": "The ID of the element to reposition.",
        +        "type": "string"
        +      },
        +      "left": {
        +        "description": "Left position in pixels (relative to page).",
        +        "type": "number"
        +      },
        +      "top": {
        +        "description": "Top position in pixels (relative to page).",
        +        "type": "number"
        +      },
        +      "type": {
        +        "const": "position_element",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "element_id",
        +      "top",
        +      "left"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "description": "Resizes an existing element (image, video, text, etc.) to a new size on the page. IMPORTANT: For TEXT elements, only specify width (height is auto-calculated). For IMAGE/VIDEO elements: if preserve_aspect_ratio=true, specify ONLY width OR height (the other is calculated); if preserve_aspect_ratio=false, specify both width and height.",
        +    "properties": {
        +      "element_id": {
        +        "description": "The ID of the element to resize.",
        +        "type": "string"
        +      },
        +      "height": {
        +        "description": "The height in pixels of the element. For TEXT elements: do NOT provide height - it will be automatically calculated. For other elements: if preserve_aspect_ratio is true, provide either width OR height (not both) - the other dimension will be calculated. If preserve_aspect_ratio is false, provide both width and height.",
        +        "type": "number"
        +      },
        +      "preserve_aspect_ratio": {
        +        "default": false,
        +        "description": "Whether to preserve the aspect ratio of the element. If true, provide only ONE dimension (width or height) - the other will be calculated automatically. If false, provide both dimensions.",
        +        "type": "boolean"
        +      },
        +      "type": {
        +        "const": "resize_element",
        +        "type": "string"
        +      },
        +      "width": {
        +        "description": "The width in pixels of the element. Required unless preserve_aspect_ratio is true and height is provided.",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "element_id"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "element_id": {
        +        "description": "The ID of the text element to format.",
        +        "type": "string"
        +      },
        +      "formatting": {
        +        "additionalProperties": false,
        +        "description": "The formatting options to apply to the text",
        +        "properties": {
        +          "color": {
        +            "description": "Text color in hex format",
        +            "pattern": "^#[0-9A-Fa-f]{6}$",
        +            "type": "string"
        +          },
        +          "decoration": {
        +            "description": "Text decoration: none or underline",
        +            "enum": [
        +              "none",
        +              "underline"
        +            ],
        +            "type": "string"
        +          },
        +          "font_size": {
        +            "description": "The size of text in pixels. Must be between 1 and 800",
        +            "maximum": 800,
        +            "minimum": 1,
        +            "type": "integer"
        +          },
        +          "font_style": {
        +            "description": "Font style: normal or italic",
        +            "enum": [
        +              "normal",
        +              "italic"
        +            ],
        +            "type": "string"
        +          },
        +          "font_weight": {
        +            "description": "Font weight: normal or bold",
        +            "enum": [
        +              "normal",
        +              "bold"
        +            ],
        +            "type": "string"
        +          },
        +          "line_height": {
        +            "description": "Line height multiplier. Range: [0.5, 2.5]",
        +            "maximum": 2.5,
        +            "minimum": 0.5,
        +            "type": "number"
        +          },
        +          "link": {
        +            "anyOf": [
        +              {
        +                "const": "",
        +                "type": "string"
        +              },
        +              {
        +                "format": "uri",
        +                "type": "string"
        +              }
        +            ],
        +            "description": "URL string. Setting to empty string removes any existing link"
        +          },
        +          "list_level": {
        +            "description": "List nesting level. 0 removes list formatting (not a list item). 1 is the outermost level, with higher values (e.g., 2, 3, etc.) increasing the nesting depth.",
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "list_marker": {
        +            "description": "List marker style (only applies when list_level > 0): none, disc, circle, square, decimal, lower-alpha, or lower-roman",
        +            "enum": [
        +              "none",
        +              "disc",
        +              "circle",
        +              "square",
        +              "decimal",
        +              "lower-alpha",
        +              "lower-roman"
        +            ],
        +            "type": "string"
        +          },
        +          "strikethrough": {
        +            "description": "Strikethrough style: none or strikethrough",
        +            "enum": [
        +              "none",
        +              "strikethrough"
        +            ],
        +            "type": "string"
        +          },
        +          "text_align": {
        +            "description": "Text alignment: start, center, or end",
        +            "enum": [
        +              "start",
        +              "center",
        +              "end"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": {
        +        "const": "format_text",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "element_id",
        +      "formatting"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "description": "Connects or removes an autofill field label on a text or image element. This is only supported on fixed-page designs.",
        +    "properties": {
        +      "autofill_field_label": {
        +        "description": "The autofill field label to connect to the element. Omit this property to remove an existing autofill field mapping.",
        +        "type": "string"
        +      },
        +      "element_id": {
        +        "description": "The ID of the text or image element to connect to an autofill field.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "update_autofill_field",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "element_id"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedreply-to-comment3 fields changed
      • changedInput schema / properties / comment_id / description
        Previous value: -"The ID of the comment to reply to. You can find comment IDs using the `list-comments` tool."New value: +"ID of the existing comment to reply to in the specified design."
      • changedInput schema / properties / design_id / description
        Previous value: -"ID of the design containing the comment. You can find the design ID by using the `search-designs` tool."New value: +"ID of the Canva design containing the comment. Design IDs start with \"D\"."
      • changedInput schema / properties / message_plaintext / description
        Previous value: -"The text content of the reply to add"New value: +"The text content of the reply to add."
    • Changedresize-design2 fields changed
      • changedInput schema / properties / design_id / description
        Previous value: -"ID of the design to resize. Design ID starts with \"D\"."New value: +"ID of the existing Canva design to resize. Design IDs start with \"D\"."
      • changedInput schema / properties / design_type / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "description": "Use this when resizing to a preset design type. Provide 'type: preset' and 'name'.",
        -    "properties": {
        -      "name": {
        -        "description": "The preset design type name. Options: 'presentation', 'whiteboard'.",
        -        "enum": [
        -          "presentation",
        -          "whiteboard"
        -        ],
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "preset",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "name"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "description": "Use this when resizing to custom dimensions. Provide 'type: custom', 'width', and 'height'.",
        -    "properties": {
        -      "height": {
        -        "description": "Height of the design in pixels. Must be at least 1.",
        -        "minimum": 1,
        -        "type": "number"
        -      },
        -      "type": {
        -        "const": "custom",
        -        "type": "string"
        -      },
        -      "width": {
        -        "description": "Width of the design in pixels. Must be at least 1.",
        -        "minimum": 1,
        -        "type": "number"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "width",
        -      "height"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "description": "Use this when resizing to a preset design type. Provide 'type: preset' and 'name'.",
        +    "properties": {
        +      "name": {
        +        "description": "Preset canvas size for the new design. Use \"presentation\" for slides or \"whiteboard\" for a whiteboard.",
        +        "enum": [
        +          "presentation",
        +          "whiteboard"
        +        ],
        +        "type": "string"
        +      },
        +      "type": {
        +        "const": "preset",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "name"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "description": "Use this when resizing to custom dimensions. Provide 'type: custom', 'width', and 'height'.",
        +    "properties": {
        +      "height": {
        +        "description": "Height of the new design in pixels.",
        +        "minimum": 1,
        +        "type": "number"
        +      },
        +      "type": {
        +        "const": "custom",
        +        "type": "string"
        +      },
        +      "width": {
        +        "description": "Width of the new design in pixels.",
        +        "minimum": 1,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "width",
        +      "height"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedresolve-shortlink1 field changed
      • changedInput schema / properties / shortlink_id / description
        Previous value: -"The shortlink ID to resolve (e.g., \"abc123\" from https://canva.link/abc123)"New value: +"ID from a Canva shortlink, excluding the domain and slashes. For example, use \"abc123\" for \"https://canva.link/abc123\"."
    • Changedsearch-brand-templates5 fields changed
      • changedInput schema / properties / continuation / description
        Previous value: -"Token for getting the next page of results. Use the continuation token from the previous response."New value: +"Exact token returned by a previous search. Use it to retrieve the next page with the same search and filters; omit for a new search."
      • changedInput schema / properties / dataset / description
        Previous value: -"Filter brand templates based on their dataset definition: 'any' for all templates, 'non_empty' for templates with dataset fields"New value: +"Filter by data-field availability. Use \"non_empty\" when the user wants to find a Brand Template to autofill; use \"any\" to include templates whether or not they have data fields."
      • changedInput schema / properties / design_types / description
        Previous value: -"Filter brand templates by design type; a brand template is returned if it matches any of the given types. Currently only 'presentation' is supported."New value: +"Optional Brand Template types to include. A Brand Template is returned if it matches at least one specified type. Currently supports \"presentation\" only."
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of brand templates to return per page."New value: +"Maximum number of Brand Templates to return in one page."
      • changedInput schema / properties / query / description
        Previous value: -"Optional search query to filter brand templates"New value: +"Optional title or type to search for. Provide only when the user explicitly names or describes the Brand Template they want; otherwise omit or pass an empty string to browse all available Brand Templates."
    • Changedsearch-designs5 fields changed
      • changedInput schema / properties / continuation / description
        Previous value: -"\n            Pagination token for the current search context.\n\n            CRITICAL RULES:\n            - ONLY set this parameter if the previous response included a continuation token.\n            - If no continuation token was returned → OMIT this parameter completely. NEVER EVER fabricate a token.\n            - Do not set to null, empty string, or any other value when no token was provided.\n\n            Usage:\n            - First request: omit this parameter\n            - Previous response had continuation token: use that exact token\n            - Previous response had NO continuation token: omit this parameter\n            - New search query: omit this parameter\n          "New value: +"The exact token returned by the previous search with the same query, filters, and sort order. Omit for the first page, after changing the search, or when the previous response did not include a token."
      • changedInput schema / properties / design_types / description
        Previous value: -"Filter designs by design type; a design is returned if it matches any of the given types. Currently only 'presentation' is supported."New value: +"Optional design types to include. A design is returned if it matches any supplied type. Currently, only \"presentation\" is supported."
      • changedInput schema / properties / ownership / description
        Previous value: -"Filter designs by ownership: 'any' for all designs owned by and shared with you (default), 'owned' for designs you created, 'shared' for designs shared with you"New value: +"Whose designs to search. Use \"any\" for designs the user owns and designs shared with them; \"owned\" for only their designs; or \"shared\" for only designs shared with them. Omit to use \"any\"."
      • changedInput schema / properties / query / description
        Previous value: -"Optional search term to filter designs by title or content. If it is used, 'sortBy' must be set to 'relevance'."New value: +"Optional text to match against a design's title or content. Use the user's keywords, such as a project name, topic, or phrase. If supplied, \"sort_by\" must be \"relevance\"."
      • changedInput schema / properties / sort_by / description
        Previous value: -"Sort results by: 'relevance' (default), 'modified_descending' (newest first), 'modified_ascending' (oldest first), 'title_descending' (Z-A), 'title_ascending' (A-Z). Optional sort order for results. If 'query' is used, 'sortBy' must be set to 'relevance'."New value: +"How to order results. Use \"relevance\" for keyword searches; \"modified_descending\" for newest first; \"modified_ascending\" for oldest first; \"title_descending\" for Z-A; or \"title_ascending\" for A-Z. Omit to use \"relevance\"."
    • Changedsearch-folders4 fields changed
      • changedInput schema / properties / continuation / description
        Previous value: -"\n            Pagination token for the current search context.\n\n            CRITICAL RULES:\n            - ONLY set this parameter if the previous response included a continuation token.\n            - If no continuation token was returned → OMIT this parameter completely. NEVER EVER fabricate a token.\n            - Do not set to null, empty string, or any other value when no token was provided.\n\n            Usage:\n            - First request: omit this parameter\n            - Previous response had continuation token: use that exact token\n            - Previous response had NO continuation token: omit this parameter\n            - New search query: omit this parameter\n            "New value: +"Exact continuation token returned by the previous call with the same search query and ownership filter. Omit for the first page."
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of folders to return per query"New value: +"Maximum number of folders to return per page."
      • changedInput schema / properties / ownership / description
        Previous value: -"Filter folders by ownership type: 'any' (default), 'owned' (user-owned only), or 'shared' (shared with user only)"New value: +"Which folders to return. Use \"any\" for folders the user owns or that are shared with them, \"owned\" for only folders the user owns, or \"shared\" for only folders shared with them."
      • changedInput schema / properties / query / description
        Previous value: -"Search query to match against folder names and tags"New value: +"Text to match against folder names and tags. Omit to browse all of the user's available folders."
    • Changedstart-editing-transaction1 field changed
      • changedInput schema / properties / design_id / description
        Previous value: -"ID of the design to start an editing transaction for"New value: +"ID of the existing Canva design to edit. Design IDs start with \"D\"."
    • Changedupload-asset-from-url2 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Name for the uploaded asset"New value: +"Name to give the imported media in Canva."
      • changedInput schema / properties / url / description
        Previous value: -"URL of the asset to upload into Canva"New value: +"Existing public HTTPS URL of the image, photo, logo, graphic, or video to import into Canva. The media must already be publicly accessible at this URL."
  2. 1 tool update
    • Addedcreate-upload-url
  3. 1 tool update
    • Addedget-design
  4. 1 tool update
    • Removedget-design
  5. 1 tool update
    • Addedmerge-designs
  6. 1 tool update
    • Removedmerge-designs
  7. 1 tool update
    • Addedmerge-designs
  8. 33 tool updates
    • First observedcancel-editing-transaction
    • First observedcomment-on-design
    • First observedcommit-editing-transaction
    • First observedcopy-design
    • First observedcreate-design-from-brand-template
    • First observedcreate-design-from-candidate
    • First observedcreate-folder
    • First observedexport-design
    • First observedgenerate-design
    • First observedget-assets
    • First observedget-brand-template-dataset
    • First observedget-design
    • First observedget-design-candidates
    • First observedget-design-content
    • First observedget-design-pages
    • First observedget-design-thumbnail
    • First observedget-export-formats
    • First observedget-presenter-notes
    • First observedimport-design-from-url
    • First observedlist-brand-kits
    • First observedlist-comments
    • First observedlist-folder-items
    • First observedlist-replies
    • First observedmove-item-to-folder
    • First observedperform-editing-operations
    • First observedreply-to-comment
    • First observedresize-design
    • First observedresolve-shortlink
    • First observedsearch-brand-templates
    • First observedsearch-designs
    • First observedsearch-folders
    • First observedstart-editing-transaction
    • First observedupload-asset-from-url

Related MCP Connectors

  • The Figma MCP server brings Figma design context directly into your AI workflow.

  • The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.

  • MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.

  • The Fireflies MCP Server enables AI tools to connect directly to meeting data from Fireflies.ai, providing access to meeting transcripts, summaries, action items, and insights without switching platforms. It includes capabilities for querying cross-meeting data for analysis (such as sales insights or product feedback), and a separate Documentation MCP Server that allows searching the Fireflies knowledge base for API references, guides, and code examples.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server for Canva integration. Connect Claude Code or any MCP-compatible AI client to your Canva account to search designs, generate AI designs, edit content, manage folders, and collaborate through comments.
    2
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to interact with the Canva Connect REST API, supporting design creation, brand template autofill, asset uploads, folder management, and design exports to PDF, PNG, JPG, PPTX, and MP4.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources