Wistia MCP Server & CLI
A free, open source Wistia MCP server and CLI that lets Claude Code, Codex, Cursor and other AI agents upload and organize your videos, fix captions and read your analytics.
0.0(0 ratings)- 1
Add it with a single command in a terminal.
Put your own API token in place of the example.
claude mcp add wistia \
-e WISTIA_API_TOKEN=YOUR_API_TOKEN \
-- npx -y @thenavidm/wistia-mcp-cli@latest - 2
In Claude Code, type /mcp. Wistia should show as connected.
/mcp
- 1
Add it with a single command in a terminal.
Put your own API token in place of the example.
claude mcp add wistia -e WISTIA_API_TOKEN="YOUR_API_TOKEN" -- npx -y @thenavidm/wistia-mcp-cli@latest - 2
In Claude Code, type /mcp. Wistia should show as connected.
/mcp
- 1
Add it with a single command in a terminal.
Put your own API token in place of the example.
claude mcp add wistia \
-e WISTIA_API_TOKEN=YOUR_API_TOKEN \
-- npx -y @thenavidm/wistia-mcp-cli@latest - 2
In Claude Code, type /mcp. Wistia 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 token in place of the example.
codex mcp add wistia \
--env WISTIA_API_TOKEN=YOUR_API_TOKEN \
-- npx -y @thenavidm/wistia-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 token in place of the example.
codex mcp add wistia --env WISTIA_API_TOKEN="YOUR_API_TOKEN" -- npx -y @thenavidm/wistia-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 token in place of the example.
codex mcp add wistia \
--env WISTIA_API_TOKEN=YOUR_API_TOKEN \
-- npx -y @thenavidm/wistia-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 token in place of the example.
{
"mcpServers": {
"wistia": {
"command": "npx",
"args": ["-y", "@thenavidm/wistia-mcp-cli@latest"],
"env": {
"WISTIA_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
} - 3
Open the MCP tab again. It should show 169 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 token in place of the example.
{
"servers": {
"wistia": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/wistia-mcp-cli@latest"],
"env": {
"WISTIA_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
}
- 1
Add it with a single command in a terminal.
Put your own API token in place of the example.
copilot mcp add wistia \
--env WISTIA_API_TOKEN=YOUR_API_TOKEN \
-- npx -y @thenavidm/wistia-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get wistia
- 1
Add it with a single command in a terminal.
Put your own API token in place of the example.
copilot mcp add wistia --env WISTIA_API_TOKEN="YOUR_API_TOKEN" -- npx -y @thenavidm/wistia-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get wistia
- 1
Add it with a single command in a terminal.
Put your own API token in place of the example.
copilot mcp add wistia \
--env WISTIA_API_TOKEN=YOUR_API_TOKEN \
-- npx -y @thenavidm/wistia-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get wistia
- 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 token in place of the example.
{
"mcpServers": {
"wistia": {
"command": "npx",
"args": ["-y", "@thenavidm/wistia-mcp-cli@latest"],
"env": {
"WISTIA_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
} - 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 token in place of the example.
{
"mcpServers": {
"wistia": {
"command": "npx",
"args": ["-y", "@thenavidm/wistia-mcp-cli@latest"],
"env": {
"WISTIA_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
} - 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 token in place of the example.
{
"mcpServers": {
"wistia": {
"command": "npx",
"args": ["-y", "@thenavidm/wistia-mcp-cli@latest"],
"env": {
"WISTIA_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
} - 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 token in place of the example.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"wistia": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/wistia-mcp-cli@latest"],
"enabled": true,
"environment": {
"WISTIA_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
} - 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 token in place of the example.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"wistia": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/wistia-mcp-cli@latest"],
"enabled": true,
"environment": {
"WISTIA_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
} - 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 token in place of the example.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"wistia": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/wistia-mcp-cli@latest"],
"enabled": true,
"environment": {
"WISTIA_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
} - 3
Restart OpenCode.
- 1
Add it with a single command in a terminal.
Put your own API token in place of the example.
openclaw mcp add wistia \
--command npx \
--arg -y \
--arg @thenavidm/wistia-mcp-cli@latest \
--env WISTIA_API_TOKEN=YOUR_API_TOKEN - 2
Check that it starts and lists its tools.
openclaw mcp doctor wistia --probe
- 1
Add it with a single command in a terminal.
Put your own API token in place of the example.
openclaw mcp add wistia --command npx --arg -y --arg @thenavidm/wistia-mcp-cli@latest --env WISTIA_API_TOKEN="YOUR_API_TOKEN" - 2
Check that it starts and lists its tools.
openclaw mcp doctor wistia --probe
- 1
Add it with a single command in a terminal.
Put your own API token in place of the example.
openclaw mcp add wistia \
--command npx \
--arg -y \
--arg @thenavidm/wistia-mcp-cli@latest \
--env WISTIA_API_TOKEN=YOUR_API_TOKEN - 2
Check that it starts and lists its tools.
openclaw mcp doctor wistia --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 token in place of the example.
{
"mcpServers": {
"wistia": {
"command": "npx",
"args": ["-y", "@thenavidm/wistia-mcp-cli@latest"],
"env": {
"WISTIA_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
}
- 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 token in place of the example.
mcp_servers:
wistia:
command: "npx"
args: ["-y", "@thenavidm/wistia-mcp-cli@latest"]
env:
WISTIA_API_TOKEN: "YOUR_API_TOKEN"
- 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 token in place of the example.
mcp_servers:
wistia:
command: "npx"
args: ["-y", "@thenavidm/wistia-mcp-cli@latest"]
env:
WISTIA_API_TOKEN: "YOUR_API_TOKEN"
- 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 token in place of the example.
mcp_servers:
wistia:
command: "npx"
args: ["-y", "@thenavidm/wistia-mcp-cli@latest"]
env:
WISTIA_API_TOKEN: "YOUR_API_TOKEN"
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/wistia-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/wistia
cp "$(npm root -g)/@thenavidm/wistia-mcp-cli/SKILL.md" ~/.claude/skills/wistia/ - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask Claude Code to use wistia-cli.
Running wistia-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/wistia-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\wistia" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\wistia-mcp-cli\SKILL.md" "$HOME\.claude\skills\wistia\" - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
setx WISTIA_API_TOKEN "YOUR_API_TOKEN" - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask Claude Code to use wistia-cli.
Running wistia-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/wistia-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/wistia
cp "$(npm root -g)/@thenavidm/wistia-mcp-cli/SKILL.md" ~/.claude/skills/wistia/ - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask Claude Code to use wistia-cli.
Running wistia-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/wistia-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/wistia
cp "$(npm root -g)/@thenavidm/wistia-mcp-cli/SKILL.md" ~/.agents/skills/wistia/ - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask Codex to use wistia-cli.
Running wistia-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/wistia-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\wistia" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\wistia-mcp-cli\SKILL.md" "$HOME\.agents\skills\wistia\" - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
setx WISTIA_API_TOKEN "YOUR_API_TOKEN" - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask Codex to use wistia-cli.
Running wistia-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/wistia-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/wistia
cp "$(npm root -g)/@thenavidm/wistia-mcp-cli/SKILL.md" ~/.agents/skills/wistia/ - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask Codex to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Cursor to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
setx WISTIA_API_TOKEN "YOUR_API_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Cursor to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Cursor to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask VS Code to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
setx WISTIA_API_TOKEN "YOUR_API_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask VS Code to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask VS Code to use wistia-cli.
Running wistia-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/wistia-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/wistia
cp "$(npm root -g)/@thenavidm/wistia-mcp-cli/SKILL.md" ~/.copilot/skills/wistia/ - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask Copilot CLI to use wistia-cli.
Running wistia-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/wistia-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\wistia" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\wistia-mcp-cli\SKILL.md" "$HOME\.copilot\skills\wistia\" - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
setx WISTIA_API_TOKEN "YOUR_API_TOKEN" - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask Copilot CLI to use wistia-cli.
Running wistia-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/wistia-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/wistia
cp "$(npm root -g)/@thenavidm/wistia-mcp-cli/SKILL.md" ~/.copilot/skills/wistia/ - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask Copilot CLI to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Gemini CLI to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
setx WISTIA_API_TOKEN "YOUR_API_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Gemini CLI to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Gemini CLI to use wistia-cli.
Running wistia-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/wistia-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/wistia
cp "$(npm root -g)/@thenavidm/wistia-mcp-cli/SKILL.md" ~/.config/opencode/skills/wistia/ - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask OpenCode to use wistia-cli.
Running wistia-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/wistia-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\wistia" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\wistia-mcp-cli\SKILL.md" "$HOME\.config\opencode\skills\wistia\" - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
setx WISTIA_API_TOKEN "YOUR_API_TOKEN" - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask OpenCode to use wistia-cli.
Running wistia-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/wistia-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/wistia
cp "$(npm root -g)/@thenavidm/wistia-mcp-cli/SKILL.md" ~/.config/opencode/skills/wistia/ - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask OpenCode to use wistia-cli.
Running wistia-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/wistia-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/wistia
cp "$(npm root -g)/@thenavidm/wistia-mcp-cli/SKILL.md" ~/.openclaw/skills/wistia/ - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask OpenClaw to use wistia-cli.
Running wistia-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/wistia-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\wistia" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\wistia-mcp-cli\SKILL.md" "$HOME\.openclaw\skills\wistia\" - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
setx WISTIA_API_TOKEN "YOUR_API_TOKEN" - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask OpenClaw to use wistia-cli.
Running wistia-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/wistia-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/wistia
cp "$(npm root -g)/@thenavidm/wistia-mcp-cli/SKILL.md" ~/.openclaw/skills/wistia/ - 3
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 5
Ask OpenClaw to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Antigravity to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
setx WISTIA_API_TOKEN "YOUR_API_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Antigravity to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Antigravity to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Hermes to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
setx WISTIA_API_TOKEN "YOUR_API_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Hermes to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
Ask Hermes to use wistia-cli.
Running wistia-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/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
List every command, then try one.
wistia-cli
wistia-cli list-media
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
setx WISTIA_API_TOKEN "YOUR_API_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
List every command, then try one.
wistia-cli
wistia-cli list-media
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/wistia-mcp-cli@latest - 2
Save your Wistia details, so every new session has them.
Put your own API token in place of the example.
echo 'export WISTIA_API_TOKEN=YOUR_API_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
wistia-cli doctor - 4
List every command, then try one.
wistia-cli
wistia-cli list-media
Needs Node 22 or newer and a Wistia API token from the Account Owner. Make one 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 Wistia MCP server and CLI gives your AI real access to your Wistia account: videos, folders, captions, player settings, channels, webinars and analytics. It uploads and organizes videos, edits captions and player settings, runs channels and webinars, and reads stats and analytics for your videos and your audience.
It's one install with two ways in. Claude, Codex, Cursor or any other MCP app calls its 169 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 Wistia 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 Wistia MCP server & CLI?
The Wistia MCP server & CLI is a free, open source program that lets AI agents manage your Wistia videos 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 Wistia's own API.
The CLI is the same program as commands. wistia-cli list-media runs the same code your AI runs when you ask for your latest videos, 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 Wistia. 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 of my videos got the most plays last month?
Upload this video into my Course folder.
Find every caption that says "free trial" in my onboarding videos.
Fix the caption typo "recieve" in my welcome video.
Move these three videos into my Archive folder.
How many people registered for my webinar, and where did they come from?
The fourth one shows why this is useful. Your AI finds the exact wording in the caption track and fixes only that, so you never retype a caption file.
It works well next to my Vimeo MCP server and YouTube MCP server, so your AI can file your Vimeo back catalog into folders and manage your YouTube videos in the same chat. Every server I've made is on my MCP servers page.
For the videos themselves, my free video transcript generator and video caption generator help too.
How to install the Wistia 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: Wistia lets you copy a new token only when you create it. Copy it before you leave or refresh the page.
Set up your Wistia account
It takes a minute.
WISTIA_API_TOKEN in the command for your app.Only the Account Owner can open the API tab. If that's not you, ask the owner to make a token for you. A token can be edited or deleted on the same page later.
To keep the token out of your app's config, save it alone in a file only you can read, and point WISTIA_TOKEN_FILE at that file's full path instead.
Check that it works
Run the doctor with --network. It checks your settings, then reads your account to prove the token works. It doesn't change anything.
npx -y @thenavidm/wistia-mcp-cli doctor --networkWhen every line has a check mark, restart your app and ask it for your latest videos. If the token can't read account details, the account check fails even though narrower tools still work.
In Claude Code, /mcp also shows whether the Wistia server is connected. It's one of the Claude Code commands worth knowing.
Use the Wistia CLI
The CLI is the same 169 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 list_media runs as wistia-cli list-media.
npm install -g @thenavidm/wistia-mcp-cli
wistia-cli
wistia-cli list-folders --per-page 5
wistia-cli list-media --per-page 10
wistia-cli upload-media-file --file ~/videos/welcome.mp4 --project-id YOUR_FOLDER_ID --confirm
wistia-cli find-caption-matches --media-ids YOUR_MEDIA_ID --target-text recieveThe bare wistia-cli lists every command, wistia-cli which <words> finds the command for a task, and wistia-cli <command> --help shows what a command takes. Every upload, edit, delete, purchase and sharing change needs --confirm, the terminal's version of your approval.
wistia-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 | Wistia rejected the credentials |
| 5 | Wistia 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 169 tools. The difference is when your AI pays for them, in the tokens it reads.
- MCP server
- 147,800 tokens
- CLI
- Nothing
- MCP server
- 2,600 tokens
- CLI
- Nothing
- MCP server
- Nothing more, or in Claude Code the tools it picks
- CLI
- 1,500 tokens, once
- MCP server
- 2,955,000 tokens
- CLI
- 1,500 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 Wistia 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 Wistia 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 50 tokens.
When the whole conversation is about Wistia, 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 working on your videos. In Claude Code that's the /mcp panel, and every AI app has its own switch. WISTIA_READ_ONLY=1 cuts it to the 86 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.
Uploads, captions and paid orders
upload_media_file uploads a video from your computer, up to 250 MB, and upload_media has Wistia fetch one from a public link. Either way, Wistia keeps processing after it answers, so a new video's ID doesn't mean it's ready to play.
Caption edits are careful. find_caption_matches finds exact wording across up to 50 videos without changing anything, and edit_captions_text changes up to 20 bits of wording at once, all or nothing. It needs the caption track's current version, so an edit based on an old read is refused instead of overwriting newer changes.
Ordering captions, translations, dubs or audio descriptions can cost money, so your AI checks the video, the language and your balance first.
Deleting a video moves it to Recently Deleted for a while, and restore_deleted_media can bring it back. Folder sharing, allowed domains and share links decide who can watch, so changes to them ask first.
Watch out: Wistia allows 600 requests a minute for your whole account, across every app that uses it. A list with --all-pages counts every page, so it stops at 1,000 items unless you set more.
Every Wistia tool
The tables below list all 169 tools, grouped by what they're for. Of these, 86 only read, and 83 change something in your Wistia account or cost money.
Videos, uploads and tags
upload_media- What it does
- Uploads a video from a public link, which Wistia fetches.
- Kind
- Asks first
upload_media_file- What it does
- Uploads a video from your computer, up to 250 MB.
- Kind
- Asks first
list_review_bundles- What it does
- Lists your review bundles.
- Kind
- Reads
create_review_bundle- What it does
- Creates a review bundle.
- Kind
- Asks first
delete_review_bundle- What it does
- Deletes a review bundle.
- Kind
- Asks first
list_deleted_media- What it does
- Lists recently deleted videos.
- Kind
- Reads
restore_deleted_media- What it does
- Brings back a recently deleted video.
- Kind
- Asks first
list_media- What it does
- Lists your videos, filtered by folder, name, type or tag.
- Kind
- Reads
get_media- What it does
- Reads one video's details.
- Kind
- Reads
update_media- What it does
- Changes a video's details.
- Kind
- Asks first
delete_media- What it does
- Deletes a video, which first goes to Recently Deleted.
- Kind
- Asks first
copy_media- What it does
- Copies a video.
- Kind
- Asks first
swap_media- What it does
- Replaces one video with another and keeps the original's ID, so its embeds keep working.
- Kind
- Asks first
get_media_stats- What it does
- Shows a video's overall stats.
- Kind
- Reads
translate_media- What it does
- Translates a video's transcript.
- Kind
- Asks first
import_media_from_url- What it does
- Imports a video from a link.
- Kind
- Asks first
archive_media- What it does
- Archives a video.
- Kind
- Asks first
move_media- What it does
- Moves videos to another folder.
- Kind
- Asks first
restore_media- What it does
- Restores an archived video.
- Kind
- Asks first
bulk_copy_media- What it does
- Copies many videos at once.
- Kind
- Asks first
create_media_from_trims- What it does
- Makes a new video from trimmed parts of an existing one.
- Kind
- Asks first
list_speakers- What it does
- Lists speakers.
- Kind
- Reads
list_tags- What it does
- Lists tags.
- Kind
- Reads
create_tags- What it does
- Creates tags.
- Kind
- Asks first
delete_tag- What it does
- Deletes a tag.
- Kind
- Asks first
create_bulk_actions- What it does
- Runs up to 1,000 create, change, delete and move actions in the background.
- Kind
- Asks first
bulk_tag- What it does
- Tags many videos at once.
- Kind
- Asks first
Folders and sharing
list_folders- What it does
- Lists folders.
- Kind
- Reads
create_folder- What it does
- Creates a folder.
- Kind
- Asks first
get_folder- What it does
- Shows a folder.
- Kind
- Reads
update_folder- What it does
- Updates a folder.
- Kind
- Asks first
delete_folder- What it does
- Deletes a folder.
- Kind
- Asks first
copy_folder- What it does
- Copies a folder.
- Kind
- Asks first
list_folder_sharings- What it does
- Lists folder sharings.
- Kind
- Reads
create_folder_sharing- What it does
- Creates a folder sharing.
- Kind
- Asks first
get_folder_sharing- What it does
- Shows a folder sharing.
- Kind
- Reads
update_folder_sharing- What it does
- Updates a folder sharing.
- Kind
- Asks first
delete_folder_sharing- What it does
- Deletes a folder sharing.
- Kind
- Asks first
list_subfolders- What it does
- Lists subfolders.
- Kind
- Reads
create_subfolder- What it does
- Creates a subfolder.
- Kind
- Asks first
get_subfolder- What it does
- Shows a subfolder.
- Kind
- Reads
update_subfolder- What it does
- Updates a subfolder.
- Kind
- Asks first
delete_subfolder- What it does
- Deletes a subfolder.
- Kind
- Asks first
bulk_delete_subfolders- What it does
- Deletes many subfolders at once.
- Kind
- Asks first
Captions, translations and audio descriptions
list_captions- What it does
- Lists a video's caption tracks.
- Kind
- Reads
create_captions- What it does
- Adds a caption track from SRT text.
- Kind
- Asks first
list_all_captions- What it does
- Lists all your caption tracks.
- Kind
- Reads
find_caption_matches- What it does
- Finds exact wording in the captions of up to 50 videos, without changing them.
- Kind
- Reads
purchase_captions- What it does
- Orders professional captions, which cost money.
- Kind
- Asks first
get_captions- What it does
- Reads one caption track.
- Kind
- Reads
update_captions- What it does
- Replaces a caption track.
- Kind
- Asks first
delete_captions- What it does
- Deletes a caption track.
- Kind
- Asks first
edit_captions_text- What it does
- Changes up to 20 bits of caption wording at once, all or nothing.
- Kind
- Asks first
list_localizations- What it does
- Lists localizations.
- Kind
- Reads
create_localization- What it does
- Makes a dubbed version of a video, which costs money once your free dubs run out.
- Kind
- Asks first
get_localization- What it does
- Shows a localization.
- Kind
- Reads
delete_localization- What it does
- Deletes a localization.
- Kind
- Asks first
list_media_extended_audio_descriptions- What it does
- Lists media extended audio descriptions.
- Kind
- Reads
get_media_extended_audio_description- What it does
- Shows a media extended audio description.
- Kind
- Reads
delete_media_extended_audio_description- What it does
- Deletes a media extended audio description.
- Kind
- Asks first
order_extended_audio_description- What it does
- Orders an extended audio description, which costs money.
- Kind
- Asks first
get_order_status- What it does
- Reads an order's status.
- Kind
- Reads
create_bulk_purchase- What it does
- Places up to 1,000 orders, or one order for up to 5,000 videos, in the background.
- Kind
- Asks first
Player settings, brands and share links
get_customizations- What it does
- Reads a video's player settings.
- Kind
- Reads
create_customizations- What it does
- Sets a video's player settings.
- Kind
- Asks first
update_customizations- What it does
- Changes a video's player settings.
- Kind
- Asks first
delete_customizations- What it does
- Resets a video's player settings.
- Kind
- Asks first
get_appearance_customizations- What it does
- Reads a video's appearance settings.
- Kind
- Reads
update_appearance_customizations- What it does
- Changes a video's appearance settings.
- Kind
- Asks first
get_playback_customizations- What it does
- Reads a video's playback settings.
- Kind
- Reads
update_playback_customizations- What it does
- Changes a video's playback settings.
- Kind
- Asks first
get_thumbnail_customizations- What it does
- Reads a video's thumbnail settings.
- Kind
- Reads
update_thumbnail_customizations- What it does
- Changes a video's thumbnail settings.
- Kind
- Asks first
get_accessibility_customizations- What it does
- Reads a video's accessibility settings.
- Kind
- Reads
update_accessibility_customizations- What it does
- Changes a video's accessibility settings.
- Kind
- Asks first
get_chapters_customizations- What it does
- Reads a video's chapter settings.
- Kind
- Reads
update_chapters_customizations- What it does
- Changes a video's chapter settings.
- Kind
- Asks first
get_engagement_customizations- What it does
- Reads a video's engagement settings.
- Kind
- Reads
update_engagement_customizations- What it does
- Changes a video's engagement settings.
- Kind
- Asks first
get_related_media_customizations- What it does
- Reads a video's related videos settings.
- Kind
- Reads
update_related_media_customizations- What it does
- Changes a video's related videos settings.
- Kind
- Asks first
get_sharing_customizations- What it does
- Reads a video's sharing settings.
- Kind
- Reads
update_sharing_customizations- What it does
- Changes a video's sharing settings.
- Kind
- Asks first
get_lead_capture_customizations- What it does
- Reads a video's lead capture settings.
- Kind
- Reads
update_lead_capture_customizations- What it does
- Changes a video's lead capture settings.
- Kind
- Asks first
get_access_customizations- What it does
- Reads a video's access settings.
- Kind
- Reads
update_access_customizations- What it does
- Changes a video's access settings.
- Kind
- Asks first
resolve_share_link- What it does
- Finds what a share link points to.
- Kind
- Reads
get_share_link- What it does
- Shows a share link.
- Kind
- Reads
update_share_link- What it does
- Updates a share link.
- Kind
- Asks first
delete_share_link- What it does
- Deletes a share link.
- Kind
- Asks first
list_brands- What it does
- Lists brands.
- Kind
- Reads
create_brand- What it does
- Creates a brand.
- Kind
- Asks first
get_brand- What it does
- Shows a brand.
- Kind
- Reads
update_brand- What it does
- Updates a brand.
- Kind
- Asks first
delete_brand- What it does
- Deletes a brand.
- Kind
- Asks first
apply_brand- What it does
- Applies a brand's colors, fonts and logos to a video, folder or channel.
- Kind
- Asks first
list_allowed_domains- What it does
- Lists allowed domains.
- Kind
- Reads
create_allowed_domain- What it does
- Creates an allowed domain.
- Kind
- Asks first
get_allowed_domain- What it does
- Shows an allowed domain.
- Kind
- Reads
delete_allowed_domain- What it does
- Deletes an allowed domain.
- Kind
- Asks first
Channels
list_channels- What it does
- Lists channels.
- Kind
- Reads
create_channel- What it does
- Creates a channel.
- Kind
- Asks first
get_channel- What it does
- Shows a channel.
- Kind
- Reads
update_channel- What it does
- Updates a channel.
- Kind
- Asks first
delete_channel- What it does
- Deletes a channel.
- Kind
- Asks first
get_channel_episode- What it does
- Shows a channel episode.
- Kind
- Reads
list_channel_episodes_by_channel- What it does
- Lists channel episodes by channel.
- Kind
- Reads
create_channel_episode- What it does
- Creates a channel episode.
- Kind
- Asks first
list_channel_episodes- What it does
- Lists channel episodes.
- Kind
- Reads
update_channel_episode- What it does
- Updates a channel episode.
- Kind
- Asks first
delete_channel_episode- What it does
- Deletes a channel episode.
- Kind
- Asks first
publish_channel_episode- What it does
- Publishes a channel episode.
- Kind
- Asks first
un_publish_channel_episode- What it does
- Unpublishes a channel episode.
- Kind
- Asks first
list_channel_collaborators- What it does
- Lists channel collaborators.
- Kind
- Reads
create_channel_collaborator- What it does
- Creates a channel collaborator.
- Kind
- Asks first
delete_channel_collaborator- What it does
- Deletes a channel collaborator.
- Kind
- Asks first
Webinars
list_webinars- What it does
- Lists webinars.
- Kind
- Reads
create_webinar- What it does
- Creates a webinar.
- Kind
- Asks first
get_webinar- What it does
- Shows a webinar.
- Kind
- Reads
update_webinar- What it does
- Updates a webinar.
- Kind
- Asks first
delete_webinar- What it does
- Deletes a webinar.
- Kind
- Asks first
list_webinar_registrations- What it does
- Lists webinar registrations.
- Kind
- Reads
create_webinar_registration- What it does
- Registers someone for a webinar, which can email them.
- Kind
- Asks first
list_webinar_collaborators- What it does
- Lists webinar collaborators.
- Kind
- Reads
create_webinar_collaborator- What it does
- Creates a webinar collaborator.
- Kind
- Asks first
delete_webinar_collaborator- What it does
- Deletes a webinar collaborator.
- Kind
- Asks first
Stats and analytics
get_account_stats- What it does
- Shows current account stats.
- Kind
- Reads
get_account_stats_by_date- What it does
- Shows account stats by date.
- Kind
- Reads
get_project_stats- What it does
- Shows a folder's stats.
- Kind
- Reads
get_media_stats_stats_media- What it does
- Shows a video's stats.
- Kind
- Reads
get_media_stats_by_date- What it does
- Shows media stats by date.
- Kind
- Reads
get_media_engagement- What it does
- Shows a video's engagement.
- Kind
- Reads
list_visitors- What it does
- Lists the people who watched your videos.
- Kind
- Reads
get_visitor- What it does
- Reads one viewer.
- Kind
- Reads
list_events- What it does
- Lists viewing events.
- Kind
- Reads
get_event- What it does
- Reads one viewing event.
- Kind
- Reads
get_account_analytics- What it does
- Shows account analytics.
- Kind
- Reads
get_account_analytics_timeseries- What it does
- Shows account analytics timeseries.
- Kind
- Reads
get_account_top_content- What it does
- Shows account top content.
- Kind
- Reads
get_account_embed_locations- What it does
- Shows account embed locations.
- Kind
- Reads
find_media_by_embed_location- What it does
- Finds the videos embedded on a page.
- Kind
- Reads
get_media_analytics- What it does
- Shows media analytics.
- Kind
- Reads
get_media_analytics_timeseries- What it does
- Shows media analytics timeseries.
- Kind
- Reads
get_media_embed_locations- What it does
- Shows media embed locations.
- Kind
- Reads
get_media_embed_locations_timeseries- What it does
- Shows media embed locations timeseries.
- Kind
- Reads
get_media_traffic_breakdown- What it does
- Shows a media traffic breakdown.
- Kind
- Reads
get_media_form_conversions- What it does
- Shows media form conversions.
- Kind
- Reads
get_media_languages- What it does
- Shows media languages.
- Kind
- Reads
get_webinar_analytics- What it does
- Shows webinar analytics.
- Kind
- Reads
get_webinar_registration_timeseries- What it does
- Shows webinar registration timeseries.
- Kind
- Reads
get_webinar_traffic_breakdown- What it does
- Shows a webinar traffic breakdown.
- Kind
- Reads
get_webinar_audience- What it does
- Shows a webinar audience.
- Kind
- Reads
get_webinar_histograms- What it does
- Shows webinar histograms.
- Kind
- Reads
Your account and helpers
get_account- What it does
- Reads your account.
- Kind
- Reads
get_account_usage- What it does
- Reads account usage.
- Kind
- Reads
get_credit_balance- What it does
- Reads a credit balance.
- Kind
- Reads
get_brand_preload- What it does
- Reads the brand details Wistia found for your account's domain.
- Kind
- Reads
update_brand_preload- What it does
- Updates a brand preload.
- Kind
- Asks first
get_brand_kit_colors- What it does
- Reads brand kit colors.
- Kind
- Reads
invite_contacts- What it does
- Invites people to your account by email.
- Kind
- Asks first
dismiss_desktop_install_prompt- What it does
- Hides the desktop app's install prompt.
- Kind
- Asks first
start_account_trial- What it does
- Starts a business-tier trial on your account.
- Kind
- Asks first
get_current_token- What it does
- Reads the token you're using, to check its permissions.
- Kind
- Reads
search- What it does
- Searches your whole Wistia account.
- Kind
- Reads
resolve_resource_urls- What it does
- Finds what Wistia links point to.
- Kind
- Reads
create_expiring_access_token- What it does
- Makes a token that expires, saved to a new private file.
- Kind
- Asks first
get_job_status- What it does
- Reads a background job's status.
- Kind
- Reads
list_accounts- What it does
- Lists the accounts you've set up, without their tokens.
- Kind
- Reads
Is the Wistia MCP server safe?
Videos, captions and sharing settings are public-facing, and some orders cost money. So 83 tools ask first: every upload, edit, delete, move and purchase, and every change to sharing, channels, webinars and your account. They're the ones marked "Asks first" in the tool tables above.
Reading videos, captions and analytics never asks, and neither does finding caption wording, because none of them change anything.
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
WISTIA_CONFIRM=model, so itsconfirm: truecounts in every app. - In a terminal, you add
--confirmto the command.
If the answer is no, nothing reaches Wistia.
Make it read-only
Set WISTIA_READ_ONLY=1 and every tool that asks first disappears from the tool list, leaving 86 reading tools.
Keep a log of every write
Set WISTIA_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: Video titles, captions and viewer details can come from other people, and one can try to give your AI orders. Treat them as data, and use WISTIA_READ_ONLY=1 for an agent working on its own.
Your data
Your requests go straight to Wistia, with no server of ours in between and no tracking. Your token stays in your app's config, your shell or your token file.
Viewer stats can name individual people, so treat them as private. An upload sends only the file you pick, and a link import has Wistia fetch the link itself.
To cut access, delete the token in the API tab of Account Settings, and remove the server from your app's config.
Connect more than one Wistia account
Set WISTIA_ACCOUNTS to a JSON list with a name and a token, or a token file, for each account, and WISTIA_DEFAULT_ACCOUNT to the one that acts when a tool names none. Every tool takes an optional account.
An account never borrows another one's token. Several names for the same token still share that account's 600 requests a minute.
Wistia MCP server settings
Every setting is an environment variable, in your app's config or your shell.
WISTIA_API_TOKEN- Default
- none
- What it does
- Holds your API token
WISTIA_TOKEN_FILE- Default
- none
- What it does
- Points at a private file holding the token, instead
WISTIA_ACCOUNTS- Default
- none
- What it does
- Lists several accounts, as JSON
WISTIA_DEFAULT_ACCOUNT- Default
- the first one
- What it does
- Picks the account that acts when a tool names none
WISTIA_API_VERSION- Default
2026-09- What it does
- Sets the dated Wistia API version each request uses
WISTIA_AUTH_SCHEME- Default
Bearer- What it does
- Stays
Bearer, the only scheme Wistia accepts
WISTIA_REQUEST_TIMEOUT_MS- Default
30000- What it does
- Gives up on a Wistia request after this many milliseconds
WISTIA_MAX_RETRIES- Default
2- What it does
- Retries a rate-limited read this many times, and never a write
WISTIA_MIN_REQUEST_INTERVAL_MS- Default
150- What it does
- Waits this many milliseconds between requests
WISTIA_READ_ONLY- Default
- off
- What it does
1hides every tool that changes something
WISTIA_ALLOW_DESTRUCTIVE- Default
- on
- What it does
0refuses the tools that ask first
WISTIA_AUDIT_LOG- Default
- none
- What it does
- Names a file that gets one line per attempted write
WISTIA_SURFACE- Default
full- What it does
searchlists three tools that find, describe and run the rest
WISTIA_TOOL_TIMEOUT_MS- Default
- none
- What it does
- Gives up on any tool after this many milliseconds
WISTIA_CONFIRM- Default
human- What it does
modellets your AI'sconfirm: trueapprove on its own, for an agent with no person to ask
WISTIA_HTTP_PORT- Default
8787- What it does
- Sets the port for
--http
WISTIA_HTTP_HOST- Default
127.0.0.1- What it does
- Sets the address for
--http, and any other needs a token
WISTIA_HTTP_TOKEN- Default
- none
- What it does
- Sets the bearer token every
--httprequest needs
WISTIA_HTTP_ALLOWED_ORIGINS- Default
- none
- What it does
- Lists other websites allowed to call
--http, comma separated
WISTIA_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 |
|---|---|
| A 401 or 403 error | The token lacks that permission, or your plan doesn't include the feature. Check the token in the API tab |
| A 404 error | Check the ID. Wistia uses hashed IDs for videos and folders, and plain numbers elsewhere |
| A caption edit gets a 409 error | The captions changed since your AI read them. Read them again and redo the edit |
| A new caption track is refused | Send the SRT text as the caption file, with a three-letter language code like eng |
| A 429 error | Your account is over 600 requests a minute. Wait as Wistia says, and read fewer pages |
| An upload is refused | Pick a regular file of 250 MB or less, or upload it from a public link instead |
| "…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
Manage your Vimeo or YouTube videos too, from the same AI app.
Free tools
FAQs about the Wistia MCP server & CLI
Here are the questions people ask most about the Wistia MCP server and CLI.
The Wistia MCP server & CLI is a free, open source program that lets an AI app like Claude, Codex or Cursor manage your Wistia videos.
It has 169 tools for videos, folders, captions, player settings, channels, webinars and analytics, 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 Wistia CLI is the same program as the Wistia 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 Wistia 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 Wistia MCP server is free and open source under the AGPL-3.0-or-later license.
Wistia's API comes with your account, though some orders, like captions, translations and dubs, cost money.
Only the Account Owner can, in the API tab of Account Settings.
Anyone else needs the owner to make a token for them.
Yes, it finds the exact wording and changes only that, up to 20 bits at once, after you approve.
If the captions changed since your AI read them, the edit is refused instead of overwriting them.
Yes, you can for a while.
A deleted video goes to Recently Deleted first, and restore_deleted_media can bring it back.
Yes, the Wistia MCP server connects as many accounts as you set up in WISTIA_ACCOUNTS, each with its own token.
Every tool takes an optional account, and an account never borrows another one's token.
To disconnect the Wistia MCP server, delete its token in the API tab of Account Settings, which cuts access right away.
Then remove the server from your AI app's config.
The Wistia 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 Wistia 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.
