canva-mcp-server
canva-mcp-server
Servidor MCP (Model Context Protocol) educacional que conecta um agente de IA à Canva Connect API. Feito como material de aula sobre mídias criativas com IA — mostra na prática como um MCP server é estruturado.
O que ele faz
Expõe 3 ferramentas (tools) que um agente de IA (Claude, etc.) pode chamar:
Ferramenta | O que faz |
| Busca designs existentes na conta do Canva por título |
| Cria um design novo em branco (poster, apresentação, post de Instagram, etc.) |
| Exporta um design como PNG, JPG, PDF, PPTX, GIF ou MP4 |
Estrutura do projeto
canva-mcp-server/
├── package.json
├── tsconfig.json
├── src/
│ ├── index.ts # ponto de entrada, registra as ferramentas
│ ├── constants.ts
│ ├── services/canva.ts # cliente HTTP + tratamento de erros da API
│ └── tools/ # uma ferramenta por arquivo
│ ├── searchDesigns.ts
│ ├── createDesign.ts
│ └── exportDesign.ts1. Instalar dependências
cd canva-mcp-server
npm install2. Obter um Access Token do Canva
A Canva Connect API usa OAuth 2.0 (Authorization Code + PKCE). Passo a passo:
Acesse o Canva Developer Portal e crie um app (tipo "Connect API integration").
Anote o Client ID e o Client Secret.
Configure um Redirect URI (para testes locais, algo como
http://127.0.0.1:3333/callback).Defina os scopes necessários, no mínimo:
design:content:read,design:content:write,design:meta:read,asset:read.Siga o fluxo OAuth do Canva (autorização no navegador → troca do
codeporaccess_token) — o guia oficial está em https://www.canva.dev/docs/connect/authentication/. Para uma aula, o mais simples é usar o Postman/Insomnia com o fluxo OAuth2 embutido, ou o script de exemplo do próprio Canva Developer Portal.Guarde o
access_tokenobtido (ele expira — para reuso contínuo, seria necessário implementar o refresh token; fica como exercício avançado para a turma).
3. Configurar a variável de ambiente
export CANVA_ACCESS_TOKEN="seu_access_token_aqui"(há um .env.example no repositório com o mesmo template, caso prefira usar um arquivo .env)
4. Build e execução
npm run build
npm startPara desenvolvimento com reload automático:
npm run dev5. Conectar ao Claude Code / Claude Desktop
Adicione ao seu mcp config (ex: .claude/settings.json do projeto, ou claude_desktop_config.json):
{
"mcpServers": {
"canva": {
"command": "node",
"args": ["/caminho/absoluto/para/canva-mcp-server/dist/index.js"],
"env": {
"CANVA_ACCESS_TOKEN": "seu_access_token_aqui"
}
}
}
}6. Testar com o MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.jsIsso abre uma interface web para chamar as ferramentas manualmente e ver os resultados — ótimo para demonstrar em aula antes de conectar a um agente de verdade.
Ideias para exercícios da turma
Adicionar uma ferramenta
canva_list_brand_templates(usar templates de marca).Implementar refresh automático do access token.
Adicionar suporte a
response_format(markdown vs JSON) como no guia de boas práticas de MCP.Trocar o transporte de stdio para Streamable HTTP e rodar como serviço remoto.