An MCP Server for Social Media Carousels (Supaslides MCP)
Supaslides runs a remote MCP server at https://supaslides.app/mcp (Streamable HTTP). Connected agents can extract a brand from a URL, generate carousels, export PNG, PDF or MP4 files, share decks and schedule posts to Instagram, Facebook and X. It authenticates with a personal API key and is included on every plan, including Free.
This page is the reference: tools, client configs, the typical call chain, limits and security. If you want the plain-language walkthrough with prompts to paste, read how to create and schedule carousels from Claude or ChatGPT. The short setup lives in the MCP docs.
What the server does
It exposes the whole Supaslides loop as tools. A brand is built from a website (real colors, fonts, logo and voice, the same pipeline as URL to carouselin the app). Claude writes each carousel in that brand’s voice and picks a layout per slide. Exports render the same components the editor shows, and scheduling uses the same publishing queue as the app’s Schedule page. Every call runs as the owner of the API key, inside that account’s plan.
Tools
| Tool | What it does |
|---|---|
create_brand | Extracts a brand (colors, fonts, logo, voice, business profile) from a website URL and saves it, with 5 starter ideas. Returns the existing brand if that site is already saved. 60 to 120 s. |
list_brands | Lists your brands, newest first. |
add_image | Adds an image from a public URL to a brand's library (re-hosted, tagged, subject cut out). Returns an imageId. |
create_image_upload | For a local file. Returns a ready-to-run curl command with a self-authorizing link. Running it returns an imageId. |
list_images | Lists a brand's images, uploaded and scraped from its site, with their imageIds. |
generate_carousel | Writes a 3 to 10 slide carousel from a one-line brief in the brand's voice, picks a layout per slide and writes a caption. Optional imageIds, slide count and narrative type. 15 to 40 s. |
list_carousels / get_carousel | Browse your carousels, optionally by brand. get_carousel returns the caption, a per-slide summary and the editor link. |
export_carousel | format "png": a ZIP of PNGs (a PDF for LinkedIn) with a download link, 30 to 90 s. format "video": queues an animated MP4 render, per slide or combined. |
check_export | Checks an export job and returns a fresh download link when it is done. |
share_carousel | Mints a public share page where the recipient previews the deck and claims it into their own account. |
get_share_status / list_shares / revoke_share | Views and claims for your share links, or take one down. |
list_social_accounts | The social accounts connected to your brands, with their status. Accounts are connected in the app. |
schedule_carousel | Publishes a carousel now or at a set time to connected accounts, with a format per account (static images or animated video). |
schedule_text_post | A regular post: text plus an optional library image. X and Facebook take text alone; Instagram needs the image. |
list_scheduled_posts / cancel_scheduled_post | Status, publish time, permalink and errors for your posts, or cancel a pending one. |
A typical tool chain
You rarely call these by hand. An agent reads the descriptions and chains them from a request like “make a carousel from acme.com and post it Monday at 9am.” Simplified, the chain looks like this:
create_brand { url: "https://acme.com" }
→ brandId, colors, fonts, voice, starterIdeas
generate_carousel { brandId, brief: "3 onboarding mistakes", slideCount: 7 }
→ carouselId, caption, slides, editorUrl
export_carousel { carouselId, format: "video", combine: true }
→ jobId, status: "queued"
check_export { jobId }
→ status: "done", downloadUrl
list_social_accounts { brandId }
→ socialAccountId (Instagram, Facebook Page, X)
schedule_carousel { carouselId,
targets: [{ socialAccountId, format: "png-set" }],
scheduledFor: "2026-10-06T09:00:00-04:00" }
→ groupId, posts[].status: "scheduled"Two details matter. scheduledFor is an ISO 8601 time with an offset, so tell the agent your time zone. And each schedule target is an account plus a format: png-set for a static carousel, video-set for animated per-slide videos on Instagram, or combined-video for one MP4.
Uploading local images
MCP arguments are JSON, so binary files don’t travel through them. The API key also lives in the client config, where the model can’t see it, which means an agent holding a file path has no credential to upload with. create_image_upload closes that gap. It returns a ready-to-run curl command whose link carries its own authorization, locked to one brand and valid for 30 minutes:
create_image_upload { brandId }
→ { curl: "curl -sS -F file=@/ABSOLUTE/PATH/TO/IMAGE.jpg \"https://supaslides.app/api/public/images?ticket=...\"" }
curl -sS -F file=@/Users/me/photo.jpg \
"https://supaslides.app/api/public/images?ticket=..."
→ { imageId }The agent runs the command in a shell, so this works in clients with terminal access, like Claude Code or Cursor. Scripting it yourself? Send the same multipart request with your API key and an explicit brand id:
curl -F file=@photo.jpg -F brandId=YOUR_BRAND_ID \ -H "Authorization: Bearer sk_YOUR_KEY" \ https://supaslides.app/api/public/images
JPG, PNG or WebP, ideally under 4 MB. Images already online go through add_image with their URL instead.
Connecting a client
Create a key in Settings, under API keys. It is shown once. Then add the server. Claude Code:
claude mcp add --transport http supaslides https://supaslides.app/mcp \ --header "Authorization: Bearer sk_YOUR_KEY"
Cursor, in .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"supaslides": {
"url": "https://supaslides.app/mcp",
"headers": { "Authorization": "Bearer sk_YOUR_KEY" }
}
}
}Other clients that send custom headers should work too. The configs below follow each vendor’s documented schema. VS Code, in .vscode/mcp.json:
{
"servers": {
"supaslides": {
"type": "http",
"url": "https://supaslides.app/mcp",
"headers": { "Authorization": "Bearer sk_YOUR_KEY" }
}
}
}OpenAI’s Codex CLI, in ~/.codex/config.toml, with the key in the SUPASLIDES_API_KEY environment variable:
[mcp_servers.supaslides] url = "https://supaslides.app/mcp" bearer_token_env_var = "SUPASLIDES_API_KEY" tool_timeout_sec = 180
OpenAI’s Responses API, as an entry in the tools array of your request. OpenAI does not keep header values between requests, so send the key every time:
{
"type": "mcp",
"server_label": "supaslides",
"server_url": "https://supaslides.app/mcp",
"headers": { "Authorization": "Bearer sk_YOUR_KEY" }
}Not supported yet: custom connectors in claude.ai and the Claude apps, and the ChatGPT app. Both sign in with OAuth, and the server only accepts API keys today. OAuth is planned.
Limits and timeouts
- Durations.
create_brand60 to 120 s,generate_carousel15 to 40 s, PNG export 30 to 90 s. Video exports take a few minutes, so pollcheck_export. Static formats inschedule_carouselrender before the call returns (30 to 90 s). - Client timeouts. Current Claude Code versions wait long enough by default. If you set
MCP_TOOL_TIMEOUT, keep it at180000or more. Codex CLI defaults to 60 seconds, hencetool_timeout_sec = 180above. - Plan quotas. The same as the app: brands (1, 3 or 10), carousels a month (3, 20 or 80), image library size (10, 50 or 200) and scheduled posts a month (0, 60 or 200) on Free, Pro and Studio. Free exports Instagram and TikTok sizes with a watermark. Errors name the limit that ran out. See pricing.
- Daily caps. Brand extraction and generation have per-account daily caps on top of the monthly quota, and share links are capped at 200 a day.
- Downloads. A PNG export link is valid for 60 minutes, and
check_exportissues a fresh 10-minute link. The files are deleted after 48 hours.
Security
- API keys. A key is
sk_plus 40 random characters. Only its SHA-256 hash is stored, the full key is shown once, and you can revoke it in Settings at any time, which disconnects anything using it. One key per client makes revoking painless. - The model never sees the key. It sits in your client config as a header, not in the conversation or the tool arguments.
- Upload tickets. The links from
create_image_uploadare signed, work for one brand only, can only upload images, and expire after 30 minutes. - Account scope.Every tool call runs as the key’s owner and can only reach that account’s brands, carousels, images and connected accounts.
- Public by design. Share links are public pages.
revoke_sharetakes one down. Scheduling publishes to real accounts, so consider keeping tool approval on in your client for the schedule tools.
Ways to automate carousels, compared
An MCP server is one of three common routes. They suit different jobs:
| Approach | How it works | Good fit | Trade-offs |
|---|---|---|---|
| MCP server (Supaslides) | You ask in plain language. The agent calls tools that build the brand, write the copy, lay out slides, export and schedule. | People who already work in an AI agent and want the whole loop in one place. | Needs a client that sends a custom header today. The look comes from Supaslides layouts and art directions, not a template you drew. |
| Template image APIs (such as Bannerbear or Orshot) plus Zapier or n8n | You design a template once. An automation fills its text and image fields with data and renders the files. | High volumes of graphics with a fixed design, fed from a spreadsheet, CMS or product catalog. | You design the templates and write or generate the copy in another step. Posting is a separate step to set up. |
| DIY: an LLM plus Canva | The LLM drafts slide copy, you design the slides by hand or from a Canva template. | Full creative control and one-off posts. | The most manual work per carousel, and brand consistency depends on you. More in our comparison of an AI carousel tool with Canva and ChatGPT. |
The practical difference: template APIs render a design you already have, while the MCP route also does the brand extraction and the writing. If your look is locked in a template and you only need volume, a template API is a good fit. If you want an agent to go from a URL to a posted carousel, that is what the MCP server is for.
Try it
No account yet? Build a deck without signing up, then create a free account and an API key. Setup takes one command in Claude Code.
Quick answers
Is there an MCP server for making social media carousels?
Yes. Supaslides runs a remote MCP server at https://supaslides.app/mcp. Connected agents can extract a brand from a website, generate carousels, export PNG, PDF or MP4 files, share decks and schedule posts to Instagram, Facebook Pages and X.
Which MCP clients work with the Supaslides server?
Any client that can send a custom Authorization header over Streamable HTTP. Claude Code and Cursor work today, and VS Code, the Codex CLI and OpenAI's Responses API document the header settings it needs. claude.ai connectors and the ChatGPT app need OAuth, which is not available yet.
Is the Supaslides MCP server free?
Yes. It is included on every plan, including Free. Calls use your plan's normal allowances: Free has 1 brand and 3 carousels a month with a watermark, and scheduling needs Pro or Studio.
Can the MCP server post to Instagram automatically?
Yes, on Pro and Studio. Connect the Instagram account once in the app, then an agent can call schedule_carousel or schedule_text_post to publish now or at a set time. Facebook Pages and X work the same way. TikTok publishing is still in review.
Make your first carousel in 60 seconds
Paste your URL, write one line, and let Supaslides build an on-brand deck for Instagram, TikTok, LinkedIn and every major feed. Free to start, no credit card.