MCP Server

vivideo

io.github.egocen-vivideo/vivideo
Design & Creative Media & Content Public & reachable MCP 2026-07-28

What this MCP does

Creates and manages AI-generated avatar videos with configurable models, voices, avatars, brand kits, formats, and previews.

check_account
Get the account plan, premium status, and remaining credit balance. Use this to decide whether the user can generate a video (rendering needs a premium plan and enough credits). Returns plan, premium, credits, free_video_available, and links (upgrade / buy_credits). Cheap and safe to call often.
Input schema
{'type': 'object', 'properties': {}}
check_configuration
Check whether a Vivideo API key is present on this request. Call this FIRST. Returns { configured: boolean }. If false, ask the user to add an Authorization: Bearer vv_live_... header to the MCP server config (a key from https://app.vivideo.ai/account/api-keys). Never asks for or exposes the key.
Input schema
{'type': 'object', 'properties': {}}
create_auto_video
Create a video in AUTO mode: Vivideo writes the script and produces a complete AI-avatar video from your prompt. Returns immediately with a video id and status "processing" (paid) or "preview" (free accounts — see the preview field and upgrade link). Then call wait_for_video or get_video. An Idempotency-Key is sent automatically so a retry never creates a duplicate. Rendering requires a premium plan and credits.
Input schema
{'type': 'object', 'required': ['prompt'], 'properties': {'name': {'type': 'string', 'maxLength': 60}, 'prompt': {'type': 'string', 'maxLength': 5000, 'minLength': 1, 'description': 'What the video should show or say.'}, 'voice_id': {'type': 'string', 'description': 'From list_voices.'}, 'avatar_id': {'type': 'string', 'description': 'From list_avatars. Omit for a default presenter.'}, 'folder_id': {'type': 'string'}, 'orientation': {'enum': ['landscape', 'portrait'], 'type': 'string'}, 'brand_kit_id': {'type': 'string', 'description': 'A brand_ref from list_brand_kits.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'description': 'Optional. Reuse the same key to make a retry safe.'}, 'duration_seconds': {'type': 'integer', 'maximum': 300, 'minimum': 5, 'description': '5–300, default 30.'}}}
create_manual_video
Create a video in MANUAL mode: send your prompt straight to a specific model (get ids/options from list_models). The operation is inferred from inputs — add image_url for image-to-video. resolution/duration/aspect_ratio must match the model (an invalid value returns a 400 listing what is allowed). Returns a video id and status; then wait_for_video or get_video. Idempotency handled automatically.
Input schema
{'type': 'object', 'required': ['model', 'prompt'], 'properties': {'name': {'type': 'string', 'maxLength': 60}, 'seed': {'type': 'integer'}, 'model': {'type': 'string', 'description': 'A model id from list_models, e.g. "veo31_fast".'}, 'style': {'type': 'string'}, 'prompt': {'type': 'string', 'maxLength': 5000, 'minLength': 1}, 'folder_id': {'type': 'string'}, 'image_url': {'type': 'string', 'description': 'Public https image → image-to-video.'}, 'resolution': {'type': 'string'}, 'aspect_ratio': {'type': 'string'}, 'generate_audio': {'type': 'boolean'}, 'idempotency_key': {'type': 'string', 'maxLength': 255}, 'negative_prompt': {'type': 'string'}, 'duration_seconds': {'type': 'integer', 'minimum': 1, 'description': "Must be one of the model's durations."}}}
estimate_credits
Estimate 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.
Input schema
{'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['auto', 'manual'], 'type': 'string'}, 'model': {'type': 'string', 'description': 'Required for manual mode — a model id from list_models.'}, 'resolution': {'type': 'string', 'description': "Manual mode — one of the model's resolutions."}, 'duration_seconds': {'type': 'integer', 'minimum': 1}}}
get_video
Get 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. Cheap; prefer wait_for_video for polling instead of calling this in a tight loop.
Input schema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The video id from a create call.'}}}
list_avatars
List available avatars for auto-mode videos (the stock catalogue plus the account's own avatars). Stock avatars are grouped by person, each with a `looks` array — pass a looks[].avatar_id (or an owned avatar's id) as `avatar_id` in create_auto_video. Use `search`/`limit` to keep responses small.
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Max avatars to return (default 20).'}, 'gender': {'enum': ['male', 'female', 'unspecified'], 'type': 'string'}, 'search': {'type': 'string', 'description': 'Filter avatars by name.'}}}
list_brand_kits
List 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.
Input schema
{'type': 'object', 'properties': {}}
list_models
List 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` to keep the response small.
Input schema
{'type': 'object', 'properties': {'mode': {'enum': ['auto', 'manual'], 'type': 'string', 'description': 'Only return models for this mode.'}}}
list_videos
List the account's videos, newest first. Filter by status and limit the count to keep responses small.
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Default 20.'}, 'status': {'enum': ['queued', 'processing', 'completed', 'failed', 'preview'], 'type': 'string'}}}
list_voices
List available voices for auto-mode videos. Returns voice ids to pass as `voice_id` in create_auto_video. Filter by language/gender/search and cap with `limit`. Voice cloning is not available via the API.
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Max voices (default 20).'}, 'gender': {'type': 'string'}, 'search': {'type': 'string'}, 'language': {'type': 'string', 'description': 'e.g. "English".'}}}
render_preview
For FREE accounts only: after the user upgrades, render a video that was returned as status "preview". Charges run on the same project (the first video after upgrading is free). If the video is already rendering/complete, returns its current state. If the account is still free, returns an upgrade_required error with an upgrade link.
Input schema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The preview video id.'}}}
wait_for_video
Wait 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.
Input schema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}, 'timeout_seconds': {'type': 'integer', 'maximum': 20, 'minimum': 5, 'description': 'Max wait per call (default 20, cap 20).'}}}
Added
render_preview
Sept. 17, 2026, 12:41 p.m.
Added
list_videos
Sept. 17, 2026, 12:41 p.m.
Added
wait_for_video
Sept. 17, 2026, 12:41 p.m.
Added
get_video
Sept. 17, 2026, 12:41 p.m.
Added
create_manual_video
Sept. 17, 2026, 12:41 p.m.
Added
create_auto_video
Sept. 17, 2026, 12:41 p.m.
Added
estimate_credits
Sept. 17, 2026, 12:41 p.m.
Added
list_brand_kits
Sept. 17, 2026, 12:41 p.m.
Added
list_voices
Sept. 17, 2026, 12:41 p.m.
Added
list_avatars
Sept. 17, 2026, 12:41 p.m.
Added
list_models
Sept. 17, 2026, 12:41 p.m.
Added
check_account
Sept. 17, 2026, 12:41 p.m.
Added
check_configuration
Sept. 17, 2026, 12:41 p.m.