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
| Tool | Purpose |
|---|---|
studio | Mounts the inline Studio canvas in the chat. Default for chat clients — user clicks Render in the iframe. |
render_video | Submits an Edit JSON to the render API directly. Use for automation or when the user says "just render it". |
get_render_status | Polls a render. Returns queued/fetching/rendering/saving/done/failed and the output URL. |
create_studio_link | Generates a https://shotstack.studio/s/{slug} short link for sharing. The link doesn't expire. |
get_shotstack_guide | Returns the Edit JSON authoring conventions. |
create_template, update_template, list_templates, get_template, render_template, delete_template | Manage reusable templates with {{PLACEHOLDER}} merge fields. |
list_models | Lists the AI generation models and whether this key can use each one, with each model's options schema. |
quote_generation | Returns the credits a generation would cost, without charging. |
generate_asset | Generates one image, video or audio asset from a prompt. |
get_generation_status | Polls a generation and returns the asset URL when it's ready. |
Studio links
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
- Call
get_shotstack_guidebefore composing Edit JSON. Track ordering, asset types, fonts, and the top-5 mistakes are non-negotiable. The full ruleset is at/agents/conventions. - Default to
studio, notrender_video. Mount the edit inline so the user can preview and click Render. Only callrender_videodirectly when explicitly asked or when there's no human in the loop. - Use public HTTPS URLs for assets. Never hallucinate URLs; ask the user when unsure.
- Quote before generating. Inside an edit, give an asset a
promptandmodeland it generates at render time. On its own, calllist_models, thenquote_generation, and get the user's yes beforegenerate_asset.