npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@elisbanpaco/mcp-canva-gemini-cli

v0.0.3

Published

Production-ready Model Context Protocol (MCP) Server for the official Canva Connect API

Readme

🎨 Canva MCP Server

CI License: MIT Node.js Version NPM Version MCP Standard TypeScript Tested with Vitest

Conecta tus asistentes de IA (Google Antigravity, Gemini CLI, Claude Desktop, Cursor) directamente con tu cuenta de Canva a través de la API oficial (Canva Connect API). Crea, busca, exporta y sube diseños mediante lenguaje natural.


⚡ Inicio Rápido (Quickstart)

1. Configuración Directa vía npx

Puedes ejecutarlo directamente con npx sin necesidad de clonar el repositorio:

🤖 Google Antigravity / Gemini CLI (~/.gemini/config/mcp_config.json)

{
  "mcpServers": {
    "canva": {
      "command": "npx",
      "args": ["-y", "--package", "@elisbanpaco/mcp-canva-gemini-cli", "mcp-canva"],
      "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", "--package", "@elisbanpaco/mcp-canva-gemini-cli", "mcp-canva"],
      "env": {
        "CANVA_CLIENT_ID": "tu_client_id",
        "CANVA_CLIENT_SECRET": "tu_client_secret"
      }
    }
  }
}

💻 Cursor IDE (.cursor/mcp.json)

{
  "mcpServers": {
    "canva": {
      "command": "npx",
      "args": ["-y", "--package", "@elisbanpaco/mcp-canva-gemini-cli", "mcp-canva"],
      "env": {
        "CANVA_CLIENT_ID": "tu_client_id",
        "CANVA_CLIENT_SECRET": "tu_client_secret"
      }
    }
  }
}

🧰 Herramientas Disponibles

Una vez conectado, puedes pedirle a tu IA:

| Herramienta | ¿Qué hace? | Ejemplo de Prompt | | :--- | :--- | :--- | | canva_list_designs | Lista tus diseños recientes con miniaturas y enlaces de edición. | "Muéstrame mis presentaciones recientes en Canva" | | canva_get_design | Obtiene los detalles, páginas y URLs de un diseño por su ID. | "Dame la información del diseño con ID DAHKDKZXFcQ" | | canva_create_design | Crea un diseño nuevo (presentación, documento, post de Instagram, etc.). | "Crea un post de Instagram en Canva titulado Lanzamiento 2026" | | canva_export_design | Exporta un diseño a PNG, JPG, PDF o PPTX y te da el link de descarga. | "Exporta mi presentación a formato PDF" | | canva_list_folders | Explora el contenido de tu carpeta raíz de Canva. | "¿Qué elementos tengo en mi carpeta principal de Canva?" | | canva_list_folder_items | Lista los elementos dentro de una carpeta específica. | "Muéstrame los archivos dentro de la carpeta con ID X" | | canva_create_folder | Crea una nueva carpeta en tu Canva. | "Crea una carpeta llamada Proyectos 2026" | | canva_upload_asset | Sube una imagen local de tu computadora a Canva. | "Sube la imagen ./banner.png a mi cuenta de Canva" | | canva_get_auth_status | Verifica el estado de conexión y validez de los tokens. | "Revisa si mi conexión con Canva está activa" |


🔑 Configuración Inicial de Credenciales

  1. Entra a Canva Developers y haz clic en Your integrations.

  2. Haz clic en Create an integration $\rightarrow$ Elige Public.

    Crear Integración Canva

  3. En Credentials, copia tu Client ID y genera tu Client Secret.

  4. En Scopes, activa los permisos (son los únicos compatibles):

    • design:content:read, design:content:write, design:meta:read
    • asset:read, asset:write, folder:read, folder:write, app:read

    Configuración de Scopes en Canva

  5. En Authentication, agrega la URL de redirección exacta: http://127.0.0.1:3000/callback

    Añadir URL de Redirect

Autenticación (Solo la primera vez)

Como Canva exige credenciales por usuario, abre tu terminal y ejecuta esto para autenticarte y guardar los tokens de forma segura:

# 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-auth

Se abrirá tu navegador para confirmar. ¡Listo! Tus tokens se guardarán con permisos 0600 en tu sistema operativo.


🏗️ Arquitectura y Seguridad

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 estructurado

Características de Ingeniería:

  • 🔐 Bóveda OS Segura: Los tokens se guardan en el directorio del sistema (~/.config/canva-mcp/ en Linux/Mac o %APPDATA%\canva-mcp en Windows) con permisos POSIX 0600 (solo legibles por tu usuario).
  • Mutex Anticolisiones: Previene condiciones de carrera cuando el modelo ejecuta múltiples herramientas en paralelo durante la renovación del token.
  • 🛡️ Exponential Backoff: Reintentos automáticos con retroceso exponencial ante límites de tasa (HTTP 429) y caídas temporales (5xx).
  • 🧪 100% Test Coverage: Suite completa de pruebas unitarias con Vitest.

🧪 Pruebas y Desarrollo

# Ejecutar suite de pruebas unitarias
pnpm test

# Verificación estricta de tipos TypeScript
pnpm typecheck

# Compilar paquete de producción
pnpm build

📄 Licencia

Este proyecto está bajo la licencia MIT. Consulta el archivo LICENSE para más detalles.