Canvora MCP
OfficialA conversational design assistant that creates, edits, localizes, and exports on-brand visuals in 100+ formats and 150+ languages.
Chat & plan — stateful conversation with Canvora's AI to turn an idea, text, or URL into a visual plan with suggested formats
Generate visuals — confirm and run a generation with overrides for formats, brand kit, style, language, resolution (2K/4K), slide counts, logo, CTA, exact content, embedded photos, and workspace
Track & retrieve — poll generation status and fetch output URLs (omit ID for the most recent generation)
Edit images — two-step natural-language edits for text, colour, layout, and brand changes
Variations — produce fresh design takes on an existing generation (count applies per visual)
Localize — translate a generation into up to 10 languages (150+, incl. RTL/CJK) with layout preserved
Export & download — PDF, PPTX, or ZIP exports; direct image URLs; JPG/WebP/PNG conversion
Edit history — view versions and revert edits (free)
Photos & assets — upload base64 photos to embed; list formats, brand kits, and workspaces; check credit balance
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Canvora MCP generate a LinkedIn carousel from our latest blog post using the brand kit"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Install as a skill
npx skills add canvora/canvora-mcpCanvora — visuals for AI agents
Give your agent a design department. Turn any idea, URL, doc, or PDF into finished, on-brand visuals: 100+ formats (posts, carousels, decks, PDFs, ads, infographics, landing-page kits), generated natively in 150+ languages — including RTL and CJK. Brand kits keep every output in the client's colors, fonts, logo, and tone.
canvora generate --idea "5 tips for remote work" \
--format linkedin_carousel --slides linkedin_carousel=5 \
--brand $BRAND_ID --wait --json
# → 5 finished branded slides on CDN URLsYour agent writes the brief. Canvora does the design. The outputs are stable CDN URLs ready to post, embed, or hand to a scheduler (works great upstream of Postiz or any posting tool: generate → schedule, end to end agentic).
This repo is the agent-facing toolkit for Canvora:
Agent skills —
skills/: 12 task-specific skills, onenpx skills addinstalls all of them into Claude Code, Cursor, Codex, OpenCode, OpenClaw and 60+ agents.Skill
For
core: setup, generate loop, credits, refinement
Instagram carousels / swipe posts
LinkedIn document carousels + safe zones
pitch/sales/training decks, document → slides
multi-page PDFs: brochures, reports, one-pagers
a whole page's visual kit from its URL
paid social + display ad sets and variants
header, OG image and promo set from one post
process flows, comparisons, timelines, stats
one campaign → many languages
designs built around the user's own photos
edit, vary, localize and revert what exists
Remote MCP server — for Claude, ChatGPT, Cursor, and any MCP client. Nothing to install.
canvoraCLI — for shell-native agents, cron jobs, and CI. Zero dependencies.
The Canvora service itself is hosted; this repo contains client tooling, skills, and docs.
Related MCP server: designforyou
Option 1 — Skills + CLI (Claude Code, Cursor, Codex, OpenClaw, shell-native agents)
npx skills add canvora/canvora-mcp # installs the skills (they set up the CLI on first use)
# or just the CLI:
npm install -g @canvora/cli
export CANVORA_API_KEY=vd_... # create at canvora.ai → Integrations → API Keys (all plans, incl. Free)
# one atomic command: generates, polls, exits with the output URLs
canvora generate \
--idea "5 tips for remote work" \
--format linkedin_carousel --slides linkedin_carousel=5 \
--wait --jsonMore runnable recipes: examples/
Commands
Command | What it does |
| Create visuals from an |
| Same design, new language: translates an existing generation's visuals, layout untouched |
| Fresh takes on an existing generation's visuals |
| Natural-language edit of one visual (previews the change; |
| Check a generation and list its output URLs |
| Save all output files locally |
| All format IDs with dimensions (live catalog) |
| Your brand kits (pass one via |
| Credit balance (10 credits per visual, 15 per carousel/deck slide) |
Every command takes --json for machine-readable stdout; progress and errors go to stderr, so piping stays clean. Exit codes: 0 success, 1 failure, 2 usage error.
Generate flags
--idea "concept" short concept - Canvora develops it into content
--input "text" your full content text, used as the source material
--url <url> extract content from a webpage
--file-url <pdf-url> extract content from a PDF
--format <id>[,<id>...] output formats (see: canvora formats)
--slides <format>=<n> slide count for carousel/deck formats (1-10, default 5); match it to the item count your idea promises
--brand <uuid> apply a brand kit
--style <name> modern | minimal | bold | elegant | playful | corporate | creative | dark
--resolution 2K|4K 4K on paid plans
--language <code-or-name> visual text language ("es", "Spanish"); default: matches your input's language
--exact use --input text verbatim, no rewording (quotes, taglines)
--logo place the brand kit's logo on the visual (needs --brand)
--cta end a carousel/deck on a call-to-action slide
--no-text pure visual, no typography (backgrounds, hero imagery)
--freeform ignore format-specific art direction, use dimensions only
--landing-page with --url: read the page's sections and produce a matching
landingPage-* visual kit (Starter plan or higher)
--project <uuid> group outputs into a project/campaign
--workspace <uuid> bill a team workspace pool instead of your personal credits
--wait poll until done (--timeout 600, --poll 5 seconds)
--json machine-readable outputOption 2 — MCP (Claude, ChatGPT, any MCP client)
One remote server, OAuth sign-in, 16 tools your agent discovers on connect:
Server URL |
|
Claude | Settings → Connectors → Add custom connector → OAuth Client ID |
Claude Code plugin |
|
ChatGPT | Apps → search Canvora → Connect, then start a message with |
Registry |
|
Step-by-step: canvora.ai/help/integrations/mcp-setup
stdio-only clients: mcp/ is a small stdio server that forwards every call to the remote server with your API key (same 16 tools, nothing generated locally):
{
"mcpServers": {
"canvora": {
"command": "node",
"args": ["/path/to/canvora-mcp/mcp/server.js"],
"env": { "CANVORA_API_KEY": "vd_..." }
}
}
}Run npm install in mcp/ first, or use the Dockerfile: docker build -t canvora-mcp . && docker run -i -e CANVORA_API_KEY=vd_... canvora-mcp.
Option 3 — Raw REST
curl -X POST https://api.canvora.ai/api/generations \
-H "X-API-Key: vd_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"inputType": "text",
"inputContent": "5 tips for remote work",
"outputFormats": ["linkedin_carousel"],
"carouselCounts": {"linkedin_carousel": 5}
}'Full API guide: canvora.ai/help/integrations/api-keys
What agents build with this
Client content pipelines — brief in, branded multi-format campaign out, scheduled by your posting tool
Multilingual campaigns — generate once,
canvora localizeinto 10 markets; layout survives, text goes native (skill)Save-optimized carousels — hook-first structure and per-slide art direction encoded as a skill (skill)
Docs → decks — point
--file-urlat a PDF report, get presentation slidesAd sets —
ad_square,ad_landscape,ad_portraitfrom one product URL, all placements covered
Built to be called by software
Predictable costs — flat credit pricing (10/visual, 15/slide);
canvora creditsbefore big jobs; failed generations auto-refund.Human in the loop — everything your agent creates also lands in your Canvora dashboard, ready for review, editing, and export before it goes anywhere.
Scoped, revocable keys — hashed at rest, per-key usage tracking, one-click revoke.
Outputs on a CDN — stable URLs your agent can post, embed, or hand to a scheduler.
Works on every plan — API and MCP access included on Free (free credits, no card).
Links
canvora.ai/for-agents — the agent overview
MIT licensed (CLI, skills, and docs in this repo).
Available Tools
16 toolschatChat with CanvoraAInspect
Send a message to Canvora's AI visual creation assistant. This is the primary tool for CREATING visuals — describe what you want (text content, a URL, an idea) and Canvora will analyze it, suggest formats, and prepare a generation.
Do NOT use this tool to retrieve or display existing/past generations — use get_generation instead (omit generation_id to fetch the user's most recent generation). Do NOT use it for variations (create_variation), translations (localize_generation), or exports (export_visuals) of existing work.
The conversation is stateful — Canvora remembers context across messages. When ready, it returns generation parameters that you should present to the user for review before confirming with confirm_generation.
Examples:
"Create a LinkedIn carousel about remote work benefits"
"Make an infographic from https://myblog.com/article"
"I need social media visuals for a product launch"
"Make it 5 slides instead, use bold style"
Inputs: message (required), workspace_id, conversation_id.
check_creditsCheck Credit BalanceARead-onlyIdempotentInspect
Check your current Canvora credit balance. Only call this when the user explicitly asks about their credits or balance.
Inputs: no named parameters.
confirm_generationConfirm & Generate VisualsADestructiveInspect
Confirm and start a visual generation after the chat tool returns "READY TO GENERATE". Call this only after the user has reviewed and approved the generation settings.
You can pass overrides for in-place tweaks — style, brand, language, resolution, slide counts. Any parameter not provided uses the values from the chat conversation.
To CHANGE the format (especially to or from a carousel) or the content, call the chat tool again rather than overriding formats here — chat re-plans the design and recomputes the content-appropriate slide count. If you do override to a carousel format, you MUST include its carousel_counts, or the slide count won't match the content.
Returns a generation ID immediately. Generation runs in the background (30-120 seconds). You MUST then call get_generation with the returned ID to poll for completion — wait 15 seconds before the first call, then poll every 10-15 seconds until status is "completed".
IMPORTANT: Do NOT call confirm_generation again if it seems slow — that creates a duplicate generation and charges credits twice. Always use get_generation to check status instead.
The finished visuals are saved to the user's Canvora workspace (account and brand kit at canvora.ai) and are also returned as preview/downloadable URLs; poll get_generation to retrieve them.
Inputs: conversation_id (required), formats, brand_id, language, +9 more.
convert_imageConvert Image FormatBInspect
Convert an image to JPG, WebP, or PNG format. Returns the converted image as a downloadable URL.
Inputs: format (required), image_url (required), quality.
create_variationCreate VariationsADestructiveInspect
Create fresh visual variations of an existing generation. Use this tool whenever the user asks for "variations", "alternatives", "different versions", or "more options" for an existing generation.
IMPORTANT: This is NOT the same as creating a new generation. This tool takes an existing generation_id and creates new visual designs from the same content. Do NOT use confirm_generation for variations — always use this tool.
SEMANTICS: variations are created for EVERY visual in the generation, and count applies PER VISUAL — count=2 on a generation with 2 visuals produces 4 new images. Tell the user the real total before or when starting. (To vary just one specific visual, the user can use the per-visual Variations option in their Canvora dashboard.)
Costs 10 credits per single image variation, 15 per carousel slide.
New variations are saved to the user's Canvora workspace (account and brand kit at canvora.ai) and are also returned as preview/downloadable URLs.
Inputs: generation_id (required), count.
download_visualDownload VisualBRead-onlyIdempotentInspect
Get the download URL for a specific output from a completed generation. Returns the direct image URL that can be opened or downloaded. The visual stays stored in the Canvora workspace (canvora.ai).
Inputs: generation_id (required), output_index.
edit_imageEdit ImageADestructiveInspect
Edit a visual in the user's Canvora workspace with a design operation. Pick the operation and describe the change in the instruction:
text: change, fix, translate, resize or restyle text on the design (e.g. "change the headline to 'Summer Sale'")
colour: colours, background colour, gradients, theme (e.g. "make the background dark blue")
layout: move, resize, align or remove elements, spacing, aspect ratio, decorative shapes or icons (e.g. "move the logo to the top right")
brand: add, move or replace the logo, apply brand colours or fonts (e.g. "apply our brand colours")
Edits that change what the image depicts — the subject, people, products or scene, or adding new imagery — are not available through this connector and are declined with a link to the Canvora editor.
This is a two-step flow:
First call with the operation and instruction — Canvora checks the edit and returns a refined edit plan for review
Second call with confirmed=true and the confirmed_instruction — executes the edit
Always show the user the edit plan before confirming.
The edited visual is saved to the user's Canvora workspace (account and brand kit at canvora.ai) and is also returned as a preview/downloadable URL.
Inputs: operation (required), instruction (required), format, confirmed, +5 more.
export_visualsExport VisualsAInspect
Export a completed generation as PDF, PowerPoint, or ZIP.
PDF: Ideal for LinkedIn carousel uploads (document posts)
PPTX: PowerPoint/Google Slides presentations
ZIP: Bulk download all images as PNG files
Returns a downloadable file URL; the source visuals remain in the user's Canvora workspace (account at canvora.ai).
Inputs: format (required), generation_id (required).
get_edit_historyGet Image Edit HistoryARead-onlyIdempotentInspect
Get the edit history of a generated image — original version plus every applied edit, with which version is current. Use before reverting an edit.
Inputs: output_id, output_index, generation_id.
get_generationGet Generation StatusARead-onlyIdempotentInspect
Get the status and outputs of a generation. Pass a generation_id to fetch that generation, or OMIT it to fetch the user's most recent generation (use this for "show me my last generation"). After calling confirm_generation, use this tool to poll for completion — poll every 10-15 seconds until status is "completed". Returns output image URLs when ready (outputs may arrive incrementally while status is "processing"). The visuals stay stored in the Canvora workspace (canvora.ai); the returned URLs can be previewed or downloaded in the chat.
Inputs: generation_id.
list_brandsList Brand KitsARead-onlyIdempotentInspect
List all brand kits in your Canvora account. Returns brand names, colors, fonts, logos, and tone. Use the brand ID with confirm_generation to apply brand styling.
Inputs: no named parameters.
list_formatsList Visual FormatsARead-onlyIdempotentInspect
List the available visual formats with dimensions and categories. Canvora supports 100+ formats; use this to find the right format ID for confirm_generation.
Inputs: category.
list_workspacesList WorkspacesARead-onlyIdempotentInspect
List your workspaces and personal account. Use this when the user wants to generate visuals for a specific team or workspace. Returns workspace IDs, names, your role, and credit balances.
Pass the workspace_id to the chat or confirm_generation tools to create visuals under that workspace (uses workspace credits instead of personal).
If the user doesn't mention a workspace, default to personal (no workspace_id needed).
Inputs: no named parameters.
localize_generationLocalize Visuals Into Multiple LanguagesADestructiveInspect
Translate the visuals of a completed generation into one or more target languages. Each visual is translated in place (image-to-image) — the layout, colors, fonts, icons and imagery stay EXACTLY the same, only the text changes language. Canvora supports 150+ languages including RTL scripts (Arabic, Hebrew, Urdu) and CJK.
Perfect for localizing a campaign: one LinkedIn carousel becomes Spanish, Japanese, Arabic and German variants in a single call.
Costs 10 credits per translated image, per language (a 6-slide deck into Spanish = 60 credits). Up to 10 languages per call. Returns one generation ID per language — poll each with get_generation until status is "completed".
This translates ALL visuals in the chosen generation. If more than one generation exists in the chat, localize the specific generation the user is referring to — ask which one if it is unclear.
SEMANTICS: this translates EVERY visual in the generation (each translated visual costs 10 credits). To translate just ONE visual (e.g. "translate the Instagram post to Spanish"), do NOT use this tool — use edit_image on that image with an instruction like "Translate all visible text in this image into Spanish", which translates only that visual.
IMPORTANT: Confirm the target languages with the user before calling.
Localized visuals are saved to the user's Canvora workspace (account and brand kit at canvora.ai) and are also returned as preview/downloadable URLs.
Inputs: languages (required), generation_id (required).
revert_editRevert Image EditAIdempotentInspect
Revert a generated image to a previous edit version or to the original. Free — does not consume credits. Use get_edit_history first to find edit IDs. The reverted visual stays in the Canvora workspace (canvora.ai) and is returned as a preview/downloadable URL.
Inputs: edit_id, output_index, generation_id.
upload_photoUpload PhotoAInspect
Upload a photo (base64) to be embedded in generated visuals — product shots, event photos, headshots. Returns a CDN URL to pass as embedding_photos to confirm_generation. Used primarily by the setup widget.
Inputs: data (required), filename.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Most tools map cleanly to distinct actions on distinct resources (format listing, generation polling, editing, variations, localization, export, conversion), and descriptions explicitly cross-reference each other to steer selection (e.g. chat vs. get_generation, localize_generation vs. edit_image translate). The only real friction is get_generation vs. download_visual, both of which surface output URLs for a completed generation.
Nearly all names follow a consistent verb_noun snake_case pattern (list_formats, get_generation, confirm_generation, edit_image, export_visuals). The single outlier is `chat`, a bare noun that breaks the pattern and gives no hint of its action.
16 tools is on the high side but justified by a genuinely broad surface: creation, polling, editing, reversion, variations, localization, export, conversion, plus workspace/brand/credit context. No tool appears redundant enough to drop.
The lifecycle is well covered end-to-end from format discovery and planning through confirm, poll, edit/revert, vary, localize, export, and convert. Minor gaps exist: no way to list or enumerate past generations (only 'most recent' via an omitted ID) and no cancel/delete operation for abandoned generations.
Maintenance
Related MCP Connectors
Generate images, GIFs, videos, and PDFs from HTML, URLs, or templates — from your AI agent.
Give your AI agents a design superpower. Generate, edit, and publish publication-grade decks, reports, landing pages, resumes, and marketing visuals directly within your agent workflow. Delivering frontier-level design quality at 3× the speed and 53× lower cost -from conversational prompt to live link or vector PDF in minutes.
On-brand creative studio for AI agents: images, video, audio, and 3D.
Deterministic visual marketing engine. Your agent plans, renders, and posts on-brand campaigns.
Related MCP Servers
AlicenseAqualityDmaintenanceEnables AI agents to create, manage, and publish brand kits with colors, typography, logos, and white-label branding via the BrandKity platform.2213 npm2MIT- AlicenseNot gradedqualityDmaintenanceGenerates logos, social media posts, app-store screenshots, comic panels, and visual-novel assets from natural-language prompts using 119 templates.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to create high-resolution marketing images from simple JSON configs without design skills or API keys. Provides presets, themes, and layouts to render deterministic PNGs locally.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to act as graphic designers by generating images and social-ready visuals, with brand DNA memory, genre-aware styles, 35+ platform presets, self-critique, and version control.MIT