jpskill.com
🛠️ 開発・MCP コミュニティ 🔴 エンジニア向け 👤 エンジニア・AI開発者

🛠️ Canva

canva

Canvaのデザイン作成から編集、共有、ファイル管理

⏱ テスト計画作成 2時間 → 20分

📺 まず動画で見る(YouTube)

▶ 【衝撃】最強のAIエージェント「Claude Code」の最新機能・使い方・プログラミングをAIで効率化する超実践術を解説! ↗

※ jpskill.com 編集部が参考用に選んだ動画です。動画の内容と Skill の挙動は厳密には一致しないことがあります。

📜 元の英語説明(参考)

MCP skill for canva. Provides 22 tools: upload-asset-from-url, resolve-shortlink, search-designs, get-design, get-design-pages, get-design-content, get-presenter-notes, import-design-from-url, merge-designs, export-design, get-export-formats, create-folder, move-item-to-folder, list-folder-items, search-folders, comment-on-design, list-comments, list-replies, reply-to-comment, generate-design, create-design-from-candidate, list-brand-kits

🇯🇵 日本人クリエイター向け解説

一言でいうと

Canvaのデザイン作成から編集、共有、ファイル管理

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o canva.zip https://jpskill.com/download/4517.zip && unzip -o canva.zip && rm canva.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/4517.zip -OutFile "$d\canva.zip"; Expand-Archive "$d\canva.zip" -DestinationPath $d -Force; ri "$d\canva.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して canva.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → canva フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-18
同梱ファイル
1

💬 こう話しかけるだけ — サンプルプロンプト

  • Canva を使って、最小構成のサンプルコードを示して
  • Canva の主な使い方と注意点を教えて
  • Canva を既存プロジェクトに組み込む方法を教えて

これをClaude Code に貼るだけで、このSkillが自動発動します。

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[Skill 名] canva

canva

Canva 用の MCP スキルです。22 のツールを提供します: upload-asset-from-url, resolve-shortlink, search-designs, get-design, get-design-pages, get-design-content, get-presenter-notes, import-design-from-url, merge-designs, export-design, get-export-formats, create-folder, move-item-to-folder, list-folder-items, search-folders, comment-on-design, list-comments, list-replies, reply-to-comment, generate-design, create-design-from-candidate, list-brand-kits

認証

この MCP サーバーは OAuth 認証を使用します。 OAuth フローは MCP クライアントによって自動的に処理されます。トークンは ~/.mcp-skill/auth/ に永続化されるため、以降の実行では再認証なしで同じ資格情報が再利用されます。

app = CanvaApp()  # uses default OAuth flow

独自の OAuth プロバイダーを使用するには、auth 引数で渡してください。

app = CanvaApp(auth=my_oauth_provider)

依存関係

このスキルには、以下の Python パッケージが必要です。

  • mcp-skill

uv でインストールします。

uv pip install mcp-skill

または pip でインストールします。

pip install mcp-skill

実行方法

重要: インポートが正しく解決されるように、.agents/skills を Python パスに追加してください。

import sys
sys.path.insert(0, ".agents/skills")
from canva.app import CanvaApp

または PYTHONPATH 環境変数を設定します。

export PYTHONPATH=".agents/skills:$PYTHONPATH"

推奨: uv run を使用する (依存関係を自動的に処理します):

PYTHONPATH=.agents/skills uv run --with mcp-skill python -c "
import asyncio
from canva.app import CanvaApp

async def main():
    app = CanvaApp()
    result = await app.upload_asset_from_url(url="example", name="example", user_intent="example")
    print(result)

asyncio.run(main())
"

代替: python を直接使用する (最初に依存関係をインストールします):

pip install mcp-skill
PYTHONPATH=".agents/skills" python -c "
import asyncio
from canva.app import CanvaApp

async def main():
    app = CanvaApp()
    result = await app.upload_asset_from_url(url="example", name="example", user_intent="example")
    print(result)

asyncio.run(main())
"

利用可能なツール

upload-asset-from-url

URL からアセット (例: 画像、動画) を Canva にアップロードします。
API 呼び出しが「Missing scopes: [asset:write]」を返す場合、ユーザーにコネクタを切断して再接続するよう依頼する必要があります。これにより、このツールに必要なスコープを持つ新しいアクセストークンが生成されます。
パラメータ 必須 説明
url str はい Canva にアップロードするアセットの URL
name str はい アップロードするアセットの名前
user_intent str いいえ ユーザーがこのツール呼び出しで何を達成しようとしているかを示す必須の説明です。これは常に LLM クライアントによって提供されるべきです。簡潔に保ってください (255 文字以下を推奨)。

例:

result = await app.upload_asset_from_url(url="example", name="example", user_intent="example")

resolve-shortlink

Canva のショートリンク ID をターゲット URL に解決します。重要: ユーザーがショートリンク (例: https://canva.link/abc123) を提供した場合は、まずこのツールを使用してください。他のツールを使用する前にショートリンクを解決する必要があります。解決後、ターゲット URL からデザイン ID を抽出し、get-design、start-editing-transaction、または get-design-content などのツールで使用してください。

パラメータ 必須 説明
shortlink_id str はい 解決するショートリンク ID (例: https://canva.link/abc123 からの "abc123")
user_intent str いいえ ユーザーがこのツール呼び出しで何を達成しようとしているかを示す必須の説明です。これは常に LLM クライアントによって提供されるべきです。簡潔に保ってください (255 文字以下を推奨)。

例:

result = await app.resolve_shortlink(shortlink_id="example", user_intent="example")

search-designs

  Canva のドキュメント、プレゼンテーション、ビデオ、ホワイトボード、シート、その他のデザインを検索します。テンプレートやブランドテンプレートは除きます。
  フォルダを閲覧するのではなく、キーワードで特定のデザインを見つける必要がある場合に使用します。
  タイトルまたはコンテンツで検索するには、「query」パラメータを使用します。
  「query」を使用する場合、「sortBy」は「relevance」に設定する必要があります。指定がない限り、「any」の所有権でフィルタリングします。指定がない限り、関連性でソートします。
  さらに結果がある場合は、継続トークンを使用して次の結果ページを取得します。

  重要な要件:
  1. ユーザーがテンプレートを検索している場合、またはテンプレートを使用したい場合は、常に「search-brand-templates」ツールを使用してください。
  2.** 🚫 ユーザーがテンプレートの検索を言う場合、彼らは常にブランドテンプレートを意味します。したがって、このツールを呼び出すことは決してありません。常に「search-brand-templates」ツールを呼び出してテンプレートを検索してください。**
  3.** 🚫 ユーザーが「生成する」、「作成する」、「自動入力する」、「テンプレートを検索する」、「テンプレートから始める」、「自分のテンプレートを使用する」、「生成用のテンプレートを選ぶ」という意図を表明している場合、このツールを絶対に使用しないでください。
  そのようなすべての場合において、常に search-brand-templates を使用してください。
  以下のクエリを含むもの:
  – 「プレゼンテーションを生成する」
  – 「レポートを生成する」
  – 「テンプレートを使用してデザインを作成する」
  – 「テンプレートから生成する」
  – 「テンプレートからプレゼンテーションを作成する」
  - 「利用可能なテンプレートを検索する」
  は search-designs を使用してはなりません。
  このツールは、ユーザーが既に所有している、または共有されている既存のデザイン (ドキュメント、プレゼンテーション、ホワイトボード、ビデオなど) のみを検索します。
  テンプレートを見つけることはできず、テンプレート選択のフォールバックとして使用してはなりません。**
パラメータ 必須 説明
query str いいえ デザインをタイトルまたはコンテンツでフィルタリングするためのオプションの検索語です。使用する場合、「sortBy」は「relevance」に設定する必要があります。
ownership str いいえ デザインを所有権でフィルタリングします: あなたが所有し、共有されているすべてのデザインの場合は「any」(デフォルト)、あなたが作成したデザインの場合は「owned」、共有されているデザインの場合は「shared」

(原文がここで切り詰められています)

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

canva

MCP skill for canva. Provides 22 tools: upload-asset-from-url, resolve-shortlink, search-designs, get-design, get-design-pages, get-design-content, get-presenter-notes, import-design-from-url, merge-designs, export-design, get-export-formats, create-folder, move-item-to-folder, list-folder-items, search-folders, comment-on-design, list-comments, list-replies, reply-to-comment, generate-design, create-design-from-candidate, list-brand-kits

Authentication

This MCP server uses OAuth authentication. The OAuth flow is handled automatically by the MCP client. Tokens are persisted to ~/.mcp-skill/auth/ so subsequent runs reuse the same credentials without re-authenticating.

app = CanvaApp()  # uses default OAuth flow

To bring your own OAuth provider, pass it via the auth argument:

app = CanvaApp(auth=my_oauth_provider)

Dependencies

This skill requires the following Python packages:

  • mcp-skill

Install with uv:

uv pip install mcp-skill

Or with pip:

pip install mcp-skill

How to Run

Important: Add .agents/skills to your Python path so imports resolve correctly:

import sys
sys.path.insert(0, ".agents/skills")
from canva.app import CanvaApp

Or set the PYTHONPATH environment variable:

export PYTHONPATH=".agents/skills:$PYTHONPATH"

Preferred: use uv run (handles dependencies automatically):

PYTHONPATH=.agents/skills uv run --with mcp-skill python -c "
import asyncio
from canva.app import CanvaApp

async def main():
    app = CanvaApp()
    result = await app.upload_asset_from_url(url="example", name="example", user_intent="example")
    print(result)

asyncio.run(main())
"

Alternative: use python directly (install dependencies first):

pip install mcp-skill
PYTHONPATH=.agents/skills python -c "
import asyncio
from canva.app import CanvaApp

async def main():
    app = CanvaApp()
    result = await app.upload_asset_from_url(url="example", name="example", user_intent="example")
    print(result)

asyncio.run(main())
"

Available Tools

upload-asset-from-url

Upload an asset (e.g. an image, a video) from a URL into Canva
If the API call returns "Missing scopes: [asset:write]", you should ask the user to disconnect and reconnect their connector. This will generate a new access token with the required scope for this tool.
Parameter Type Required Description
url str Yes URL of the asset to upload into Canva
name str Yes Name for the uploaded asset
user_intent str No Mandatory 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).

Example:

result = await app.upload_asset_from_url(url="example", name="example", user_intent="example")

resolve-shortlink

Resolves a Canva shortlink ID to its target URL. IMPORTANT: Use this tool FIRST when a user provides a shortlink (e.g. https://canva.link/abc123). Shortlinks need to be resolved before you can use other tools. After resolving, extract the design ID from the target URL and use it with tools like get-design, start-editing-transaction, or get-design-content.

Parameter Type Required Description
shortlink_id str Yes The shortlink ID to resolve (e.g., "abc123" from https://canva.link/abc123)
user_intent str No Mandatory 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).

Example:

result = await app.resolve_shortlink(shortlink_id="example", user_intent="example")

search-designs

  Search docs, presentations, videos, whiteboards, sheets, and other designs in Canva, except for templates or brand templates.
  Use when you need to find specific designs by keywords rather than browsing folders.
  Use 'query' parameter to search by title or content.
  If 'query' is used, 'sortBy' must be set to 'relevance'. Filter by 'any' ownership unless specified. Sort by relevance unless specified.
  Use the continuation token to get the next page of results, when there are more results.

  CRITICAL REQUIREMENTS:
  1. ALWAYS use the 'search-brand-templates' tool when the user is searching for templates or wants to use a template.
  2.** 🚫 When a user says search a template, they ALWAYS mean brand-templates. Therefore NEVER call this tool, ALWAYS call the 'search-brand-templates' tool to search for the templates. **
  3.** 🚫 NEVER use this tool when the user expresses intent to “generate”, “create”, “autofill”, “search a template”, “start from a template”, “use my template”, or “pick a template for generation”.
  In all such cases, ALWAYS use search-brand-templates.
  ANY query involving:
  – “generate a presentation”
  – “generate a report”
  – “make a design using a template”
  – “generate from a template”
  – “produce a presentation from their template”
  - "search for available templates"
  MUST NOT use search-designs.
  This tool ONLY searches existing designs (docs, presentations, whiteboards, videos, etc.) that the user already owns or that are shared with them.
  It DOES NOT find templates and MUST NOT be used as a fallback for template selection. **
Parameter Type Required Description
query str No Optional search term to filter designs by title or content. If it is used, 'sortBy' must be set to 'relevance'.
ownership str No 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
sort_by str No 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'.
continuation str No
        Pagination token for the current search context.

        CRITICAL RULES:
        - ONLY set this parameter if the previous response included a continuation token.
        - If no continuation token was returned → OMIT this parameter completely. NEVER EVER fabricate a token.
        - Do not set to null, empty string, or any other value when no token was provided.

        Usage:
        - First request: omit this parameter
        - Previous response had continuation token: use that exact token
        - Previous response had NO continuation token: omit this parameter
        - New search query: omit this parameter
       |

| user_intent | str | No | Mandatory 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). |

Example:

result = await app.search_designs(query="example", ownership="example", sort_by="example")

get-design

Get detailed information about a Canva design, such as a doc, presentation, whiteboard, video, or sheet. This includes design owner information, title, URLs for editing and viewing, thumbnail, created/updated time, and page count. This tool doesn't work on folders or images. You must provide the design ID, which you can find by using the search-designs or list-folder-items tools. When given a URL to a Canva design, you can extract the design ID from the URL. Example URL: https://www.canva.com/design/{design_id}. If the user provides a shortlink (e.g. https://canva.link/abc123), use resolve-shortlink with the shortlink ID first to get the full URL.

Parameter Type Required Description
design_id str Yes ID of the design to get information for
user_intent str No Mandatory 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).

Example:

result = await app.get_design(design_id="example", user_intent="example")

get-design-pages

Get a list of pages in a Canva design, such as a presentation. Each page includes its index and thumbnail. This tool doesn't work on designs that don't have pages (e.g. Canva docs). You must provide the design ID, which you can find using tools like search-designs or list-folder-items. You can use 'offset' and 'limit' to paginate through the pages. Use get-design to find out the total number of pages, if needed.

Parameter Type Required Description
design_id str Yes The design ID to get pages from
offset int No 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
limit int No Maximum number of pages to return (for pagination)
user_intent str No Mandatory 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).

Example:

result = await app.get_design_pages(design_id="example", offset=1, limit=1)

get-design-content

Get the text content of a doc, presentation, whiteboard, social media post, and other designs in Canva (except sheets, as it does not return data in sheets). Use this when you only need to read text content without making changes. IMPORTANT: If the user wants to edit, update, change, translate, or fix content, use start-editing-transaction instead as it shows content AND enables editing. You must provide the design ID, which you can find with the search-designs tool. When given a URL to a Canva design, you can extract the design ID from the URL. Do not use web search to get the content of a design as the content is not accessible to the public. Example URL: https://www.canva.com/design/{design_id}.

Parameter Type Required Description
design_id str Yes ID of the design to get content of
content_types list[str] Yes Types of content to retrieve. Currently, only richtexts is supported so use the start-editing-transaction tool to get other content types
pages list[int] No Optional 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.
user_intent str No Mandatory 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).

Example:

result = await app.get_design_content(design_id="example", content_types="value", pages="value")

get-presenter-notes

Get the presenter notes from a presentation design in Canva. Use this when you need to read the speaker notes attached to presentation slides. You must provide the design ID, which you can find with the search-designs tool. When given a URL to a Canva design, you can extract the design ID from the URL. Example URL: https://www.canva.com/design/{design_id}.

Parameter Type Required Description
design_id str Yes ID of the design to get presenter notes from
pages list[int] No Optional 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.
user_intent str No Mandatory 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).

Example:

result = await app.get_presenter_notes(design_id="example", pages="value", user_intent="example")

import-design-from-url

Import a file from a URL as a new Canva design. URL must be a public HTTPS link (e.g., https://example.com/file.pdf, https://s3.us-east-1.amazonaws.com/...). Local file paths (file://..., /Users/..., C:..., or mentions of Downloads/Documents/Desktop) cannot be accessed. If user provides a local path, tell them to upload file to public, internet-accessible URLs that resolve directly to a downloadable file and share a public HTTPS link.

Parameter Type Required Description
url str Yes MUST BE HTTPS URL STARTING WITH https://. CRITICAL: Check if user input is a local pattern (starts with /, C:\, file://, or mentions Downloads/Documents/Desktop). If so, DO NOT USE THIS TOOL. LOCAL PATHS CANNOT BE IMPORTED. ✅ ONLY: https://example.com/file.pdf, https://s3.us-east-1.amazonaws.com/... CHECK THE USER INPUT FIRST. If it looks like a local pattern or Canva design URL, DO NOT call this tool.
name str Yes Name for the new design
user_intent str No Mandatory 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).

Example:

result = await app.import_design_from_url(url="example", name="example", user_intent="example")

merge-designs

Perform structural page operations on Canva designs: combine pages from multiple designs, insert pages, reorder pages, or delete entire pages. This tool can:

  1. Create a new design by combining pages from one or more existing designs
  2. Insert pages from one design into another existing design
  3. Move or reorder pages within a design
  4. Delete (remove) entire pages from a design

Use this tool (NOT start-editing-transaction) when the user wants to:

  • Delete or remove one or more pages/slides from a design
  • Reorder or rearrange pages/slides within a design
  • Combine, merge, or stitch together multiple designs
  • Copy or insert pages from one design into another

Do NOT use this tool for editing content within pages (text, images, etc.) — use start-editing-transaction for that.

CRITICAL: You MUST ALWAYS ask the user for explicit confirmation before calling this tool, regardless of the operation type. Show them a summary of exactly what will change and ask "Would you like me to proceed?" Wait for their clear approval, then call this tool immediately.

IMPORTANT: This tool supports delete_pages operations and you are allowed to perform them. When operations include delete_pages, show a summary of ALL operations and highlight the deletion. For example: "Here's what will happen:

  • Move page 1 to position 3
  • ⚠️ IMPORTANT: Delete pages 2 and 3 — CANNOT BE UNDONE

To proceed, please type: 'I approve the deletion'." Once the user types that phrase, you MUST call this tool immediately — page deletion is a legitimate and expected operation. For insert_pages and move_pages only (no deletes), a simple "Would you like me to proceed?" is sufficient.

Operations are applied sequentially. Page numbers are 1-based and evaluated at the time each operation runs.

The tool automatically polls for job completion and returns the final result.

Parameter Type Required Description
type str Yes 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.
title str No Title for the new design (required for create_new_design). Optional for modify_existing_design to rename the design.
design_id str No ID of the design to modify (required for modify_existing_design, must start with "D").
operations list[Any] Yes List of operations to perform. For create_new_design, only insert_pages operations are allowed. For modify_existing_design, all operation types are allowed.
user_intent str No Mandatory 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).

Example:

result = await app.merge_designs(type="example", title="example", design_id="example")

export-design

Export a Canva design, doc, presentation, whiteboard, videos and other Canva content types to various formats (PDF, JPG, PNG, PPTX, GIF, MP4). You should use the get-export-formats tool first to check which export formats are supported for the design. This tool provides a download URL for the exported file that you can share with users. Always display this download URL to users so they can access their exported content.

Parameter Type Required Description
design_id str Yes ID of the design to export. Design ID starts with "D".
format dict[str, Any] Yes Format options for the export
user_intent str No Mandatory 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).

Example:

result = await app.export_design(design_id="example", format="value", user_intent="example")

get-export-formats

Get the available export formats for a Canva design. This tool lists the formats (PDF, JPG, PNG, PPTX, GIF, MP4) that are supported for exporting the design. Use this tool before calling export-design to ensure the format you want is supported.

Parameter Type Required Description
design_id str Yes ID of the design to get export formats for. Design ID starts with "D".
user_intent str No Mandatory 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).

Example:

result = await app.get_export_formats(design_id="example", user_intent="example")

create-folder

Create a new folder in Canva. You can create it at the root level or inside another folder.

Parameter Type Required Description
name str Yes Name of the folder to create
parent_folder_id str Yes ID of the parent folder. Use 'root' to create at the top level
user_intent str No Mandatory 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).

Example:

result = await app.create_folder(name="example", parent_folder_id="example", user_intent="example")

move-item-to-folder

Move items (designs, folders, images) to a specified Canva folder

Parameter Type Required Description
item_id str Yes ID of the item to move (design, folder, or image)
to_folder_id str Yes ID of the destination folder. Use 'root' to move to the top level
user_intent str No Mandatory 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).

Example:

result = await app.move_item_to_folder(item_id="example", to_folder_id="example", user_intent="example")

list-folder-items

    List items in a Canva folder. An item can be a design, folder, or image. You can filter by item type and sort the results.
    Use the continuation token to get the next page of results, when there are more results.
Parameter Type Required Description
folder_id str Yes ID of the folder to list items from. Use 'root' to list items at the top level
item_types list[str] No Filter items by type. Can be 'design', 'folder', or 'image'
sort_by str No Sort the items by creation date, modification date, or title
continuation str No
        Pagination token for the current search context.

        CRITICAL RULES:
        - ONLY set this parameter if the previous response included a continuation token.
        - If no continuation token was returned → OMIT this parameter completely. NEVER EVER fabricate a token.
        - Do not set to null, empty string, or any other value when no token was provided.

        Usage:
        - First request: omit this parameter
        - Previous response had continuation token: use that exact token
        - Previous response had NO continuation token: omit this parameter
        - New search query: omit this parameter
         |

| user_intent | str | No | Mandatory 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). |

Example:

result = await app.list_folder_items(folder_id="example", item_types="value", sort_by="example")

search-folders

  Search the user's folders and folders shared with the user based on folder names and tags. 
  Returns a list of matching folders with pagination support.
  Use the continuation token to get the next page of results, when there are more results.
Parameter Type Required Description
query str No Search query to match against folder names and tags
ownership str No Filter folders by ownership type: 'any' (default), 'owned' (user-owned only), or 'shared' (shared with user only)
limit int No Maximum number of folders to return per query
continuation str No
        Pagination token for the current search context.

        CRITICAL RULES:
        - ONLY set this parameter if the previous response included a continuation token. 
        - If no continuation token was returned → OMIT this parameter completely. NEVER EVER fabricate a token.
        - Do not set to null, empty string, or any other value when no token was provided.

        Usage:
        - First request: omit this parameter
        - Previous response had continuation token: use that exact token  
        - Previous response had NO continuation token: omit this parameter
        - New search query: omit this parameter
         |

| user_intent | str | No | Mandatory 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). |

Example:

result = await app.search_folders(query="example", ownership="example", limit=1)

comment-on-design

Add a comment on a Canva design. You need to provide the design ID and the message text. The comment will be added to the design and visible to all users with access to the design.

Parameter Type Required Description
design_id str Yes ID of the design to comment on. You can find the design ID by using the search-designs tool.
message_plaintext str Yes The text content of the comment to add
user_intent str No Mandatory 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).

Example:

result = await app.comment_on_design(design_id="example", message_plaintext="example", user_intent="example")

list-comments

Get a list of comments for a particular Canva design.

Comments are discussions attached to designs that help teams collaborate. Each comment can contain
replies, mentions, and can be marked as resolved or unresolved.

You need to provide the design ID, which you can find using the `search-designs` tool.
Use the continuation token to get the next page of results, when there are more results.

You can filter comments by their resolution status (resolved or unresolved) using the comment_resolution parameter.
Parameter Type Required Description
design_id str Yes ID of the design to get comments for. You can find the design ID using the search-designs tool.
limit int No Maximum number of comments to return (1-100). Defaults to 50 if not specified.
continuation str No
        Pagination token for the current search context.

        CRITICAL RULES:
        - ONLY set this parameter if the previous response included a continuation token.
        - If no continuation token was returned → OMIT this parameter completely. NEVER EVER fabricate a token.
        - Do not set to null, empty string, or any other value when no token was provided.

        Usage:
        - First request: omit this parameter
        - Previous response had continuation token: use that exact token
        - Previous response had NO continuation token: omit this parameter
        - New search query: omit this parameter
         |

| user_intent | str | No | Mandatory 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). |

Example:

result = await app.list_comments(design_id="example", limit=1, continuation="example")

list-replies

Get a list of replies for a specific comment on a Canva design.

Comments can contain multiple replies from different users. These replies help teams
collaborate by allowing discussion on a specific comment.

You need to provide the design ID and comment ID. You can find the design ID using the `search-designs` tool
and the comment ID using the `list-comments` tool.

Use the continuation token to get the next page of results, when there are more results.
Parameter Type Required Description
design_id str Yes ID of the design containing the comment. You can find the design ID using the search-designs tool.
comment_id str Yes ID of the comment to list replies from. You can find comment IDs using the list-comments tool.
limit int No Maximum number of replies to return (1-100). Defaults to 50 if not specified.
continuation str No
        Pagination token for the current search context.

        CRITICAL RULES:
        - ONLY set this parameter if the previous response included a continuation token.
        - If no continuation token was returned → OMIT this parameter completely. NEVER EVER fabricate a token.
        - Do not set to null, empty string, or any other value when no token was provided.

...additional tools omitted for brevity