Canva API服务

Canva MCP Server是一个完整的API服务,提供与Canva平台交互的编程接口,支持设计管理、资源上传、文件夹管理、导出功能等。

  • by David-S-Botero
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 david-s-botero/canva-mcp-server

使用说明

Canva MCP服务器

完整的MCP(Model Context Protocol)服务器,将Canva API的端点作为工具公开。该服务器允许通过AI向导以编程方式与Canva交互。

特征

🔐 OAuth 2.0 认证

  • 使用PKCE生成授权URL
  • 通过访问令牌交换授权代码
  • 自动更新访问令牌
  • 安全凭证管理

📁 设计管理

  • 创建新设计
  • 列出现有设计
  • 获取设计元数据
  • 管理设计页面
  • 获取可用的导出格式

🖼️ 资产管理

  • 从本地文件上传资产
  • Subir资产定义URL
  • 获取资产元数据
  • 更新资产信息
  • Eliminar资产

📂 文件夹管理

  • 创建文件夹
  • 列出文件夹内容
  • 更新文件夹元数据
  • 在文件夹之间移动项目
  • 删除文件夹

📤 导出

  • 导出多种格式的文件(PDF、JPG、PNG、GIF、PPTX、MP4)
  • 用于导出的异步作业
  • 出口状况监测

🎨 品牌模板

  • 列出品牌模板
  • 获取模板元数据
  • 检查自动补全功能

🔄 自动补全

  • 创建设计自动完成作业
  • 自动完成状态监测
  • 设计动态生成

💬 喜剧

  • 创建评论线程
  • 应答者a comentarios
  • 列出评论答复
  • 获取评论元数据

👤 用户管理

  • 获取当前用户的信息
  • 获取用户配置文件
  • 验证用户能力

安装

1.克隆存储库

git clone <repository-url>
cd canva-mcp-server

2. 安装依赖关系

pip install -r requirements.txt

3.配置环境变量

创建文件 .env 在根目录中:

CANVA_CLIENT_ID=tu_client_id_aqui
CANVA_CLIENT_SECRET=tu_client_secret_aqui
CANVA_REDIRECT_URI=https://tu-dominio.com/callback

4.配置Canva集成

  1. Ve a Canva开发者门户
  2. 创建新的集成
  3. 配置所需的范围:
    • asset:read -Leer资产
    • asset:write -写资产
    • design:meta:read -读取设计元数据
    • design:meta:write -编写设计元数据
    • folder:read -读取文件夹
    • folder:write -写文件夹
    • comment:write -Escribir comentarios
    • brand_template:read -阅读品牌模板
  4. 配置重定向URL
  5. 将客户ID和客户机密复制到您的文件 .env

谎言

1.启动服务器

python server.py

2.认证流程

步骤1:创建授权URL

# Usar la herramienta create_authorization_url
auth_result = create_authorization_url(
    scopes="asset:read asset:write design:meta:read folder:read"
)
# auth_result contiene:
# - authorization_url: URL para que el usuario autorice
# - code_verifier: Verificador de código para PKCE
# - state: Parámetro de estado para seguridad

帕索2:象征性的跨国合作

# Después de que el usuario autorice, recibirás un código
# Usar la herramienta exchange_code_for_token
token_result = exchange_code_for_token(
    authorization_code="código_recibido",
    code_verifier="verificador_guardado"
)

步骤3:使用API工具

一旦经过认证,您可以使用所有可用的工具。

3.使用示例

创建新设计

design = create_design(
    title="Mi Nuevo Diseño",
    folder_id="folder_id_opcional"
)

列出设计

designs = list_designs(
    limit=20,
    folder_id="folder_id_opcional"
)

从URL上传资产

upload_job = create_url_asset_upload_job(
    url="https://ejemplo.com/imagen.jpg",
    filename="mi_imagen.jpg",
    folder_id="folder_id_opcional"
)

# Verificar estado del trabajo
job_status = get_url_asset_upload_job(upload_job["job"]["id"])

导出设计

export_job = create_design_export_job(
    design_id="design_id",
    file_type="pdf",
    page_range="1-3"
)

# Verificar estado de exportación
export_status = get_design_export_job(export_job["job"]["id"])

创建文件夹

folder = create_folder(
    name="Mi Carpeta",
    parent_folder_id="parent_folder_id_opcional"
)

从品牌模板自动完成设计

autofill_job = create_design_autofill_job(
    brand_template_id="template_id",
    dataset={
        "company_name": "Mi Empresa",
        "logo_url": "https://ejemplo.com/logo.png",
        "primary_color": "#FF5733"
    }
)

# Verificar estado del autocompletado
autofill_status = get_design_autofill_job(autofill_job["job"]["id"])

可用的工具

认证

  • create_authorization_url -创建OAuth授权URL
  • exchange_code_for_token -用访问令牌交换代码
  • refresh_access_token -更新访问令牌
  • get_oauth_config -获取当前OAuth配置
  • clear_tokens -清除存储的令牌

用户

  • get_current_user -获取当前用户的信息
  • get_user_profile -获取用户配置文件
  • get_user_capabilities -获取用户能力

设计

  • create_design -创建新设计
  • list_designs -列出设计
  • get_design -获取设计元数据
  • get_design_pages -获取设计页面
  • get_design_export_formats -获取导出格式

资产

  • create_asset_upload_job -创建资产上传作业
  • get_asset_upload_job -核实资产明细表
  • create_url_asset_upload_job -从URL上传资产
  • get_url_asset_upload_job -验证从URL上传的状态
  • get_asset -获取资产元数据
  • update_asset 更新资产
  • delete_asset - 删除资产

文件夹

  • create_folder - 创建文件夹
  • get_folder -获取文件夹元数据
  • update_folder -更新文件夹
  • delete_folder -删除文件夹
  • list_folder_items -列出文件夹内容
  • move_folder_item -在文件夹之间移动项目

导出

  • create_design_export_job -创建导出作业
  • get_design_export_job 检查出口状态

品牌模板

  • list_brand_templates -列出品牌模板
  • get_brand_template -获取模板元数据
  • get_brand_template_dataset -获取模板数据集

自动补全

  • create_design_autofill_job -创建自动完成的作业
  • get_design_autofill_job -验证汽车是否自动完成

喜剧

  • create_comment_thread -创建评论线程
  • create_comment_reply -回复评论
  • get_comment_thread -获取线程元数据
  • list_comment_replies -列出评论答复

安全配置

所需环境变量

  • CANVA_CLIENT_ID -Canva客户ID
  • CANVA_CLIENT_SECRET -Canva客户的秘密
  • CANVA_REDIRECT_URI -配置的重定向URI

最佳实践

  1. 从不 分享你的Canva证书
  2. 使用环境变量作为凭据
  3. 在生产中实现令牌的安全存储
  4. 正确处理身份验证错误
  5. 实施代币自动更新

异步作业

Canva API中的许多操作是异步的。典型的流程是:

  1. 创建作业(例如: create_asset_upload_job)
  2. 获得工作ID
  3. 定期检查工作状态
  4. 工作完成后使用结果

轮询示例

import asyncio
import time

async def wait_for_job_completion(job_id: str, check_function):
    while True:
        status = await check_function(job_id)
        if status["job"]["status"] == "success":
            return status["job"]["result"]
        elif status["job"]["status"] == "failed":
            raise Exception(f"Job failed: {status}")
        
        # Esperar antes de verificar nuevamente
        await asyncio.sleep(2)

错误处理

服务器处理Canva API错误并将其作为异常传播。常见错误包括:

  • 401 Unauthorized - 令牌无效或过期
  • 403 Forbidden 许可证不足
  • 404 Not Found -未找到资源
  • 429 Too Many Requests -超过速率限制

贡献

  1. 叉库
  2. 为您的功能创建分支(git checkout -b feature/nueva-funcionalidad)
  3. 提交您的更改(git commit -am 'Agregar nueva funcionalidad')
  4. 推拉拉马(git push origin feature/nueva-funcionalidad)
  5. 创建 Pull Request

许可证

这个项目是在麻省理工学院的许可下进行的。查看文件 LICENSE 更多细节。

额外资源