check_account
ChatGPTGet the account plan, premium status, and remaining credit balance. Returns plan, premium and credits. Call this BEFORE any create tool: rendering requires an account that already has a premium plan and enough credits. When premium is false, or credits are below the estimate_credits figure, do not call a create tool — state plainly that video generation is not available on this account and stop. Never suggest buying, upgrading or adding credits, and never emit a purchase or plan link. Cheap and safe to call often.
check_configuration
ChatGPTCheck whether this request is authenticated with Vivideo. Call this FIRST. Returns { authenticated, authentication_method: "oauth" | "api_key" }. In ChatGPT, if not authenticated, prompt the user to connect their Vivideo account (OAuth) — never ask them to paste an API key. Generic MCP clients may instead send an Authorization: Bearer vv_live_... header (a key from https://app.vivideo.ai/account/api-keys). Never asks for or exposes credentials.
create_auto_video
ChatGPTCreate a video in AUTO mode: Vivideo writes the script and produces a complete AI-avatar video from your prompt. Requires an account that already has a premium plan and enough credits — check_account first, and do not call this when premium is false. Returns immediately with a video id and status "queued" or "processing". The attached video widget is a static status snapshot and does not update itself. Tell the user they can ask ChatGPT "Is my video ready?" for a fresh check; do not poll automatically. An Idempotency-Key is sent automatically so a retry never creates a duplicate.
create_manual_video
ChatGPTCreate a video in MANUAL mode: send your prompt straight to a specific model (get ids/options from list_models). Requires an account that already has a premium plan and enough credits — check_account first, and do not call this when premium is false. The operation is inferred from inputs — add image_url for image-to-video. resolution/duration/aspect_ratio must be values the chosen model lists in list_models (an invalid value returns a 400 listing what is allowed), and models differ: pick one whose durations and aspect_ratios already contain what the user asked for. Returns a video id and status "queued" or "processing". The attached video widget is a static status snapshot and does not update itself. Tell the user they can ask ChatGPT "Is my video ready?" for a fresh check; do not poll automatically. Idempotency handled automatically.
estimate_credits
ChatGPTEstimate the credits a generation will cost, from the published per-model rates — BEFORE creating it. This is an estimate, not a charge; the exact amount is returned as credits_charged when you create the video. Use it with check_account to confirm the user can afford the request.
get_video
ChatGPTGet a video's current status and result. status is one of queued | processing | completed | failed | preview. When completed, video_url is the MP4. When failed, credits are refunded and error explains why. Its attached card is a snapshot of this tool result, not a live view. Cheap; prefer wait_for_video for polling instead of calling this in a tight loop.
list_avatars
ChatGPTList available presenters (avatars) for automatic videos. Use this tool when the user asks for presenters, avatar options, or people who can appear in a video. Stock avatars are grouped by person, each with a looks array — pass a looks[].avatar_id as avatar_id in create_auto_video. Set include_owned only when the user asks for their account-created avatars. Use search/limit to keep responses small.
list_brand_kits
ChatGPTList the account's brand kits (logo, colors, fonts, motion style). Returns brand_ref ids to pass as brand_kit_id in create_auto_video to produce an on-brand video.
list_models
ChatGPTList the video models available for MANUAL mode plus the auto-generate pipeline (id "vivideo-auto"). Each model lists its operations, allowed durations, resolutions, aspect ratios, style presets and per-second credit rate — use these to build a valid create request. Filter with mode, duration_seconds and aspect_ratio so only models that can actually satisfy the request come back, and cap the response with limit. Filtering here is exact — prefer it to asking for everything and narrowing the list yourself.
list_videos
ChatGPTList the account's videos, newest first. Filter by status and limit the count to keep responses small.
list_voices
ChatGPTList available voices for auto-mode videos. Returns voice ids to pass as voice_id in create_auto_video. Set include_owned only when the user asks for account-created voices. Filter by language/gender/search and cap with limit. Voice cloning is not available via the API.
render_preview
ChatGPTRender a project that is currently held at status "preview", on an account that already has a premium plan and credits. If the video is already rendering or complete, returns its current state. If the account cannot render, returns an error — relay its message as given and do not suggest buying or upgrading.
show_video
ChatGPTShow or play one existing Vivideo video in ChatGPT. Use this whenever the user asks to show, watch, open, or play a video. Pass the stable video id when known; otherwise pass the displayed video name and the server selects the newest completed match when names repeat. Do not use list_videos as the final response for a single-video playback request.
wait_for_video
ChatGPTWait for a video to reach a terminal state (completed / failed / preview), then return it. Polls safely at the API-suggested interval for up to ~20 seconds per call (HTTP requests are time-capped). If it does not finish in time it returns { timed_out: true } with the latest status — simply call it again with the same id to keep waiting. It never blocks indefinitely or over-polls.