MCP server
The VideoGen MCP server is a Model Context Protocol server that exposes the full VideoGen API to any MCP client. Point your agent at it and it can generate videos from scripts, produce images, voiceovers, music, and avatars, upload files, export and remix projects, and manage runs, all authenticated with your own API key. It comes in two transports that expose the same tools: a hosted remote server (recommended) and a local server.
This is the API MCP server, which executes real API calls. It is distinct from the hosted documentation MCP at https://docs.videogen.io/_mcp/server, which is read-only and only answers questions about the docs. See Documentation MCP below.
Connect
Both transports wrap the official @videogen/sdk and expose the same tools. Get an API key from app.videogen.io/developers first: every tool call runs as the team that owns the key.
Remote (recommended)
The hosted server needs nothing to install or update. Point your MCP client at the endpoint and send your key as a bearer token:
The hosted server is stateless and multi-tenant. Your key is read from the request header, forwarded only to the VideoGen API, and never stored. Because it runs in the cloud and has no access to your machine’s filesystem, upload_file is not available on the remote server. Upload files directly through the VideoGen API (request a presigned upload URL and PUT the bytes yourself), then pass the returned vg_file_... id to other tools — or use the local server for files on your machine.
One-click install
Install the hosted server in one click, then authenticate with Sign in with VideoGen (or add your API key as an Authorization header afterward):
- Cursor: Add VideoGen to Cursor
- VS Code: Add VideoGen to VS Code
You can also install it from the command line:
Local (stdio)
The local server runs as a subprocess that your MCP client launches with npx, so there is nothing to install ahead of time. It reads your key from the VIDEOGEN_API_KEY environment variable:
Your key stays on your machine. It is passed directly to the local server process and never sent anywhere except the VideoGen API.
Other MCP clients
Windsurf, Cline, Goose, Claude Desktop, and most other MCP clients accept the same mcpServers JSON shown above (remote or local). Add the block to that client’s MCP config, then reload:
Clients that support remote MCP over OAuth (Cursor, VS Code, Claude, ChatGPT) can connect with just the server URL and authenticate via Sign in with VideoGen. Clients without remote/OAuth support use the local (stdio) block with a VIDEOGEN_API_KEY.
Sign in with VideoGen (OAuth)
MCP hosts that support OAuth — including ChatGPT and Claude — can connect to the hosted server without an API key. Each user signs in through Sign in with VideoGen and the host calls the server on their behalf. The server advertises its authorization server via protected-resource metadata and supports Dynamic Client Registration (RFC 7591), so these hosts discover the auth server and register themselves automatically — there is nothing to paste but the server URL.
Connect to ChatGPT
- In ChatGPT, turn on Settings → Security and login → Developer mode.
- Open Settings → Plugins (or
chatgpt.com/plugins) and create a developer-mode app. - Enter the MCP server URL
https://mcp.videogen.io/mcp, add a name and description, and create it. ChatGPT runs the OAuth flow; approve the Sign in with VideoGen consent to finish.
Connect to Claude
- In Claude (claude.ai, Claude Desktop, or the mobile apps), open Settings → Connectors and click Add custom connector.
- Enter the MCP server URL
https://mcp.videogen.io/mcp. Leave the OAuth Client ID / Secret fields in Advanced settings blank — VideoGen supports Dynamic Client Registration, so Claude registers itself automatically. - Click Connect and approve the Sign in with VideoGen consent.
Each host uses its own OAuth redirect (callback) URL. VideoGen’s authorization server accepts these automatically through Dynamic Client Registration, so you don’t need to configure them — they’re listed here for reference:
Signed-in users can review and revoke connected apps at any time from the developer dashboard.
Long-running operations
Workflows, media tools, and project exports are asynchronous. The MCP server wraps each of these as a composite tool that starts the operation and, by default, polls until it reaches a terminal state (succeeded, failed, or cancelled) before returning the finished result. Every composite tool accepts these optional control fields:
When wait is false, use the matching get_* tool (e.g. get_workflow_run, get_tool_execution) to poll the returned id yourself.
Tool reference
The server registers 34 tools. Ids are vg-prefixed opaque strings (vg_file_..., vg_work_..., vg_tool_..., vg_voic_..., vg_pres_...).
Workflows (end-to-end video)
Provide at least two remixActions (e.g. ENABLE_CAPTIONS + SET_BACKGROUND_MUSIC) for a polished result. Available remix action types: SET_BACKGROUND_MUSIC, SET_LOGO, ENABLE_CAPTIONS, DISABLE_CAPTIONS, ADD_TRANSITIONS, RESIZE_PROJECT, CLEAN_UP_TRANSCRIPT, CONVERT_IMAGES_TO_VIDEOS.
Media tools
Projects
Files
Resources & account
MCP tool to REST endpoint
Each MCP tool maps to one or more VideoGen REST endpoints. Composite tools call the start endpoint and then poll the get endpoint until terminal.
Example prompts
Once the server is connected, ask your agent in natural language. It selects the matching tool automatically:
- “Generate a narrated video from this script with captions and background music” →
script_to_video - “Upload this voiceover and turn it into a video” →
upload_filethenvoiceover_to_video - “Make an image of a red sports car at sunset” →
generate_image - “Read this text aloud in a calm voice” →
list_tts_voicesthentext_to_speech - “Upscale this video to a higher resolution” →
upload_filethenupscale_video - “Export my project as an MP4” →
export_project - “Add background music and a logo to my project” →
remix_project - “How many credits do I have left?” →
get_me
Documentation MCP
VideoGen also hosts a read-only documentation MCP server that lets AI clients query the API docs in real time. It answers questions about the API but does not call it. Connect it alongside (or instead of) the API server: