ElevenLabs Creative Studio (via MCP)
Workflow guidance for the creative_* tools on the ElevenLabs MCP server. Every
tool takes a context parameter — briefly state the user's goal in it. For
building media features into the user's own codebase (SDK, API), use the general
skills instead (text-to-speech, music, sound-effects, speech-to-text).
How generations work
creative_generate_speech,creative_generate_image, andcreative_generate_videoreturn immediately with aflow_id,node_id,session_ids, and a canvasurlthe user can open to keep editing. If the result doesn't render in a view, pollcreative_get_flow_run_statusuntilall_completedorhas_failuresis true.- Generations spend credits. Pass
estimate_only: trueto price a long video or a batch of variations before committing. Never call a generation tool a second time to "retry" — that starts and charges a second generation. generations_countdefaults to 4 variations so the user can pick; keep the default unless they ask for a specific number.
Speech
voice_idis required and only ever comes fromcreative_list_voices(or the user) — never from memory. Pick a voice matching what the user described; if they gave no hint, pick a clear general-purpose voice rather than asking.- Default model:
eleven_multilingual_v2. Useeleven_v3when the script uses inline audio direction tags like[whispering]or[laughs softly].
Images
- Default model:
gemini-2.5-flash-image. Pick by need:gpt-image-2for rendered text, infographics, UI mockups, or reference-driven edits;flux-2-profor fine detail and strict prompt adherence. creative_get_flow_node_typeslists what the workspace can run;creative_get_model_guideexplains how to prompt a specific model.
Flows: combining generations
- Nodes on different flows cannot be connected. When one generation feeds
another (lipsync, a voiceover over video), call
creative_create_flowfirst and pass thatflow_idto every related call. - Wire upstream nodes with
connect_from. Anode_idonly ever comes from a tool result orcreative_get_flow— never invent one. creative_edit_imagerequiresconnect_from: a node from an earlier generation on the same flow, a library asset, or an upload.
Reference files and transcription
- For a file already reachable (attached to the conversation, or a direct
link):
creative_attach_reference_file— returns a node with content. - For a file on the user's machine:
creative_upload_flow_reference— the node stays empty until the user picks a file, so confirm it has an asset (viacreative_get_flow) before generating from it. - Transcribe with
creative_transcribe_audio, passing the audio node's id asconnect_from; without it, a picker handles upload and transcription on its own — don't call the tool again or poll while it's open.