heygen-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@heygen-mcp generate a video of avatar Piper saying 'Welcome to our channel'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
heygen-mcp
MCP server for the HeyGen avatar video API. Provides tools that any MCP-compatible client (Claude Desktop, Claude Code, etc.) can use to generate talking-avatar videos.
Setup
cd heygen-mcp
npm installSet your API key (HeyGen dashboard → Settings → API):
export HEYGEN_API_KEY="your-key-here"Test the server starts correctly:
node index.js
# Should print "HeyGen MCP server running" to stderrRelated MCP server: heygen-mcp
Claude Desktop / Claude Code configuration
{
"mcpServers": {
"heygen": {
"command": "node",
"args": ["/Users/carlosvidal/www/heygen-mcp/index.js"],
"env": { "HEYGEN_API_KEY": "your-key-here" }
}
}
}Or from the CLI:
claude mcp add heygen -e HEYGEN_API_KEY=your-key-here -- node /Users/carlosvidal/www/heygen-mcp/index.jsTools
create_video
Primary tool. Submits the video, polls until rendering finishes, returns the video_url, and
optionally saves the mp4 to output_path.
Params: avatar_id, text, voice_id, talking_photo_id, audio_url, avatar_style,
speed, emotion, locale, background, scenes, dimension, title, caption,
output_path, timeout_seconds
generate_video
Submits the video and returns video_id immediately, without polling.
Params: same as create_video minus output_path / timeout_seconds
check_video
Status of a video by video_id — pending, waiting, processing, completed or failed.
Returns video_url, thumbnail_url, gif_url, caption_url and duration when completed.
download_video
Saves a finished video to a local .mp4. Accepts video_id (URL looked up automatically) or a
direct video_url.
list_avatars
Search avatars by name or ID. Always pass search — an account holds well over a thousand
avatars. Set include_talking_photos to also match photo avatars.
list_voices
Search voices by search / language / gender. Returns voice_id, preview_audio,
emotion_support and support_locale.
list_videos
Recent videos in the account, to recover a video_id generated earlier.
get_quota
Remaining API quota in seconds and credits. Run before long jobs.
Single scene vs. multi-scene
A single scene uses the flat arguments:
{ "avatar_id": "Piper_standing_education_front", "text": "Hola, soy Piper.", "voice_id": "1eca26cb..." }Multiple scenes use scenes, which overrides the flat arguments. Each scene has its own avatar,
script, voice and background:
{
"scenes": [
{ "avatar_id": "avatar_a", "text": "Primera escena.", "voice_id": "voice_a",
"background": { "type": "color", "value": "#f5f5f5" } },
{ "avatar_id": "avatar_b", "text": "Segunda escena.", "voice_id": "voice_b",
"background": { "type": "image", "url": "https://example.com/bg.jpg" } }
],
"dimension": "1080p_portrait",
"title": "Demo"
}Dimension presets
Preset | Size |
| 1920x1080 |
| 1280x720 |
| 1080x1920 |
| 720x1280 |
| 1080x1080 |
Notes
Video URLs expire 7 days after generation — use
output_pathordownload_videoto keep them.Max 1500 characters of
textper scene; split longer scripts across scenes.HeyGen bills 1 credit per 60 seconds of rendered video.
Rendering typically takes 1–3 minutes; polling interval is 5 seconds, default timeout 300s.
emotiononly applies to voices withemotion_support: true;localeonly to voices withsupport_locale: true.
Available Tools
8 toolscheck_videoA
Check the rendering status of a HeyGen video by video_id. Status is one of pending, waiting, processing, completed or failed. When completed it returns video_url, thumbnail_url, gif_url, caption_url and duration.
Inputs: video_id (required).
create_videoA
Primary tool — generates an avatar video with HeyGen and waits until it finishes rendering, returning the final video_url. Needs an avatar_id (list_avatars) and a voice_id (list_voices). Pass scenes for a multi-scene video, or avatar_id/text/voice_id for a single scene. Optionally saves the mp4 locally via output_path. Rendering typically takes 1-3 minutes and consumes account credits — check get_quota first for long scripts.
Inputs: text, speed, title, locale, +12 more.
download_videoA
Download a finished HeyGen video to a local .mp4 file. Pass video_id (the URL is looked up automatically) or a direct video_url. HeyGen video URLs expire 7 days after generation.
Inputs: output_path (required), video_id, video_url.
generate_videoA
Submit a video to HeyGen and return the video_id immediately without waiting for rendering. Use this only when you want to poll yourself with check_video (e.g. very long videos); for most cases use create_video instead. Consumes account credits.
Inputs: text, speed, title, locale, +10 more.
get_quotaA
Check remaining HeyGen API credits before generating video. Returns remaining quota in seconds and in credits (HeyGen bills 1 credit per 60 seconds of rendered video).
Inputs: no named parameters.
list_avatarsA
List avatars available in your HeyGen account, with their avatar_id and preview video. Accounts hold well over a thousand avatars, so always pass a search term to narrow the results before picking one for create_video.
Inputs: limit, search, include_talking_photos.
list_videosA
List recent videos in your HeyGen account with their video_id, title, status and creation date. Useful to recover the video_id of something generated earlier — pass that ID to check_video to get its URL and duration.
Inputs: limit.
list_voicesA
List HeyGen voices with their voice_id, language, gender and preview_audio URL. Filter by language and gender to find a voice for create_video — emotion_support and support_locale tell you whether the emotion and locale parameters will work with that voice.
Inputs: limit, gender, search, language.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
create_video and generate_video are nearly synonymous in name and purpose—both trigger video generation, differing only in synchronous vs. asynchronous behavior. check_video and list_videos also have some overlap in tracking video status, though their intent is clearer.
All tools follow a consistent verb_noun snake_case pattern (list_avatars, create_video, check_video). No camelCase, no mixed verb styles, and each verb clearly maps to the action performed.
With 8 tools, the set is well-scoped for the HeyGen video-generation domain: two video creation paths, status checking, download, quota, and resource listing. Each tool serves a distinct need without bloat.
The core lifecycle is covered: list avatars/voices, create video (both sync and async), check status, download result, and list history. Quota checking prevents dead ends. No obvious missing operations for a video generation API.
Maintenance
Related MCP Connectors
MCP server for Hailuo (MiniMax) AI video generation
MCP server for Kling AI video generation
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
MCP server for Google Veo AI video generation
Related MCP Servers
- AlicenseNot gradedqualityDmaintenance🎬 Enterprise-grade MCP Server for Creatify AI - 12 tools for AI video generation: avatar videos, URL-to-video, AI shorts, custom avatars, script generation, advanced lip-sync with emotion control. Complete API coverage with semantic versioning.22 npm23MIT
- FlicenseNot gradedqualityDmaintenanceExposes HeyGen's video generation API to MCP-compatible clients, enabling listing avatars, generating videos, and checking render status.-
- AlicenseBqualityDmaintenanceThis MCP server enables any MCP client to generate avatars and videos using the HeyGen API, with tools for managing credits, voices, and avatar video generation.7MIT
- AlicenseAqualityCmaintenanceMCP server for generating, editing, and batch processing videos using xAI's Grok Imagine Video API, with support for text-to-video, image-to-video, and video editing via natural language prompts.472 npm1MIT