Work with Canva designs: list designs and folders, create designs, upload assets, and export to PNG/JPG/PDF/MP4. Trigger phrases: canva, canva design, export canva design.
npx skills add https://github.com/Anil-matcha/awesome-muse-connectors --skill canva
Read and manage Canva designs through the Canva Connect API: list designs and folders, inspect a design, create designs, upload assets, and export designs. Exports are async jobs: submit with export, then poll with export-status until the job succeeds.
All commands go through bin/canva.py:
bin/canva.py auth # verify the connection (prints the Canva user)
bin/canva.py designs --query "pitch deck" # list designs, optional search
bin/canva.py design --id DESIGN_ID # get one design's details
bin/canva.py folders # list folders
bin/canva.py folder-items --id FOLDER_ID # list items in a folder
bin/canva.py assets # list uploaded assets
bin/canva.py create --data '{"design_type":{"type":"preset","name":"presentation"}}'
# create a design (raw JSON body, per Canva docs)
bin/canva.py upload-asset --file ./logo.png # upload a local file as an asset
bin/canva.py upload-asset --url https://example.com/a.png # import an asset from a URL
bin/canva.py export --design-id DESIGN_ID --format png # submit an async export job (png, jpg, pdf, mp4, ...)
bin/canva.py export-status --id EXPORT_ID # poll the export job; prints download URLs when done
canva (credential is collected as custom.canva)credentials.request_api_access); any Canva account can create a developer integration for free, but using it for other users requires Canva app reviewapi.canva.combin/canva.py authauth if calls start failing.export returns a job id, then poll export-status with backoff until the status is success. Download URLs expire, so download the file promptly and never store the URL as the artifact.🧪 Draft: written from Canva's public Connect API docs; not yet live-tested end to end.
Take anil-matcha/canva from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.