Skip to main content
Glama

Post generator from Canva templates

You ask for "5 words in Chinese about sports" and a new 5-slide carousel appears in your Canva account, with the template intact and without repeating recent words.

Cost: €0. Canva Free + the official Canva MCP server + this local server. No resizing, no Enterprise autofill, no premium assets.

How it's set up

Two MCP servers sharing the work:

Server

Who maintains it

What it does

canva

Canva (remote, OAuth)

Duplicate, read, edit, and export designs

catalogo-plantillas

You (local, stdio)

Catalog, limits, validation, and history

The Canva one knows about designs but nothing about your templates or what you've already published. The local server fills that gap, and that's where the logic that makes this reliable lives: the hard rules are checked by code, not by the model. Counting characters is exactly the kind of thing an LLM does poorly.

Related MCP server: XHS-MCP

Installation

python3 -m venv .venv
./.venv/bin/pip install -r requirements.txt

Connect Canva from Claude (Settings → Connectors → Canva) or, in Claude Code:

claude mcp add --transport http canva https://mcp.canva.com/mcp

Canva's OAuth opens in the browser. There's no need to create an app or manage API keys.

The local server is already declared in .mcp.json, so Claude Code starts it on its own when you open the project. Check with /mcp that both servers appear.

Configuring your templates

Each template must be a multi-page design in Canva: several pages duplicated with the same layout (up to the number you set in max_paginas, e.g., 12). A post with N slides is generated by copying N of those pages, which means the master needs as many pages as the largest number of slides you'll ever ask for in a single post.

Edit plantillas.json (or ask the assistant to use anadir_plantilla). For each template you need:

  • canva_design_id — it's in the master design URL: canva.com/design/DAFxxxxxxxx/edit → the DAFxxxxxxxx.

  • max_paginas — how many pages the master has (= the maximum slides a post can have with this template).

  • huecos — one object for each block you want to change on each page. The texto_actual field must be literally what that block says in the template today: that's how it's located when editing. Text boxes use "tipo": "texto" and max_caracteres; an image slot uses "tipo": "imagen" (without max_caracteres) and is filled by finding a freely licensed photo (CC0/public domain) or, if no such photo is found, by hand.

  • max_caracteres — measure it by typing text on a page until it breaks, then subtract a couple of characters.

  • reglas_estilo — the style of your content in imperative sentences. This has the most visible impact on the quality of the result; it's worth fine-tuning.

One tip: name templates descriptively in Canva (PLANTILLA_chino_5palabras_feed). It helps the correct one get chosen.

Usage

In Claude Code, inside the project folder:

> hazme un post de 5 palabras en chino sobre deportes

The generar-post skill triggers on its own. The flow is: choose a template and number of slides → ask for the slots contract → generate content per slide → validate → duplicate N pages and edit them in Canva → export everything in a single link → record the complete post in history.

If the content doesn't pass validation, it's corrected and revalidated before touching anything in Canva. That's the part that keeps you from ending up with broken designs.

How it avoids repeating

  • Themes (temas_publicados): warns if a post with that exact theme was already published (e.g., "sports" all over again).

  • Words (elementos_usados): words used in the last COOLDOWN_POSTS posts (15 by default, configurable in servidor_catalogo.py) for that template are avoided. It's not a permanent block — after that many posts, the word becomes available again, just long enough for no one to remember it.

What this project does not do

  • It doesn't publish to Instagram or TikTok. The Canva MCP goes up to exporting to image or PDF. Publishing is another integration (Meta and TikTok APIs) and isn't free in setup time.

  • It doesn't generate images with AI. For image slots, it searches for existing photos licensed CC0/public domain (Openverse); if none are found, it asks you to provide one manually.

  • It doesn't resize between formats. That requires Canva Pro. Keep one template per format: one for feed and one vertical, each with its own entry in the catalog.

  • It doesn't run on its own. The MCP responds when you open a conversation. Nothing is scheduled to generate posts in the middle of the night from you.

  • It doesn't replace review. Changing text can misalign a line break, and an auto-searched image may not be quite right. Open the design before publishing.

Verifying that the local server works

./.venv/bin/python -c "
import servidor_catalogo as s
print(s.listar_plantillas())
print(s.preparar_encargo('texto-3', 'animales', 4))
print(s.elementos_usados('texto-3'))
"

It should list your templates and return the contract for a 4-slide request for texto-3.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Create, schedule and publish social posts to TikTok, Instagram, Facebook and YouTube.

  • Social media MCP: publish, schedule & analyze posts on TikTok, Instagram, YouTube, LinkedIn & X

  • 搜索笔记、浏览首页推荐、查看笔记内容与评论,并发表你的评论。直接在工作流中与小红书内容互动,高效跟进话题。

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/josevictorgarcia/mcp-server-chinesereads-canva'

If you have feedback or need assistance with the MCP directory API, please join our Discord server