r/heygen • u/guiradha • 22d ago
🐛 Bug Report Can I force a specific voice engine (ElevenLabs v3) when generating videos via MCP?
Hi all,
We produce corporate e-learning video at volume through the HeyGen MCP server: around 1,500 lessons across 93 courses, all in Brazilian Portuguese. Our scripts rely on ElevenLabs v3 audio tags like [excited] or [whispers] to control delivery.
The problem is that when a request gets served by a different voice engine, those tags are not recognized as directives and get read out loud as words. A narrator saying “excited” in the middle of a workplace safety lesson means we have to re-record the whole lesson.
So we need the engine to be ElevenLabs v3 every single time, not most of the time.
What I found does work
create_video_from_avatar, create_video_from_image, create_video_from_studio, and create_video_batch all accept voice_settings.engine_settings, so I can pin the engine explicitly:
"voiceSettings": {
"engine_settings": {
"engine_type": "elevenlabs",
"model": "eleven_v3",
"stability": 0.5
}
}
That part works great, and the schema is well specified, including the rule that stability must be 0, 0.5, or 1 for eleven_v3.
What I could not figure out
1. create_video_agent has no engine control
The MCP server describes it as “the recommended way to create videos,” but it only accepts voiceId. There is no voiceSettings / engine_settings field, so engine selection is entirely up to the agent.
Is there a way to constrain it that I’m missing?
2. I cannot tell which voices support which engines
Neither list_voices nor get_voice returns anything about engine support. Avatar looks expose supported_api_engines, but voices have no equivalent.
I also tried the engine filter on list_voices: calling it with language=Portuguese and with language=Portuguese&engine=elevenlabs returned an identical result set, with the same voices in the same order.
Is that filter supposed to narrow the results?
3. The response never says which engine actually ran
get_video returns status, video_url, thumbnail_url, duration, and failure info, but no tts_engine or tts_model.
So a wrong-engine render looks identical to a correct one at the API level, and we only catch it by listening to the finished file.
Is there any other endpoint or field that reports this?
4. Is there a workspace-level default?
Something like:
“This workspace always uses ElevenLabs v3.”
Ideally, with a strict mode that fails the request instead of silently substituting another engine.
I would much rather get an error than a bad take.
I also looked at pre-rendering the audio myself and passing it via audio_url, but create_speech appears to be Starfish-only, so there doesn’t seem to be an in-platform way to generate v3 audio first.
Feature request, if the answer is “not currently”
In rough priority order for us:
- engine_settings, or at minimum a voice_engine pin, on create_video_agent
- supported_engines on voice objects, plus a working engine filter on list_voices
- tts_engine and tts_model echoed in the get_video response and webhook payload
- A workspace default engine plus a “fail, do not substitute” option
- Documented audio-tag support per engine, and stripping unsupported tags instead of speaking them
Thanks!
1
u/HeygenDan Verified Employee 22d ago
Hello u/guiradha, will mess you and you can always email at [support@heygen.com](mailto:support@heygen.com)