canvibes-mcp
v1.0.2
Published
MCP server that connects Claude to the Canva Connect API — create designs, export assets, browse templates, manage folders, and search brand assets
Maintainers
Readme
canvibes-mcp
An MCP (Model Context Protocol) server that connects Claude to the Canva Connect API.
Create designs, browse brand templates, manage assets and folders, trigger exports — all through natural language conversations with Claude.
Claude ──(MCP / stdio)──▶ canvibes-mcp ──(HTTPS)──▶ Canva Connect APITools
| Tool | Description |
|---|---|
| get_profile | Get the authenticated user's profile |
| list_designs | List or search designs with keyword, sort, and ownership filters |
| get_design | Get full details of a design by ID |
| create_design | Create a design from a preset or custom pixel dimensions |
| export_design | Start an export job (PDF, PNG, JPG, SVG, GIF, MP4, PPTX) |
| get_export | Poll an export job and retrieve the download URL |
| list_brand_templates | Browse brand templates with optional keyword search |
| list_assets | List brand assets filtered by type (image, video, audio, document) |
| list_folders | List top-level folders |
| create_folder | Create a folder, optionally nested |
| list_folder_items | List designs and sub-folders inside a folder |
Setup
1 — Get a Canva API token
- Go to Canva Developers and create an integration
- Generate an access token under OAuth 2.0 or use a personal access token
- Set the environment variable:
export CANVA_API_TOKEN=your_token_here2 — Configure Claude Desktop
{
"mcpServers": {
"canva": {
"command": "canvibes-mcp",
"env": {
"CANVA_API_TOKEN": "your_token_here"
}
}
}
}3 — Talk to Claude
"List my recent Canva designs" "Create a new Instagram post design called 'Summer Sale'" "Export design DABcXyz as a PDF in professional quality" "Show me all brand templates matching 'onboarding'" "Create a folder called 'Q3 Campaign' and list what's in my root folders"
Install
npm install -g canvibes-mcpDesign presets
presentation, doc, whiteboard, video, poster, logo, flyer, brochure, infographic, social_media, instagram_post, instagram_story, facebook_post, twitter_post, linkedin_post, youtube_thumbnail, email_header, business_card, resume, invitation, certificate, book_cover, menu
API (library usage)
The package also exports the CanvaClient and all request builders for programmatic use.
import { CanvaClient, buildRequest } from 'canvibes-mcp';
const client = new CanvaClient({ token: process.env.CANVA_API_TOKEN });
// High-level dispatch
const req = buildRequest('list_designs', { query: 'logo', ownership: 'owned' });
const data = await client.call(req);
console.log(data.items); // array of design objects
// Or use request builders directly
import { requestCreateDesign, requestExportDesign } from 'canvibes-mcp';
const createReq = requestCreateDesign({ preset: 'poster', title: 'New Poster' });
const design = await client.call(createReq);
const exportReq = requestExportDesign({ design_id: design.design.id, format: 'png' });
const job = await client.call(exportReq);CanvaClient
const client = new CanvaClient({ token, timeout? });
const result = await client.call(requestConfig);Request builders
All builders are pure functions that return { method, path, body } — no I/O.
requestGetProfile()
requestListDesigns({ query?, ownership?, sort_by?, limit?, continuation? })
requestGetDesign({ design_id })
requestCreateDesign({ preset?, width?, height?, units?, title?, asset_id? })
requestExportDesign({ design_id, format, pages?, quality? })
requestGetExport({ export_id })
requestListBrandTemplates({ query?, continuation? })
requestListAssets({ asset_types?, continuation? })
requestListFolders({ continuation? })
requestCreateFolder({ name, parent_folder_id? })
requestListFolderItems({ folder_id, continuation? })CommonJS
const { CanvaClient, buildRequest, TOOLS } = require('canvibes-mcp');License
MIT
