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-mcpgenerate 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.
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes | The video ID returned by create_video or generate_video |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses possible statuses and the return fields when completed, which is meaningful. It does not cover error handling or rate limits, but for a read-only status check, it provides substantial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and every clause adds value (statuses and return fields). No wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter, no output schema), the description covers the key behavioral outputs and statuses. It omits edge cases like failed status details or error responses, but these are not necessary for basic usage. Overall complete enough for common workflows.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes video_id with 100% coverage, including its origin from create_video or generate_video. The description adds no additional parameter semantics beyond repeating 'by video_id', so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks rendering status by video_id, with a specific verb and resource. It distinguishes itself from siblings like create_video, generate_video, download_video, and list_videos by focusing on status retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use after creating a video and before downloading by noting the video_id comes from create_video/generate_video and that completed status reveals download URLs. It does not explicitly state exclusions or alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Script the avatar speaks. Max 1500 characters per scene — split longer scripts across scenes. | |
| speed | No | Speech rate (0.5–1.5). Default: 1.0 | |
| title | No | Title shown in the HeyGen dashboard. | |
| locale | No | Locale for multilingual voices, e.g. 'es-MX'. Only for voices with support_locale: true. | |
| scenes | No | Multi-scene video: one entry per scene, each with its own avatar, text, voice and background. Overrides the flat single-scene arguments. | |
| caption | No | Burn subtitles into the video. Default: false | |
| emotion | No | Delivery style. Only works on voices with emotion_support: true. | |
| voice_id | No | HeyGen voice ID. Use list_voices to find one. Required when text is used. | |
| audio_url | No | Public URL of a pre-recorded audio file to lip-sync instead of text+voice_id. | |
| avatar_id | No | HeyGen avatar ID. Use list_avatars to find one. Required unless talking_photo_id or scenes is given. | |
| dimension | No | Output size preset: 1080p_landscape (1920x1080), 720p_landscape (1280x720), 1080p_portrait (1080x1920), 720p_portrait (720x1280), square (1080x1080). | 720p_landscape |
| background | No | Scene background. Omit to keep the avatar's original background. | |
| output_path | No | Absolute path to save the finished .mp4 (e.g. /tmp/demo.mp4). Directory is created if needed. HeyGen URLs expire after 7 days, so save anything you want to keep. | |
| avatar_style | No | Framing of the avatar. Default: normal | |
| timeout_seconds | No | Max seconds to wait for rendering. Default: 300. On timeout the video keeps rendering — use check_video with the returned video_id. | |
| talking_photo_id | No | Talking photo ID, as an alternative to avatar_id. Use list_avatars with include_talking_photos. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the blocking behavior (waits until rendering completes), typical duration (1-3 minutes), credit consumption, and the optional local save via output_path. Missing details like URL expiry are covered in the schema, not the description, but the description gives a solid behavioral overview.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet information-dense. Each sentence serves a distinct purpose: defining the tool, stating prerequisites, explaining invocation modes, and flagging cost/timing. It's front-loaded with the core action and follow-up details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 16 parameters, the description provides high-level flow, blocking behavior, dependencies, and a cost warning. It mentions the return of video_url but not other potential outputs; however, the schema's rich parameter descriptions and absence of an output schema make this sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed per-parameter descriptions, so the baseline is 3. The description adds value by explaining the relationship between flat arguments and the scenes array, and by highlighting key dependencies (avatar_id, voice_id, output_path) that are essential for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'generates an avatar video with HeyGen and waits until it finishes rendering, returning the final video_url.' This is a specific verb+resource description that distinguishes it from sibling tools like generate_video by emphasizing the synchronous wait-and-return behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It sets expectations for prerequisites (avatar_id from list_avatars, voice_id from list_voices), explains single vs multi-scene usage, and advises checking get_quota for long scripts. It doesn't explicitly contrast with the sibling generate_video tool, but does clarify the primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | No | Video ID to download. Its status must be 'completed'. | |
| video_url | No | Direct video URL, used instead of looking it up by video_id. | |
| output_path | Yes | Absolute path for the .mp4 (e.g. /tmp/demo.mp4). Directory is created if needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the 7-day URL expiration and the automatic URL lookup when video_id is provided. It does not mention auth or side effects, but since downloading is inherently non-destructive, the added context is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose. Every sentence is informative, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple download tool with no output schema, the description covers purpose, input methods, and expiration. A minor gap is that it doesn't explicitly state one of video_id or video_url is required (only output_path is marked required in the schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well-documented. The description adds meaning by clarifying the relationship between video_id and video_url, indicating they serve as alternatives.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads a finished HeyGen video to a local .mp4 file, with a specific verb and resource. It distinguishes from sibling tools that create, generate, check, or list videos, and notes the two input methods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It indicates the tool is for finished videos and explains how to pass video_id or video_url. However, it does not explicitly mention alternatives or when not to use this tool, though the context implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Script the avatar speaks. Max 1500 characters per scene — split longer scripts across scenes. | |
| speed | No | Speech rate (0.5–1.5). Default: 1.0 | |
| title | No | Title shown in the HeyGen dashboard. | |
| locale | No | Locale for multilingual voices, e.g. 'es-MX'. Only for voices with support_locale: true. | |
| scenes | No | Multi-scene video: one entry per scene. Overrides the flat single-scene arguments. | |
| caption | No | Burn subtitles into the video. Default: false | |
| emotion | No | Delivery style. Only works on voices with emotion_support: true. | |
| voice_id | No | HeyGen voice ID. Use list_voices to find one. Required when text is used. | |
| audio_url | No | Public URL of a pre-recorded audio file to lip-sync instead of text+voice_id. | |
| avatar_id | No | HeyGen avatar ID. Use list_avatars to find one. Required unless talking_photo_id or scenes is given. | |
| dimension | No | Output size preset: 1080p_landscape (1920x1080), 720p_landscape (1280x720), 1080p_portrait (1080x1920), 720p_portrait (720x1280), square (1080x1080). | 720p_landscape |
| background | No | Scene background. Omit to keep the avatar's original background. | |
| avatar_style | No | Framing of the avatar. Default: normal | |
| talking_photo_id | No | Talking photo ID, as an alternative to avatar_id. Use list_avatars with include_talking_photos. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden. It discloses the asynchronous nature ('without waiting for rendering'), implies poll-based workflow ('poll yourself with check_video'), and warns of credit consumption ('Consumes account credits'). It could add more on side effects/failure modes, but the key behaviors are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: the first states the action and result, the second gives usage guidance with an alternative, and the third warns of cost. Every sentence earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 params, nested objects, no annotations, no output schema), the description + schema adequately inform an agent. The description clarifies when to use it and its async behavior, and the schema covers all parameter details. It lacks detailed return formatting or error handling, but states it returns video_id, which is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema thoroughly documents all 14 parameters. The description adds no parameter-specific semantics beyond what the schema provides, which aligns with the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool submits a video to HeyGen and returns the video_id immediately without waiting for rendering, which is a specific verb+resource+behavior. It also distinguishes itself from the sibling create_video, satisfying the requirement for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit recommendations are given: use this only when polling with check_video is appropriate (e.g., very long videos), and use create_video otherwise. This is a clear when-to-use/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It transparently discloses the return values (remaining quota in seconds and credits) and explains the billing conversion (1 credit per 60 seconds). This is useful behavioral context, though it doesn't mention authentication or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the purpose, usage timing, and return format with no wasted words. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (no parameters, no output schema), the description fully covers what the agent needs: the purpose, when to call it, and what the response means. The billing explanation adds essential domain context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema is trivially complete. The description adds value by explaining the output semantics (seconds and credits), which is the only meaningful parameter-related context needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as checking remaining HeyGen API credits, using the specific verb 'Check' and naming the resource ('remaining HeyGen API credits'). It distinguishes itself from sibling tools like create_video and list_videos by focusing on quota specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'before generating video', providing clear guidance on when to use the tool. While it doesn't name alternatives, the context is sufficient given that no sibling tool serves a similar quota-checking purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max avatars to return. Default: 30 | |
| search | No | Case-insensitive substring matched against avatar name and ID, e.g. 'piper' or 'business'. | |
| include_talking_photos | No | Also return talking photos (photo avatars) matching the search. Default: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It adds useful context about the large number of avatars and the need to narrow results, but it doesn't detail return format, pagination, or sorting. This is adequate but not exceptionally rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action and then the key usage tip. No wasted words; every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with three well-documented params and no output schema, the description covers purpose, usage, and a critical performance characteristic. It could mention the response structure more explicitly, but it already notes 'with their avatar_id and preview video,' making it fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter (limit, search, include_talking_photos) has a clear description. The description adds minimal extra meaning beyond mentioning 'search term,' so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: listing avatars with their avatar_id and preview video. It uses a specific verb and resource, and naturally distinguishes itself from sibling tools like list_voices and list_videos by explicitly focusing on avatars.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'before picking one for create_video' and strongly advises always passing a search term due to the account scale. It doesn't explicitly mention alternatives or when not to use, but the guidance is actionable and relevant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max videos to return, newest first. Default: 20 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It accurately implies a read-only listing operation, specifies the output fields, and notes the 'recent' scope. It doesn't explicitly state side effects, but for a list operation, non-destructiveness is safely implied. The description adds useful context beyond the schema, such as the workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The first sentence front-loads the purpose and output fields; the second sentence provides practical usage context and a pointer to a sibling tool. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity tool (one parameter, no output schema). The description conveys what it returns (video_id, title, status, creation date) and why it's useful (recover ID for later use). It does not require additional explanation of pagination or return formats given the simplicity and that the schema covers the limit parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single 'limit' parameter with 100% description coverage, including default, min, max, and semantics. The tool description does not add additional parameter meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists recent videos in the HeyGen account and specifies exactly which fields are returned (video_id, title, status, creation date). It distinguishes itself from siblings by providing a concrete follow-up action (pass ID to check_video), making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly frames the primary use case: recovering a video_id for a previously generated video. It also names the alternative tool (check_video) to obtain URL and duration, giving clear guidance on how to proceed after using this tool. This effectively differentiates it from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max voices to return. Default: 30 | |
| gender | No | Filter by voice gender. | |
| search | No | Case-insensitive substring matched against the voice name. | |
| language | No | Language filter, matched as a substring, e.g. 'Spanish' or 'English'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It indicates that the returned objects include compatibility flags (emotion_support, support_locale) that affect downstream create_video calls, providing useful coupling context. Although it does not mention pagination or rate limits, the list operation is clearly read-only and the main behavioral nuances are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, then a targeted usage hint and compatibility explanation. Every sentence earns its place; no redundancies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, the description covers the main purpose, key return fields, filtering intent, and downstream compatibility. It lacks explicit pagination/limit behavior, but that is covered in the schema and the overall description is adequate for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter already described. The description adds semantic guidance—'Filter by language and gender to find a voice'—but does not materially increase understanding of the parameter formats or constraints, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with the resource 'HeyGen voices' and enumerates the returned fields (voice_id, language, gender, preview_audio URL), clearly distinguishing it from sibling tools like list_avatars. It also explicitly connects the purpose to selecting a voice for create_video, further clarifying scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use this tool ('to find a voice for create_video') and provides the key filtering dimensions (language and gender). It gives clear context without naming alternative tools explicitly, which aligns with 'clear context, no exclusions'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.0.0- First observed
check_video - First observed
create_video - First observed
download_video - First observed
generate_video - First observed
get_quota - First observed
list_avatars - First observed
list_videos - First observed
list_voices
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 Google Veo AI video generation
MCP server for Wan 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.16 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
- AlicenseAqualityBmaintenanceMCP 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.438 npm1MIT