{"slug":"canva-automation","title":"canva-automation","summary":"Automate Canva tasks via Rube MCP (Composio): designs, exports, folders, brand templates, autofill. Always search tools first for current schemas.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-14T20:43:27.104664Z","repo":{"url":"https://github.com/davepoon/buildwithclaude","stars":3556,"forks":535,"license":"MIT","updatedAt":"2026-09-27T03:56:38Z"},"bodyHtml":"<hr>\n<h2>name: canva-automation\ndescription: \"Automate Canva tasks via Rube MCP (Composio): designs, exports, folders, brand templates, autofill. Always search tools first for current schemas.\"\nrequires:\nmcp: [rube]\ncategory: design</h2>\n<h1>Canva Automation via Rube MCP</h1>\n<p>Automate Canva design operations through Composio's Canva toolkit via Rube MCP.</p>\n<p><strong>Toolkit docs</strong>: <a href=\"https://composio.dev/toolkits/canva\">composio.dev/toolkits/canva</a></p>\n<h2>Prerequisites</h2>\n<ul>\n<li>Rube MCP must be connected (RUBE_SEARCH_TOOLS available)</li>\n<li>Active Canva connection via <code>RUBE_MANAGE_CONNECTIONS</code> with toolkit <code>canva</code></li>\n<li>Always call <code>RUBE_SEARCH_TOOLS</code> first to get current tool schemas</li>\n</ul>\n<h2>Setup</h2>\n<p><strong>Get Rube MCP</strong>: Add <code>https://rube.app/mcp</code> as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.</p>\n<ol>\n<li>Verify Rube MCP is available by confirming <code>RUBE_SEARCH_TOOLS</code> responds</li>\n<li>Call <code>RUBE_MANAGE_CONNECTIONS</code> with toolkit <code>canva</code></li>\n<li>If connection is not ACTIVE, follow the returned auth link to complete Canva OAuth</li>\n<li>Confirm connection status shows ACTIVE before running any workflows</li>\n</ol>\n<h2>Core Workflows</h2>\n<h3>1. List and Browse Designs</h3>\n<p><strong>When to use</strong>: User wants to find existing designs or browse their Canva library</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CANVA_LIST_USER_DESIGNS</code> - List all designs with optional filters [Required]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>query</code>: Search term to filter designs by name</li>\n<li><code>continuation</code>: Pagination token from previous response</li>\n<li><code>ownership</code>: Filter by 'owned', 'shared', or 'any'</li>\n<li><code>sort_by</code>: Sort field (e.g., 'modified_at', 'title')</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Results are paginated; follow <code>continuation</code> token until absent</li>\n<li>Deleted designs may still appear briefly; check design status</li>\n<li>Search is substring-based, not fuzzy matching</li>\n</ul>\n<h3>2. Create and Design</h3>\n<p><strong>When to use</strong>: User wants to create a new Canva design from scratch or from a template</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CANVA_ACCESS_USER_SPECIFIC_BRAND_TEMPLATES_LIST</code> - Browse available brand templates [Optional]</li>\n<li><code>CANVA_CREATE_CANVA_DESIGN_WITH_OPTIONAL_ASSET</code> - Create a new design [Required]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>design_type</code>: Type of design (e.g., 'Presentation', 'Poster', 'SocialMedia')</li>\n<li><code>title</code>: Name for the new design</li>\n<li><code>asset_id</code>: Optional asset to include in the design</li>\n<li><code>width</code> / <code>height</code>: Custom dimensions in pixels</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Design type must match Canva's predefined types exactly</li>\n<li>Custom dimensions have minimum and maximum limits</li>\n<li>Asset must be uploaded first via CANVA_CREATE_ASSET_UPLOAD_JOB before referencing</li>\n</ul>\n<h3>3. Upload Assets</h3>\n<p><strong>When to use</strong>: User wants to upload images or files to Canva for use in designs</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CANVA_CREATE_ASSET_UPLOAD_JOB</code> - Initiate the asset upload [Required]</li>\n<li><code>CANVA_FETCH_ASSET_UPLOAD_JOB_STATUS</code> - Poll until upload completes [Required]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>name</code>: Display name for the asset</li>\n<li><code>url</code>: Public URL of the file to upload (for URL-based uploads)</li>\n<li><code>job_id</code>: Upload job ID returned from step 1 (for status polling)</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Upload is asynchronous; you MUST poll the job status until it completes</li>\n<li>Supported formats include PNG, JPG, SVG, MP4, GIF</li>\n<li>File size limits apply; large files may take longer to process</li>\n<li>The <code>job_id</code> from CREATE returns the ID needed for status polling</li>\n<li>Status values: 'in_progress', 'success', 'failed'</li>\n</ul>\n<h3>4. Export Designs</h3>\n<p><strong>When to use</strong>: User wants to download or export a Canva design as PDF, PNG, or other format</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CANVA_LIST_USER_DESIGNS</code> - Find the design to export [Prerequisite]</li>\n<li><code>CANVA_CREATE_CANVA_DESIGN_EXPORT_JOB</code> - Start the export process [Required]</li>\n<li><code>CANVA_GET_DESIGN_EXPORT_JOB_RESULT</code> - Poll until export completes and get download URL [Required]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>design_id</code>: ID of the design to export</li>\n<li><code>format</code>: Export format ('pdf', 'png', 'jpg', 'svg', 'mp4', 'gif', 'pptx')</li>\n<li><code>pages</code>: Specific page numbers to export (array)</li>\n<li><code>quality</code>: Export quality ('regular', 'high')</li>\n<li><code>job_id</code>: Export job ID for polling status</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Export is asynchronous; you MUST poll the job result until it completes</li>\n<li>Download URLs from completed exports expire after a limited time</li>\n<li>Large designs with many pages take longer to export</li>\n<li>Not all formats support all design types (e.g., MP4 only for animations)</li>\n<li>Poll interval: wait 2-3 seconds between status checks</li>\n</ul>\n<h3>5. Organize with Folders</h3>\n<p><strong>When to use</strong>: User wants to create folders or organize designs into folders</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CANVA_POST_FOLDERS</code> - Create a new folder [Required]</li>\n<li><code>CANVA_MOVE_ITEM_TO_SPECIFIED_FOLDER</code> - Move designs into folders [Optional]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>name</code>: Folder name</li>\n<li><code>parent_folder_id</code>: Parent folder for nested organization</li>\n<li><code>item_id</code>: ID of the design or asset to move</li>\n<li><code>folder_id</code>: Target folder ID</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Folder names must be unique within the same parent folder</li>\n<li>Moving items between folders updates their location immediately</li>\n<li>Root-level folders have no parent_folder_id</li>\n</ul>\n<h3>6. Autofill from Brand Templates</h3>\n<p><strong>When to use</strong>: User wants to generate designs by filling brand template placeholders with data</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CANVA_ACCESS_USER_SPECIFIC_BRAND_TEMPLATES_LIST</code> - List available brand templates [Required]</li>\n<li><code>CANVA_INITIATE_CANVA_DESIGN_AUTOFILL_JOB</code> - Start autofill with data [Required]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>brand_template_id</code>: ID of the brand template to use</li>\n<li><code>title</code>: Title for the generated design</li>\n<li><code>data</code>: Key-value mapping of placeholder names to replacement values</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Template placeholders must match exactly (case-sensitive)</li>\n<li>Autofill is asynchronous; poll for completion</li>\n<li>Only brand templates support autofill, not regular designs</li>\n<li>Data values must match the expected type for each placeholder (text, image URL)</li>\n</ul>\n<h2>Common Patterns</h2>\n<h3>Async Job Pattern</h3>\n<p>Many Canva operations are asynchronous:</p>\n<pre><code>1. Initiate job (upload, export, autofill) -&gt; get job_id\n2. Poll status endpoint with job_id every 2-3 seconds\n3. Check for 'success' or 'failed' status\n4. On success, extract result (asset_id, download_url, design_id)\n</code></pre>\n<h3>ID Resolution</h3>\n<p><strong>Design name -&gt; Design ID</strong>:</p>\n<pre><code>1. Call CANVA_LIST_USER_DESIGNS with query=design_name\n2. Find matching design in results\n3. Extract id field\n</code></pre>\n<p><strong>Brand template name -&gt; Template ID</strong>:</p>\n<pre><code>1. Call CANVA_ACCESS_USER_SPECIFIC_BRAND_TEMPLATES_LIST\n2. Find template by name\n3. Extract brand_template_id\n</code></pre>\n<h3>Pagination</h3>\n<ul>\n<li>Check response for <code>continuation</code> token</li>\n<li>Pass token in next request's <code>continuation</code> parameter</li>\n<li>Continue until <code>continuation</code> is absent or empty</li>\n</ul>\n<h2>Known Pitfalls</h2>\n<p><strong>Async Operations</strong>:</p>\n<ul>\n<li>Uploads, exports, and autofills are all asynchronous</li>\n<li>Always poll job status; do not assume immediate completion</li>\n<li>Download URLs from exports expire; use them promptly</li>\n</ul>\n<p><strong>Asset Management</strong>:</p>\n<ul>\n<li>Assets must be uploaded before they can be used in designs</li>\n<li>Upload job must reach 'success' status before the asset_id is valid</li>\n<li>Supported formats vary; check Canva documentation for current limits</li>\n</ul>\n<p><strong>Rate Limits</strong>:</p>\n<ul>\n<li>Canva API has rate limits per endpoint</li>\n<li>Implement exponential backoff for bulk operations</li>\n<li>Batch operations where possible to reduce API calls</li>\n</ul>\n<p><strong>Response Parsing</strong>:</p>\n<ul>\n<li>Response data may be nested under <code>data</code> key</li>\n<li>Job status responses include different fields based on completion state</li>\n<li>Parse defensively with fallbacks for optional fields</li>\n</ul>\n<h2>Quick Reference</h2>\n<table>\n<thead>\n<tr>\n<th>Task</th>\n<th>Tool Slug</th>\n<th>Key Params</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>List designs</td>\n<td>CANVA_LIST_USER_DESIGNS</td>\n<td>query, continuation</td>\n</tr>\n<tr>\n<td>Create design</td>\n<td>CANVA_CREATE_CANVA_DESIGN_WITH_OPTIONAL_ASSET</td>\n<td>design_type, title</td>\n</tr>\n<tr>\n<td>Upload asset</td>\n<td>CANVA_CREATE_ASSET_UPLOAD_JOB</td>\n<td>name, url</td>\n</tr>\n<tr>\n<td>Check upload</td>\n<td>CANVA_FETCH_ASSET_UPLOAD_JOB_STATUS</td>\n<td>job_id</td>\n</tr>\n<tr>\n<td>Export design</td>\n<td>CANVA_CREATE_CANVA_DESIGN_EXPORT_JOB</td>\n<td>design_id, format</td>\n</tr>\n<tr>\n<td>Get export</td>\n<td>CANVA_GET_DESIGN_EXPORT_JOB_RESULT</td>\n<td>job_id</td>\n</tr>\n<tr>\n<td>Create folder</td>\n<td>CANVA_POST_FOLDERS</td>\n<td>name, parent_folder_id</td>\n</tr>\n<tr>\n<td>Move to folder</td>\n<td>CANVA_MOVE_ITEM_TO_SPECIFIED_FOLDER</td>\n<td>item_id, folder_id</td>\n</tr>\n<tr>\n<td>List templates</td>\n<td>CANVA_ACCESS_USER_SPECIFIC_BRAND_TEMPLATES_LIST</td>\n<td>(none)</td>\n</tr>\n<tr>\n<td>Autofill template</td>\n<td>CANVA_INITIATE_CANVA_DESIGN_AUTOFILL_JOB</td>\n<td>brand_template_id, data</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<p><em>Powered by <a href=\"https://composio.dev\">Composio</a></em></p>\n","files":[{"path":"SKILL.md","sizeBytes":8257,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-14T20:44:42.260641Z","sha256":"49700C66C2A9644E0010EDAB07F64D10D213CDAAC2BDD2614D9867F27F262338","sizeBytes":3325},"review":null,"source":{"repositoryUrl":"https://github.com/davepoon/buildwithclaude","path":"plugins/all-skills/skills/canva-automation","license":"MIT","commit":"6178ae2b0900b3600419853206de1dddf0f28311","subtreeSha":"3DA0070FD7FFA44A61A1A5D4D9899047425897EC7DBD6C970FE3FC468517AB8F","lastSyncedAt":"2026-09-27T19:47:46.68834Z"},"reviewedAt":"2026-09-14T20:47:14.765612Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/davepoon/buildwithclaude/tree/main/plugins/all-skills/skills/canva-automation"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install davepoon-buildwithclaude@llmmart"},{"target":"git","command":"git clone https://github.com/davepoon/buildwithclaude.git"}]}