
Start a job to upload an asset from URL to the user's content library. Poll getassetupload_job for result.
Get the status of an asset upload job. Returns 'in_progress', 'success' (with asset), or 'failed'.
Get metadata for an asset including name, tags, and thumbnail. Use listfolderitems to find asset IDs.
Update an asset's name and/or tags. Requires asset:write scope.
Delete an asset (moves to trash). Requires asset:write scope.
List brand templates the user has access to. Enterprise only. Filter by query, ownership, or dataset availability.
Get metadata for a brand template by ID. Enterprise only.
Get the autofill dataset definition for a brand template. Enterprise only. Returns field names and types.
Start a job to create a new design by autofilling a brand template with data. Enterprise only. Poll getautofilljob for result.
Get autofill job status. Enterprise only. Returns 'success' with new design, 'in_progress', or 'failed'.
Create a new comment thread on a design. Optionally assign to a user. (Preview API)
Get a comment thread by ID including message, author, and reply count. (Preview API)
Add a reply to a comment thread. (Preview API)
List all replies in a comment thread with pagination. (Preview API)
Get a specific reply by ID. (Preview API)
List all designs accessible to the user with optional search and filtering. Use list_users first to get user context.
Get metadata for a specific design by ID including title, owner, URL, and page count.
Create a new Canva design with preset type (doc, whiteboard, presentation) or custom dimensions.
Get page metadata for a design including dimensions and thumbnails (preview API).
Get available export formats for a design (PDF, JPG, PNG, GIF, PPTX, MP4).
Start a job to export a design as PDF, JPG, PNG, GIF, PPTX, or MP4. Poll getexportjob for download URLs.
Get export job status. Returns 'success' with 24-hour download URLs, 'in_progress', or 'failed'.
Start a job to import a file from URL as a new Canva design. Poll getimportjob for result.
Get import job status. Returns 'success' with new design, 'in_progress', or 'failed'.
Start a job to create a resized copy of a design (Canva Pro/Premium only). Poll getresizejob for result.
Get resize job status (Pro/Premium). Returns 'success' with new design, 'in_progress', or 'failed'.
Create a new folder in projects or uploads. Use 'root' for projects, 'uploads' for uploads folder.
Get metadata for a folder by ID.
Update a folder's name.
Delete a folder. Contents move to trash or parent folder.
List items in a folder (designs, subfolders, images). Use 'root' for projects, 'uploads' for uploads.
Move a design, folder, or image to another folder. Use 'root' for projects top level.
Get the current authenticated user's ID and team ID. Use this to identify the user before other operations.
Get the current user's profile information including display name.
Get API capabilities available to the user (autofill, brand templates, resize, etc).
Validate Canva credentials. Verifies credentials during setup.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}It’s an MCP server that lets you access data and functionality from an instance of Canva via tools. Your agents can invoke these tools to update specific assets, list available brand templates, add comments on a design, and more.
Canva offers two official MCP servers; one is for designers and the other is for developers building an application that leverages Canva’s functionality.
You can also access additional Canva MCP servers via 3rd-party platforms, like Merge Agent Handler.
Here are several commonly-used tools:
Here are just a few use cases:
Here are a few reasons:
Yes, Merge Agent Handler includes a Security Gateway with Data Loss Protection (DLP) that scans all tool inputs and outputs and enforces configurable rules.
Here are some custom rules you can set:
You can take these steps:
1. Create an Agent Handler account and grab your API key since your MCP client will use it as a bearer token when calling the Agent Handler MCP endpoint.
2. Add the Canva MCP server into Agent Handler (as a hosted MCP server) by pasting the server’s MCPConfig JSON so it shows up in your connector catalog like any other connector.
3. Create a Tool Pack for your Canva workflow because Tool Packs define exactly which connectors and tools your agent is allowed to use.
4. Add the imported “Canva MCP server” connector to that Tool Pack and select only the specific tools you want exposed (start narrow, then expand).
5. Create a Registered User (or decide on a service-account pattern) since this identity boundary scopes credentials and audit logs for tool calls.
6. Authenticate Canva for that Registered User so Agent Handler can run Canva tool calls using stored credentials without you handling tokens directly.
7. Copy the MCP endpoint URL for your Tool Pack + Registered User in the format <code class="blog_inline-code">/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp</code>.
8. Add that MCP server URL to your MCP client (Cursor, Claude Desktop, VS Code, Windsurf, etc.) and send <code class="blog_inline-code">Authorization: Bearer <AGENT_HANDLER_API_KEY></code> on requests.
9. Test and validate with a simple read tool call first, then check logs and tighten Tool Pack scope and security rules before production.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now