Canva MCP Server
Integrates with Canva, providing tools to list designs, retrieve design details, create designs (e.g., presentations, documents, Instagram posts), export designs to PNG/JPG/PDF/PPTX, manage folders, upload assets, and check authentication status via the Canva Connect API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Canva MCP ServerCreate a new Instagram post design titled 'Spring Sale' in Canva."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🎨 Canva MCP Server
Connect your AI assistants (Google Antigravity, Gemini CLI, Claude Desktop, Cursor) directly to your Canva account through the official API (Canva Connect API). Create, search, export, and upload designs using natural language.
⚡ Quickstart
1. Direct Setup via npx
You can run it directly with npx without needing to clone the repository:
🤖 Google Antigravity / Gemini CLI (~/.gemini/config/mcp_config.json)
{
"mcpServers": {
"canva": {
"command": "npx",
"args": ["-y", "@elisbanpaco/mcp-canva-gemini-cli"],
"env": {
"CANVA_CLIENT_ID": "tu_client_id",
"CANVA_CLIENT_SECRET": "tu_client_secret"
}
}
}
}🟣 Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"canva": {
"command": "npx",
"args": ["-y", "@elisbanpaco/mcp-canva-gemini-cli"],
"env": {
"CANVA_CLIENT_ID": "tu_client_id",
"CANVA_CLIENT_SECRET": "tu_client_secret"
}
}
}
}💻 Cursor IDE (.cursor/mcp.json)
{
"mcpServers": {
"canva": {
"command": "npx",
"args": ["-y", "@elisbanpaco/mcp-canva-gemini-cli"],
"env": {
"CANVA_CLIENT_ID": "tu_client_id",
"CANVA_CLIENT_SECRET": "tu_client_secret"
}
}
}
}Related MCP server: Canvelete
🧰 Available Tools
Once connected, you can ask your AI:
Tool | What does it do? | Example Prompt |
| Lists your recent designs with thumbnails and editing links. | "Show me my recent presentations in Canva" |
| Gets the details, pages, and URLs of a design by its ID. | "Give me the information for the design with ID DAHKDKZXFcQ" |
| Creates a new design (presentation, document, Instagram post, etc.). | "Create an Instagram post in Canva titled Launch 2026" |
| Exports a design to PNG, JPG, PDF, or PPTX and gives you the download link. | "Export my presentation to PDF format" |
| Explores the contents of your Canva root folder. | "What items do I have in my main Canva folder?" |
| Lists the items inside a specific folder. | "Show me the files inside the folder with ID X" |
| Creates a new folder in your Canva. | "Create a folder called Projects 2026" |
| Uploads a local image from your computer to Canva. | "Upload the image ./banner.png to my Canva account" |
| Verifies the connection status and validity of the tokens. | "Check if my Canva connection is active" |
🔑 Initial Credential Setup
Go to Canva Developers and click on
Your integrations.Click on
Create an integration$\rightarrow$ ChoosePublic.
In
Credentials, copy your Client ID and generate your Client Secret.In
Scopes, enable the permissions (these are the only supported ones):design:content:read,design:content:write,design:meta:readasset:read,asset:write,folder:read,folder:write,app:read

In
Authentication, add the exact redirect URL:http://127.0.0.1:3000/callback
Authentication (First time only)
Since Canva requires per-user credentials, open your terminal and run this to authenticate and securely store your tokens:
# En Linux/macOS
export CANVA_CLIENT_ID="tu_client_id"
export CANVA_CLIENT_SECRET="tu_client_secret"
npx -p @elisbanpaco/mcp-canva-gemini-cli mcp-canva-auth
# En Windows (PowerShell)
$env:CANVA_CLIENT_ID="tu_client_id"
$env:CANVA_CLIENT_SECRET="tu_client_secret"
npx -p @elisbanpaco/mcp-canva-gemini-cli mcp-canva-authYour browser will open to confirm. Done! Your tokens will be saved with 0600 permissions on your operating system.
🏗️ Architecture and Security
sequenceDiagram
autonumber
actor User as Usuario / Asistente IA
participant MCP as Canva MCP Server (Stdio)
participant Vault as Bóveda de Tokens (~/.config/canva-mcp)
participant CanvaOAuth as Canva OAuth2 (PKCE S256)
participant CanvaAPI as Canva Connect API (REST v1)
Note over User,CanvaAPI: 1. Flujo de Autenticación (pnpm auth)
MCP->>CanvaOAuth: Inicia flujo PKCE con desafío SHA-256
CanvaOAuth-->>MCP: Redirección con Código de Autorización
MCP->>CanvaOAuth: Intercambio de código por Tokens de acceso
CanvaOAuth-->>MCP: Access Token + Refresh Token
MCP->>Vault: Guarda en almacenamiento seguro (Permisos 0600)
Note over User,CanvaAPI: 2. Ejecución de Herramientas en Tiempo Real
User->>MCP: Llama a herramienta (ej. canva_list_designs)
MCP->>Vault: Carga token válido (Auto-renovación con Mutex)
MCP->>CanvaAPI: Petición HTTP Bearer con Exponential Backoff
CanvaAPI-->>MCP: Respuesta JSON con metadatos y URLs
MCP-->>User: Resultado estructuradoEngineering Features:
🔐 Secure OS Vault: Tokens are stored in the system directory (
~/.config/canva-mcp/on Linux/Mac or%APPDATA%\canva-mcpon Windows) with POSIX0600permissions (readable only by your user).⚡ Anti-collision Mutex: Prevents race conditions when the model runs multiple tools in parallel during token renewal.
🛡️ Exponential Backoff: Automatic retries with exponential backoff on rate limits (
HTTP 429) and temporary outages (5xx).🧪 100% Test Coverage: Complete unit test suite with Vitest.
🧪 Testing and Development
# Ejecutar suite de pruebas unitarias
pnpm test
# Verificación estricta de tipos TypeScript
pnpm typecheck
# Compilar paquete de producción
pnpm build📄 License
This project is licensed under the MIT license. See the LICENSE file for more details.
Available Tools
10 toolscanva_create_designB
Crea un nuevo diseño en Canva (por ejemplo: presentación, documento, post de Instagram, flyer, banner o dimensiones personalizadas).
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Título o nombre del nuevo diseño. | |
| assetId | No | ID de un recurso subido previamente para incluirlo como base. | |
| presetName | No | Tipo predefinido de diseño. | |
| customWidth | No | Ancho en píxeles (si se usa tamaño personalizado). | |
| customHeight | No | Alto en píxeles (si se usa tamaño personalizado). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations to carry the behavior burden, and the description only says 'crea un nuevo diseño.' It does not disclose whether the design is persisted immediately, whether authentication is required, what the return value is, or how the assetId customWidth parameters behave after creation. The verb implies mutation, but little else is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise, front-loaded sentence with useful examples and no redundant filler. Every part contributes to understanding the tool's purpose and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a creation operation with no output schema and no annotations, yet the description does not explain what happens after creation, what the result looks like, or how custom dimensions actually work. It mentions 'dimensiones personalizadas' but the schema only has customWidth, with no customHeight, which leaves an important gap. A richer description is needed for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents every parameter, including title, assetId, presetName, and customWidth, so schema coverage is high and the baseline is 3. The description adds a small amount of meaning by listing preset examples and mentioning 'dimensiones personalizadas', which maps to customWidth, but it does not add meaningful parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Crea un nuevo diseño en Canva' (creates a new design in Canva), and gives concrete examples such as presentation, document, Instagram post, flyer, banner, or custom dimensions. This clearly distinguishes it from sibling tools like canva_list_designs, canva_get_design, and canva_upload_asset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose is clear enough that an agent can infer this tool is for creating new designs, but the description does not explicitly state when to use it versus alternatives or mention any exclusions. No sibling tools are referenced, so routing partly depends on the agent's own reasoning from the obvious resource difference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canva_create_folderC
Crea una nueva carpeta en Canva.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Nombre de la nueva carpeta. | |
| parentFolderId | No | ID de la carpeta padre (opcional). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden of behavioral disclosure. It only states that a folder is created, with no mention of side effects, required permissions, error conditions, duplicate handling, or whether the created folder's ID is returned. For a mutating operation, this is a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It is front-loaded with the core purpose, though it is perhaps too minimal to earn full marks for structure given the lack of additional useful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no output schema and no annotations, the description is incomplete. It does not explain what the tool returns, how to reference the new folder afterward, or any conditions that might cause failure. An agent would need to infer behavior from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both 'name' and 'parentFolderId'. The description adds no additional meaning beyond the schema, but it does not need to compensate because the parameter documentation is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Crea') and resource ('una nueva carpeta en Canva'), immediately conveying what the tool does. It is distinguishable from siblings like canva_list_folders or canva_create_design, though it does not explicitly differentiate itself from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as canva_list_folders or canva_list_folder_items. The description implies its use for creating a folder, but it gives no context about prerequisites, parent folder requirements, or when another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canva_export_designA
Exporta un diseño de Canva a formato PNG, JPG, PDF o PPTX y devuelve los enlaces de descarga.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | Formato de archivo al que se desea exportar. | |
| quality | No | Calidad de compresión (1 a 100) para formatos compatibles como JPG. | |
| designId | Yes | ID del diseño a exportar. | |
| paperSize | No | Tamaño de papel para exportación a PDF. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It usefully discloses that the tool returns download links and supports multiple formats, but it does not mention potential asynchronous behavior, long export times, permission requirements, or any errors that might occur. This is adequate but not highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence states the action, resource, supported formats, and result. There is no filler or redundant content; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple export tool, the description plus the fully documented schema is basically usable: provide a design ID and format, get download links. However, without annotations or an output schema, the definition does not mention timing, side effects, auth prerequisites, or how the tool relates to sibling tools. It is complete enough for a basic call but leaves gaps for an autonomous agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters. The description adds no real parameter semantics beyond listing some formats, and it even omits gif and mp4, which the schema's enum allows. This does not contradict the schema, but it does not add value either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('exporta'), names the resource ('diseño de Canva'), and states the outcome (returns download links). This clearly distinguishes the tool from siblings like canva_get_design, canva_list_designs, and canva_create_design.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a downloadable file export is needed, but it never explicitly states when to use this tool versus alternatives like canva_get_design or canva_list_designs. No exclusions or conditions are provided, so the agent must infer usage from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canva_get_auth_statusA
Verifica el estado de la conexión, validez del token y permisos activos de Canva.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of behavioral disclosure. It clearly communicates that this is a non-mutating status check and goes beyond the tool name by specifying that it validates token validity and active permissions. This gives the agent meaningful information about what the tool inspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that states the tool's purpose and the specific aspects it verifies. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter diagnostic tool, the description adequately explains what is checked, but there is no output schema and no mention of the return format or how the auth status result is represented. An agent could call it correctly but is left guessing about the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter behavior to document. The schema coverage is 100% trivially, and the description adds no parameter-specific meaning because none exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Verifica') and a clear resource (Canva connection state), and explicitly enumerates what is checked: connection status, token validity, and active permissions. This distinguishes it from all sibling tools, which are all operational actions rather than auth diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: an agent can infer that this tool should be called to verify authentication state before performing Canva operations. However, there is no explicit guidance about when to use it vs alternatives or whether it should be routinely called before other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canva_get_designA
Obtiene los detalles, miniaturas y enlaces de edición/visualización de un diseño por su ID.
| Name | Required | Description | Default |
|---|---|---|---|
| designId | Yes | El ID del diseño de Canva. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral transparency. It conveys that the operation is a read/fetch ('Obtiene') and lists the returned data, but it does not explicitly state side-effect-free behavior, authorization requirements, or error conditions. It is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the purpose and includes the key input detail (ID). No redundant words or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter fetch tool with no output schema, the description is sufficiently complete: it names the resource, what data is returned, and the identifier needed. It does not give every possible response detail, but that is not necessary for this low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage by describing 'designId' as 'El ID del diseño de Canva' The description adds little beyond 'por su ID', so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Obtiene') and resource ('detalles, miniaturas y enlaces de edición/visualización de un diseño') with a precise lookup mechanism ('por su ID'). It is easily distinguishable from siblings like canva_list_designs, which lists designs rather than fetching one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used when you need a single design's details, thumbnails, or edit/view links by ID. It does not explicitly say when to prefer it over alternatives such as canva_list_designs or canva_export_design, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canva_get_profileA
Obtiene el perfil del usuario autenticado y el equipo actual en Canva.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly indicates a read operation via 'Obtiene' and names the data returned, but it does not explicitly state that no data is modified, whether authentication is required, or what happens if the user is not authenticated. The implicit read-only nature is clear enough for a simple profile fetch, but the description adds little beyond the action itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, direct sentence with no filler. It front-loads the main purpose and identifies both the user profile and current team resources without unnecessary explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero input parameters and no output schema, the description adequately states what is returned. It could additionally mention that the operation requires authentication or that no arguments are needed, but for a simple profile/team retrieval the description is largely self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema already fully covers parameter semantics. The description adds no parameter information, but none is needed. Baseline 4 is appropriate for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Obtiene'), a clear resource ('el perfil del usuario autenticado y el equipo actual'), and is readily distinguishable from siblings like canva_get_auth_status, canva_get_design, or listing tools. An agent can tell exactly what this tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to choose this tool over alternatives. It is implied that one should use it when needing the authenticated user's profile or current team, but there is no comparison with canva_get_auth_status or any other sibling, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canva_list_designsC
Lista los diseños de Canva del usuario (presentaciones, documentos, posts, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| sortBy | No | Criterio de ordenamiento (por defecto modified_descending). | |
| ownership | No | Filtrar por propiedad de diseño. | |
| continuation | No | Token de paginación para obtener la siguiente página de resultados. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It implies a read-only listing operation but does not mention pagination, authorization requirements, error behavior, or any side effects, leaving behavioral expectations underspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence states exactly what the tool does with no waste. It is appropriately sized for a simple list operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three parameters, no annotations, and no output schema. The description offers only the core function and does not explain when to use it, what the response contains, or how pagination works, leaving notable gaps in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions for all three parameters (sortBy, ownership, continuation). The description adds no additional parameter semantics, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Lista') and resource ('diseños de Canva del usuario'), with examples of design types. However, it does not distinguish this tool from sibling tools, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. The agent must rely on the generic 'list' semantics and the tool name to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canva_list_folder_itemsA
Lista el contenido (diseños, imágenes, subcarpetas) dentro de una carpeta específica.
| Name | Required | Description | Default |
|---|---|---|---|
| folderId | Yes | ID de la carpeta a inspeccionar (o "root" para la raíz). | |
| continuation | No | Token de paginación. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It lists what the tool returns conceptually but omits important behavioral traits such as pagination via the 'continuation' parameter, whether results are sorted or complete, and whether 'root' behaves differently from a normal folder ID. For a listing tool, this is a meaningful transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence with no filler: it opens with the verb, names the resource, and lists the content types. Every word contributes to the agent's understanding, and the description is front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the schema covers its parameters, but there is no output schema and no mention of key operational details such as pagination or the distinction between global item lists and folder-scoped listing. The description is adequate for a basic call but leaves a few gaps that could affect correct invocation, especially around pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents both parameters well. The description adds no significant parameter-level detail beyond what the schema provides, such as the meaning of 'continuation' or the 'root' option.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Lista') and the resource ('el contenido dentro de una carpeta específica'), naming the content types (diseños, imgenes, subcarpetas). This distinguishes it from siblings like canva_list_designs and canva_list_folders, which list items globally rather than within a specific folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'dentro de una carpeta específica' implies when to use the tool (inspecting folder contents), but it does not explicitely state when not to use it or mention alternatives such as canva_list_designs or canva_list_folders. The usage context is reasonably clear but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canva_list_foldersC
Lista los elementos y subcarpetas dentro de la carpeta raíz de Canva.
| Name | Required | Description | Default |
|---|---|---|---|
| itemType | No | Filtrar por tipo de elemento. | |
| continuation | No | Token de paginación. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It does not explain pagination behavior despite the continuation parameter, does not state whether listing is recursive or limited to direct children, and gives no detail on how the itemType filter behaves or what the response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb first and zero wasted words. It is efficiently structured, though slightly longer coverage of pagination or usage would have improved value without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and only a terse one-line description, the tool is under-specified for an agent that must choose among nine siblings. Pagination semantics, the itemType filter's value domain, and the distinction from canva_list_folder_items are all missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no parameter meaning beyond the schema, and while the schema documents both parameters, itemType's valid values remain unspecified in either source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lista' / lists) with a clear resource ('elementos y subcarpetas' / elements and subfolders) and a defined scope ('carpeta raíz' / root folder). However, the name (list_folders) slightly conflicts with the described behavior (listing elements AND subfolders), and it does not explicitly differentiate itself from the sibling canva_list_folder_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus its siblings. With nine sibling tools including the near-identical canva_list_folder_items and canva_list_designs, the absence of any routing guidance or exclusions leaves selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canva_upload_assetB
Sube un archivo de imagen o recurso local a Canva.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Nombre para el archivo en Canva. | |
| filePath | Yes | Ruta absoluta del archivo local en tu computadora. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The description does not mention whether the upload overwrites existing assets, what happens on duplicate names, any size limitations, or whether authentication via canva_get_auth_status is required first. This is a significant gap for a mutation-like tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the core purpose without unnecessary words. It is appropriately short and front-loaded with the action verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is too sparse. It lacks critical context such as whether the upload requires prior authentication (the sibling canva_get_auth_status suggests this might be needed), expected file formats, or what happens after a successful upload. An agent would have to rely on trial and error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with clear descriptions for both 'name' and 'filePath'. The description adds no additional semantic value beyond what the schema states, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Sube' (upload) and the resource ('archivo de imagen o recurso local a Canva'). It distinguishes itself from sibling tools like export, list, and profile tools, though it could be more specific about what types of local resources are supported beyond images.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for uploading local files to Canva, which is distinct from the sibling tools. However, it provides no explicit guidance on when to use this tool versus alternatives, nor does it mention any prerequisites such as authentication or file format restrictions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.0.3- First observed
canva_create_design - First observed
canva_create_folder - First observed
canva_export_design - First observed
canva_get_auth_status - First observed
canva_get_design - First observed
canva_get_profile - First observed
canva_list_designs - First observed
canva_list_folder_items - First observed
canva_list_folders - First observed
canva_upload_asset
TDQS
Scored across 10 tools
Most tools have clearly distinct purposes, but canva_list_folders and canva_list_folder_items overlap: one lists root folder contents and the other lists contents of a specific folder, which could cause selection confusion. The rest are well separated by resource and action.
All tool names follow a consistent snake_case pattern with the canva_ prefix and a clear verb_noun structure (list_designs, get_design, create_folder, upload_asset). This makes the tool set predictable and easy to navigate.
Ten tools is a well-scoped size for a Canva integration, covering authentication, design CRUD, folder operations, asset upload, and export. Each tool serves a meaningful purpose without the set feeling bloated or too thin.
The server covers the main Canva workflows: viewing profile, listing/getting/creating designs, exporting, folder navigation/creation, and uploading assets. Minor gaps include no delete or update operations for designs/folders and no asset listing, but these are not critical for typical use.
Maintenance
Related MCP Connectors
The Canva MCP server connects AI assistants (like Claude, ChatGPT, and Cursor) to Canva's API, enabling them to create and manage designs directly within chat conversations. Key capabilities include generating new designs from prompts, autofilling templates, searching and resizing existing designs, importing files from URLs, exporting designs as PDFs or images, and managing folders and comments without switching between tools.
Connect an AI assistant to a Capacities space (objects, daily notes, search).
Sync Lightroom, Figma, Dropbox & Canva assets to WordPress and Shopify via natural language.
Sync Lightroom, Figma, Dropbox & Canva assets to WordPress and Shopify via natural language.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to generate presentations, documents, and webpages through the Gamma.app API with support for custom themes, tones, audiences, and image generation.2 npm-
- AlicenseNot gradedqualityDmaintenanceEnables programmatic design creation and manipulation on the Canvelete platform through AI assistants. Supports design management, canvas element manipulation, template application, asset management, and real-time synchronization with the design editor.5 npmMIT
- AlicenseBqualityBmaintenanceEnables AI assistants to manage Canvas LMS courses, announcements, rubrics, assignments, modules, pages, and student data via the Canvas API.6077 npm12MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to generate Gamma presentations, documents, and social media posts using the Gamma.app API.250 npm2MIT