# How to integrate Canva MCP with Claude Code

```json
{
  "title": "How to integrate Canva MCP with Claude Code",
  "toolkit": "Canva",
  "toolkit_slug": "canva",
  "framework": "Claude Code",
  "framework_slug": "claude-code",
  "url": "https://composio.dev/toolkits/canva/framework/claude-code",
  "markdown_url": "https://composio.dev/toolkits/canva/framework/claude-code.md",
  "updated_at": "2026-10-12T13:33:27.401Z"
}
```

## Introduction

Manage your Canva directly from Claude Code with zero worries about OAuth hassles, API-breaking issues, or reliability and security concerns.
You can do this in two different ways:
- Via [Composio Connect](https://dashboard.composio.dev/login?utm_source=toolkits&utm_medium=framework_template&utm_campaign=claude-code&utm_content=composio_connect&next=%2F~%2Forg%2Fconnect%2Fclients%2Fclaude-code) - Direct and easiest approach
- Via [Composio SDK](https://docs.composio.dev/docs?utm_source=toolkits&utm_medium=framework_template&utm_campaign=claude-code&utm_content=composio_sdk) - Programmatic approach with more control

## Also integrate Canva with

- [Cursor](https://composio.dev/toolkits/canva/framework/cursor)
- [ChatGPT](https://composio.dev/toolkits/canva/framework/chatgpt)
- [Claude Cowork](https://composio.dev/toolkits/canva/framework/claude-cowork)
- [Antigravity](https://composio.dev/toolkits/canva/framework/antigravity)
- [OpenAI Agents SDK](https://composio.dev/toolkits/canva/framework/open-ai-agents-sdk)
- [Claude Agent SDK](https://composio.dev/toolkits/canva/framework/claude-agents-sdk)
- [Grok Bot](https://composio.dev/toolkits/canva/framework/grok-bot)
- [Codex](https://composio.dev/toolkits/canva/framework/codex)
- [Kimi Code](https://composio.dev/toolkits/canva/framework/kimi)
- [Grok Build](https://composio.dev/toolkits/canva/framework/grok-build)
- [VS Code](https://composio.dev/toolkits/canva/framework/vscode)
- [OpenCode](https://composio.dev/toolkits/canva/framework/opencode)
- [OpenClaw](https://composio.dev/toolkits/canva/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/canva/framework/hermes-agent)
- [Atomic Agent](https://composio.dev/toolkits/canva/framework/atomic-agent)
- [CLI](https://composio.dev/toolkits/canva/framework/cli)
- [Google ADK](https://composio.dev/toolkits/canva/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/canva/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/canva/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/canva/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/canva/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/canva/framework/crew-ai)
- [Pydantic AI](https://composio.dev/toolkits/canva/framework/pydantic-ai)
- [AutoGen](https://composio.dev/toolkits/canva/framework/autogen)

## TL;DR

- Only one MCP URL to connect multiple apps with Claude Code with zero auth hassles.
- Programmatic tool calling allows LLMs to write its code in a remote workbench to handle complex tool chaining. Reduces to-and-fro with LLMs for frequent tool calling.
- Handling Large tool responses out of LLM context to minimize context rot.
- Dynamic just-in-time access to 20,000 tools across 1500+ other Apps for cross-app workflows. It loads the tools you need, so LLMs aren't overwhelmed by tools you don't need.

## Connect Canva to Claude Code

### Connecting Canva to Claude Code using Composio
1. Add the Composio MCP to Claude

```bash
claude mcp add --scope user --transport http composio https://connect.composio.dev/mcp
```

## What is Claude Code?

Claude Code is Anthropic's command line developer tool that lets you use Claude directly inside your terminal. Instead of switching between your editor, browser, and chat, you can stay in your project folder and ask Claude to help you build, debug, refactor, and understand code right where you're working.
Key features include:
- Terminal-Native Experience: Work with Claude directly in your command line without switching contexts
- MCP Support: Built-in support for Model Context Protocol servers to extend Claude's capabilities
- Project Context: Claude understands your project structure and can read, write, and modify files
- Interactive Development: Ask questions, debug code, and get help in real-time while coding
- Multi-Platform: Works on macOS, Linux, WSL, and Windows

## What is the Canva MCP server, and what's possible with it?

The Canva MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Canva account. It provides structured and secure access to your Canva designs, templates, folders, assets, and user details, so your agent can create designs, organize projects, manage assets, and collaborate on feedback for you.
- Automated design creation and asset integration: Direct your agent to generate new Canva designs using templates or custom dimensions, and add assets from your projects automatically.
- Seamless folder and project organization: Have the agent create user or subfolders to keep your Canva projects structured and easily accessible.
- Asset management and cleanup: Let your agent fetch upload statuses, manage, or delete assets by ID, helping you keep your design library up to date.
- Collaborative design feedback: Empower your agent to add comments or reply within designs, making it easy to facilitate feedback and teamwork directly in Canva.
- User and team information retrieval: Quickly obtain user or team details, allowing your agent to personalize interactions and automate workflows based on your Canva account info.

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `CANVA_ACCESS_USER_SPECIFIC_BRAND_TEMPLATES_LIST` | Access user specific brand templates list | Lists brand templates available to users on plans with brand-template access, such as Canva Pro, Canva Teams, or Canva Enterprise. Returns one page of template metadata, including IDs and titles. Follow the response's continuation token to retrieve additional pages. Dataset definitions are available from CANVA_RETRIEVE_BRAND_TEMPLATE_DATASET_DEFINITION. |
| `CANVA_CREATE_ASSET_UPLOAD_JOB` | Create Asset Upload Job | Uploads an asset file to the user's Canva content library. This endpoint initiates an asynchronous upload job for images or videos. Returns a job ID to track the upload progress. Once complete, the asset can be used in designs, referenced by its asset ID, and managed through other asset endpoints. IMPORTANT: This is an async operation. Use CANVA_FETCH_ASSET_UPLOAD_JOB_STATUS to poll the job status until it reaches 'success' or 'failed' status. |
| `CANVA_CREATE_DESIGN_IMPORT_JOB` | Create Design Import Job | Imports an external file as a new Canva design. This endpoint converts documents (PDF, Word, PowerPoint, Excel) and design files (PSD, AI) into editable Canva designs. The import runs asynchronously and returns a job ID to track progress and retrieve the created design. IMPORTANT: This is an async operation. Use CANVA_RETRIEVE_DESIGN_IMPORT_JOB_STATUS to poll the job status until it reaches 'success' or 'failed' to get the final design ID. |
| `CANVA_CREATE_DESIGN_RESIZE_JOB` | Create Design Resize Job | Creates a resized copy of an existing design (Canva Pro/Enterprise only). This endpoint creates a new design with different dimensions from an existing one. The resize operation runs asynchronously and preserves content where possible. Returns a job ID to track progress and retrieve the new design once complete. IMPORTANT: This is an async operation. Use CANVA_RETRIEVE_DESIGN_RESIZE_JOB_STATUS to poll the job status until completion to get the resized design ID and access URLs. |
| `CANVA_CREATE_URL_ASSET_UPLOAD_JOB` | Create URL Asset Upload Job | Tool to create an asynchronous Canva asset import job from a public URL. Use when you need to import an asset into Canva directly from a publicly accessible URL without S3 choreography. |
| `CANVA_DELETE_ASSET_BY_ID` | Delete asset by id | You can delete an asset by specifying its `assetId`. This operation mirrors the behavior in the Canva UI. Deleting an item moves it to the trash. Deleting an asset doesn't remove it from designs that already use it. |
| `CANVA_EXCHANGE_OAUTH20_ACCESS_OR_REFRESH_TOKEN` | Exchange oauth 2 0 access or refresh token | The OAuth 2.0 endpoint issues time-limited (4-hour) access tokens of up to 4KB for user authorization via codes or refresh tokens. It requires client ID/secret for authentication. |
| `CANVA_FETCH_ASSET_UPLOAD_JOB_STATUS` | Fetch asset upload job status | Polls for asset upload job completion status. Use this after CANVA_CREATE_ASSET_UPLOAD_JOB to check the upload progress. Repeatedly call this endpoint until a 'success' or 'failed' status is received to get the final asset ID and metadata. IMPORTANT: This tool is ONLY for direct file upload jobs (CANVA_CREATE_ASSET_UPLOAD_JOB). Do NOT use this for URL import jobs created by CANVA_CREATE_URL_ASSET_UPLOAD_JOB - those use a different API endpoint. Use CANVA_GET_URL_ASSET_UPLOADS_JOBID to poll URL asset upload job status. |
| `CANVA_FETCH_CANVA_CONNECT_SIGNING_PUBLIC_KEYS` | Fetch canva connect signing public keys | The API for verifying Canva webhooks, 'connect/keys,' is in preview, meaning unstable, not for public integrations, and provides a rotating JWK for signature verification to prevent replay attacks. Cache keys for efficiency. |
| `CANVA_FETCH_CURRENT_USER_DETAILS` | Fetch current user details | Returns the User ID and Team ID associated with the provided access token. Use CANVA_RETRIEVE_USER_PROFILE_DATA to retrieve the user's display name. |
| `CANVA_FETCH_DESIGN_METADATA_AND_ACCESS_INFORMATION` | Fetch design metadata and access information | Gets the metadata for a design. This includes owner information, URLs for editing and viewing, and thumbnail information. |
| `CANVA_GET_DESIGN_COMMENT_REPLIES` | Get design comment thread replies | Retrieves a page of replies for a comment or suggestion thread on a design. Returns up to limit replies (default 50, maximum 100); follow the continuation token to retrieve the rest. This is a preview API. Public integrations that use it cannot pass Canva's review process. |
| `CANVA_GET_DESIGN_COMMENT_REPLY` | Get specific design comment reply | Retrieves a specific reply to a comment or suggestion thread on a design. Use when you need to view details of a particular reply. This is a preview API. Public integrations that use it cannot pass Canva's review process. |
| `CANVA_GET_DESIGN_EXPORT_JOB_RESULT` | Get design export job result | Polls for design export job completion status. Use this after CANVA_CREATE_CANVA_DESIGN_EXPORT_JOB to check the export progress. Call this endpoint repeatedly until the job is complete to receive download links for the exported design pages. Download URLs expire after 24 hours. |
| `CANVA_GET_DESIGNS_DESIGNID_COMMENTS_THREADID` | Get designs designid comments threadid | Retrieves metadata for a comment or suggestion thread on a design. Use when you need to get details about a specific thread including content, author, timestamps, and status. This is a preview API. Public integrations that use it cannot pass Canva's review process. |
| `CANVA_GET_DESIGNS_DESIGNID_EXPORT_FORMATS` | Get design export formats | Lists available file formats for exporting a design. Use this to check which export formats (PDF, JPG, PNG, SVG, PPTX, GIF, MP4, HTML bundle, standalone HTML, and CSV) are supported for a specific design. |
| `CANVA_GET_URL_ASSET_UPLOADS_JOBID` | Get URL asset upload job status | Tool to retrieve the status and result of a URL-based asset upload job. Use this after creating a URL asset upload job to check progress and retrieve the uploaded asset ID when successful. |
| `CANVA_GET_URL_IMPORTS_JOBID` | Get URL import job status | Polls for URL import job completion status. Use this after creating a URL import job to check the import progress. Repeatedly call this endpoint until a 'success' or 'failed' status is received to get the final imported design ID and metadata. |
| `CANVA_GET_USERS_ME_CAPABILITIES` | Get user capabilities | Lists the API capabilities for the user account associated with the provided access token. Use when you need to check what features are available based on the user's Canva plan. |
| `CANVA_INITIATE_CANVA_DESIGN_AUTOFILL_JOB` | Initiate canva design autofill job | Creates an asynchronous autofill job from a brand template or existing design, or updates an existing design in place. Canva Enterprise users are eligible; paid-plan users can use a limited development trial. Poll the returned job ID with CANVA_RETRIEVE_DESIGN_AUTOFILL_JOB_STATUS. |
| `CANVA_LIST_DESIGN_PAGES_WITH_PAGINATION` | List design pages with pagination | Preview API for Canva: subject to unannounced changes and not for public integrations. Lists metadata for design pages with optional `offset` and `limit`; not applicable to all design types. |
| `CANVA_LIST_FOLDER_ITEMS_BY_TYPE_WITH_SORTING` | List folder items by type with sorting | Lists folder items, including folders, designs, image assets, and brand templates. Brand templates are returned only when explicitly requested in `item_types` and the user's plan supports them. Video assets are currently not returned. |
| `CANVA_LIST_USER_DESIGNS` | List User Designs | Provides a summary of Canva user designs, includes search filtering, and allows showing both self-created and shared designs with sorting options. |
| `CANVA_MOVE_ITEM_TO_SPECIFIED_FOLDER` | Move item to specified folder | Transfers an item to a different folder by specifying both the destination folder's ID and the item's ID. If the item is in various folders, an error occurs; manual relocation via Canva UI is required. |
| `CANVA_POST_DESIGNS` | Create new Canva design | Creates a Canva design with a preset type, custom dimensions, an existing design, or a brand template. Copying designs and using brand templates are Canva preview features. Optionally insert an image asset when using a preset or custom type. Returns design ID, edit/view URLs, and metadata. |
| `CANVA_POST_DESIGNS_DESIGNID_COMMENTS` | Post designs designid comments | Creates a comment thread on a Canva design. Use when you need to add feedback or collaboration comments to a specific design. Rate limited to 100 requests per minute per user. This is a preview API. Public integrations that use it cannot pass Canva's review process. |
| `CANVA_POST_DESIGNS_DESIGNID_COMMENTS_THREADID_REPLIES` | Create reply to comment thread | Tool to create a reply to a comment or suggestion thread on a Canva design. Use when you need to respond to existing comments or suggestions. Maximum 100 replies per thread allowed. This is a preview API. Public integrations that use it cannot pass Canva's review process. |
| `CANVA_POST_EXPORTS` | Start design export job | Starts a new asynchronous job to export a Canva design file. Use when exporting designs to various formats (PDF, JPG, PNG, GIF, PPTX, MP4, CSV, and HTML). Returns a job ID that can be used to poll for completion status and download URLs. IMPORTANT: Format compatibility varies by design type. Before exporting, use the CANVA_GET_DESIGNS_DESIGNID_EXPORT_FORMATS action to check which formats are supported for the specific design. Attempting to export in an unsupported format will result in a 400 error (e.g., 'png export not supported for this design type'). |
| `CANVA_POST_FOLDERS` | Create folder | Tool to create a folder in Canva. Use when you need to organize designs, assets, or create nested folder structures in a user's projects or uploads folder. |
| `CANVA_POST_URL_IMPORTS` | Create URL Import Job | Tool to start an asynchronous job to import an external file from a URL as a new design in Canva. Use when you need to import a design from a publicly accessible URL. This is an async operation; poll the job status using the job ID until it reaches 'success' or 'failed'. |
| `CANVA_REMOVE_FOLDER_AND_MOVE_CONTENTS_TO_TRASH` | Remove folder and move contents to trash | Deletes a folder by moving the user's content to Trash and reassigning other users' content to their top-level projects. |
| `CANVA_RETRIEVE_APP_PUBLIC_KEY_SET` | Retrieve app public key set | Returns the Json Web Key Set (public keys) of an app. These keys are used to verify JWTs sent to app backends. |
| `CANVA_RETRIEVE_ASSET_METADATA_BY_ID` | Retrieve asset metadata by id | You can retrieve the metadata of an asset by specifying its `assetId`. |
| `CANVA_RETRIEVE_BRAND_TEMPLATE_DATASET_DEFINITION` | Retrieve brand template dataset definition | Gets the dataset definition for a brand template. Available to users on plans with brand-template access, such as Canva Pro, Canva Teams, or Canva Enterprise. Data fields can contain images, text, and charts; chart data is a preview feature. |
| `CANVA_RETRIEVE_CANVA_ENTERPRISE_BRAND_TEMPLATE_METADATA` | Retrieve brand template metadata | Retrieves metadata for a brand template. Available to users on plans with brand-template access, such as Canva Pro, Canva Teams, or Canva Enterprise. |
| `CANVA_RETRIEVE_DESIGN_AUTOFILL_JOB_STATUS` | Retrieve design autofill job status | Retrieves a design autofill job result. Canva Enterprise users are eligible, while paid-plan users can use a limited development trial. Poll until the status is `success` or `failed`. |
| `CANVA_RETRIEVE_DESIGN_IMPORT_JOB_STATUS` | Retrieve design import job status | Polls for design import job completion status. Use this after CANVA_CREATE_DESIGN_IMPORT_JOB to check the import progress. Repeatedly call this endpoint until a 'success' or 'failed' status is received to get the final imported design ID and metadata. |
| `CANVA_RETRIEVE_DESIGN_RESIZE_JOB_STATUS` | Retrieve Design Resize Job Status | Retrieves the status and results of a design resize job. Polls for design resize job completion status. Use this after CANVA_CREATE_DESIGN_RESIZE_JOB to check the resize progress. Keep polling until status is 'success' or 'failed'. Successful jobs include the new design ID and temporary access URLs. |
| `CANVA_RETRIEVE_FOLDER_DETAILS_BY_ID` | Retrieve folder details by id | Gets the name and other details of a folder using a folder's `folderID`. |
| `CANVA_RETRIEVE_USER_PROFILE_DATA` | Retrieveuserprofiledata | Currently, this returns the display name of the user account associated with the provided access token. More user information is expected to be included in the future. |
| `CANVA_REVOKE_OAUTH_TOKENS` | Revoke oauth tokens | Revoke an access token or refresh token. Revoking a refresh token also revokes its lineage and user consent, requiring re-authentication. Authenticate using either basic access with Base64-encoded credentials or body parameters with client ID and secret. |
| `CANVA_UPDATE_ASSET_S_NAME_AND_TAGS_BY_ID` | Update asset s name and tags by id | You can update the name and tags of an asset by specifying its `assetId`. Updating the tags replaces all existing tags of the asset. |
| `CANVA_UPDATE_FOLDER_DETAILS_BY_ID` | Update folder details by id | Updates a folder's details using its `folderID`. Currently, you can only update a folder's name. |
| `CANVA_VALIDATE_OAUTH_TOKEN_PROPERTIES` | Validate oauth token properties | Check an access token's validity and properties via introspection, requiring authentication. Use Basic access (Base64 encoded `client_id:client_secret`) or body parameters for credentialing. |
| `CANVA_WHO_AM_I` | Who Am I | Return the identity (display name) of the connected Canva account. |

## Supported Triggers

None listed.

## Creating MCP Server - Stand-alone vs Composio SDK

The Canva MCP server is an implementation of the Model Context Protocol that connects Claude Code (and other AI assistants like Claude and Cursor) directly to your Canva account. It provides structured and secure access so Claude can perform Canva operations on your behalf.
With Composio's managed implementation, you don't have to create your own developer app. For production, if you're building an end product, we recommend using your own credentials. The managed server helps you prototype fast and go from 0-1 faster.

## Step-by-step Guide

### 1. Prerequisites

Before starting, make sure you have:
- Claude Pro, Max, or API billing enabled Anthropic account
- Composio API Key
- A Canva account
- Basic knowledge of Python or TypeScript

### 1. Install Claude Code

To install Claude Code, use one of the following methods based on your operating system:
```bash
# macOS, Linux, WSL
curl -fsSL https://claude.ai/install.sh | bash

# Windows PowerShell
irm https://claude.ai/install.ps1 | iex

# Windows CMD
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd
```

### 2. Set up Claude Code

Open a terminal, go to your project folder, and start Claude Code:
- Claude Code will open in your terminal
- Follow the prompts to sign in with your Anthropic account
- Complete the authentication flow
- Once authenticated, you can start using Claude Code
```bash
cd your-project-folder
claude
```

### 3. Set up environment variables

Create a .env file in your project root with the following variables:
- COMPOSIO_API_KEY authenticates with Composio (get it from [Composio dashboard](https://dashboard.composio.dev/login?utm_source=toolkits&utm_medium=framework_template&utm_campaign=claude-code&utm_content=api_key&next=%2F~%2Forg%2Fconnect%2Fclients%2Fclaude-code))
- USER_ID identifies the user for session management (use any unique identifier)
```bash
COMPOSIO_API_KEY=your_composio_api_key_here
USER_ID=your_user_id_here
```

### 4. Install Composio library

No description provided.
```python
pip install composio-core python-dotenv
```

```typescript
npm install @composio/core dotenv
```

### 5. Generate Composio MCP URL

No description provided.
```python
import os
from composio import Composio
from dotenv import load_dotenv

load_dotenv()

COMPOSIO_API_KEY = os.getenv("COMPOSIO_API_KEY")
USER_ID = os.getenv("USER_ID")

composio_client = Composio(api_key=COMPOSIO_API_KEY)

composio_session = composio_client.create(
    user_id=USER_ID,
    toolkits=["canva"],
)

COMPOSIO_MCP_URL = composio_session.mcp.url

print(f"MCP URL: {COMPOSIO_MCP_URL}")
print(f"\nUse this command to add to Claude Code:")
print(f'claude mcp add --transport http canva-composio "{COMPOSIO_MCP_URL}" --headers "X-API-Key:{COMPOSIO_API_KEY}"')
```

```typescript
import 'dotenv/config';
import { Composio } from '@composio/core';

const { COMPOSIO_API_KEY, USER_ID } = process.env;

if (!COMPOSIO_API_KEY || !USER_ID) {
  throw new Error('COMPOSIO_API_KEY and USER_ID required in .env');
}

const composioClient = new Composio({ apiKey: COMPOSIO_API_KEY });

const composioSession = await composioClient.create(USER_ID, {
  toolkits: ['canva'],
});

const composioMcpUrl = composioSession?.mcp.url;

console.log(`MCP URL: ${composioMcpUrl}`);
console.log(`\nUse this command to add to Claude Code:`);
console.log(`claude mcp add --transport http canva-composio "${composioMcpUrl}" --headers "X-API-Key:${COMPOSIO_API_KEY}"`);
```

### 6. Run the script and copy the MCP URL

No description provided.
```python
python generate_mcp_url.py
```

```typescript
node --loader ts-node/esm generate_mcp_url.ts
# or if using tsx
tsx generate_mcp_url.ts
```

### 7. Add Canva MCP to Claude Code

In your terminal, add the MCP server using the command from the previous step. The command format is:
- claude mcp add registers a new MCP server with Claude Code
- --transport http specifies that this is an HTTP-based MCP server
- The server name (canva-composio) is how you'll reference it
- The URL points to your Composio Tool Router session
- --headers includes your Composio API key for authentication
After running the command, close the current Claude Code session and start a new one for the changes to take effect.
```bash
claude mcp add --transport http canva-composio "YOUR_MCP_URL_HERE" --headers "X-API-Key:YOUR_COMPOSIO_API_KEY"

# Then restart Claude Code
exit
claude
```

### 8. Verify the installation

Check that your Canva MCP server is properly configured.
- This command lists all MCP servers registered with Claude Code
- You should see your canva-composio entry in the list
- This confirms that Claude Code can now access Canva tools
If everything is wired up, you should see your canva-composio entry listed:
```bash
claude mcp list
```

### 9. Authenticate Canva

The first time you try to use Canva tools, you'll be prompted to authenticate.
- Claude Code will detect that you need to authenticate with Canva
- It will show you an authentication link
- Open the link in your browser (or copy/paste it)
- Complete the Canva authorization flow
- Return to the terminal and start using Canva through Claude Code
Once authenticated, you can ask Claude Code to perform Canva operations in natural language. For example:
- "Create a new Instagram post design"
- "List my brand templates for social use"
- "Start a folder for this project’s assets"

## Complete Code

```python
import os
from composio import Composio
from dotenv import load_dotenv

load_dotenv()

COMPOSIO_API_KEY = os.getenv("COMPOSIO_API_KEY")
USER_ID = os.getenv("USER_ID")

composio_client = Composio(api_key=COMPOSIO_API_KEY)

composio_session = composio_client.create(
    user_id=USER_ID,
    toolkits=["canva"],
)

COMPOSIO_MCP_URL = composio_session.mcp.url

print(f"MCP URL: {COMPOSIO_MCP_URL}")
print(f"\nUse this command to add to Claude Code:")
print(f'claude mcp add --transport http canva-composio "{COMPOSIO_MCP_URL}" --headers "X-API-Key:{COMPOSIO_API_KEY}"')
```

```typescript
import 'dotenv/config';
import { Composio } from '@composio/core';

const { COMPOSIO_API_KEY, USER_ID } = process.env;

if (!COMPOSIO_API_KEY || !USER_ID) {
  throw new Error('COMPOSIO_API_KEY and USER_ID required in .env');
}

const composioClient = new Composio({ apiKey: COMPOSIO_API_KEY });

const composioSession = await composioClient.create(USER_ID, {
  toolkits: ['canva'],
});

const composioMcpUrl = composioSession?.mcp.url;

console.log(`MCP URL: ${composioMcpUrl}`);
console.log(`\nUse this command to add to Claude Code:`);
console.log(`claude mcp add --transport http canva-composio "${composioMcpUrl}" --headers "X-API-Key:${COMPOSIO_API_KEY}"`);
```

## Conclusion

You've successfully integrated Canva with Claude Code using Composio's MCP server. Now you can interact with Canva directly from your terminal using natural language commands.
Key features of this setup:
- Terminal-native experience without switching contexts
- Natural language commands for Canva operations
- Secure authentication through Composio's managed MCP
- Tool Router for dynamic tool discovery and execution
Next steps:
- Try asking Claude Code to perform various Canva operations
- Add more toolkits to your Tool Router session for multi-app workflows
- Integrate this setup into your development workflow for increased productivity
You can extend this by adding more toolkits, implementing custom workflows, or building automation scripts that leverage Claude Code's capabilities.

## How to build Canva MCP Agent with another framework

- [Cursor](https://composio.dev/toolkits/canva/framework/cursor)
- [ChatGPT](https://composio.dev/toolkits/canva/framework/chatgpt)
- [Claude Cowork](https://composio.dev/toolkits/canva/framework/claude-cowork)
- [Antigravity](https://composio.dev/toolkits/canva/framework/antigravity)
- [OpenAI Agents SDK](https://composio.dev/toolkits/canva/framework/open-ai-agents-sdk)
- [Claude Agent SDK](https://composio.dev/toolkits/canva/framework/claude-agents-sdk)
- [Grok Bot](https://composio.dev/toolkits/canva/framework/grok-bot)
- [Codex](https://composio.dev/toolkits/canva/framework/codex)
- [Kimi Code](https://composio.dev/toolkits/canva/framework/kimi)
- [Grok Build](https://composio.dev/toolkits/canva/framework/grok-build)
- [VS Code](https://composio.dev/toolkits/canva/framework/vscode)
- [OpenCode](https://composio.dev/toolkits/canva/framework/opencode)
- [OpenClaw](https://composio.dev/toolkits/canva/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/canva/framework/hermes-agent)
- [Atomic Agent](https://composio.dev/toolkits/canva/framework/atomic-agent)
- [CLI](https://composio.dev/toolkits/canva/framework/cli)
- [Google ADK](https://composio.dev/toolkits/canva/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/canva/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/canva/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/canva/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/canva/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/canva/framework/crew-ai)
- [Pydantic AI](https://composio.dev/toolkits/canva/framework/pydantic-ai)
- [AutoGen](https://composio.dev/toolkits/canva/framework/autogen)

## Related Toolkits

- [Figma](https://composio.dev/toolkits/figma) - Figma is a collaborative interface design tool for teams and individuals. It streamlines design workflows with real-time collaboration and easy sharing.
- [Abyssale](https://composio.dev/toolkits/abyssale) - Abyssale is a creative automation platform for generating images, videos, GIFs, PDFs, and HTML5 content programmatically. It streamlines and scales visual content production for marketing, design, and operations teams.
- [Alttext ai](https://composio.dev/toolkits/alttext_ai) - AltText.ai is a service that generates alt text for images automatically. It helps boost accessibility and SEO for your visual content.
- [Are.na](https://composio.dev/toolkits/arena) - Are.na is a creative research platform for collecting images, links, notes, and ideas in channels. Use it to organize inspiration, build knowledge maps, and connect research across projects.
- [Bannerbear](https://composio.dev/toolkits/bannerbear) - Bannerbear is an API-driven platform for generating images and videos automatically at scale. It helps businesses create custom graphics, social visuals, and marketing assets using powerful templates.
- [Bannerbite](https://composio.dev/toolkits/bannerbite) - Bannerbite is a creative automation platform for generating images and videos from reusable projects and templates. It helps teams produce on-brand visual assets faster without rebuilding designs from scratch.
- [BeatAPI](https://composio.dev/toolkits/beatapi) - BeatAPI is an asynchronous API platform for AI image, video, and music workflows. It enables scalable generation, video analysis, uploads, and ecommerce video pipelines.
- [Builder.io](https://composio.dev/toolkits/builder_io) - Builder.io is a visual development platform for managing content, models, assets, and Space configuration. Use it to ship editable digital experiences faster without waiting on every code change.
- [Canva MCP](https://composio.dev/toolkits/canva_mcp) - Canva MCP is Canva's remote MCP server for accessing designs and content. It centralizes design assets and enables programmatic design workflows.
- [Claid ai](https://composio.dev/toolkits/claid_ai) - Claid.ai delivers AI-driven image editing APIs for tasks like background removal, upscaling, and color correction. It helps automate and enhance image workflows with powerful, developer-friendly tools.
- [Cloudinary](https://composio.dev/toolkits/cloudinary) - Cloudinary is a cloud-based platform for managing, uploading, and transforming images and videos. It streamlines media workflows and delivers optimized assets globally.
- [Contentdrips](https://composio.dev/toolkits/contentdrips) - Contentdrips is an asynchronous rendering API for branded graphics and carousels. It turns reusable templates into on-brand social visuals at scale.
- [Creatomate](https://composio.dev/toolkits/creatomate) - Creatomate is an API for generating automated videos, images, GIFs, and reusable media templates. Use it to turn structured data into polished visual content at scale.
- [Cults](https://composio.dev/toolkits/cults) - Cults is a digital marketplace for 3D printing models, connecting designers and makers. It lets creators share, sell, and discover a huge variety of printable designs easily.
- [DeepImage](https://composio.dev/toolkits/deepimage) - DeepImage is an AI-powered image enhancer and upscaler. Get higher-quality images with just a few clicks.
- [Dreamstudio](https://composio.dev/toolkits/dreamstudio) - DreamStudio is Stability AI’s platform for generating and editing images with AI. It lets you easily turn ideas into stunning visuals, fast.
- [Dribbble](https://composio.dev/toolkits/dribbble) - Dribbble is a design community and publishing platform for managing shots, projects, and attachments. Use it to showcase work, collect feedback, and organize creative designs.
- [Dynamic Mockups](https://composio.dev/toolkits/dynamic_mockups) - Dynamic Mockups is an API platform for generating product mockups, rendering templates, and managing visual asset catalogs. Use it to automate high-quality product visuals, AI images, and motion assets at scale.
- [Dynapictures](https://composio.dev/toolkits/dynapictures) - Dynapictures is a cloud-based platform for generating personalized images at scale. Instantly create hundreds of custom visuals using your data sources, like Google Sheets.
- [Eraser MCP](https://composio.dev/toolkits/eraser_mcp) - Eraser MCP is a workspace for creating and managing technical diagrams and structured documents. It helps teams organize, version, and export diagrams with collaboration-focused tooling.

## Frequently Asked Questions

### What are the differences in Tool Router MCP and Canva MCP?

With a standalone Canva MCP server, the agents and LLMs can only access a fixed set of Canva tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Canva and many other apps based on the task at hand, all through a single MCP endpoint.

### Can I use Tool Router MCP with Claude Code?

Yes, you can. Claude Code fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Canva tools.

### Can I manage the permissions and scopes for Canva while using Tool Router?

Yes, absolutely. You can configure which Canva scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

### How safe is my data with Composio Tool Router?

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Canva data and credentials are handled as safely as possible.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
