Skip to main content
Glama

ClipUGC CLI

Official command-line interface for ClipUGC, create AI influencers, generate photorealistic looks of the same person, turn them into silent-reaction clips, and put your app's screen recording into a ready-to-post UGC video. All from the terminal; nothing renders locally.

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).

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.

Related MCP server: Prizmad

Install in Gemini CLI, Cursor or VS Code

These use the hosted ClipUGC server at https://clipugc.com/mcp. 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.

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.

Use from Claude Code / Cursor

Listed on the MCP Registry and Smithery.

The CLI is also an MCP server. 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:

  1. Download clipugc.mcpb from the latest GitHub release.

  2. Double-click the file, or open Claude Desktop, go to Settings > Extensions, and choose Install Extension (Advanced settings on some versions).

  3. 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 her base image rather than from the description again:

Six looks of the same AI influencer, golden-hour bedroom, bathroom mirror, parked car, night bathroom, balcony at night, in bed

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."

Note the shape of that prompt: an arc in beats (glance down → back up → smirk forms), an explicit no-talking clause, and ambient motion. Ask for a state instead of a progression, "she smirks", and the face morphs. The full library of ~30 reactions across nine emotion families lives in the ugc-director skill.

Adding your screen recording and a hook to that clip is free, so the last step costs nothing and you can test as many hooks as you like.

How it works

Step

Cost

1

Cast an AI character: described in plain words; the server builds a structured appearance "DNA" and the first look

2 credits

2

Generate looks: the same face in new settings, outfits and lighting

2 credits each

3

Animate a look: a short silent reaction clip (mouth closed; lip-sync is what makes AI video look fake)

7 (5s) / 13 (10s)

4

Finish the video: your screen recording + a hook text overlay + optional music

free

Every look after the first is generated from the character's base image, so the face stays the same person across an entire campaign or grid. That consistency is the point of the product.

Full pricing: image 2 · clip 7 (5s) / 13 (10s) · motion control 3 per second of driver video, 2 on --engine wan (capped at 30s) · putting your AI influencer into your own video (videos replace) 3 per second (capped at 30s) · scene-staged clip 9 (5s) / 15 (10s) · finished video free. Charges are duration-aware and refunds return the exact amount charged. Check live values with clipugc credits.

Quickstart (plain CLI)

# 1. Cast her. Be specific, this is what decides whether she looks like a real
#    creator or like generic AI. (See the casting guide for the formula.)
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 rim light on her hair, full glam makeup with winged liner and glossy lips, natural skin texture, amateur front-camera phone quality, headroom above her head for text"

# 2. Animate the look into a 5s silent reaction.
clipugc videos create --image <lookId> --duration 5 --wait \
  --prompt "Handheld selfie framing, slight drift. Her expression gradually shifts from neutral to amazed, eyebrows rise, eyes widen, lips part slightly in a silent gasp, then she breaks into a delighted grin and holds it, looking straight into the camera. Hair moves subtly. No talking."

# 3. Add your app recording and a hook. Free, so test as many hooks as you like.
clipugc videos merge <videoId> --app-video ./screenrec.mp4 --hook "nobody talks about this app" --wait

# 4. Download the finished video by its own id (merged_video_id), not the clip id.
clipugc finished download <videoId> -o ugc-video.mp4

Add --json to any command for machine-readable output, and --wait to any generation command to poll with a spinner until it completes.

Example prompts

The prompt is the product. Below is one of each kind; the full libraries are in docs/casting.md (9 nationalities) and the ugc-director skill (~30 reactions across 9 emotion families).

Casting: concrete features → an explicit attractiveness claim → directed makeup and lighting → a realism anchor. All four parts, or she comes out looking like AI:

clipugc characters create --wait \
  --description "Very pretty Danish woman aged 22, light blonde fine hair to her shoulders with a middle parting and natural movement, pale blue upturned eyes, heart-shaped face, porcelain cool-toned skin, soft pink lips, gentle jawline. Calm, faintly teasing expression. 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 winged liner, long lashes and glossy lips, natural skin texture, amateur front-camera phone quality, headroom above her head for text"
clipugc characters create --wait \
  --description "Very pretty Russian woman aged 22 from Moscow, ash-blonde straight hair below her shoulders with a middle parting, cool grey-blue almond eyes set wide apart, high broad cheekbones, straight narrow nose, fair cool-toned skin, medium lips with a defined cupid's bow, fine straight brows. Reserved, slightly aloof expression that warms when she smiles. Strikingly attractive Instagram-creator look, yet unmistakably a real person, natural skin texture with visible pores, not airbrushed." \
  --scene "close selfie in a softly lit bedroom at golden hour, warm low sun behind her giving a rim light on her hair, soft glam makeup with winged liner and a nude glossy lip, natural skin texture, amateur front-camera phone quality, headroom above her head for text"
clipugc characters create --wait \
  --description "Very pretty Ukrainian woman aged 21 from Kyiv, honey-brown hair with a soft natural wave past her shoulders, warm green eyes with a gentle upturn, soft oval face with a rounded chin, light golden-toned skin, full lips, softly arched brows, a small mole above her lip. Warm, open, easy-smiling energy. Genuinely attractive Instagram-creator look that reads as a real girl, natural skin texture with visible pores, not airbrushed." \
  --scene "front-camera phone selfie by a large window in a bright apartment, soft diffused daylight on her face, plants blurred behind, everyday makeup with fluffy brows and a glossy lip, natural skin texture, amateur phone quality, headroom above the head for text"

Looks: never re-describe the person; the base image carries the face. Change only the setting, outfit and light:

clipugc images generate --character <id> --wait \
  --scene "mirror selfie in a bathroom in the evening, phone visible in her hand, warm vanity lights either side of the mirror, polished makeup with glowing skin and blush, natural skin texture, amateur phone quality, headroom above the head for text"

clipugc images generate --character <id> --wait \
  --scene "sitting in the driver's seat of a parked car in daylight, seatbelt on, daylight through the windscreen, natural skin texture, amateur phone quality, headroom above the head for text"

Reactions: an arc in beats, a held ending, ambient motion, and an explicit no-talking clause every time:

Handheld selfie framing with tiny natural wobble. She looks directly into the camera, one eyebrow raises slightly, a knowing smirk slowly spreads across her face, and she nods slowly twice, lips closed, holding eye contact the entire time. Hair moves subtly. No talking, mouth stays closed.
Handheld selfie framing, slight drift. Her expression gradually shifts from neutral to amazed, eyebrows rise, eyes widen, lips part slightly in a silent gasp, then she breaks into a delighted grin and holds it, looking straight into the camera. Hair moves subtly. No talking.
Nearly static selfie framing with subtle handheld drift. She rests her cheek against her palm, elbow anchored, eyes softening as a slow warm closed-mouth smile spreads, gaze drifting slightly off camera then returning to the lens, holding it. Hair moves subtly. No talking.
Handheld selfie framing, slight wobble. She exhales through her nose, shakes her head slowly with a rueful closed-mouth smile, briefly glances up at the ceiling, then back into the camera with an amused resigned look, holding it. Hair follows the motion naturally. No talking.

Hooks: the text burned over the clip. A new hook on the same clip is free, so ship 2-3 variants of every video and let the platform pick:

nobody talks about this app
why did nobody tell me
I stopped paying for 4 apps
POV: you finally organised your week

Documentation

Guide

What's in it

Casting prompts

The four-part formula behind a good-looking influencer, plus ready-made castings, Scandinavian, Californian, Mediterranean, Korean, Russian, Ukrainian, Polish, Moldovan, Czech

Promoting your app

The end-to-end UGC video walkthrough, hook A/B testing, and who to cast for which app category

Command reference

Every command and flag, with credit costs

Configuration

Config file, environment variables, exit codes

Claude Code skills

Drive all of this in natural language instead of by flag

Local development

npm ci
npm run build     # compile TypeScript to dist/
npm test          # run the vitest suite
npm run dev       # run from source (tsx src/index.ts)
npm run build:mcpb  # build the Claude Desktop extension: dist-mcpb/clipugc.mcpb
                    # also writes dist-mcpb/clipugc-smithery.mcpb for `smithery mcp publish`

manifest.json and icon.png at the repo root describe the Claude Desktop extension. The build script stages dist/, package.json and a production-only node_modules/ in dist-mcpb/stage/, validates the manifest and packs the bundle. Its version, name and tool list must match package.json and the MCP server; the tests check that.

Privacy Policy

This CLI and the Claude Desktop extension do not collect anything themselves. There is no analytics, no telemetry and no crash reporting in the code.

What leaves your machine: your prompts and tool arguments, the files you choose to upload (photos, app screen recordings, driver videos) and your API key. They are sent only to clipugc.com over HTTPS, and only to run the request you made. The API key is stored in ~/.config/clipugc/config.json (CLI) or in Claude Desktop's extension settings, and is never sent anywhere else.

How the ClipUGC service stores and handles that data, including retention and the AI providers it uses to render videos, is described in the ClipUGC privacy policy: https://clipugc.com/privacy-policy?utm_source=github-readme&utm_medium=integration&utm_campaign=agent-directories.

Questions or deletion requests: clipugc@gmail.com.

License

MIT

Available Tools

12 tools
create_characterCreate an AI characterAInspect

Create a new AI character from a plain-text description. Same as clipugc characters create. The server extracts the appearance DNA and generates the first look automatically (2 credits; confirm with get_credits). Be specific: nationality, age, hair, eyes, face shape, skin, style, and a realism anchor such as "natural skin texture, not airbrushed". Characters are public by default; set private=true to opt out. make_video=true also stages the first clip (extra clip cost). Returns the character with first_look_id. Looks generate in the background. Poll list_images with the same character id every 5 to 10 seconds until each new look has status "completed" (or "failed"), then pass the look id to create_clip. Advanced: pass name (2-120 chars) plus optional age, gender, dna_json instead of description for a structured create.

ParametersJSON Schema
NameRequiredDescriptionDefault
ageNo[advanced] Age 18-99 (same as --age).
nameNo[advanced] Full name, 2-120 chars, for the structured path without a description (same as --name).
sceneNoOptional scene/pose for the first look, up to 600 chars (same as --scene).
genderNo[advanced] Gender, e.g. male, female, other (same as --gender).
privateNoKeep the character private (same as --private). Default: public.
dna_jsonNo[advanced] Appearance DNA fields as an inline JSON object string or a JSON file path (same as --dna-json).
make_videoNoAlso stage the character's first video clip (same as --make-video).
descriptionNoPlain-words description of the person, 10-1000 chars (same as --description). Preferred path.
inspirationNoOptional local file paths of up to 6 inspiration images (same as --inspiration).
motion_promptNoMotion prompt for that first clip; requires make_video (same as --motion-prompt).

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the sparse annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false). Discloses the 2-credit cost, public-by-default privacy with private=true opt-out, background/non-blocking generation with a required polling cadence, the extra cost of make_video, and the return shape (character with first_look_id). No annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Relatively long, but every sentence carries operational weight: cost, privacy, polling cadence, terminal statuses, and downstream routing. The core purpose is front-loaded in the first two sentences, prompting guidance sits in the middle, and advanced-path details are deferred to the end.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no output schema and two usage paths, this covers the essentials: return value, async behavior, polling cadence, terminal statuses, cost, privacy, and the downstream dependency on create_clip. Minor gaps: no failure-mode handling (insufficient credits, what to do on 'failed'), and no statement on whether description and dna_json can be combined.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds value by grouping the 10 parameters into two coherent paths (plain-text description preferred vs structured name+age/gender/dna_json) and by giving content guidance for the description field (nationality, age, hair, eyes, face shape, skin, style, realism anchor). It does not clarify edge interactions such as what happens if both description and dna_json are supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Create a new AI character from a plain-text description'), names the input format, and describes the automatic first-look generation, distinguishing it from siblings like generate_image and create_clip. The pipeline context (look id feeds create_clip) makes the tool's role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit workflow routing: confirm credits with get_credits, poll list_images every 5-10 seconds, pass the completed look id to create_clip. It also delineates the simple description path from the advanced structured path. However, it never states when not to use this tool (e.g., if only a standalone image is needed, generate_image would be the alternative), so it stops short of a full when/when-not contrast.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_clipCreate a video clip from a lookAInspect

Animate a character look (or your own photo) into a short video clip. Same as clipugc videos create. Costs 7 credits for 5 seconds or 13 for 10 seconds; adding scene makes it a scene-staged clip (9 at 5s, 15 at 10s). Confirm with get_credits first. Prefer a silent reaction prompt (mouth closed, no talking, an arc in beats, ambient motion): lip-sync from a still image is what makes AI video look fake. Provide exactly one of image or photo. Returns the clip id and status. Generation runs in the background. Poll get_video with {"id": , "kind": "clip"} every 5 to 10 seconds until status is "completed" or "failed", then call download_video.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageNoId of a generated character look (same as --image).
photoNoLocal path to your own photo, png/jpg/jpeg/webp; uploaded first (same as --photo).
sceneNoExtra scene description, max 600 chars; makes it a scene-staged clip (same as --scene).
promptNoWhat the character does, max 1500 chars (same as --prompt).
durationNo5 or 10 seconds, default 5 (same as --duration).
keep_soundNoKeep the original sound (same as --keep-sound).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses important behavioral traits: it costs credits, generation runs in the background, it returns a clip id and status, and it requires polling. It also explains the practical downside of lip-sync from still images, which helps set expectations. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: purpose, cost, prompt guidance, input constraint, return value, and follow-up polling. The most important operational facts are front-loaded, and no filler or redundancy is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still explains the return value ('Returns the clip id and status') and the full post-call workflow through get_video and download_video. It covers prerequisites, cost, input requirements, and background behavior, making it sufficiently complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is already strong. The description adds meaningfully beyond the schema: exact credit costs, the constraint to provide exactly one of image/photo, the scene-staged distinction, and prompt guidance for natural-looking video. This significantly improves parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Animate a character look (or your own photo) into a short video clip.' This is a specific verb and resource, and the title reinforces it. However, it does not explicitly distinguish this from the sibling create_motion_clip, leaving some potential ambiguity about which video-creation tool to choose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong practical context: check get_credits first, provide exactly one of image or photo, prefer silent reaction prompts for realistic results, poll get_video, then call download_video. It does not explicitly state when not to use this tool versus alternatives like create_motion_clip, so it stops short of a full when/when-not set of exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_motion_clipCreate a motion-control clipAInspect

Animate a character look (or your own photo) by copying the motion of a driver video. Same as clipugc videos motion. Two engines: kling (default, 3 credits per second of driver video, reads the prompt) or wan (2 credits per second, keeps the look's own background, ignores the prompt, resolution 480p, 580p or 720p). Rounded up, capped at 30 seconds (confirm with get_credits). The driver must be mp4/mov, at most 50 MB and 30 seconds; it is uploaded first. Provide exactly one of image or photo. Returns the clip id and status. Generation runs in the background. Poll get_video with {"id": , "kind": "clip"} every 5 to 10 seconds until status is "completed" or "failed", then call download_video.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageNoId of a generated character look (same as --image).
photoNoLocal path to your own photo, png/jpg/jpeg/webp; uploaded first (same as --photo).
driverYesLocal path of the driver video, mp4/mov, max 50 MB and 30s (same as --driver).
engineNokling (default) or wan, the cheaper engine (same as --engine).
promptNoWhat the character does, max 1500 chars (same as --prompt).
keep_soundNoKeep the driver video's original sound (same as --keep-sound).
resolutionNowan only: 480p, 580p or 720p, default 720p (same as --resolution).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnly=false, openWorld=true, destructive=false) by disclosing credit pricing per engine, the 30s cap with a get_credits confirmation step, driver file constraints (mp4/mov, 50 MB, 30s, uploaded first), background/async execution, and a concrete polling interval and terminal statuses.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and the remaining sentences each carry operational payload (costs, limits, workflow). It is dense and slightly long, and the 'Same as `clipugc videos motion`' CLI mapping is marginal, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still states the return shape ('clip id and status') and the complete follow-up path via get_video and download_video. For a 7-parameter async generation tool, nothing an agent needs to invoke and follow through is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds real value the schema lacks: the image/photo mutual-exclusion rule ('exactly one of'), that prompt is only read by kling, that resolution is wan-only with a 720p default, and the credit cost differences between engines.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Animate a character look ... by copying the motion of a driver video') and distinguishes itself from sibling clip creators like create_clip and create_scene_replace_clip by naming the motion-copy mechanism and the two supported source types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit operating conditions: exactly one of image or photo, engine selection tradeoffs (kling reads prompt, wan keeps background/ignores prompt), and a full post-call workflow (poll get_video, then download_video). It does not explicitly contrast when to choose this tool over the other clip-creation siblings, which keeps it below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_scene_replace_clipPut a character into your own videoAInspect

Put an AI influencer into a video the user filmed or holds the rights to: the character takes the place of the person in it, in that video's own room, light and camera, and the clip carries a visible "AI generated" label. Same as clipugc videos replace. Needs a look of a character designed in ClipUGC (not the user's own photo) and a local video file, mp4/mov, at most 50 MB and 30 seconds; it is uploaded first. Costs 3 credits per second of the video, rounded up, capped at 30 seconds (confirm with get_credits). Rendering takes several minutes. Returns the clip id and status. Generation runs in the background. Poll get_video with {"id": , "kind": "clip"} every 5 to 10 seconds until status is "completed" or "failed", then call download_video.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYesId of a generated character look (same as --image).
driverYesLocal path of the user's own video, mp4/mov, max 50 MB and 30s (same as --driver).
keep_soundNoKeep the video's original sound (same as --keep-sound).
resolutionNo480p, 580p or 720p, default 720p (same as --resolution).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safe-mutation profile (readOnly=false, destructive=false, openWorld=true). The description adds substantial behavioral context beyond that: cost model (3 credits/second, rounded up, capped at 30s), several-minute render time, background execution, a visible 'AI generated' label burned into output, and file size/duration limits. These are exactly the facts an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph that is well front-loaded: the operation and its visual semantics come first, then requirements, then cost, then the polling workflow. It is long, and the CLI alias and the schema-duplicated mp4/50MB/30s constraints are slightly redundant, but every sentence carries operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still covers the return value (clip id and status), the asynchronous nature of the call, and the complete completion-detection loop. For a 4-parameter, asynchronous, credit-consuming generation tool, nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: 'image' must be a designed character look rather than a user photo, and 'driver' is a local file that gets uploaded first. keep_sound and resolution are left to the schema, which already documents them adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('put an AI influencer into a video... the character takes the place of the person in it') with explicit scope constraints and a direct mapping to the CLI equivalent `clipugc videos replace`. It is clearly distinguishable from siblings like create_motion_clip or merge_ad, which involve different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states prerequisites (a character look designed in ClipUGC, not the user's own photo; a local mp4/mov file), the upload-first requirement, and the exact follow-up workflow (poll get_video every 5-10s, then download_video). It also routes credit checks to get_credits. This is about as complete as usage guidance gets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_videoDownload a clip or finished videoA
Idempotent
Inspect

Download a completed clip (kind "clip", default; same as clipugc videos download <id>) or a completed finished video (kind "finished"; same as clipugc finished download <videoId>) to a local mp4 file. Pass an absolute output path; missing parent directories are created. Costs no credits. Fails if the video has not completed yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClip or finished video id, as returned by other tools (numbers are fine as strings).
kindNo"clip" (default) for a clip id, "finished" for a finished video id (merged_video_id).
outputNoDestination file path (same as --output). Default: clipugc-video-<id>.mp4 or clipugc-finished-<id>.mp4 in the server's working directory.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-read-only, idempotent, non-destructive, open-world operation; the description adds genuinely new context beyond them — file-system side effects (missing parent directories are created), the mp4 output form, zero credit cost, and the precondition that the video must have completed. It omits anything about overwrite behavior when the destination file already exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the clip/finished distinction and ending on the precondition. The parenthetical CLI mappings add length for marginal benefit to an agent, but nothing is repetitive or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still tells the agent the result lands in a local mp4 file and defines the default filename, which covers the practical return expectation. Minor gaps remain around what is reported back on success and behavior on conflicting destinations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaning the schema does not: the output path must be absolute, and the id is the same identifier returned by other tools. The `kind` enum semantics (clip vs finished vs ad, and which id type each expects) are also reinforced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Download a completed clip ... or a completed finished video") and disambiguates the two variants via the `kind` parameter, even mapping each to its CLI command. It does not, however, distinguish itself from the sibling `get_video`, so an agent must infer that this writes a file while get_video likely returns metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: default is `kind "clip"` for clip ids, `"finished"` for a merged_video_id, and it notes the tool fails if the video has not completed yet. No exclusions or named alternatives (e.g. use get_video first to check status) are offered, so it stops short of explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_imageGenerate character looksAInspect

Generate one or more new looks (reference images) of an existing character. Same as clipugc images generate. Every look is generated from the character's base image, so the face stays the same person: only describe the new setting, outfit and light in scene, never the person again. Costs 2 credits per shot (confirm with get_credits). Returns the created image ids. Looks generate in the background. Poll list_images with the same character id every 5 to 10 seconds until each new look has status "completed" (or "failed"), then pass the look id to create_clip.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneNoScene prompt, max 600 chars (same as --scene).
shotsNoComma-separated shot types: frontal, three_quarter, profile, back (same as --shots). Default "frontal".
templateNoTemplate (same as --template). Omit to let the server pick: scene_recreation when scene is set, else model_digitals.
characterYesCharacter id, as returned by other tools (numbers are fine as strings).
resolutionNoResolution (same as --resolution). Default 2K.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses cost, asynchronous background generation, expected polling cadence, success/failure statuses, and that results are image IDs. These are exactly the behaviors not visible in the annotations or schema, and nothing contradicts the annotation hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five dense sentences with a clear order: purpose, alias, generation constraint, cost, output, and polling workflow. Every sentence contributes information not otherwise available in structured fields, and the key purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description explains return values (image IDs) and the full lifecycle: trigger, poll for terminal status, and continue into create_clip. It is complete enough for an agent to invoke correctly and integrate with siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics for scene (describe only setting, outfit, light; never the person again) and shots (cost is per shot). It does not over-repeat parameter names and leaves schema definitions to carry enums and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: generate new looks/reference images of an existing character. It also differentiates from character creation by emphasizing the character already exists, and the downstream reference to create_clip further positions it in the workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly establishes when to use the tool (produce new looks for an existing character), how to budget (2 credits per shot, confirm with get_credits), and how to follow up (poll list_images, then pass IDs to create_clip). It lacks an explicit when-not-to-use statement naming sibling alternatives, so it doesn't quite reach the top bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_creditsGet credit balance and costsA
Read-only
Inspect

Return the authenticated user's credit balance and the live per-action credit costs (image, clip, clip_10s, scene_staged, motion_per_second, motion_wan_per_second, scene_replace_per_second, merge). Same as clipugc credits. Call it before any generation tool so you can tell the user the cost and stop early when the balance is too low. Costs no credits.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds two nontrivial traits beyond that: the call is free ('Costs no credits') and it returns live cost values that are subject to change, which matters for pre-generation budgeting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the return contents, then the usage rule, then the cost note. The parenthetical enumeration of eight cost keys is long but earns its place because no output schema exists to document them.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must explain what comes back, and it does: balance plus a named list of per-action costs. Auth scope, cost, and pre-call timing are all covered, so an agent can call this correctly with no further context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is nothing parameter-level to compensate for. The description instead documents the shape of the response payload, which is a bonus rather than a substitute.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource: 'Return the authenticated user's credit balance and the live per-action credit costs'. It enumerates the exact cost keys returned and names the CLI equivalent, so an agent distinguishes this instantly from the generation siblings like create_clip or generate_image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use with a rationale: 'Call it before any generation tool so you can tell the user the cost and stop early when the balance is too low.' It also clarifies the inverse condition (costs no credits), leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_videoGet clip or finished video statusA
Read-only
Inspect

Get the current status of a clip (kind "clip", default; same as clipugc videos status <id>) or of a finished video (kind "finished"; same as clipugc finished show <videoId>). This is the poll tool for create_clip, create_motion_clip and merge_ad. Status is pending, processing, completed or failed. A clip record also carries merge_status and merged_video_id once a finished video was made from it. Costs no credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClip or finished video id, as returned by other tools (numbers are fine as strings).
kindNo"clip" (default) for a clip id, "finished" for a finished video id (merged_video_id).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare that this is a read-only operation, so the description carries real weight by disclosing the status state machine (pending/processing/completed/failed), the presence of merge_status and merged_video_id on clip records, and that the call costs no credits. It stops short of timing/backoff guidance for polling, which keeps it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The primary purpose and mode split are front-loaded in the first sentence, followed by the polling role and return states. It is information-dense but every sentence contributes; the inline CLI command references add length without adding much for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return semantics that matter — the status enum, the merge fields, and the zero-cost guarantee — plus the polling relationship to three creator tools. An agent has everything needed to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds meaning on top: it states that kind defaults to "clip" and that "finished" expects the merged_video_id from a clip record. The enum value "ad" is left unexplained in both schema and description, which is the only gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource, and splits the resource into two distinct modes (clip vs finished video) with their CLI equivalents. It explicitly identifies itself as the poll tool for create_clip, create_motion_clip and merge_ad, so an agent can place it precisely among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly says when to reach for it: polling the status of ids returned by create_clip, create_motion_clip and merge_ad. It gives no explicit "do not use for X" exclusion (e.g., how it differs from download_video or list_* tools), but the usage context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_charactersList AI charactersA
Read-only
Inspect

List ClipUGC AI characters (AI influencers). Same as clipugc characters list. scope "mine" (default) lists the authenticated user's own characters, "discover" the public feed, "feed" own characters first then public ones. Returns items with id, display_name, age, gender, is_public, status, plus pagination. Costs no credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (same as --page).
scopeNoWhich list: mine (default), discover, or feed.
searchNoSearch by name (same as --search).
per_pageNoResults per page, max 50 (same as --per-page).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals a safe read operation, and the description adds useful behavioral details: it costs no credits, supports three different listing modes, and returns items with specified fields plus pagination. This goes beyond the annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. The primary purpose is front-loaded, followed by scope semantics, return shape, and cost. Each sentence contributes information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with no required parameters, the description covers the available scopes, the default behavior, return fields, pagination, and credit cost. Since there is no output schema, the enumerated return fields are especially valuable and sufficient for an agent to interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all four parameters, so the baseline is 3. The description adds meaningful semantics beyond the schema by explaining what each scope value returns, which is the most important parameter behavior. Other parameters like page and per_page remain adequately covered by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'List ClipUGC AI characters (AI influencers).' It also explains the scope variants and notes the CLI equivalence, making the tool's purpose unambiguous and distinct from sibling tools like list_images.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for each scope value ('mine' lists own characters, 'discover' lists the public feed, 'feed' prioritizes own characters). It does not explicitly name alternative tools or state when not to use this tool, but the scope guidance makes usage conditions clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_hooksSuggest hook textsA
Read-only
Inspect

Get AI-suggested hook texts (the short attention-grabbing line burned over a UGC video). Same as clipugc hooks suggest. Pass context describing the app for tailored hooks. Pick one (max 150 chars) and pass it as hook to merge_ad. Costs no credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNoDescribe the app, e.g. "my app is a habit tracker" (same as --context).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavioral facts the annotations don't: the call costs no credits and the returned hook is capped at 150 characters. It stops short of describing how many hooks come back or their ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose, then the equivalence to the CLI command, then the usage chain and cost. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-param, no-output-schema tool, the description covers what is returned (hook texts, 150-char limit), that it's free, and how to consume the result. Missing only the cardinality/shape of the returned list, which an output schema would normally supply.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one optional parameter exists and schema description coverage is 100%, so the schema already documents `context` fully. The description's 'Pass context describing the app for tailored hooks' explains the payoff of providing it, which is a mild addition beyond the schema's example, but nothing about format or length limits is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get AI-suggested hook texts') and parenthetically defines what a hook is, so an agent unfamiliar with the domain can still tell this apart from siblings like list_images or list_characters. It also ties the tool to a concrete downstream artifact (the line burned over a UGC video).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear when-to-use path: pass context to get tailored hooks, then pick one and hand it to merge_ad as the `hook` argument. That routes the agent through the intended workflow, though it doesn't state when this tool should NOT be used (e.g. if an existing hook is already chosen).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_imagesList character looksA
Read-only
Inspect

List the looks (reference images) of a character with id, status (pending, processing, completed, failed), scene_prompt and image url when ready. Same as clipugc images list --character <id>. Also the poll call for generate_image and create_character. Costs no credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
characterYesCharacter id, as returned by other tools (numbers are fine as strings).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint and openWorldHint; the description adds meaningful behavioral detail: statuses to expect, image URL availability upon completion, CLI equivalence, and zero credit cost. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and efficient, with every sentence adding useful information: what is returned, CLI equivalence, polling role, and cost. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read-only tool, the description fully covers purpose, usage context, output details, and cost. The readOnlyHint annotation confirms safety, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single parameter 'character' is already documented as the character id. The description does not add significant new meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool lists character looks/reference images with specific fields (id, status, scene_prompt, image URL) and identifies its role as the poll call for generate_image and create_character. This distinguishes it from siblings like list_characters and generate_image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly positions the tool as the polling mechanism for generate_image and create_character and notes it costs no credits. It does not state when not to use it, but the intended usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

merge_adTurn a clip into a finished UGC videoAInspect

Put an app screen recording and a hook text overlay (plus optional background music) into a completed clip to make the finished UGC video for the app. Same as clipugc videos merge <clipId>. The clip must have status "completed" (check with get_video). This step is free at the time of writing; the live cost is the "merge" entry of get_credits. Files are uploaded first. Returns merged_video_id: the finished video id, which is a different id space from the clip id. The finished video renders in the background. Poll get_video with {"id": , "kind": "finished"} every 5 to 10 seconds until status is "completed" or "failed", then call download_video with kind "finished".

ParametersJSON Schema
NameRequiredDescriptionDefault
hookYesHook text overlaid on the video, max 150 chars (same as --hook).
musicNoLocal path of background music, mp3/wav/m4a (same as --music).
videoYesClip (character video) id, as returned by other tools (numbers are fine as strings).
app_videoYesLocal path of the app screen recording, mp4/mov (same as --app-video).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description goes well beyond that by disclosing asynchronous background rendering, the required polling cadence (every 5-10 seconds until "completed" or "failed"), the cost gate, and the id-space caveat. These are exactly the behavioral traits annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then proceeds through prerequisite, cost, ordering, and post-call workflow in a logical sequence with no filler clauses. It is on the longer side and the polling instructions read slightly like a runbook, but every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the full burden and does: it names the returned field (merged_video_id), explains that rendering is async, and prescribes how to poll and download. Nothing an agent needs to invoke and correctly follow through on this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, giving a baseline of 3. The description adds meaning on top: it maps inputs to concepts (clip id vs. app screen recording vs. hook text vs. optional music) and, critically, warns that the returned merged_video_id lives in a different id space than the clip id passed in.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-and-resource: it merges an app screen recording plus a hook overlay (and optional music) into a finished UGC video, and even anchors it to the CLI equivalent `clipugc videos merge <clipId>`. An agent can distinguish it cleanly from siblings like create_clip, create_motion_clip, get_video, and download_video.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the precondition (clip must have status "completed", verify with get_video), the cost situation (free at time of writing, check the "merge" entry of get_credits), the fixed ordering (files are uploaded first), and the follow-up tools (poll get_video with kind "finished", then download_video with kind "finished"). When-to-use and what-to-do-next are both fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv1.4.0
    • Changedcreate_motion_clip2 fields changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "description": "kling (default) or wan, the cheaper engine (same as --engine).",
        +  "enum": [
        +    "kling",
        +    "wan"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / resolution
        Added value: +{
        +  "description": "wan only: 480p, 580p or 720p, default 720p (same as --resolution).",
        +  "enum": [
        +    "480p",
        +    "580p",
        +    "720p"
        +  ],
        +  "type": "string"
        +}
    • Addedcreate_scene_replace_clip
    • Changeddownload_video4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Clip or ad id, as returned by other tools (numbers are fine as strings)."New value: +"Clip or finished video id, as returned by other tools (numbers are fine as strings)."
      • changedInput schema / properties / kind / description
        Previous value: -"\"clip\" (default) for a character video id, \"ad\" for a merged_video_id."New value: +"\"clip\" (default) for a clip id, \"finished\" for a finished video id (merged_video_id)."
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "clip",
        -  "ad"
        -]New value: +[
        +  "clip",
        +  "finished",
        +  "ad"
        +]
      • changedInput schema / properties / output / description
        Previous value: -"Destination file path (same as --output). Default: clipugc-video-<id>.mp4 or clipugc-ad-<id>.mp4 in the server's working directory."New value: +"Destination file path (same as --output). Default: clipugc-video-<id>.mp4 or clipugc-finished-<id>.mp4 in the server's working directory."
    • Changedget_video3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Clip or ad id, as returned by other tools (numbers are fine as strings)."New value: +"Clip or finished video id, as returned by other tools (numbers are fine as strings)."
      • changedInput schema / properties / kind / description
        Previous value: -"\"clip\" (default) for a character video id, \"ad\" for a merged_video_id."New value: +"\"clip\" (default) for a clip id, \"finished\" for a finished video id (merged_video_id)."
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "clip",
        -  "ad"
        -]New value: +[
        +  "clip",
        +  "finished",
        +  "ad"
        +]
  2. 11 tool updatesv1.0.0
    • First observedcreate_character
    • First observedcreate_clip
    • First observedcreate_motion_clip
    • First observeddownload_video
    • First observedgenerate_image
    • First observedget_credits
    • First observedget_video
    • First observedlist_characters
    • First observedlist_hooks
    • First observedlist_images
    • First observedmerge_ad

TDQS

A4.4/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but create_clip and create_motion_clip both animate a character look or photo into video, which could cause initial confusion. The descriptions clarify that create_motion_clip requires a driver video and copies its motion, while create_clip generates from a prompt, so boundaries are mostly clear.

Naming Consistency5/5

All tool names use snake_case with a consistent verb_noun pattern (e.g., create_clip, get_video, list_characters, download_video). Multi-word variants like create_motion_clip and create_scene_replace_clip still follow the same predictable structure.

Tool Count5/5

With 12 tools, the server is well-scoped for a UGC video generation pipeline. Each tool serves a distinct role across character creation, image generation, clip creation, merging, polling, downloading, credits, and hooks, without excessive redundancy.

Completeness4/5

The surface covers the core lifecycle: creating characters, generating looks, creating and merging clips, polling status, downloading results, checking credits, and suggesting hooks. Minor gaps include no list operations for clips or finished videos and no delete/update tools, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers