@clipwright/mcp-server
MCP server for Clipwright: generate UGC videos from
your coding agent. A talking-head clip is rendered from a script you pass in;
the agent gets a run_id and polls until a video URL is ready.
Install
claude mcp add clipwright -e CLIPWRIGHT_API_KEY=cw_... -- npx -y -p @clipwright/mcp-server clipwright-mcp
Put your own key in place of cw_.... The command is one line and gives the
shell nothing to expand, so bash, zsh and PowerShell run it alike. It needs
Node.js 20 or newer.
Any MCP host works — the server speaks JSON-RPC over stdio.
Environment
CLIPWRIGHT_API_KEY | yes | Your cw_* token. The process exits immediately without it. |
CLIPWRIGHT_CLIENT_ID | recommended | Identifies this installation and enters the idempotency key, so two installations never collapse into one run. Left unset, the server keeps one in ~/.clipwright/client-id, which suits a single laptop. Set it yourself where a home directory is shared, cloned or read-only — containers, CI, copied images — as SKILL.md §2 explains. |
CLIPWRIGHT_API_URL | no | Defaults to the hosted API. |
Tools
list_voices — voices for voice: the presets and the catalog, with
filters by language, gender, age, use case and model, and a short audio
sample per voice. Free, spends no credits.
list_actors — ready-made faces with stable ids and verified formats. Free.
quote_ugc — estimated duration and price, plus a warning when make_ugc
with the same input would be refused for money or access. Free.
get_account — balance, debt and holds of the account. Free.
make_ugc — renders a clip; this is the call that costs money. Returns a
run_id immediately instead of blocking, because a render takes minutes.
get_run — status of a run. Free; poll it every few seconds.
upload_image — a local PNG/JPEG → signed https url to pass as image. Free;
20 per day, the url lives 24 hours. Set aspect_ratio explicitly afterwards.
Call quote_ugc before make_ugc: the quote is where the contract tells you
what it will and will not honor. Anything the API cannot deliver comes back in
warnings[] rather than being dropped silently, and unsupported fields are
rejected up front instead of being accepted and ignored.
Bumping the attempt field starts a new paid render. It is the way to retry
a failed run on purpose, not a free refresh.
SKILL.md ships inside the package with the full operating instructions, and
CHANGELOG.md next to it says what changed in each release and what was removed.