Skip to main content
Glama

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 install

Set 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 stderr

Related 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.js

Tools

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

1080p_landscape

1920x1080

720p_landscape (default)

1280x720

1080p_portrait

1080x1920

720p_portrait

720x1280

square

1080x1080

Notes

  • Video URLs expire 7 days after generation — use output_path or download_video to keep them.

  • Max 1500 characters of text per 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.

  • emotion only applies to voices with emotion_support: true; locale only to voices with support_locale: true.

Available Tools

8 tools
check_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

    A4.3/5.0

    Scored across 8 tools

    Disambiguation3/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    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.

    Completeness5/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers