https://mcp.contenthero.ai and by the @contenthero/mcp npm package. A write tool changes your account; a read tool does not.
list_avatars
read
List the account’s avatars. Each avatar has an imageUrl (its base look) and a defaultVoiceId, which feed generate_lip_sync. Call get_avatar for full detail and the avatar’s looks.
string
The previous page’s cursor.
integer
How many to return.
get_avatar
read
Get one avatar by id: its base image (use as generate_lip_sync imageUrl), default voice, traits, and its looks (outfit variations).
string
required
The avatar id from list_avatars.
create_avatar
write
Create a reusable character and start generating its first look. SPENDS CREDITS (pass getCost to preview the price without creating anything). Returns as soon as the record exists: the avatar is NOT usable yet, it sits at status ‘processing’ with no image until its first look finishes, so poll get_avatar until status is ‘completed’. Supply referenceImageUrls to make the avatar a likeness of a real person from their photos; omit them to invent a character from the description and traits.
string
required
Apparent age, e.g. ’20s’, ‘35’, ‘middle-aged’. Required: the prompt writer describes the character from these traits.
string
required
Gender presentation. Required, same reason as age.
string
required
Avatar name, at least 3 characters.
string
A voiceId from list_voices, used as this avatar’s default voice.
string
Free-text description of the character. The strongest single input when no reference photos are given.
string
Optional ethnicity, for a more specific likeness.
boolean
Return the credit cost estimate instead of creating (nothing runs, nothing is charged).
string[]
Content niches this character is for, e.g. [“fitness”,“nutrition”].
string[]
Photos of a REAL PERSON to anchor identity to: each a URL or a previous output id. Only use photos of someone who has agreed to being cloned.
string
Visual style hint for the portrait, e.g. “editorial”, “cinematic”. Not stored on the avatar.
update_avatar
write
Update an avatar and/or change its looks. Fields: name, defaultLookId (also becomes the avatar’s profile photo), defaultVoiceId. Looks are changed through ops, the same shape update_timeline and update_canvas use: add_look files images the account ALREADY OWNS onto the avatar, remove_look trashes one (recoverable for 30 days). Ops run before the fields, so one call can add a look and make it the default. To GENERATE a new look instead of filing an existing image, call generate_image with avatarId.
string
required
The avatar id from list_avatars.
string
Place it immediately after this item of the same list.
string
Place it immediately before this item of the same list.
string
A look id from get_avatar. Becomes the avatar’s default look AND its profile photo.
string,null
A voiceId from list_voices, or null to clear it.
string
New name, at least 3 characters.
value[]
Look changes, applied in order before the field updates. NOT a transaction: a failure part-way leaves earlier ops applied.
`top` \| `bottom`
Place it at an end of the list instead of beside an item. Name neighbors or a position, not both.
delete_avatar
write
Delete an avatar. Soft: the avatar stops appearing, but ITS LOOKS SURVIVE as library images and can be filed onto another avatar with update_avatar’s add_look. Use this to retire a duplicate or an abandoned character, after moving any looks worth keeping.
string
required
The avatar id from list_avatars.
list_voices
read
List the account’s saved voices (favorites first). Set favorited=true to show only favorites. Each has a voiceId for generate_lip_sync / generate_audio (TTS). Call get_voice for full detail.
string
The previous page’s cursor.
boolean
Only favorited voices.
integer
How many to return.
get_voice
read
Get one voice by its voiceId: provider, traits (accent/language/gender/age), description, and a preview URL.
string
required
The voice id from list_voices.
list_kling_elements
read
List the account’s saved Kling elements. A Kling element is Kling 3.0’s saved reference for one character, location or prop: 2-4 images (or one video) of it under a name, so the subject stays consistent across Kling video generations. Use one in generate_video’s klingElements by klingElementId, and as @name in the prompt.
string
The previous page’s cursor.
integer
How many to return.
get_kling_element
read
Get one saved Kling element by id: its name, category, description, and images.
string
required
The Kling element id.
create_kling_element
write
Create a Kling element: a saved reference for one character, location or prop that keeps it consistent across Kling 3.0 video generations. Give it 2-4 images (or one video) of that one subject; images may be URLs or output-id tokens, so you can generate the angle shots first and assemble the Kling element from them. Use it later in generate_video’s klingElements [{ klingElementId }] and as @name in the prompt.
string
required
What the Kling element represents (required).
string
required
Referenced in the prompt as @name.
`auto` \| `character` \| `location` \| `prop`
Kind of entity (default ‘auto’).
string[]
2-4 image URLs or output-id tokens.
string
A single video URL or output-id token (alternative to images).
update_kling_element
write
Update a saved Kling element’s name, description, or category.
string
required
The Kling element id.
`auto` \| `character` \| `location` \| `prop`
What kind of Kling element this is. ‘auto’ lets the server classify it from the image.
string
What this Kling element is, in words. This is what makes it findable later.
string
Rename the Kling element.
delete_kling_element
write
Permanently delete a saved Kling element. Videos already generated with it are unaffected.
string
required
The Kling element id.