Skip to main content

Shotstack MCP Server

A Model Context Protocol server that lets any MCP-aware AI client compose and render Shotstack videos from natural language.

Endpoint:  https://mcp.shotstack.io/   (Streamable HTTP, OAuth or x-api-key header)

Get an API key at app.shotstack.io.

Add it to your client​

Claude.ai · Claude Desktop​

Settings → Connectors → Add custom connector → URL https://mcp.shotstack.io/ → complete OAuth.

Claude Code​

claude mcp add --transport http shotstack https://mcp.shotstack.io

ChatGPT​

Settings → Connectors → Advanced → enable Developer mode → Create → URL https://mcp.shotstack.io/. Developer mode requires Business, Enterprise, or Edu.

Cursor​

~/.cursor/mcp.json:

{ "mcpServers": { "shotstack": { "url": "https://mcp.shotstack.io/" } } }

VS Code (GitHub Copilot)​

.vscode/mcp.json (VS Code 1.101+):

{ "servers": { "shotstack": { "type": "http", "url": "https://mcp.shotstack.io/" } } }

Codex CLI​

codex mcp add shotstack --url https://mcp.shotstack.io

Gemini CLI​

gemini mcp add -s user --transport http shotstack https://mcp.shotstack.io/

Windsurf​

~/.codeium/windsurf/mcp_config.json:

{ "mcpServers": { "shotstack": { "serverUrl": "https://mcp.shotstack.io/" } } }

Zed​

settings.json:

{ "context_servers": { "shotstack": { "url": "https://mcp.shotstack.io/" } } }

JetBrains IDEs​

Settings → Tools → MCP → Add → URL https://mcp.shotstack.io/.

Goose​

goose configure → Add extension → Remote Extension (Streaming HTTP) → URL https://mcp.shotstack.io/.

Raycast​

Extensions → MCP → Add server → URL https://mcp.shotstack.io/.

Headless / CI (no browser)​

Skip OAuth by passing your API key as a header:

claude mcp add --transport http shotstack https://mcp.shotstack.io --header "x-api-key: YOUR_KEY"

stdio-only clients (fallback)​

If your client only supports local stdio servers, bridge to the remote endpoint with mcp-remote:

{
"mcpServers": {
"shotstack": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.shotstack.io/", "--header", "x-api-key:YOUR_KEY"]
}
}
}

For scripting and automation outside a chat client, use the Shotstack CLI instead.

What it does​

ToolPurpose
studioMounts the inline Studio canvas in the chat. Default for chat clients — user clicks Render in the iframe.
render_videoSubmits an Edit JSON to the render API directly. Use for automation or when the user says "just render it".
get_render_statusPolls a render. Returns queued/fetching/rendering/saving/done/failed and the output URL.
create_studio_linkGenerates a https://shotstack.studio/s/{slug} short link for sharing. The link doesn't expire.
get_shotstack_guideReturns the Edit JSON authoring conventions.
create_template, update_template, list_templates, get_template, render_template, delete_templateManage reusable templates with {{PLACEHOLDER}} merge fields.
list_modelsLists the AI generation models and whether this key can use each one, with each model's options schema.
quote_generationReturns the credits a generation would cost, without charging.
generate_assetGenerates one image, video or audio asset from a prompt.
get_generation_statusPolls a generation and returns the asset URL when it's ready.

create_studio_link and the Open in Studio button on the inline canvas make a short https://shotstack.studio/s/{slug} link. The MCP server sends your API key with it, so the link doesn't expire. Each link is a snapshot: edits made after opening it never change it, and sharing again makes a new link.

Links copied in Studio follow the same rule. Signed in, they're permanent. Signed out, they last 30 days, and signing up in the same browser keeps the links it made.

How agents should use it​

  1. Call get_shotstack_guide before composing Edit JSON. Track ordering, asset types, fonts, and the top-5 mistakes are non-negotiable. The full ruleset is at /agents/conventions.
  2. Default to studio, not render_video. Mount the edit inline so the user can preview and click Render. Only call render_video directly when explicitly asked or when there's no human in the loop.
  3. Use public HTTPS URLs for assets. Never hallucinate URLs; ask the user when unsure.
  4. Quote before generating. Inside an edit, give an asset a prompt and model and it generates at render time. On its own, call list_models, then quote_generation, and get the user's yes before generate_asset.