Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,541Letters: 14Defects: 1,323counted 4 min ago
teppi

Server definition

Hash
sha256:b688d2da70db3d9df01954f6cbe39629d94cdb53314d30cb73ca2fad8ab84602
What it is
What a remote MCP server returned when asked what it offers: 13 tools

The blob, as servednamed by its sha256

{ "instructions": "Vivideo generates AI videos (auto avatar videos and 30+ manual models). Call check_configuration first, then check_account to confirm plan/credits. Create with create_auto_video or create_manual_video (list_models for ids/options), then wait_for_video until it returns timed_out: false. Estimates via estimate_credits. Docs: https://developers.vivideo.ai", "tools": [ { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "check_account", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "check_configuration", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "avatar_id": { "description": "From list_avatars. Omit for a default presenter.", "type": "string" }, "brand_kit_id": { "description": "A brand_ref from list_brand_kits.", "type": "string" }, "duration_seconds": { "description": "5–300, default 30.", "maximum": 300, "minimum": 5, "type": "integer" }, "folder_id": { "type": "string" }, "idempotency_key": { "description": "Optional. Reuse the same key to make a retry safe.", "maxLength": 255, "type": "string" }, "name": { "maxLength": 60, "type": "string" }, "orientation": { "enum": [ "landscape", "portrait" ], "type": "string" }, "prompt": { "description": "What the video should show or say.", "maxLength": 5000, "minLength": 1, "type": "string" }, "voice_id": { "description": "From list_voices.", "type": "string" } }, "required": [ "prompt" ], "type": "object" }, "name": "create_auto_video", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "aspect_ratio": { "type": "string" }, "duration_seconds": { "description": "Must be one of the model's durations.", "minimum": 1, "type": "integer" }, "folder_id": { "type": "string" }, "generate_audio": { "type": "boolean" }, "idempotency_key": { "maxLength": 255, "type": "string" }, "image_url": { "description": "Public https image → image-to-video.", "type": "string" }, "model": { "description": "A model id from list_models, e.g. \"veo31_fast\".", "type": "string" }, "name": { "maxLength": 60, "type": "string" }, "negative_prompt": { "type": "string" }, "prompt": { "maxLength": 5000, "minLength": 1, "type": "string" }, "resolution": { "type": "string" }, "seed": { "type": "integer" }, "style": { "type": "string" } }, "required": [ "model", "prompt" ], "type": "object" }, "name": "create_manual_video", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "duration_seconds": { "minimum": 1, "type": "integer" }, "mode": { "enum": [ "auto", "manual" ], "type": "string" }, "model": { "description": "Required for manual mode — a model id from list_models.", "type": "string" }, "resolution": { "description": "Manual mode — one of the model's resolutions.", "type": "string" } }, "required": [ "mode" ], "type": "object" }, "name": "estimate_credits", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "id": { "description": "The video id from a create call.", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_video", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "gender": { "enum": [ "male", "female", "unspecified" ], "type": "string" }, "limit": { "description": "Max avatars to return (default 20).", "maximum": 100, "minimum": 1, "type": "integer" }, "search": { "description": "Filter avatars by name.", "type": "string" } }, "type": "object" }, "name": "list_avatars", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_brand_kits", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "mode": { "description": "Only return models for this mode.", "enum": [ "auto", "manual" ], "type": "string" } }, "type": "object" }, "name": "list_models", "outputSchema": null }, { "description": "List the account's videos, newest first. Filter by status and limit the count to keep responses small.", "inputSchema": { "properties": { "limit": { "description": "Default 20.", "maximum": 100, "minimum": 1, "type": "integer" }, "status": { "enum": [ "queued", "processing", "completed", "failed", "preview" ], "type": "string" } }, "type": "object" }, "name": "list_videos", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "gender": { "type": "string" }, "language": { "description": "e.g. \"English\".", "type": "string" }, "limit": { "description": "Max voices (default 20).", "maximum": 100, "minimum": 1, "type": "integer" }, "search": { "type": "string" } }, "type": "object" }, "name": "list_voices", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "id": { "description": "The preview video id.", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "render_preview", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "id": { "type": "string" }, "timeout_seconds": { "description": "Max wait per call (default 20, cap 20).", "maximum": 20, "minimum": 5, "type": "integer" } }, "required": [ "id" ], "type": "object" }, "name": "wait_for_video", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:b688d2da70db3d9df01954f6cbe39629d94cdb53314d30cb73ca2fad8ab84602 | sha256sum