Skip to main content
Glama
mattcoatsworth

Canva API MCP Server

README.md
# Canva API MCP Server

A comprehensive Model Context Protocol (MCP) server for interacting with Canva's API. This server provides tools and resources for managing designs, brands, assets, and users in Canva.

## Features

- Complete coverage of Canva API endpoints
- Tools for all major API operations
- Resources for documentation and entity details
- Mock data support for testing without API credentials

## Getting Started

1. Clone this repository
2. Install dependencies:
   ```
   npm install
   ```
3. Copy `.env.example` to `.env` and add your Canva API credentials:
   ```
   CANVA_APP_ID=your_app_id
   CANVA_API_KEY=your_api_key
   ```
4. Start the server:
   ```
   npm run dev
   ```

## Testing with MCP Inspector

To test the server with the MCP Inspector:

```
npm run inspect
```

This will open a web interface where you can:
- Browse and test all available tools
- Access resources
- View server logs

## Available Tools

### Design Management
- `get_design` - Get information about a specific design
- `list_designs` - List designs with optional pagination

### Brand Management
- `get_brand` - Get information about a specific brand
- `list_brands` - List brands with optional pagination

### Asset Management
- `get_asset` - Get information about a specific asset
- `list_assets` - List assets with optional filtering and pagination
- `upload_image` - Upload an image to Canva from a URL

### User Management
- `get_user` - Get information about a specific user
- `list_users` - List users with optional pagination

## Available Resources

### Documentation
- `canva://overview` - General API overview
- `canva://getting-started` - Getting started guide
- `canva://authentication` - Authentication information
- `canva://designs` - Designs API documentation
- `canva://brands` - Brands API documentation
- `canva://assets` - Assets API documentation
- `canva://users` - Users API documentation

### Entity Resources
- `canva://design/{designId}` - Information about a specific design
- `canva://brand/{brandId}` - Information about a specific brand
- `canva://asset/{assetId}` - Information about a specific asset

## Mock Data

If no API credentials are provided, the server will use mock data for all responses. This is useful for testing and development.

## License

MIT

TDQS

D1.8/5.0

Scored across 9 tools

Disambiguation4/5

The get/list pairs for each resource are distinct and easy to differentiate. The only potential confusion is 'upload_image' versus 'get_asset'/'list_assets', but the verb 'upload' clearly indicates a different action. Without descriptions, the boundaries between asset, design, user, and brand are clear from the names.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern with 'get_' for singular resources and 'list_' for plural collections (e.g., get_user, list_users). The exception is 'upload_image', which uses a different verb and breaks the otherwise predictable pattern. The mix is minor but noticeable.

Tool Count4/5

With 9 tools, the count is within the typical well-scoped range. Each resource has a get and list tool, which is reasonable for a read-focused server. The count feels appropriate for the apparent scope, though the lack of mutating tools may make the set feel slightly thin for a full API server.

Completeness2/5

The tool surface is severely incomplete for a Canva API. Only get and list operations are present for assets, users, designs, and brands, with no create, update, or delete functionality. 'upload_image' provides some creation capability for assets, but the rest of the resources have no way to create or modify them, leaving significant gaps for agents.

Maintenance

ActivityInactive
ResponsivenessNo issues