Canva MCP server
Canva designs, exports, assets, folders, brand templates, autofill and design analytics over the Connect API.
- Tools
- 44
- Read-only
- 27
- Write
- 17
- Off by default
- Destructive
- 3
- Flagged distinctly
Canva through an assistant
An assistant can search a Canva account, export designs to PDF, PowerPoint, MP4 or image formats, organise folders, and fill brand templates with real data. Two things here go beyond what Canva's own MCP server offers. Design analytics -- views, unique viewers, watch time, per-page attention -- has no counterpart there at all. And files can be uploaded straight from a laptop: Canva's own tooling can only import from an already-public URL, so a private file has to be published to the open internet first. Serve MCP takes the bytes through its own signed, workspace-scoped upload instead, and the file is never exposed. Editing the contents of a design is not offered, because Canva's public API does not expose it.
- Search designs, read metadata and page structure, export to nine formats
- Upload images, video and documents from a local file without publishing them anywhere (opt-in)
- Design analytics: views, unique viewers, watch time and per-page attention
- Brand templates and autofill, for designs built from real data
- Folder organisation, comments and replies
- Plan-gated features report which Canva plan they need rather than a bare permission error
What people actually ask
Real questions, answered from live Canva data.
“Export my Q4 deck from Canva as a PDF and give me the download link.”
canva_list_designscanva_get_export_formatscanva_export_design“Which pages of our pitch deck do people actually stop on?”
canva_list_designscanva_get_design_pagescanva_get_design_page_views“Put this logo file into Canva without uploading it anywhere public first.”
canva_upload_asset_from_file44 Canva tools
Grouped by what they touch. Every tool is individually toggleable — you expose only what you want.
Designs
13 tools8 read-only · 5 writeShowing 10 of 10 tools
- canva_create_designWrite
Create a new, EMPTY Canva design at a preset or custom size, optionally with one image asset placed in it. This does not generate content: Canva's AI design generation is not part of the Connect API, so there is no prompt-to-design tool here. To get content into a design, either import a file with canva_import_design_from_url, or fill a brand template with canva_autofill_design. Preset sizes are limited to doc, email, presentation and whiteboard -- for anything else (social posts, flyers, posters) use a custom width and height in pixels. Custom dimensions must each be 40-8000px and the total area must not exceed 25,000,000px². NOTE: the Connect API has no endpoint for deleting a design, so nothing here can remove one once made. The only way to get rid of it is in Canva itself, or by moving it into a folder with canva_move_item_to_folder and deleting that folder, which takes its contents. Do not create designs speculatively.
- canva_export_designRead-only
Export a design to a downloadable file and wait for it to finish, returning the download URLs. Call canva_get_export_formats first and pass only a format it reports as supported. Download URLs EXPIRE AFTER 24 HOURS -- always give them to the user rather than storing them. Multi-page designs usually return one URL per page, in page order. `transparentBackground` (png only) needs a paid Canva plan and is ignored on free accounts. If the export is still running when the wait expires, an exportJobId is returned instead; pass it to canva_get_export_job rather than starting the export again.
- canva_get_designRead-only
Get metadata for one Canva design: title, owner, page count, thumbnail and the edit/view URLs. This returns metadata only. The Connect API does not expose a design's text or elements, so there is no way to read or edit the CONTENT of a design through this connector -- that lives behind Canva's own editor. Use canva_get_design_pages for per-page thumbnails and dimensions.
- canva_get_design_datasetRead-only
Get the autofill field schema of a design: the named data fields it declares and their types (text, image, chart). An empty result means the design has no autofill fields and cannot be autofilled. Use the field names returned here to build the `data` payload for canva_autofill_design.
- canva_get_design_pagesRead-only
List the pages of a design with each page's number, dimensions and thumbnail URL. Returns at most 50 pages per call. This gives page STRUCTURE, not page content -- the text and elements on a page are not available through the Connect API.
- canva_get_export_formatsRead-only
List the file formats a specific design can be exported as. Call this BEFORE canva_export_design: not every design supports every format, and exporting in an unsupported one fails. Do not guess the format from the design type, and do not assume a format is available because the user named it.
- canva_get_export_jobRead-only
Check an export started earlier, using the exportJobId canva_export_design returned when it was still running. Returns the download URLs once the job succeeds.
- canva_get_import_jobRead-only
Check an import started earlier, using the importJobId returned when it was still running. Set fromUrl when the import came from canva_import_design_from_url -- Canva uses a separate job path.
- canva_import_design_from_fileWrite
Create a Canva design from a file the user gave you, WITHOUT publishing it anywhere public. Use this for a local PDF, PowerPoint, Word document, spreadsheet or Keynote file. NOT for a plain image -- a PNG or JPG is an asset, not a document, and Canva rejects it here. Use canva_upload_asset_from_file for pictures. First call servemcp_request_upload to get an uploadUrl and fileId, have the user upload the file, then pass that fileId here. The bytes go straight from Serve MCP to Canva. Reach for this instead of asking the user to host a file somewhere to get a link. The title is truncated to 50 characters, which is Canva's limit. NOTE: the Connect API has no endpoint for deleting a design, so nothing here can remove one once made. The only way to get rid of it is in Canva itself, or by moving it into a folder with canva_move_item_to_folder and deleting that folder, which takes its contents. Do not create designs speculatively.
- canva_import_design_from_urlWrite
Create a Canva design by importing a file from a public HTTPS URL, and wait for it to finish. Handles PDF, PPTX, DOCX, XLSX, CSV, AI, PSD, Keynote, Pages, Numbers and more. NOT plain images. A PNG or JPG is an ASSET, not a document: importing one fails with "Downloaded file couldn't be imported because it was invalid" (verified 2026-09-16). To get a picture into Canva use canva_upload_asset_from_url, then place it with canva_create_design. The URL must already be publicly reachable -- Canva fetches it server side. If the file is on the user's machine, use canva_import_design_from_file instead. Never publish a private file to make a URL for this tool. The title is truncated to 50 characters, which is Canva's limit. NOTE: the Connect API has no endpoint for deleting a design, so nothing here can remove one once made. The only way to get rid of it is in Canva itself, or by moving it into a folder with canva_move_item_to_folder and deleting that folder, which takes its contents. Do not create designs speculatively.
+ 3 more designs tools — see the full catalogue
Folders
6 tools2 read-only · 4 writeShowing 6 of 6 tools
- canva_create_folderWrite
Create a folder. parentFolderId is required -- use `root` for the top level of the user's Projects, or another folder's id to nest it.
- canva_delete_folderWriteDestructive
Move a folder to the user's Canva trash. Requires confirm: true, and this can only remove folders SERVE MCP created -- a folder the user made in Canva themselves is refused. THIS TAKES THE CONTENTS WITH IT -- every design and sub-folder inside goes to the trash too. List the folder with canva_list_folder_items first and tell the user exactly what it contains before asking them to confirm.
- canva_get_folderRead-only
Get a folder's name and timestamps. Use the id `root` for the top level of the user's Projects, or `uploads` for their Uploads folder. The Connect API has no folder search, so start at `root` and walk down with canva_list_folder_items rather than looking for a folder by name.
- canva_list_folder_itemsRead-only
List the designs, sub-folders and images inside a folder. Use `root` for the top level of the user's Projects or `uploads` for their Uploads. Because the Connect API cannot search folders by name, this is how you find one: start at `root` and follow the sub-folders. Filter with itemTypes when you only want designs or only folders.
- canva_move_item_to_folderWrite
Move a design, folder or image into another folder. Use `root` as the destination to move something to the top level of the user's Projects. Video assets cannot be moved this way -- Canva does not support it.
- canva_update_folderWrite
Rename a folder. Only the name can be changed; use canva_move_item_to_folder to move it.
Assets
6 tools2 read-only · 4 writeShowing 6 of 6 tools
- canva_delete_assetWriteDestructive
Move an uploaded asset to the user's Canva trash. Requires confirm: true. This can only remove assets SERVE MCP uploaded -- an asset the user added in Canva themselves is refused, because there is no record of this connector having created it. Designs already using the asset are not repaired: deleting one a live design depends on will change how that design looks. Check canva_get_asset first and tell the user what goes.
- canva_get_assetRead-only
Get metadata for one uploaded asset: name, type, tags, thumbnail and timestamps. Show the thumbnail to the user when you have one.
- canva_get_asset_upload_jobRead-only
Check an asset upload started earlier, using the uploadJobId returned when it was still running. Works for uploads started by either canva_upload_asset_from_url or canva_upload_asset_from_file.
- canva_update_assetWrite
Rename an uploaded asset or replace its tags. Tags REPLACE the existing set rather than adding to it -- read the current tags with canva_get_asset first and send the full list, or the ones you leave out are removed. Names are capped at 50 characters and there is a limit of 50 tags.
- canva_upload_asset_from_fileWrite
Upload an image or video into the user's Canva uploads from a file they gave you, WITHOUT publishing it anywhere public. Use this whenever the user has a local file. First call servemcp_request_upload to get an uploadUrl and a fileId, have them upload the file, then pass that fileId here. The bytes go straight from Serve MCP to Canva and are never exposed at a public URL. This is the tool to reach for instead of asking the user to host a file somewhere to get a link. The name is truncated to 50 characters, which is Canva's limit.
- canva_upload_asset_from_urlWrite
Import an image or video into the user's Canva uploads from a public HTTPS URL, and wait for it to finish. The URL must already be reachable from the public internet -- Canva fetches it server side. If the file is on the user's own machine rather than at a public URL, use canva_upload_asset_from_file instead. Never publish a private file somewhere public just to produce a URL for this tool. The name is truncated to 50 characters, which is Canva's limit. Returns an assetId usable with canva_create_design and canva_move_item_to_folder.
Brand templates
5 tools3 read-only · 2 writeShowing 5 of 5 tools
- canva_autofill_designWrite
Create a new design by filling a brand template's named fields with your data, and wait for it to finish. This is the Connect API's closest equivalent to generating a design. Call canva_get_brand_template_dataset first and use exactly the field names it returns -- an unknown field name fails the whole job. Image fields take an assetId, not a URL: upload the image first with canva_upload_asset_from_file or canva_upload_asset_from_url and pass the assetId it returns. Chart fields take rows of cells, first row as headers, max 100 rows and 20 columns. Requires Canva Enterprise.
- canva_get_brand_templateRead-only
Get one brand template's title, thumbnail, view URL and create URL. Requires Canva Pro, Teams or Enterprise.
- canva_get_brand_template_datasetRead-only
Get the autofill fields a brand template declares, with each field's name and type (text, image or chart). Call this BEFORE canva_autofill_design and build the data payload from exactly these names -- a field name the template does not declare is rejected. An empty result means the template has no autofill fields: it cannot be autofilled, and the right answer is to give the user the template's createUrl so they can use it by hand. Requires Canva Pro, Teams or Enterprise.
- canva_list_brand_templatesRead-only
List or search the brand templates available to the connected user. Brand templates are a different thing from designs: search them here, not with canva_list_designs. Set datasetFilter to `non_empty` to return only templates that declare autofill fields -- those are the only ones canva_autofill_design can fill. Each result includes a createUrl, which opens the template in Canva for the user to use by hand; offer that when autofill is unavailable. Requires Canva Pro, Teams or Enterprise.
- canva_publish_brand_templateWrite
Publish an existing design as a brand template, making it reusable across the user's Canva team. The design must already exist -- create or import it first. Publishing does NOT give the template autofill fields; those have to be tagged inside Canva's editor, which the Connect API cannot do. Requires Canva Pro, Teams or Enterprise.
Analytics
5 tools5 read-only · 0 writeShowing 5 of 5 tools
- canva_get_design_analyticsRead-only
Get aggregate view analytics for a design: total views, unique viewers, and average and total view duration. This is the headline number. For a trend use canva_get_design_analytics_over_time, for who viewed it use canva_get_design_viewers, and for which pages held attention use canva_get_design_page_views. Requires Canva Enterprise.
- canva_get_design_analytics_linksRead-only
Get per-link analytics for a design: which share links were used and how they performed. Useful for telling apart a design that was widely opened from one link and one that spread across several. Requires Canva Enterprise.
- canva_get_design_analytics_over_timeRead-only
Get a design's views bucketed over time, so you can see when interest peaked rather than just the total. Paginated -- follow nextCursor for older buckets. Requires Canva Enterprise.
- canva_get_design_page_viewsRead-only
Get per-page view durations for a design, so you can see which pages held attention and which were skipped. Page ids come from canva_get_design_pages. Up to 100 page ids per call. This is the tool for questions like 'where do people drop off in this deck'. Requires Canva Enterprise.
- canva_get_design_viewersRead-only
List who viewed a design, with their viewer type, visibility and device form factor. This is personal data about named colleagues -- report it to the user who asked, and do not carry it into anything that leaves this conversation. Requires Canva Enterprise.
Account
3 tools3 read-only · 0 writeShowing 3 of 3 tools
- canva_get_meRead-only
Get the connected Canva user's id and team id. These are the ids used to mention or assign someone in a comment, in the format `[user_id:team_id]`. Use canva_get_user_profile for their display name.
- canva_get_user_capabilitiesRead-only
List which plan-gated Canva features the connected account actually has, and which it does not. Call this FIRST when a Canva tool fails with a permission error, and before promising the user anything involving analytics, autofill, brand templates, design resizing or transparent PNG export. Those depend on the account's Canva SUBSCRIPTION, not on how the connection was authorized, so reconnecting cannot turn any of them on. Returns both what is available and what is missing, with the plan each missing one needs.
- canva_get_user_profileRead-only
Get the connected Canva user's display name, as shown in the Canva UI.
Autofill
1 tool1 read-only · 0 writeShowing 1 of 1 tools
- canva_get_autofill_jobRead-only
Check an autofill started earlier, using the autofillJobId returned when it was still running. Requires Canva Enterprise.
Every tool name and description, machine-readable: /llms-full.txt
You decide what it can touch
The same model applies to every connector, and it defaults closed.
Authorize once
Connect Canva through its own consent screen. Credentials are encrypted with AES-256-GCM and never returned by any API response or tool call.
Writes off by default
A new connection switches on a read-oriented default set only. Every write tool must be enabled deliberately before any client can call it.
Roles enforced server-side
READ, WRITE and ADMIN gate tool invocation on the server, not just in the UI. A READ member's token is refused any write tool.
Connect Canva in minutes
No infrastructure to run. Copy one URL and one token into your client.
- 1Create a free workspace and connect Canva.
- 2Choose which tools to expose — writes stay off until you enable them.
- 3Copy your MCP endpoint URL and bearer token.
- 4Paste them into Claude, Cursor, or any MCP client.
{
"mcpServers": {
"serve-mcp": {
"url": "https://servemcp.com/api/mcp/your-workspace",
"transport": "http",
"headers": {
"Authorization": "Bearer smcp_..."
}
}
}
}On Claude you paste one URL and sign in — no token to copy. See the setup guide for each client.
More in Content & Hosting
WordPress
Content & HostingDiagnose and maintain a WordPress site over SSH, WP-CLI and the REST APIs.
WHM (WebHost Manager)
Content & HostingAsk about every cPanel account on a server without opening WHM.
cPanel Hosting
Content & HostingThe hosting account underneath the site: backups, DNS, SSL and cron.
Put Canva in front of your assistant
Free plan, no card required. Connect in minutes.
Comments
5 tools3 read-only · 2 writeShowing 5 of 5 tools
Start a new comment thread on a design. Everyone with access to the design can see it. To mention someone, put `[user_id:team_id]` in the message. If you set assigneeId you MUST also mention that user in the message text, or Canva rejects the request. Returns a threadId -- keep it, because the Connect API has no way to list a design's threads and you cannot look it up again later. Replies go through canva_create_reply.
Reply to an existing comment thread. Needs the designId and the threadId. Mentions use `[user_id:team_id]`, the same as canva_create_comment.
Get one comment thread by id. You need a threadId you already have -- from canva_create_comment, or from a Canva comment URL. The Connect API cannot list a design's threads, so there is no way to browse them here.
Get one reply from a comment thread by its id.
List the replies on a comment thread. Needs both the designId and the threadId.