VideoGen MCP
OfficialVideoGen MCP wraps the full VideoGen API so an AI agent can generate videos, images, audio, and manage projects, files, and reusable entities.
End-to-end video workflows —
script_to_video,voiceover_to_video,slideshow_to_video(PDF/deck),storyboard_to_video(≤3 shot-directed scenes), plusprompt_to_video_clip.Media generation tools — images, video clips (image/video/audio conditioning, lip-synced dialogue), TTS voiceovers, sound effects, music, talking-head avatars, and animated motion graphics.
Image/video utilities — vectorize, remove image/video backgrounds, upscale image/video, 3D parallax effect.
Job control — list, inspect, and cancel workflow runs and tool executions; long jobs return an id to poll.
Projects — list, fetch, export to MP4 (with quality tiers), and remix with curated edits (
CAPTIONS,TRANSITIONS,CONVERT_IMAGES_TO_VIDEOS,ZOOM), plus remix status.Files — small inline uploads, pre-signed large-file uploads, wait-for-processing fetch, and listing.
Entities — create/update/archive ACTOR, PRODUCT, VISUAL_STYLE, and SLIDESHOW_THEME assets with reference images for consistent characters/products.
Account & resources —
get_meconnection test, TTS voice catalog, supported languages, and app deep links for upgrade/credits/settings.Agent guidance — four no-auth guidance tools covering getting started, async polling, workflows, and tools-vs-workflows.
Provides a ChatGPT Apps surface for the VideoGen MCP server, including a ChatGPT-specific /mcp/chatgpt endpoint, an in-chat file upload widget (open_uploader), commerce-policy-compliant billing copy, and OpenAI Apps domain-verification token support.
This server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
@videogen/mcp
A Model Context Protocol (MCP) server that exposes the full VideoGen API to any MCP client (Cursor, Claude Desktop, Windsurf, etc.). Your agent can generate videos from scripts, produce images / voiceovers / music / avatars, upload files, export and remix projects, and manage runs — all authenticated with your own API key.
Learn more about the VideoGen MCP server.
Find the hosted server on Smithery.
ChatGPT
The hosted plugin includes a VideoGen home sidebar app (open_home). It follows
the product home: the general creation prompt and suggestions, recent projects,
example categories, featured workflows, reusable assets, and templates. Browsing
does not start generation; Start sends the draft into a ChatGPT conversation.
Project and library links open the matching VideoGen environment.
The home catalog is generated from the same helpers as frontend/ and committed
in web/homeCatalog.ts, keeping the standalone MCP/npm/Docker build independent
of internal packages. After changing the product catalog, refresh it from the
repo root with cd api && node --import tsx scripts/generate-chatgpt-home.ts
(with current base/defs/static JS builds). build:js bundles the page alongside
the existing upload and preview widgets. Deploy MCP and rescan the existing
plugin before expecting the sidebar entry to be available in ChatGPT.
Home-specific checks (no browser or live account required):
cd mcp
node --import ./test/register.mjs --test src/homeWidget.test.ts test/homeBridge.test.mjs
cd ../api
TSX_TSCONFIG_PATH=../mcp/web/tsconfig.json node --import tsx --test ../mcp/test/homePage.test.tsxUse the public VideoGen plugin on the ChatGPT Plugins Directory. That is the supported way for every user to run VideoGen in ChatGPT.
The /mcp/chatgpt endpoint, ChatGPT Apps commerce notes, open_uploader widget, and the connector checklist later in this file are for internal testing of that plugin.
It ships in two transports. Tool surface is the same except for the internal-testing ChatGPT Apps surface (see above):
Local (stdio) — the client launches
@videogen/mcpas a subprocess and reads the key fromVIDEOGEN_API_KEY.Remote (Streamable HTTP) — a hosted, multi-tenant HTTP server. Clients connect over the network and authenticate per request with
Authorization: Bearer <api-key>; no key lives on the server.
Host surfaces (remote): /mcp (and stdio) is the STANDARD surface: when the user is out of credits or needs a plan feature, tools and guidance walk them into get_app_deep_link (OPEN_UPGRADE / OPEN_PURCHASE_CREDITS / OPEN_ENABLE_TOP_UPS). /mcp/chatgpt is an internal-testing ChatGPT Apps surface for the public plugin: those commerce deep links are omitted, billing errors are rewritten to “manage your VideoGen account,” and copy never says purchase / buy / upgrade / top-ups (OpenAI Plugins digital-goods policy). See .cursor/rules/chatgpt-mcp-no-commerce.mdc and mcp/src/hostSurface.ts.
This is distinct from the hosted documentation MCP at https://docs.videogen.io/_mcp/server, which only lets clients read the API docs. This server actually executes the API.
Related MCP server: json2video MCP Server
How it works
Wraps the official
@videogen/sdkand calls the live API through the SDK's authenticated passthrough.The local transport reads your key from
VIDEOGEN_API_KEY; the remote transport reads it from each request'sAuthorization: Bearerheader and builds a fresh, per-request server bound to that team (stateless — no session state is shared between requests).The key never leaves your machine except in requests to the VideoGen API (local), or is forwarded only to the VideoGen API for the duration of the request and never persisted (remote).
Long-running operations (workflows, media tools, project exports) use composite tools. The hosted HTTP transport returns the run/execution id immediately; use the corresponding
get_*tool to continue polling. The local stdio transport waits for completion by default.
Configuration
Get an API key from app.videogen.io/api. Both transports expose the same tools; the remote server is recommended.
Remote (Streamable HTTP) — recommended
Nothing to install or update. Point any MCP client that supports the Streamable HTTP transport at the hosted endpoint and send your API key as a bearer token:
{
"mcpServers": {
"videogen": {
"url": "https://mcp.videogen.io/mcp",
"headers": {
"Authorization": "Bearer sk_videogen_live_..."
}
}
}
}The remote server:
Accepts MCP JSON-RPC messages via
POST /mcp(stateless — a fresh server per request).Reads the API key or OAuth access token from the
Authorization: Bearerheader. The standard/mcpendpoint requires credentials for every request and returns401with aWWW-Authenticatechallenge to start OAuth. The internal-testing/mcp/chatgptendpoint serves tool discovery unauthenticated and returns its OAuth challenge on a protected tool result because ChatGPT does not start OAuth from the standard transport challenge. The credential is forwarded only to the VideoGen API and never stored.Exposes
GET /healthfor load-balancer / Cloud Run startup probes.Handles CORS preflight (
OPTIONS) so browser-based clients can connect.Supports three upload paths. For small assets (images, logos, short audio),
upload_filetakes base64-encoded contents inline (fileData). For large files,create_file_uploadreturns{ fileId, uploadUrl }; the clientPUTs the raw bytes to that short-lived pre-signed URL (noAuthorizationheader) and then callsget_filewith{ fileId, wait: true }to wait for processing. On the internal-testing/mcp/chatgptsurface,open_uploaderrenders an in-chat upload widget so the user can pick a file directly, or pass photos they already attached (files). The widget itself callscreate_file_upload,PUTs the bytes client-side, and reports back only the resultingvg_file_...id, so the pre-signed URL is never surfaced to the model. On that surfaceupload_fileandcreate_file_uploadare hidden from the model (ui.visibilityisapponly): a filename does not upload a ChatGPT attachment, and the server never fetches the attachment URL. Either way you get avg_file_...id to pass to other tools. The local (stdio) server instead uploads by localfilePath. (The server never fetches a caller-supplied URL, so there is no SSRF surface.)
Local (stdio) — Cursor / Claude Desktop
Runs as a subprocess launched by your client with npx. Reads the API key from the VIDEOGEN_API_KEY environment variable, which never leaves your machine except in requests to the VideoGen API:
{
"mcpServers": {
"videogen": {
"command": "npx",
"args": ["-y", "@videogen/mcp"],
"env": {
"VIDEOGEN_API_KEY": "sk_videogen_live_..."
}
}
}
}Environment variables
Variable | Required | Default | Description |
| local only | — | Your VideoGen API key (local server). On the remote server the key travels in the |
| no |
| Override the upstream API base URL (e.g. for local development). Applies to both transports. When unset, the remote server resolves the upstream API per deployment environment (dev/prerelease/prod); local runs default to the public prod API. |
| no | — | Remote server only. Full OAuth 2.1 issuer URL. When set (or derived from the var below), the server advertises OAuth protected-resource metadata (RFC 9728) and a |
| no | — | Remote server only. Supabase project base URL; the issuer is derived as |
| no | — | Remote server only. Internal-testing OpenAI Plugins / ChatGPT Apps domain-verification token for the public plugin. When set, |
Tools
See the callable tool reference and complete input/output JSON schemas for 50 live hosted tools. The schema snapshot is captured from MCP tools/list; use discovery on your connected server for the latest definitions.
Workflows (end-to-end video)
script_to_video, voiceover_to_video, slideshow_to_video, storyboard_to_video, list_workflow_runs, get_workflow_run, cancel_workflow_run
Media tools
generate_image, generate_video_clip, text_to_speech, generate_sound_effect, generate_music, generate_avatar, vectorize_image, remove_image_background, remove_video_background, upscale_image, upscale_video, image_3d_effect, list_tool_executions, get_tool_execution, cancel_tool_execution
Projects
list_projects, get_project, export_project, get_project_export, remix_project, list_project_remix_actions
Files
upload_file, create_file_upload, get_file, list_files, open_uploader
open_uploader is a widget on the internal-testing /mcp/chatgpt surface (remote server only): it renders an in-chat file picker (a React component served as an MCP UI resource) so a ChatGPT user can attach a file without pasting a link. Pass photos already attached in the chat as files. It is a no-op on clients that don't render MCP Apps UI. Those use upload_file / create_file_upload instead. ChatGPT users should use the public VideoGen plugin.
Entities
list_entities, create_entity, get_entity, update_entity, archive_entity, add_entity_reference, remove_entity_reference
Create ACTOR / PRODUCT / VISUAL_STYLE entities, attach uploaded image references, then pass vg_enti_... ids into workflows and generate_avatar (actorEntityId; on storyboard_to_video, per-scene productEntityIds / actorEntityIds / visualStyleEntityId).
Resources & account
list_tts_voices, list_languages, get_me, get_app_deep_link
Guidance (docs for agents)
Operational manuals exposed as MCP resources and mirror tools (no API credential required):
Resource URI | Mirror tool |
|
|
|
|
|
|
|
|
Call the matching get_*_guidance tool before non-trivial setup, polling, workflow/remix/export, or tools-vs-workflows decisions. Many hosts never auto-attach resources; the tools are the reliable path. Content is grounded in the public docs at docs.videogen.io but written for MCP tool usage (including hosted wait caps).
Creative MCP tools expose user intent rather than the lower-level developer API request shape. Use style for a full, strict visual-style paragraph (medium, texture, palette, then a simple composition lock) and aspectRatio ({ width, height } units, e.g. { width: 16, height: 9 }) for output dimensions. Omitted workflow styles use the app Realistic look (Photorealistic photograph, natural lighting). Do not pass a short label such as watercolor. Image models pack the frame with text, charts, and diagrams unless the style keeps the picture simple. remix_project accepts curated edits: CAPTIONS, TRANSITIONS, CONVERT_IMAGES_TO_VIDEOS, and ZOOM. CONVERT_IMAGES_TO_VIDEOS generates AI video clips from stills (expensive). ZOOM is cheap Ken Burns camera motion. watermarkMode and endScreenMode are not exposed; MCP always sends AUTO (Free-plan output includes the VideoGen watermark; VideoGen Pro removes it).
Workflow, media-generation, and export tools start the operation and poll internally. On the hosted (Streamable HTTP) server, the wait window is capped under Cloudflare's proxy timeout, so long generations return a still-running snapshot instead of a 524. Use get_tool_execution, get_workflow_run, or get_project_export to continue polling.
For generate_avatar, provide audioFileId and an ACTOR entity via actorEntityId. You may set avatarQuality to LOW, STANDARD, HIGH, or MAX. script_to_video, slideshow_to_video, and CHANGE_NARRATOR accept the same optional actor fields.
See the full tool reference for every tool's parameters and its REST-endpoint mapping.
Development
pnpm build # bundle to dist/ (dist/index.js, dist/http.js, and the widget)
pnpm typecheck # type-check
pnpm lint:fix # lint
# Smoke test the local (stdio) server:
VIDEOGEN_API_KEY=sk_videogen_live_... node dist/index.js
# Smoke test the remote (HTTP) server:
PORT=8080 node dist/http.js
# Health: curl http://localhost:8080/health
# MCP: curl -X POST http://localhost:8080/mcp \
# -H 'Authorization: Bearer sk_videogen_live_...' \
# -H 'Content-Type: application/json' \
# -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'VIDEOGEN_BASE_URL overrides the upstream API for both transports (e.g. point at a local API during development).
Deployment (remote server)
The remote server deploys to Cloud Run through the standard monorepo CI/CD, alongside api / backend / external / frontend:
Image:
ci-cd/docker/mcp/Dockerfile— a minimal multi-stage Node build (no ffmpeg / gcloud / VPC tooling; the server only makes outbound HTTPS calls to its per-environment VideoGen developer API —dev.api.videogen.io/prerelease.api.videogen.io/api.videogen.io, all of which exist).Service registry:
mcpis registered inci-cd/utils.ts(CLOUD_RUN_SERVICES).Build config:
ci-cd/config.build.ts(CLOUD_RUN_SERVICE_TO_BUILD_CONFIG_MAP.mcp).Deploy config:
ci-cd/config.deploy.ts(mcp) — 1 CPU / 2 GiB, concurrency 80,60mrequest timeout (tool calls long-poll workflows/exports),allowUnauthenticated: true(auth is per-request via the caller's API key, not GCP IAM).Generated pipelines:
ci-cd/cloudbuild/mcp.build.yamland themcpentries in the GitHub build/deploy workflow matrices are produced by the CI/CD generators — regenerate them (do not hand-edit) after changing the build/deploy config.
Manual GCP steps (one-time)
CI/CD builds and deploys the Cloud Run service, but a couple of steps must be done by hand in GCP the first time:
Custom domain / DNS. The service is reachable at its generated
*.run.appURL immediately. To serve it atmcp.videogen.io, create a Cloud Run domain mapping (or add it behind the existing load balancer) and add the corresponding DNS record. Update theurlin the client config above once the domain resolves.Verify the first deploy. After the first successful deploy, confirm
GET https://<service-url>/healthreturns200and that aPOST /mcpwith a valid bearer token lists tools.
ChatGPT connector (OAuth) checklist (internal testing)
This checklist is for VideoGen engineers testing the public VideoGen plugin. Users install that plugin from the ChatGPT Plugins Directory.
After deploying the remote MCP server for an environment (e.g. DEV → https://dev.mcp.videogen.io/mcp):
Confirm discovery + auth modes:
GET https://<mcp-host>/.well-known/oauth-protected-resource/mcpreturns200withresourceending in/mcpandauthorization_serversequal to the MCP origin (pathless — Cursor workaround).GET https://<mcp-host>/.well-known/oauth-protected-resource/mcp/chatgptreturns200withresourceending in/mcp/chatgptandauthorization_serversequal to the Supabase Auth issuer (…/auth/v1).GET https://<mcp-host>/.well-known/oauth-authorization-serverreturns200withissuerequal to the MCP origin and authorize/token/register endpoints on Supabase Auth.npx -y @modelcontextprotocol/inspector@1.0.0 --cli https://<mcp-host>/mcp/chatgpt --transport http --method tools/listlists ~35+ tools (includingopen_uploaderasnoauthand API tools asoauth2).Every anonymous POST against
/mcp, includinginitializeandtools/list, returns HTTP 401 +WWW-Authenticateso Cursor / Claude start OAuth immediately.Anonymous
tools/call get_meagainst/mcp/chatgptreturns HTTP 200 with a tool-result_meta["mcp/www_authenticate"]challenge (ChatGPT).
In the ChatGPT app (e.g. VideoGen (DEV)), set the MCP URL to
https://<mcp-host>/mcp/chatgpt(not/mcp). Copy the exact OAuth callback URL (https://chatgpt.com/connector/oauth/{callback_id}) into that environment's Supabase Auth OAuth client redirect allowlist.Prefer DCR in the ChatGPT connector builder (Supabase advertises
registration_endpoint; it does not advertise CIMD /client_id_metadata_document_supported). After ChatGPT DCR's a client for our app, add that exactclient_idtoTRUSTED_OAUTH_CLIENT_IDSincore/src/logic/oauth/trustedOAuthClientIds.tsso the consent screen treats it as verified.ChatGPT Settings → the app → Refresh → Scan Tools → complete the OAuth prompt when shown.
Start a new conversation, select the app from the tools menu, and call a read tool (e.g.
get_me). Do not reuse an old chat after metadata changes.
STANDARD_TESTS runs anonymous ChatGPT discovery against /mcp/chatgpt automatically via mcp-http (pnpm --filter @videogen/api mcp:test -- --transport http --env <env> --server-mode remote), which invokes the Inspector CLI before the authenticated full smoke and asserts open_uploader advertises noauth and API tools advertise oauth2. That scheme check fails against a host that has not yet been redeployed with this metadata.
Available Tools
49 toolsadd_entity_referenceAdd entity referenceAInspect
Attach an uploaded file (vg_file_...) as a reference on an entity. Images work for every entity type. Slideshow themes may also attach a PDF or PowerPoint. Built-in entities cannot have references added. For new PRODUCT/ACTOR entities, call this right after create_entity with isDefault: true so the entity has a usable thumbnail and generation reference.
Inputs: fileId (required), entityId (required), isDefault, description. Returns: A reusable actor, product, visual style, or slideshow theme entity.
archive_entityArchive entityADestructiveInspect
Archive an entity so it no longer appears in lists or pickers. Built-in entities cannot be archived.
Inputs: entityId (required). Returns: Entity archive confirmation.
cancel_tool_executionCancel tool executionBDestructiveInspect
Request cancellation of an in-progress tool execution.
Inputs: toolExecutionId (required). Returns: Tool execution id, or full execution status after waiting (results when succeed…
cancel_workflow_runCancel workflow runBDestructiveInspect
Request cancellation of an in-progress workflow run.
Inputs: workflowRunId (required). Returns: Workflow start metadata, or full run status after waiting. When autoExport is o…
create_entityCreate entityAInspect
Create an ACTOR (character), PRODUCT (product/object), VISUAL_STYLE, or SLIDESHOW_THEME entity. After create, attach at least one reference with add_entity_reference (upload the file first). Slideshow themes may attach an image or a PDF / PowerPoint. Use the returned entityId as actorEntityId on generate_avatar / script_to_video, a product/style reference in storyboard scenes, or slideshowThemeEntityId on slideshow_to_video.
Inputs: name (required), entityType (required), description. Returns: A reusable actor, product, visual style, or slideshow theme entity.
create_file_uploadCreate file uploadAInspect
Start an upload for a large file, or when file bytes cannot be inlined. Returns { fileId, uploadUrl }. PUT the raw file bytes to uploadUrl with NO Authorization header (it is a short-lived pre-signed URL). Then call get_file with { fileId, wait: true } to wait until processing finishes, and pass the returned fileId to workflows, tools, logos, or B-roll. For small files, prefer upload_file.
Inputs: displayName (required), type, isTemporary. Returns: Pre-signed upload instructions.
export_projectExport projectAInspect
Export a project to an MP4 and return its status or download URL. Renders often take a few minutes. Tell the user that wait up front.
Inputs: projectId (required), quality. Returns: Export start id, or full export status after waiting (includes downloadUrl when…
generate_avatarGenerate avatarAInspect
Generate a talking-head avatar video from an ACTOR entity and an uploaded audio file. Pass actorEntityId and optionally set avatarQuality. Typically takes a few minutes (longer for longer audio). Tell the user that wait up front.
Inputs: audioFileId (required), actorEntityId (required), avatarQuality. Returns: Tool execution id, or full execution status after waiting (results when succeed…
generate_imageGenerate imageAInspect
Generate an image from a text prompt, optionally conditioned on source images (image-to-image) and actor, product, or visual-style entity ids. Typically takes 15–60 seconds. Tell the user that wait up front.
Inputs: prompt (required), quality, entityIds, aspectRatio, +1 more. Returns: Tool execution id, or full execution status after waiting (results when succeed…
generate_motion_graphicGenerate motion graphicAInspect
Generate an animated motion graphic video from a text prompt. Best for precise text animations (typing effects, kinetic typography, lower thirds) that stock or generated footage can't express. Outputs a transparent WebM overlay by default; set transparentBackground to false for an opaque MP4. Optionally pass reference media file ids to display or animate. Typically takes 2–5 minutes because VideoGen writes animation code and then renders it; complex prompts can take longer. Tell the user that wait before starting and keep polling calmly — a healthy in-progress job is expected.
Inputs: prompt (required), fileIds, entityIds, aspectRatio, +3 more. Returns: Tool execution id, or full execution status after waiting (results when succeed…
generate_musicGenerate musicAInspect
Generate a music track from a text prompt. Typically takes 1–5 minutes depending on track length. Tell the user that wait up front.
Inputs: prompt (required). Returns: Tool execution id, or full execution status after waiting (results when succeed…
generate_sound_effectGenerate sound effectCInspect
Generate a sound effect from a text prompt.
Inputs: prompt (required), durationSeconds. Returns: Tool execution id, or full execution status after waiting (results when succeed…
generate_video_clipGenerate video clipAInspect
Generate a video clip from a text prompt, source images, source videos, spokenDialogue, or reference audio. quality is optional (LOW, STANDARD, HIGH, or MAX). Typically takes 1–3 minutes (HIGH/MAX can be longer). Tell the user that wait up front and keep polling calmly.
Inputs: prompt, quality, aspectRatio, audioFileIds, +8 more. Returns: Tool execution id, or full execution status after waiting (results when succeed…
get_app_deep_linkGet app deep linkARead-onlyInspect
Build a VideoGen app URL that opens a modal or navigates after the user signs in (upgrade, buy credits, enable top-ups, invite teammates, submit feedback, integrations, account settings, or a NAVIGATE destination). Prefer this when the user needs to complete something in the VideoGen UI that MCP tools cannot do inline — especially credits or plan gates. Return the url to the user so they can open it.
Inputs: action (required), text, category, provider, +4 more. Returns: VideoGen app deep link for an assistant COMMON action.
get_async_tasks_guidanceAsync tasks guidanceARead-onlyInspect
How to handle async workflows, tool executions, and exports: statuses, hosted vs local wait caps, polling with get_* tools, and when webhooks apply outside MCP. Call before polling or when a start tool returns a still-running snapshot. Equivalent to reading the guidance://async-tasks MCP resource — provided as a tool for clients that don't read resources directly.
Inputs: no named parameters. Returns: Operational guidance document for agents.
get_entityGet entityARead-onlyInspect
Fetch one entity by id, including its reference images. Built-in catalog entities are included and have isBuiltIn true.
Inputs: entityId (required). Returns: A reusable actor, product, visual style, or slideshow theme entity.
get_fileGet fileARead-onlyInspect
Fetch a file by id with freshly hydrated (non-expired) signed URLs for its thumbnail, preview, and download renditions. Set wait: true to poll until the file finishes processing — use this right after PUTting bytes to a create_file_upload URL.
Inputs: fileId (required), wait, timeoutMs, pollIntervalMs. Returns: File metadata with signed URLs when hydrated.
get_getting_started_guidanceGetting started guidanceARead-onlyInspect
How to authenticate, verify with get_me, introduce VideoGen with workflow example prompts, choose workflows vs media tools, and follow VideoGen id conventions. Call when connecting, onboarding, the user asks what VideoGen can do, or how to set up the API or MCP. Equivalent to reading the guidance://getting-started MCP resource — provided as a tool for clients that don't read resources directly.
Inputs: no named parameters. Returns: Operational guidance document for agents.
get_meGet accountARead-onlyInspect
Fetch the account and team behind the API key (apiKeyId, apiKeyNickname, email, displayName, teamId). Use it as a connection test.
Inputs: no named parameters. Returns: Account and team behind the authenticated API key.
get_projectGet projectBRead-onlyInspect
Fetch metadata and the shareable URL for a single project.
Inputs: projectId (required). Returns: Project metadata.
get_project_exportGet project exportARead-onlyInspect
Fetch the current status of a project export. Poll until status is succeeded, failed, or cancelled.
Inputs: exportId (required), projectId (required). Returns: Export start id, or full export status after waiting (includes downloadUrl when…
get_tool_executionGet tool executionBRead-onlyInspect
Fetch the current status and results of a single tool execution.
Inputs: toolExecutionId (required). Returns: Tool execution id, or full execution status after waiting (results when succeed…
get_tools_vs_workflows_guidanceTools vs workflows guidanceARead-onlyInspect
When to use standalone media tools (automatic model routing for a single asset) versus workflows (full editable professional video). Call when choosing between generate_* tools and workflow tools. Equivalent to reading the guidance://tools-vs-workflows MCP resource — provided as a tool for clients that don't read resources directly.
Inputs: no named parameters. Returns: Operational guidance document for agents.
get_workflow_runGet workflow runARead-onlyInspect
Fetch the current status and result of a single workflow run.
Inputs: workflowRunId (required). Returns: Workflow start metadata, or full run status after waiting. When autoExport is o…
get_workflows_guidanceWorkflows guidanceARead-onlyInspect
Canonical run → remix → export flow and when to use each workflow tool. Prefer script_to_video for longer narrated / informational videos; keep storyboard_to_video to ≤3 scenes unless the user asks for more. Call before starting a full video project. Equivalent to reading the guidance://workflows MCP resource — provided as a tool for clients that don't read resources directly.
Inputs: no named parameters. Returns: Operational guidance document for agents.
image_3d_effectImage 3D effectAInspect
Add 3D parallax motion to a still image, producing a video.
Inputs: imageFileId (required). Returns: Tool execution id, or full execution status after waiting (results when succeed…
list_entitiesList entitiesARead-onlyInspect
List built-in actors, products, visual styles, and slideshow themes plus team entities. Built-in rows have isBuiltIn true and cannot be updated or archived. Filter with entityType when you only need one kind.
Inputs: limit, cursor, entityType. Returns: Paginated list of entities.
list_filesList filesBRead-onlyInspect
List files visible to the current API key.
Inputs: limit, cursor. Returns: Paginated list of files.
list_languagesList languagesARead-onlyInspect
List supported languages for narration and captions.
Inputs: query. Returns: Supported narration and caption languages.
list_project_remix_actionsList project remix actionsBRead-onlyInspect
List the status of remix actions applied to a project.
Inputs: projectId (required). Returns: Paginated remix-action status list.
list_projectsList projectsARead-onlyInspect
List projects. API-created projects only by default; pass includeUiProjects to also include dashboard projects.
Inputs: limit, cursor, selfOnly, includeUiProjects. Returns: Paginated list of projects.
list_tool_executionsList tool executionsBRead-onlyInspect
List past tool executions, most recent first.
Inputs: limit, cursor, selfOnly. Returns: Paginated list of tool executions.
list_tts_voicesList text-to-speech voicesBRead-onlyInspect
List available text-to-speech voices for narration, text_to_speech, and workflows.
Inputs: limit, query, cursor, includeDeprecatedVoices. Returns: Paginated list of TTS voices.
list_workflow_runsList workflow runsBRead-onlyInspect
List workflow runs, most recent first.
Inputs: limit, cursor, selfOnly. Returns: Paginated list of workflow runs.
prompt_to_video_clipPrompt to videoBInspect
Generate one short AI video clip from a prompt inside an editable project.
Inputs: prompt (required), quality, autoExport, aspectRatio, +2 more. Returns: Workflow start metadata, or full run status after waiting. When autoExport is o…
remix_projectRemix projectAInspect
Apply curated edits to an existing project. CONVERT_IMAGES_TO_VIDEOS generates AI video clips from every still and is expensive. Use ZOOM for cheap Ken Burns camera motion. Poll with list_project_remix_actions for status.
Inputs: edits (required), projectId (required), saveAsNewProject. Returns: Accepted remix actions for a project.
remove_entity_referenceRemove entity referenceAInspect
Detach a reference image from an entity by file id. Built-in entities cannot have references removed.
Inputs: fileId (required), entityId (required). Returns: A reusable actor, product, visual style, or slideshow theme entity.
remove_image_backgroundRemove image backgroundCInspect
Remove the background from an image.
Inputs: imageFileId (required). Returns: Tool execution id, or full execution status after waiting (results when succeed…
remove_video_backgroundRemove video backgroundCInspect
Remove the background from a video.
Inputs: videoFileId (required). Returns: Tool execution id, or full execution status after waiting (results when succeed…
script_to_videoScript to videoAInspect
Preferred for narrated / informational / explainer videos from text, especially ~1 minute or longer. Turn a verbatim narration script into an editable video with AI-generated visuals and captions. Prefer this over storyboard_to_video unless the user wants a short shot-directed storyboard. For avatar narration, pass actorEntityId and optionally set avatarQuality.
Inputs: script (required), style, quality, voiceId, +5 more. Returns: Workflow start metadata, or full run status after waiting. When autoExport is o…
slideshow_to_videoSlideshow to videoAInspect
Build an editable narrated video from an uploaded PDF or slideshow file. Upload the file first with upload_file, then pass its fileId. For avatar narration, pass actorEntityId and optionally set avatarQuality.
Inputs: fileId (required), voiceId, language, autoExport, +5 more. Returns: Workflow start metadata, or full run status after waiting. When autoExport is o…
storyboard_to_videoStoryboard to videoAInspect
Build an editable video from an ordered storyboard (frame-by-frame shot list). Every scene needs a visual prompt and may include spoken words. Much more credit-heavy than script_to_video: use at most 3 scenes unless the user explicitly asks for more. Prefer script_to_video for ~1 minute+ narrated / informational videos. If the user has not named a workflow, ask with pros/cons before calling this.
Inputs: scenes (required), style, quality, autoExport, +1 more. Returns: Workflow start metadata, or full run status after waiting. When autoExport is o…
text_to_speechText to speechBInspect
Convert text into spoken audio using a selectable voice.
Inputs: text (required), voiceId (required), speed, language. Returns: Tool execution id, or full execution status after waiting (results when succeed…
update_entityUpdate entityAInspect
Update an entity's display name and/or description. Built-in entities cannot be updated.
Inputs: entityId (required), name, description. Returns: A reusable actor, product, visual style, or slideshow theme entity.
upload_fileUpload fileAInspect
Upload a local file to VideoGen and wait until it is processed. Returns the file with its id (vg_file_...) and signed URLs. Use the returned fileId for voiceover_to_video, slideshow_to_video, logos, or B-roll. To upload a remote asset, download it first and pass its local path.
Inputs: filePath (required), type, displayName. Returns: File metadata with signed URLs when hydrated.
upscale_imageUpscale imageBInspect
Increase the resolution of an image.
Inputs: imageFileId (required). Returns: Tool execution id, or full execution status after waiting (results when succeed…
upscale_videoUpscale videoCInspect
Increase the resolution of a video.
Inputs: videoFileId (required). Returns: Tool execution id, or full execution status after waiting (results when succeed…
vectorize_imageVectorize imageBInspect
Convert a raster image into a vector (SVG).
Inputs: imageFileId (required). Returns: Tool execution id, or full execution status after waiting (results when succeed…
voiceover_to_videoVoiceover to videoBInspect
Build an editable video with AI-generated visuals from an uploaded voiceover audio file.
Inputs: fileId (required), style, quality, language, +2 more. Returns: Workflow start metadata, or full run status after waiting. When autoExport is o…
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 49 tools
Most tools have clearly distinct purposes, but there is some overlap: script_to_video, storyboard_to_video, voiceover_to_video, and slideshow_to_video all produce editable videos from different inputs, requiring careful description reading to choose correctly. The guidance tools (get_*_guidance) also overlap somewhat but are clearly differentiated by topic.
Naming is mostly consistent with snake_case verb_noun or noun_verb patterns (generate_image, list_projects, get_project, upload_file, create_entity), though some deviations exist like storyboard_to_video, script_to_video (noun_to_noun) and guidance tools prefixed with get_. Still generally predictable and readable.
49 tools is excessive for the apparent scope of a video generation API, even accounting for the broad domain (workflows, media generation, files, entities, projects, account). Many tools could be consolidated or grouped, making the surface heavy and increasing selection difficulty.
Coverage is quite comprehensive: creation, listing, getting, updating, archiving, uploading, guidance, and export for projects, workflows, tool executions, files, and entities. Minor gaps exist (e.g., no direct delete for projects/files, no update for file metadata), but core lifecycle operations are present.
Maintenance
Related MCP Connectors
Generate images, video, music and voice from your CLI or AI agent. On-brand AI media toolkit.
Make short narrated videos from a prompt or a script: estimate the cost, create, track and download.
Create and edit AI videos from chat: plan shots, generate scenes, and export stories and ads.
Open-source AI video editor: cut, caption, clip and animate real Revline projects from your agent.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables video generation through OpenAI's Sora 2 API, allowing users to create, monitor, and manage AI-generated videos. It also provides tools for merging video clips and creating fade animations from static images using FFmpeg.615 npm2MIT
- AlicenseAqualityDmaintenanceEnables programmatic video generation via the json2video API, supporting scene and element creation, status polling, and template management.554 npm27MIT
- AlicenseCqualityDmaintenanceEnables AI agents to perform headless video editing through 35 tools for project creation, clip manipulation, rendering, quality control, and semantic search, all via JSON-RPC 2.0 over stdio.372MIT
- FlicenseAqualityBmaintenanceEnables AI agents to generate videos from text prompts, monitor job status, retrieve completed videos, and cancel ongoing generation tasks through stdio-based MCP tools.4-