ClipUGC CLI
ClipUGC makes UGC videos for mobile apps with an AI
influencer who keeps the same face in every video, with your app's screen recording
inside the finished 9:16 video. This repo is its official CLI, local MCP server and
Claude Code plugin. Create AI influencers, generate photorealistic looks of the same
person, turn them into silent-reaction clips, and put your app recording into a
ready-to-post UGC video. Nothing renders locally.
Three ways in:
| You work in | Connect with | Plan |
|---|
| Claude.ai, ChatGPT, Claude Code, Cursor, VS Code, Gemini CLI | The hosted MCP server, https://clipugc.com/mcp. Sign in, no API key. Setup | Free plan works |
| A terminal or your own scripts | npm install -g clipugc and an API key | Professional or Business |
| Claude Code skills | /plugin marketplace add clipugc/ClipUGC-CLI (below) | Same as the CLI |
The hosted server is also the quickest free start: give it an App Store or Google Play
link and its first_videos tool makes three finished videos at no cost.
npm install -g clipugc
clipugc auth login
Requires Node.js >= 20. Create an API key in the
ClipUGC dashboard (API keys section).
API keys are available on paid plans (Professional and Business). The hosted MCP
server needs no key.
Use it with Claude Code
The fastest way in: this repo ships three Claude Code skills, so you describe what
you want instead of learning flags. clipugc drives the CLI conversationally,
ugc-director turns an app idea into a complete UGC video plan, and persona-account
runs an ongoing AI creator account.
/plugin marketplace add clipugc/ClipUGC-CLI
/plugin install clipugc@ClipUGC-CLI
Installed as a plugin, the skills are namespaced under it:
/clipugc:ugc-director make a TikTok video for my habit tracker app
/clipugc:persona-account create an AI influencer for a fitness account
/clipugc:clipugc how many credits do I have left
(Cloning the repo instead? Claude Code reads .claude/skills/ directly and the
skills are unprefixed, /ugc-director, /persona-account, /clipugc.)
See docs/skills.md for what each skill knows.
Prefer flags? Everything below works standalone, the skills just drive the same CLI.
Hosted MCP server: Claude.ai, ChatGPT, Claude Code, Cursor, VS Code, Gemini CLI
These use the hosted ClipUGC server at https://clipugc.com/mcp (39 tools, OAuth 2.1
sign-in, works on every plan including free). Nothing runs on your machine and there
is no API key to copy: the first call opens a browser so you can sign in with your
ClipUGC account.
Claude Code
claude mcp add --transport http clipugc https://clipugc.com/mcp
Claude.ai: Settings > Connectors > Add custom connector. Name it ClipUGC, paste
https://clipugc.com/mcp, and sign in when Claude asks.
ChatGPT: Settings > Apps (Connectors on older versions) > Advanced > turn on
Developer mode > Create. Name ClipUGC, the same URL, authentication OAuth. Developer
mode is on Plus and Pro and not yet offered in the EEA, Switzerland or the UK.
Step-by-step guide.
Gemini CLI
gemini extensions install https://github.com/clipugc/ClipUGC-CLI
This adds the hosted server, a short guide (GEMINI.md) and the skills.
Cursor
Once the ClipUGC plugin is listed in the Cursor Marketplace, install it there to
get the server and the skills. Until then, add the server by hand in
Settings > MCP or .cursor/mcp.json:
{
"mcpServers": {
"clipugc": {
"url": "https://clipugc.com/mcp"
}
}
}
VS Code (GitHub Copilot agent mode)
code --add-mcp '{"name":"clipugc","type":"http","url":"https://clipugc.com/mcp"}'
Or search @mcp clipugc in the Extensions view once it shows up in the gallery.
Local MCP server (API key): Claude Code, Cursor, Claude Desktop
Listed on the MCP Registry and Smithery.
The CLI is also a local MCP server with 12 tools, for when you would rather run it on
your machine with an API key than sign in to the hosted one. clipugc mcp speaks the
Model Context Protocol over stdio, so any MCP client can create characters, looks, clips and finished videos as tools,
without shelling out to the commands above.
Log in once so the server has a key (it reads the same ~/.config/clipugc/config.json
the CLI uses):
npm install -g clipugc
clipugc auth login
Claude Code
claude mcp add clipugc -- npx -y clipugc@latest mcp
@latest matters: without it npx reuses any clipugc already installed on
your machine, and a global install older than 1.2.0 has no mcp command, so
Claude Code reports "Connection closed". If you still see that, update the old
install with npm i -g clipugc@latest, or run npx -y clipugc@latest mcp once in
a terminal so the download finishes (Ctrl+C after "12 tools ready"). Do not add
it from inside a checkout of this repo: there npx resolves clipugc to the
local project instead of the npm package.
Cursor (Settings > MCP, or .cursor/mcp.json in your project)
{
"mcpServers": {
"clipugc": {
"command": "npx",
"args": ["-y", "clipugc@latest", "mcp"]
}
}
}
If you would rather not run clipugc auth login on that machine, add an env block
with CLIPUGC_API_KEY set to a key from the dashboard.
Claude Desktop
Claude Desktop installs the server as an extension, so there is no config file to edit
and no Node install needed beyond the app itself:
- Download clipugc.mcpb
from the latest GitHub release.
- Double-click the file, or open Claude Desktop, go to Settings > Extensions,
and choose Install Extension (Advanced settings on some versions).
- Paste your ClipUGC API key when asked. Create one in the
dashboard under API Keys.
The extension runs the same clipugc mcp server as above. To build the bundle
yourself, run npm run build:mcpb (see "Local development").
Prompts: make_ugc_video, new_ai_influencer, hook_ideas (ready-made starts for the
common jobs). Resources: clipugc://pipeline (the order of calls) and clipugc://pricing
(documented credit costs; get_credits has the live table).
Tools: list_characters, create_character, generate_image, list_images,
create_clip, create_motion_clip, create_scene_replace_clip, merge_ad, get_video,
download_video, get_credits, list_hooks. Arguments follow the CLI flags (--per-page becomes
per_page). Generation tools return the job id right away, like the CLI without
--wait; poll with get_video (clips and finished videos) or list_images (looks) until the
status is completed. Every tool reports its credit cost in its description, and
get_credits returns the live prices.
What it produces
One character, cast once. Every picture below is the same person, only the
setting, outfit and lighting change, because each look is generated from the
character's base image rather than from the description again:

clipugc characters create --wait \
--description "Very pretty Danish woman aged 22, light blonde fine hair to her shoulders with a middle parting, pale blue upturned eyes, heart-shaped face, porcelain cool-toned skin. Genuinely attractive Instagram-creator look, but reads as a real girl, natural skin texture with visible pores, not airbrushed." \
--scene "close selfie in a softly lit bedroom at golden hour, warm low sun through the window behind her giving a rim light on her hair, full glam makeup with smoky bronze eyeshadow and glossy nude lips, phone-camera quality with mild grain, slightly off-centre framing"
# every look after that: same face, new setting, never re-describe the person
clipugc images generate --character <id> --wait \
--scene "bathroom mirror selfie in the evening, phone visible in her hand, warm vanity lights either side of the mirror, polished makeup with glowing skin and glossy lips, phone-camera quality with grain, slightly off-centre framing"
Then any look becomes a silent reaction clip. Mouth closed throughout, lip-sync
from a still image is the giveaway that a video is AI, so the format is a held
expression plus a text hook, not talking:
clipugc videos create --image <lookId> --duration 5 --wait \
--prompt "She glances down at the phone, back up to the lens, and one corner of her mouth pulls into a smirk she is clearly trying to suppress. Her lips stay closed and together for the entire clip. She does not speak, does not mouth any words, and her mouth never opens. Natural handheld movement, she shifts slightly, hair moves. Ordinary phone-camera footage, visible grain."