All docs
Webhooks & integrations

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.

2 min readLast updated

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.

Pro and Business only

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.

Endpointtext
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

Add the remote MCP serverbash
claude mcp add --transport http --scope user viralslides \
  https://api.viralslides.app/v0/mcp \
  --header "Authorization: Bearer vs_live_..."
Make it permanent with --scope user

--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)

~/.cursor/mcp.json (or your client's MCP config)json
{
  "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

ToolWhat it does
list_appsList the apps in your workspace (id, name, niche, design, tagline).
get_appFull positioning for one app: offer, audience, value props, pain points.
list_formatsAvailable slideshow formats (narrative shapes) to pass as template_key.
list_design_templatesAvailable visual designs (classic, inspo, editorial-split, brand-studio, ...).
generate_slideshowGenerate a slideshow for an app. Async — returns a slideshow_id with status PENDING. Counts against your monthly quota.
get_slideshowPoll status; once COMPLETED returns slide image URLs, caption, and hashtags.
list_slideshowsList recent slideshows, optionally filtered by app or status.
generate_hooksBrainstorm scroll-stopping hooks grounded in the app's pain points and offer.
get_usageYour plan, its limits, and slideshows generated this billing period.
publish_slideshowPublish 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 publicly

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.