Shotstack MCP Server & CLI
A free, open source Shotstack MCP server and CLI that lets Claude Code, Codex, Cursor and other AI agents render videos from templates, make AI clips and voice-overs, and manage hosted files.
0.0(0 ratings)- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
claude mcp add shotstack \
-e SHOTSTACK_API_KEY=YOUR_API_KEY \
-e SHOTSTACK_ENV=stage \
-- npx -y @thenavidm/shotstack-mcp-cli@latest - 2
In Claude Code, type /mcp. Shotstack should show as connected.
/mcp
- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
claude mcp add shotstack -e SHOTSTACK_API_KEY="YOUR_API_KEY" -e SHOTSTACK_ENV="stage" -- npx -y @thenavidm/shotstack-mcp-cli@latest - 2
In Claude Code, type /mcp. Shotstack should show as connected.
/mcp
- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
claude mcp add shotstack \
-e SHOTSTACK_API_KEY=YOUR_API_KEY \
-e SHOTSTACK_ENV=stage \
-- npx -y @thenavidm/shotstack-mcp-cli@latest - 2
In Claude Code, type /mcp. Shotstack should show as connected.
/mcp
- 1Download the extension
Download the Claude Desktop extension.
- 2
Double-click it, and Claude Desktop installs it.
- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
codex mcp add shotstack \
--env SHOTSTACK_API_KEY=YOUR_API_KEY \
--env SHOTSTACK_ENV=stage \
-- npx -y @thenavidm/shotstack-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
codex mcp add shotstack --env SHOTSTACK_API_KEY="YOUR_API_KEY" --env SHOTSTACK_ENV="stage" -- npx -y @thenavidm/shotstack-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
codex mcp add shotstack \
--env SHOTSTACK_API_KEY=YOUR_API_KEY \
--env SHOTSTACK_ENV=stage \
-- npx -y @thenavidm/shotstack-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Open Cursor's settings, go to the MCP tab, and click Add new global MCP server.
- 2
Add the server.
Put your own API key in place of the example, and set the environment to match it.
{
"mcpServers": {
"shotstack": {
"command": "npx",
"args": ["-y", "@thenavidm/shotstack-mcp-cli@latest"],
"env": {
"SHOTSTACK_API_KEY": "YOUR_API_KEY",
"SHOTSTACK_ENV": "stage"
}
}
}
} - 3
Open the MCP tab again. It should show 23 tools.
- 1
Open the Command Palette and run MCP: Open User Configuration.
- 2
Add the server to that mcp.json.
If the file already has servers, add only this one inside servers. Put your own API key in place of the example, and set the environment to match it.
{
"servers": {
"shotstack": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/shotstack-mcp-cli@latest"],
"env": {
"SHOTSTACK_API_KEY": "YOUR_API_KEY",
"SHOTSTACK_ENV": "stage"
}
}
}
}
- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
copilot mcp add shotstack \
--env SHOTSTACK_API_KEY=YOUR_API_KEY \
--env SHOTSTACK_ENV=stage \
-- npx -y @thenavidm/shotstack-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get shotstack
- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
copilot mcp add shotstack --env SHOTSTACK_API_KEY="YOUR_API_KEY" --env SHOTSTACK_ENV="stage" -- npx -y @thenavidm/shotstack-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get shotstack
- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
copilot mcp add shotstack \
--env SHOTSTACK_API_KEY=YOUR_API_KEY \
--env SHOTSTACK_ENV=stage \
-- npx -y @thenavidm/shotstack-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get shotstack
- 1
Open your Gemini CLI settings.
~/.gemini/settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers. Put your own API key in place of the example, and set the environment to match it.
{
"mcpServers": {
"shotstack": {
"command": "npx",
"args": ["-y", "@thenavidm/shotstack-mcp-cli@latest"],
"env": {
"SHOTSTACK_API_KEY": "YOUR_API_KEY",
"SHOTSTACK_ENV": "stage"
}
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your Gemini CLI settings.
%USERPROFILE%\.gemini\settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers. Put your own API key in place of the example, and set the environment to match it.
{
"mcpServers": {
"shotstack": {
"command": "npx",
"args": ["-y", "@thenavidm/shotstack-mcp-cli@latest"],
"env": {
"SHOTSTACK_API_KEY": "YOUR_API_KEY",
"SHOTSTACK_ENV": "stage"
}
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your Gemini CLI settings.
~/.gemini/settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers. Put your own API key in place of the example, and set the environment to match it.
{
"mcpServers": {
"shotstack": {
"command": "npx",
"args": ["-y", "@thenavidm/shotstack-mcp-cli@latest"],
"env": {
"SHOTSTACK_API_KEY": "YOUR_API_KEY",
"SHOTSTACK_ENV": "stage"
}
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your OpenCode config.
~/.config/opencode/opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp. Put your own API key in place of the example, and set the environment to match it.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"shotstack": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/shotstack-mcp-cli@latest"],
"enabled": true,
"environment": {
"SHOTSTACK_API_KEY": "YOUR_API_KEY",
"SHOTSTACK_ENV": "stage"
}
}
}
} - 3
Restart OpenCode.
- 1
Open your OpenCode config.
%USERPROFILE%\.config\opencode\opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp. Put your own API key in place of the example, and set the environment to match it.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"shotstack": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/shotstack-mcp-cli@latest"],
"enabled": true,
"environment": {
"SHOTSTACK_API_KEY": "YOUR_API_KEY",
"SHOTSTACK_ENV": "stage"
}
}
}
} - 3
Restart OpenCode.
- 1
Open your OpenCode config.
~/.config/opencode/opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp. Put your own API key in place of the example, and set the environment to match it.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"shotstack": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/shotstack-mcp-cli@latest"],
"enabled": true,
"environment": {
"SHOTSTACK_API_KEY": "YOUR_API_KEY",
"SHOTSTACK_ENV": "stage"
}
}
}
} - 3
Restart OpenCode.
- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
openclaw mcp add shotstack \
--command npx \
--arg -y \
--arg @thenavidm/shotstack-mcp-cli@latest \
--env SHOTSTACK_API_KEY=YOUR_API_KEY \
--env SHOTSTACK_ENV=stage - 2
Check that it starts and lists its tools.
openclaw mcp doctor shotstack --probe
- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
openclaw mcp add shotstack --command npx --arg -y --arg @thenavidm/shotstack-mcp-cli@latest --env SHOTSTACK_API_KEY="YOUR_API_KEY" --env SHOTSTACK_ENV="stage" - 2
Check that it starts and lists its tools.
openclaw mcp doctor shotstack --probe
- 1
Add it with a single command in a terminal.
Put your own API key in place of the example, and set the environment to match it.
openclaw mcp add shotstack \
--command npx \
--arg -y \
--arg @thenavidm/shotstack-mcp-cli@latest \
--env SHOTSTACK_API_KEY=YOUR_API_KEY \
--env SHOTSTACK_ENV=stage - 2
Check that it starts and lists its tools.
openclaw mcp doctor shotstack --probe
- 1
In the agent panel, click the … menu, then MCP Servers, Manage MCP Servers and View raw config.
- 2
Add the server to mcp_config.json.
If the file already has servers, add only this one inside mcpServers. Put your own API key in place of the example, and set the environment to match it.
{
"mcpServers": {
"shotstack": {
"command": "npx",
"args": ["-y", "@thenavidm/shotstack-mcp-cli@latest"],
"env": {
"SHOTSTACK_API_KEY": "YOUR_API_KEY",
"SHOTSTACK_ENV": "stage"
}
}
}
}
- 1
Open your Hermes config.
~/.hermes/config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it. Put your own API key in place of the example, and set the environment to match it.
mcp_servers:
shotstack:
command: "npx"
args: ["-y", "@thenavidm/shotstack-mcp-cli@latest"]
env:
SHOTSTACK_API_KEY: "YOUR_API_KEY"
SHOTSTACK_ENV: "stage"
- 1
Open your Hermes config.
%USERPROFILE%\.hermes\config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it. Put your own API key in place of the example, and set the environment to match it.
mcp_servers:
shotstack:
command: "npx"
args: ["-y", "@thenavidm/shotstack-mcp-cli@latest"]
env:
SHOTSTACK_API_KEY: "YOUR_API_KEY"
SHOTSTACK_ENV: "stage"
- 1
Open your Hermes config.
~/.hermes/config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it. Put your own API key in place of the example, and set the environment to match it.
mcp_servers:
shotstack:
command: "npx"
args: ["-y", "@thenavidm/shotstack-mcp-cli@latest"]
env:
SHOTSTACK_API_KEY: "YOUR_API_KEY"
SHOTSTACK_ENV: "stage"
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
mkdir -p ~/.claude/skills/shotstack
cp "$(npm root -g)/@thenavidm/shotstack-mcp-cli/SKILL.md" ~/.claude/skills/shotstack/ - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.zshrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask Claude Code to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.claude\skills\shotstack" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\shotstack-mcp-cli\SKILL.md" "$HOME\.claude\skills\shotstack\" - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
setx SHOTSTACK_API_KEY "YOUR_API_KEY"
setx SHOTSTACK_ENV "stage" - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask Claude Code to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
mkdir -p ~/.claude/skills/shotstack
cp "$(npm root -g)/@thenavidm/shotstack-mcp-cli/SKILL.md" ~/.claude/skills/shotstack/ - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.bashrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask Claude Code to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
mkdir -p ~/.agents/skills/shotstack
cp "$(npm root -g)/@thenavidm/shotstack-mcp-cli/SKILL.md" ~/.agents/skills/shotstack/ - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.zshrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask Codex to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.agents\skills\shotstack" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\shotstack-mcp-cli\SKILL.md" "$HOME\.agents\skills\shotstack\" - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
setx SHOTSTACK_API_KEY "YOUR_API_KEY"
setx SHOTSTACK_ENV "stage" - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask Codex to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
mkdir -p ~/.agents/skills/shotstack
cp "$(npm root -g)/@thenavidm/shotstack-mcp-cli/SKILL.md" ~/.agents/skills/shotstack/ - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.bashrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask Codex to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.zshrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Cursor to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Cursor finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
setx SHOTSTACK_API_KEY "YOUR_API_KEY"
setx SHOTSTACK_ENV "stage" - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Cursor to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Cursor finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.bashrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Cursor to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Cursor finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.zshrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask VS Code to use shotstack-cli.
Running shotstack-cli on its own lists every command, so VS Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
setx SHOTSTACK_API_KEY "YOUR_API_KEY"
setx SHOTSTACK_ENV "stage" - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask VS Code to use shotstack-cli.
Running shotstack-cli on its own lists every command, so VS Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.bashrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask VS Code to use shotstack-cli.
Running shotstack-cli on its own lists every command, so VS Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
mkdir -p ~/.copilot/skills/shotstack
cp "$(npm root -g)/@thenavidm/shotstack-mcp-cli/SKILL.md" ~/.copilot/skills/shotstack/ - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.zshrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask Copilot CLI to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.copilot\skills\shotstack" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\shotstack-mcp-cli\SKILL.md" "$HOME\.copilot\skills\shotstack\" - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
setx SHOTSTACK_API_KEY "YOUR_API_KEY"
setx SHOTSTACK_ENV "stage" - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask Copilot CLI to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
mkdir -p ~/.copilot/skills/shotstack
cp "$(npm root -g)/@thenavidm/shotstack-mcp-cli/SKILL.md" ~/.copilot/skills/shotstack/ - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.bashrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask Copilot CLI to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.zshrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Gemini CLI to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Gemini CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
setx SHOTSTACK_API_KEY "YOUR_API_KEY"
setx SHOTSTACK_ENV "stage" - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Gemini CLI to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Gemini CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.bashrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Gemini CLI to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Gemini CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
mkdir -p ~/.config/opencode/skills/shotstack
cp "$(npm root -g)/@thenavidm/shotstack-mcp-cli/SKILL.md" ~/.config/opencode/skills/shotstack/ - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.zshrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask OpenCode to use shotstack-cli.
Running shotstack-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.config\opencode\skills\shotstack" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\shotstack-mcp-cli\SKILL.md" "$HOME\.config\opencode\skills\shotstack\" - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
setx SHOTSTACK_API_KEY "YOUR_API_KEY"
setx SHOTSTACK_ENV "stage" - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask OpenCode to use shotstack-cli.
Running shotstack-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
mkdir -p ~/.config/opencode/skills/shotstack
cp "$(npm root -g)/@thenavidm/shotstack-mcp-cli/SKILL.md" ~/.config/opencode/skills/shotstack/ - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.bashrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask OpenCode to use shotstack-cli.
Running shotstack-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
mkdir -p ~/.openclaw/skills/shotstack
cp "$(npm root -g)/@thenavidm/shotstack-mcp-cli/SKILL.md" ~/.openclaw/skills/shotstack/ - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.zshrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask OpenClaw to use shotstack-cli.
Running shotstack-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.openclaw\skills\shotstack" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\shotstack-mcp-cli\SKILL.md" "$HOME\.openclaw\skills\shotstack\" - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
setx SHOTSTACK_API_KEY "YOUR_API_KEY"
setx SHOTSTACK_ENV "stage" - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask OpenClaw to use shotstack-cli.
Running shotstack-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
mkdir -p ~/.openclaw/skills/shotstack
cp "$(npm root -g)/@thenavidm/shotstack-mcp-cli/SKILL.md" ~/.openclaw/skills/shotstack/ - 3
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.bashrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 5
Ask OpenClaw to use shotstack-cli.
Running shotstack-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.zshrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Antigravity to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Antigravity finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
setx SHOTSTACK_API_KEY "YOUR_API_KEY"
setx SHOTSTACK_ENV "stage" - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Antigravity to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Antigravity finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.bashrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Antigravity to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Antigravity finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.zshrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Hermes to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Hermes finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
setx SHOTSTACK_API_KEY "YOUR_API_KEY"
setx SHOTSTACK_ENV "stage" - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Hermes to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Hermes finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.bashrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
Ask Hermes to use shotstack-cli.
Running shotstack-cli on its own lists every command, so Hermes finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.zshrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
List every command, then try one.
shotstack-cli
shotstack-cli list-templates
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
setx SHOTSTACK_API_KEY "YOUR_API_KEY"
setx SHOTSTACK_ENV "stage" - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
List every command, then try one.
shotstack-cli
shotstack-cli list-templates
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/shotstack-mcp-cli@latest - 2
Save your Shotstack details, so every new session has them.
Put your own API key in place of the example, and set the environment to match it.
echo 'export SHOTSTACK_API_KEY=YOUR_API_KEY' >> ~/.bashrc
echo 'export SHOTSTACK_ENV=stage' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
shotstack-cli doctor - 4
List every command, then try one.
shotstack-cli
shotstack-cli list-templates
Needs Node 22 or newer and a Shotstack API key. New accounts get 10 free credits. Get your key in a minute.
It's free and open source. If it saves you time, star it on GitHub, so more people find it.
This free Shotstack MCP server and CLI gives your AI real access to your Shotstack account: renders, templates, AI generation, hosted files and source files. It renders videos from an edit or a template, makes images, clips and voice-overs with AI models, checks any media file, and manages the files Shotstack hosts for you.
It's one install with two ways in. Claude, Codex, Cursor or any other MCP app calls its 23 tools for you, and the same tools work as a CLI that agents like Claude Code, Codex and OpenCode run, or that you type yourself.
In this guide, I'll show you:
- What the Shotstack MCP server & CLI is, and what you can ask it
- How to install it and check that it works
- When to use the MCP server, and when the CLI
- Every tool, and how to keep your account safe
Every tool on this page comes from the server itself, and every cost was measured in Claude Code.
Key takeaways
What is the Shotstack MCP server & CLI?
The Shotstack MCP server & CLI is a free, open source program that lets AI agents make and manage videos in Shotstack for you, in two ways. The MCP server is what an AI app like Claude, Codex or Cursor connects to, through MCP (Model Context Protocol), the open standard AI apps use to call outside tools.
You ask in plain language. Your AI picks the right tool, and the server makes the call to Shotstack's own API.
The CLI is the same program as commands. shotstack-cli list-templates runs the same code your AI runs when you ask which templates you have, whether an agent like Claude Code runs it or you do.
In an AI OS, the layer that connects your AI to your context, your data and your tools, a server like this is how your AI reaches Shotstack. I explain how the parts fit together in how to build an AI operating system, and here's how I use AI myself.
What can you ask it?
Once it's set up, you ask the way you'd ask an assistant. These are real prompts it handles:
Try askingWhich AI models can I generate with, and what does each one cost?
Render my promo template with the title "Spring sale", in the sandbox first.
Is my last render done? Send me the link.
How long is the video at this link, and what size is it?
Make a 5-second clip of waves at sunset with the cheapest video model.
Delete the thumbnail and poster from yesterday's render.
The second one shows why this is useful. Your AI fills in the template and renders it in the sandbox, where renders are free, so you see it before a production render spends a credit.
It works well next to my Creatomate MCP server and Wistia MCP server, so your AI can render videos from your Creatomate templates and upload the finished videos to Wistia in the same chat. Every server I've made is on my MCP servers page.
For the videos themselves, my free video resizer and video caption generator help too.
How to install the Shotstack MCP server
Pick your app in the box at the top of this page. Each one is a single command or a pasted block, and they all run through npx, so there's nothing to install first.
Windsurf, Zed and Cline take the same server, though they don't have a tab in the box yet. Follow the box's Cursor tab, and put its block here instead:
| App | Where the block goes |
|---|---|
| Windsurf | In the Cascade panel, open the Actions menu (…) and choose Open MCP config file, then paste the block. |
| Cline | Click the MCP Servers icon in the Cline panel, open the Configure tab, click Configure MCP Servers, and paste the block. |
| Zed | Go to Settings, then AI, then MCP Servers, and choose Add Server, then Add Local Server. Enter the block's command, arguments and variables, and Zed saves them under context_servers. |
Watch out: Shotstack gives you two keys, one for the sandbox and one for production. The server uses production unless you set SHOTSTACK_ENV=stage, so the sandbox key needs that setting too.
Set up your Shotstack account
It takes a minute.
SHOTSTACK_API_KEY in the command for your app, and set SHOTSTACK_ENV to stage.Sandbox renders are free and carry a watermark. You still need at least one credit in your balance to use the sandbox, and AI generation spends credits there too. When you're ready for clean renders, switch to the production key and set SHOTSTACK_ENV to v1, or leave it out.
A credit is one minute of rendered video, and a new account gets 10 of them, valid for 30 days.
To keep the key out of your app's config, save it alone in a file only you can read, and point SHOTSTACK_TOKEN_FILE at that file's full path instead.
Check that it works
Run the doctor with --network. It checks your settings, then reads Shotstack's model list to prove the key works, without rendering anything.
npx -y @thenavidm/shotstack-mcp-cli doctor --networkWhen every line has a check mark, restart your app and ask it which templates you have. A failed key check usually means the key and SHOTSTACK_ENV don't match: the sandbox key needs stage, and the production key needs v1.
In Claude Code, /mcp also shows whether the Shotstack server is connected. It's one of the Claude Code commands worth knowing.
Use the Shotstack CLI
The CLI is the same 23 tools as commands. AI agents that run commands, like Claude Code, Codex and OpenCode, use it on their own, and you can type the same commands in a terminal or a script.
Every tool name becomes a command with dashes, so render_template runs as shotstack-cli render-template.
npm install -g @thenavidm/shotstack-mcp-cli
shotstack-cli
shotstack-cli list-models
shotstack-cli list-templates
shotstack-cli render-template --id YOUR_TEMPLATE_ID --merge '{"find":"TITLE","replace":"Spring sale"}' --confirm
shotstack-cli get-render --id YOUR_RENDER_IDThe bare shotstack-cli lists every command, shotstack-cli which <words> finds the command for a task, and shotstack-cli <command> --help shows what a command takes. Renders, AI generation, uploads, transfers and deletes need --confirm, the terminal's version of your approval.
shotstack-cli install <app> adds the server to Claude Code, Codex, Claude Desktop, Cursor, VS Code or Gemini CLI, in each app's own format.
These are the flags you'll use most:
| Flag | What it does |
|---|---|
--json | Prints JSON |
--compact | Prints the JSON on one line |
--select a,b.c | Keeps only those fields, and a dotted path goes deeper |
--agent | Machine mode: compact JSON, no prompts, and it never confirms anything |
--confirm | Lets a write that asks first go ahead |
--dry-run | Shows what a write would do, without doing it |
A script can branch on the exit code:
| Exit code | What it means |
|---|---|
| 0 | It worked |
| 1 | Something unexpected went wrong |
| 2 | The command was typed wrong, or a write needed --confirm |
| 3 | It wasn't found |
| 4 | Shotstack rejected the credentials |
| 5 | Shotstack failed or couldn't be reached |
| 7 | You hit a rate limit, so wait and try again |
| 10 | Nothing is set up yet |
MCP server or CLI: which one?
Both are the same program with the same 23 tools. The difference is when your AI pays for them, in the tokens it reads.
- MCP server
- 154,100 tokens
- CLI
- Nothing
- MCP server
- 480 tokens
- CLI
- Nothing
- MCP server
- Nothing more, or in Claude Code the tools it picks
- CLI
- 1,300 tokens, once
- MCP server
- 3,082,000 tokens
- CLI
- 1,300 tokens
- MCP server
- Yes
- CLI
- No, there's no terminal there
- MCP server
- No
- CLI
- Yes
An app that loads every tool up front sends the full list with every message, whether you mention Shotstack or not. Claude Code doesn't by default: its tool search sends only the tool names and the server's instructions, and loads a tool's full definition when your AI reaches for it.
The CLI costs nothing until Shotstack comes up. Then your agent reads its skill file once and runs the commands it needs. With the skill added, Claude Code also lists its one-line description with every message, about 60 tokens.
When the whole conversation is about Shotstack, the gap closes. Then the MCP server is the better experience, because you ask in plain language and your AI never has to look up a command.
How to spend less
In Claude Code, leave tool search on, which it is unless you've set ENABLE_TOOL_SEARCH=false.
Turn the server off when you aren't making videos. In Claude Code that's the /mcp panel, and every AI app has its own switch. SHOTSTACK_READ_ONLY=1 cuts it to the 12 reading tools.
Or install the CLI and connect the server later, on the days it earns its place. Every tool stays in reach, and the standing cost drops to nothing.
Every number here was measured on October 5, 2026 in Claude Code 2.1.286 with Claude Opus 5.5. It's the same one-line prompt with and without the server connected, once with tool search off so every tool loads, and once with Claude Code's default. The skill was measured the same way, and other apps and models count tokens a little differently.
Render, check, then keep
A render is a job. render or render_template hands Shotstack the edit and gets back an ID, and get_render shows where the job is until it's done or failed. Your AI checks that same ID again, so a slow render never turns into a second one.
AI generation works the same way. list_models shows each model and what it costs in credits, generate_asset starts the job, and get_generated_asset follows it. Give the job an idempotency key, and Shotstack won't make it twice within 24 hours, even if it's sent again.
Shotstack hosts what it makes. get_asset_by_render_id lists every file a render made, like the video, its thumbnail and its poster, and each one is deleted on its own.
To bring your own media, ingest_source has Shotstack fetch a file from a link and store it. create_upload_url_file gets a private upload link instead, and since that link works like a temporary password, the server saves it to a new private file rather than showing it to your AI.
Watch out: Shotstack counts each key's requests in one-minute windows, and renders have the tightest limit. After a rate limit error, wait for the minute to pass, and check a render before you send it again, because the first one may already be running.
Every Shotstack tool
The tables below list all 23 tools, grouped by what they're for. Of these, 12 only read, and 11 change something in your Shotstack account or spend credits.
Renders
render- What it does
- Renders an edit, a timeline of clips, text and audio, into a video, image or audio file.
- Kind
- Asks first
get_render- What it does
- Shows a render's status, and a link to its file once it's done.
- Kind
- Reads
probe_media- What it does
- Reads a media file's details, like its length, size and codecs, from its link.
- Kind
- Reads
Templates
create_template- What it does
- Saves an edit as a template you can render again.
- Kind
- Asks first
list_templates- What it does
- Lists your saved templates.
- Kind
- Reads
get_template- What it does
- Reads one template in full.
- Kind
- Reads
update_template- What it does
- Changes a saved template.
- Kind
- Asks first
delete_template- What it does
- Deletes a saved template.
- Kind
- Asks first
render_template- What it does
- Renders a template, with its merge fields filled in.
- Kind
- Asks first
AI generation
generate_asset- What it does
- Makes one image, video clip or voice-over from a text prompt with an AI model, which spends credits.
- Kind
- Asks first
get_generated_asset- What it does
- Shows an AI generation's status, and its file once it's done.
- Kind
- Reads
list_models- What it does
- Lists the AI models you can generate with, and what each one costs in credits.
- Kind
- Reads
get_model- What it does
- Reads one AI model, with the options it takes and its cost.
- Kind
- Reads
Hosted files
get_asset- What it does
- Reads one hosted file, like a video, thumbnail or poster.
- Kind
- Reads
delete_asset- What it does
- Deletes one hosted file.
- Kind
- Asks first
get_asset_by_render_id- What it does
- Lists every hosted file a render made.
- Kind
- Reads
transfer_asset- What it does
- Copies a file from a public link to one of your hosting destinations.
- Kind
- Asks first
Source files and uploads
ingest_source- What it does
- Has Shotstack fetch and store a video, image, audio file or font from a link.
- Kind
- Asks first
list_sources- What it does
- Lists the source files Shotstack has stored for you.
- Kind
- Reads
get_source- What it does
- Shows one stored source file and its status.
- Kind
- Reads
delete_source- What it does
- Deletes one stored source file.
- Kind
- Asks first
create_upload_url_file- What it does
- Gets a private upload link, and saves it to a new private file on your computer.
- Kind
- Asks first
Your accounts
list_accounts- What it does
- Lists the accounts you've set up, without their keys.
- Kind
- Reads
Is the Shotstack MCP server safe?
Renders and AI generation spend credits, and a deleted file or template is gone. So 11 tools ask first: every render, every AI generation, every upload or transfer, and every save or delete. They're the ones marked "Asks first" in the tool tables above.
Reading a render's status, a template or a model never asks, because it changes nothing.
When your AI calls one of them, the call needs a yes first. Where you use it decides who gives it:
- Claude Code (2.1.246 and later) asks you before every call, in every one of its permission modes.
- An app that can show forms asks you in a form.
- Any other app takes your AI's
confirm: trueas the yes, so tell your AI to check with you first. - An agent with no person to ask needs
SHOTSTACK_CONFIRM=model, so itsconfirm: truecounts in every app. - In a terminal, you add
--confirmto the command.
If the answer is no, nothing reaches Shotstack.
Make it read-only
Set SHOTSTACK_READ_ONLY=1 and every tool that asks first disappears from the tool list, leaving 12 reading tools.
Keep a log of every write
Set SHOTSTACK_AUDIT_LOG to a file path. The server writes one line per attempted write, allowed or blocked, with what it was about to do and who approved it.
Watch out: Template text and media details can come from other people, and one can try to give your AI orders. Treat them as data, and use SHOTSTACK_READ_ONLY=1 for an agent working on its own.
Your data
Your requests go straight to Shotstack, with no server of ours in between and no tracking. Your key stays in your app's config, your shell or your token file.
The media links in an edit go to Shotstack, which fetches them to render. The server itself never downloads a render or uploads a file from your computer.
To disconnect, remove the server from your app's config. The keys themselves are on Shotstack's API Keys page.
Connect more than one Shotstack account
Set SHOTSTACK_ACCOUNTS to a JSON list with a name, a key or a token file, and an environment, stage or v1, for each one. SHOTSTACK_DEFAULT_ACCOUNT picks the one that acts when a tool names none, and every tool takes an optional account.
That's also how to keep the sandbox and production side by side: one account called sandbox with the stage key, and one called production with the v1 key.
Shotstack MCP server settings
Every setting is an environment variable, in your app's config or your shell.
SHOTSTACK_API_KEY- Default
- none
- What it does
- Holds your API key
SHOTSTACK_TOKEN_FILE- Default
- none
- What it does
- Points at a private file holding the key, instead
SHOTSTACK_ENV- Default
v1- What it does
stageuses the sandbox, andv1is production
SHOTSTACK_ACCOUNTS- Default
- none
- What it does
- Lists several accounts, each with its environment, as JSON
SHOTSTACK_DEFAULT_ACCOUNT- Default
- the first one
- What it does
- Picks the account that acts when a tool names none
SHOTSTACK_REQUEST_TIMEOUT_MS- Default
30000- What it does
- Gives up on a Shotstack request after this many milliseconds
SHOTSTACK_MAX_RETRIES- Default
2- What it does
- Retries a rate-limited read this many times, and never a write
SHOTSTACK_MIN_REQUEST_INTERVAL_MS- Default
150- What it does
- Waits this many milliseconds between requests
SHOTSTACK_READ_ONLY- Default
- off
- What it does
1hides every tool that changes something or spends credits
SHOTSTACK_ALLOW_DESTRUCTIVE- Default
- on
- What it does
0refuses the tools that ask first
SHOTSTACK_AUDIT_LOG- Default
- none
- What it does
- Names a file that gets one line per attempted write
SHOTSTACK_SURFACE- Default
full- What it does
searchlists three tools that find, describe and run the rest
SHOTSTACK_TOOL_TIMEOUT_MS- Default
- none
- What it does
- Gives up on any tool after this many milliseconds
SHOTSTACK_CONFIRM- Default
human- What it does
modellets your AI'sconfirm: trueapprove on its own, for an agent with no person to ask
SHOTSTACK_HTTP_PORT- Default
8787- What it does
- Sets the port for
--http
SHOTSTACK_HTTP_HOST- Default
127.0.0.1- What it does
- Sets the address for
--http, and any other needs a token
SHOTSTACK_HTTP_TOKEN- Default
- none
- What it does
- Sets the bearer token every
--httprequest needs
SHOTSTACK_HTTP_ALLOWED_ORIGINS- Default
- none
- What it does
- Lists other websites allowed to call
--http, comma separated
SHOTSTACK_DEBUG- Default
- off
- What it does
1prints debug lines
Troubleshooting
Run the doctor first. It names the step that failed and the fix.
| What you see | What to do |
|---|---|
| The key check fails | The key and SHOTSTACK_ENV don't match. The sandbox key needs stage, and the production key needs v1 |
| Renders have a watermark | That's the sandbox. Use the production key with SHOTSTACK_ENV=v1 for clean renders |
| The sandbox won't render | You need at least one credit in your balance, even for free sandbox renders |
| A 429 error | Shotstack counts requests per minute. Wait for the minute to pass, and check the render before you send it again |
| A template renders with the wrong text | Each merge field's find value has to match the placeholder in the template exactly |
| The upload link file is refused | It never overwrites a file. Pick a new file name, in a folder only you can read |
| "…so it will not run without confirm: true" | That's the safety check working. Approve it when your app asks |
If the server doesn't show up in your app at all, run the command your app runs, in a terminal, and read the error.
More free tools for video
Make videos from templates in Creatomate, or host and track them in Wistia.
Free tools
FAQs about the Shotstack MCP server & CLI
Here are the questions people ask most about the Shotstack MCP server and CLI.
The Shotstack MCP server & CLI is a free, open source program that lets an AI app like Claude, Codex or Cursor make and manage videos in Shotstack.
It has 23 tools for renders, templates, AI generation, hosted files and source files, and the same tools run as a CLI that agents like Claude Code and Codex use, or that you type yourself.
An MCP server is a standard way to give an AI app real access to a tool, so it can act instead of guessing.
MCP stands for Model Context Protocol, and Claude, Codex, Cursor and many other AI apps speak it.
Every server I've made is on my MCP servers page.
The Shotstack CLI is the same program as the Shotstack MCP server, run as commands.
AI agents like Claude Code, Codex and OpenCode run them for you, and you can type them in a terminal or a script.
One npm package installs both.
Use the Shotstack MCP server in an AI app with no terminal, like Claude Desktop's chat, and the CLI in a terminal, a script or a cron job.
In an AI app that can run commands, like Claude Code, Codex or Cursor, the CLI is the lighter choice, because it costs nothing until it runs.
Yes, the Shotstack MCP server is free and open source under the AGPL-3.0-or-later license.
Production renders and AI generation spend Shotstack credits from your own plan, and a new account starts with 10 free credits.
The sandbox makes free renders with a watermark, and production makes clean renders that spend credits.
Each has its own key, and SHOTSTACK_ENV picks which one the server uses.
A Shotstack credit is one minute of rendered video, and a new account gets 10 free credits for 30 days.
AI generation costs depend on the model, and list_models shows each one's price.
Yes, generate_asset makes one image, video clip or voice-over from a text prompt, with any model list_models shows.
It spends credits, even in the sandbox, so it asks first.
Yes, set up two accounts in SHOTSTACK_ACCOUNTS, one with the stage key and one with the v1 key.
Every tool takes an optional account, so you say which one acts.
The Shotstack MCP server works with any app that speaks MCP.
That includes Claude Code, Claude Desktop, Codex, Cursor, VS Code, Windsurf, Zed, Cline, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Antigravity and Hermes.
I did.
I'm Navid Moazzez, and I made the Shotstack MCP server & CLI as one of my free tools on navid.me.
You can read more about me.
The code is on GitHub under the AGPL-3.0-or-later license, and the package is on npm.
More MCP servers & CLIs
Related free tools
Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Read the affiliate disclaimer.
On this page
The most actionable AI newsletter for founders
Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.
No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.
P.S. Sign up now to get free access to my ultimate AI tools guide for creators.
