使用说明
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集成
- Ve a Canva开发者门户
- 创建新的集成
- 配置所需的范围:
asset:read-Leer资产asset:write-写资产design:meta:read-读取设计元数据design:meta:write-编写设计元数据folder:read-读取文件夹folder:write-写文件夹comment:write-Escribir comentariosbrand_template:read-阅读品牌模板
- 配置重定向URL
- 将客户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授权URLexchange_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客户IDCANVA_CLIENT_SECRET-Canva客户的秘密CANVA_REDIRECT_URI-配置的重定向URI
最佳实践
- 从不 分享你的Canva证书
- 使用环境变量作为凭据
- 在生产中实现令牌的安全存储
- 正确处理身份验证错误
- 实施代币自动更新
异步作业
Canva API中的许多操作是异步的。典型的流程是:
- 创建作业(例如:
create_asset_upload_job) - 获得工作ID
- 定期检查工作状态
- 工作完成后使用结果
轮询示例
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-超过速率限制
贡献
- 叉库
- 为您的功能创建分支(
git checkout -b feature/nueva-funcionalidad) - 提交您的更改(
git commit -am 'Agregar nueva funcionalidad') - 推拉拉马(
git push origin feature/nueva-funcionalidad) - 创建 Pull Request
许可证
这个项目是在麻省理工学院的许可下进行的。查看文件 LICENSE 更多细节。