MCP server
Drive ViralSlides from any MCP client (Claude Code, Claude Desktop, Cursor) — list apps, generate slideshows and hooks, and publish, all over the Model Context Protocol.
The ViralSlides MCP server lets an AI client (Claude Code, Claude Desktop, Cursor, or anything that speaks the Model Context Protocol) operate your workspace through tools: list your apps, generate slideshows and hooks, check status, and publish to TikTok/Instagram. It's a thin layer over the same REST API, so everything is scoped to your organization and authenticated with your existing API key.
The MCP server uses the same API-key gate as the REST API — your organization must be on Pro or Business. Free/Starter keys are rejected with PLAN_LACKS_API.
Endpoint
It's a remote MCP server over the Streamable HTTP transport. There's nothing to install or run — point your client at the URL and pass your API key as a Bearer header.
POST https://api.viralslides.app/v0/mcp
Authorization: Bearer vs_live_...Get a key from /api-keys (see Authentication). The same vs_live_ key works for both the REST API and MCP.
Connect from Claude Code
claude mcp add --transport http --scope user viralslides \
https://api.viralslides.app/v0/mcp \
--header "Authorization: Bearer vs_live_..."--scope user writes the server to your personal Claude config (~/.claude.json), so it stays available in every project and across sessions. Without the flag, claude mcp add defaults to local scope and only registers the server in the directory where you ran the command. That local scope is the usual reason an MCP server seems to disappear the next time you start Claude from somewhere else. Avoid --scope project here: it writes a committed .mcp.json and would leak your API key into version control.
Verify it stuck with "claude mcp list" (the viralslides server should show as connected), then ask Claude things like "list my ViralSlides apps" or "generate a hot-takes slideshow for CutieCure and show me the slides when it's done."
Connect from Cursor (or any mcp.json client)
{
"mcpServers": {
"viralslides": {
"url": "https://api.viralslides.app/v0/mcp",
"headers": { "Authorization": "Bearer vs_live_..." }
}
}
}Connect from Claude Desktop
On plans that support custom connectors: Settings → Connectors → Add custom connector, paste the endpoint URL, and add an Authorization header with value "Bearer vs_live_...". Desktop talks to the same remote server.
Available tools
| Tool | What it does |
|---|---|
| list_apps | List the apps in your workspace (id, name, niche, design, tagline). |
| get_app | Full positioning for one app: offer, audience, value props, pain points. |
| list_formats | Available slideshow formats (narrative shapes) to pass as template_key. |
| list_design_templates | Available visual designs (classic, inspo, editorial-split, brand-studio, ...). |
| generate_slideshow | Generate a slideshow for an app. Async — returns a slideshow_id with status PENDING. Counts against your monthly quota. |
| get_slideshow | Poll status; once COMPLETED returns slide image URLs, caption, and hashtags. |
| list_slideshows | List recent slideshows, optionally filtered by app or status. |
| generate_hooks | Brainstorm scroll-stopping hooks grounded in the app's pain points and offer. |
| get_usage | Your plan, its limits, and slideshows generated this billing period. |
| publish_slideshow | Publish a COMPLETED slideshow to the app's connected TikTok or Instagram. |
Generate then poll
generate_slideshow returns immediately with status PENDING — rendering runs in the background (usually under a minute). Call get_slideshow with the returned id until status is COMPLETED (then read slides/caption/hashtags) or FAILED (read the error field).
publish_slideshow posts to your live TikTok/Instagram and cannot be undone. It requires a plan with publishing enabled and the platform account connected to the app, and the slideshow must be COMPLETED. Confirm before letting an agent call it — a good MCP client will ask you to approve the tool call.
Auth, quota, and limits
- Auth: same vs_live_ key as the REST API, sent as Authorization: Bearer. Revoke it from /api-keys and MCP access stops immediately.
- Scope: every tool is scoped to the key's organization — there is no cross-org access.
- Quota: generate_slideshow consumes one slideshow from your monthly quota, exactly like the dashboard and REST API.
- Rate limits: MCP shares the same per-minute API rate limit as the REST surface (see API → Overview).
- Transport: stateless Streamable HTTP — each call is self-contained and authenticated; there are no sessions to manage.
