> ## Documentation Index
> Fetch the complete documentation index at: https://docs.contenthero.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Avatars, voices and Kling elements

> The identity layer: avatars with their looks, the voices they speak with, and the Kling elements that keep a character, location or prop consistent across Kling generations.

The identity layer: avatars with their looks, the voices they speak with, and the Kling elements that keep a character, location or prop consistent across Kling generations. 12 tools.

Every tool below is exposed by the hosted MCP server at `https://mcp.contenthero.ai` and by the `@contenthero/mcp` npm package. A <Badge>write</Badge> tool changes your account; a <Badge>read</Badge> tool does not.

### `list_avatars`

<Badge>read</Badge>

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.

<ParamField body name="cursor" type="string">
  The previous page's cursor.
</ParamField>

<ParamField body name="limit" type="integer">
  How many to return.
</ParamField>

### `get_avatar`

<Badge>read</Badge>

Get one avatar by id: its base image (use as generate\_lip\_sync imageUrl), default voice, traits, and its looks (outfit variations).

<ParamField body name="avatarId" type="string" required>
  The avatar id from list\_avatars.
</ParamField>

### `create_avatar`

<Badge>write</Badge>

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.

<ParamField body name="age" type="string" required>
  Apparent age, e.g. '20s', '35', 'middle-aged'. Required: the prompt writer describes the character from these traits.
</ParamField>

<ParamField body name="gender" type="string" required>
  Gender presentation. Required, same reason as age.
</ParamField>

<ParamField body name="name" type="string" required>
  Avatar name, at least 3 characters.
</ParamField>

<ParamField body name="defaultVoiceId" type="string">
  A voiceId from list\_voices, used as this avatar's default voice.
</ParamField>

<ParamField body name="description" type="string">
  Free-text description of the character. The strongest single input when no reference photos are given.
</ParamField>

<ParamField body name="ethnicity" type="string">
  Optional ethnicity, for a more specific likeness.
</ParamField>

<ParamField body name="getCost" type="boolean">
  Return the credit cost estimate instead of creating (nothing runs, nothing is charged).
</ParamField>

<ParamField body name="niche" type="string[]">
  Content niches this character is for, e.g. \["fitness","nutrition"].
</ParamField>

<ParamField body name="referenceImageUrls" type="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.
</ParamField>

<ParamField body name="style" type="string">
  Visual style hint for the portrait, e.g. "editorial", "cinematic". Not stored on the avatar.
</ParamField>

### `update_avatar`

<Badge>write</Badge>

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.

<ParamField body name="avatarId" type="string" required>
  The avatar id from list\_avatars.
</ParamField>

<ParamField body name="afterId" type="string">
  Place it immediately after this item of the same list.
</ParamField>

<ParamField body name="beforeId" type="string">
  Place it immediately before this item of the same list.
</ParamField>

<ParamField body name="defaultLookId" type="string">
  A look id from get\_avatar. Becomes the avatar's default look AND its profile photo.
</ParamField>

<ParamField body name="defaultVoiceId" type="string,null">
  A voiceId from list\_voices, or null to clear it.
</ParamField>

<ParamField body name="name" type="string">
  New name, at least 3 characters.
</ParamField>

<ParamField body name="ops" type="value[]">
  Look changes, applied in order before the field updates. NOT a transaction: a failure part-way leaves earlier ops applied.
</ParamField>

<ParamField body name="position" type="`top` \| `bottom`">
  Place it at an end of the list instead of beside an item. Name neighbors or a position, not both.
</ParamField>

### `delete_avatar`

<Badge>write</Badge>

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.

<ParamField body name="avatarId" type="string" required>
  The avatar id from list\_avatars.
</ParamField>

### `list_voices`

<Badge>read</Badge>

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.

<ParamField body name="cursor" type="string">
  The previous page's cursor.
</ParamField>

<ParamField body name="favorited" type="boolean">
  Only favorited voices.
</ParamField>

<ParamField body name="limit" type="integer">
  How many to return.
</ParamField>

### `get_voice`

<Badge>read</Badge>

Get one voice by its voiceId: provider, traits (accent/language/gender/age), description, and a preview URL.

<ParamField body name="voiceId" type="string" required>
  The voice id from list\_voices.
</ParamField>

### `list_kling_elements`

<Badge>read</Badge>

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.

<ParamField body name="cursor" type="string">
  The previous page's cursor.
</ParamField>

<ParamField body name="limit" type="integer">
  How many to return.
</ParamField>

### `get_kling_element`

<Badge>read</Badge>

Get one saved Kling element by id: its name, category, description, and images.

<ParamField body name="klingElementId" type="string" required>
  The Kling element id.
</ParamField>

### `create_kling_element`

<Badge>write</Badge>

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.

<ParamField body name="description" type="string" required>
  What the Kling element represents (required).
</ParamField>

<ParamField body name="name" type="string" required>
  Referenced in the prompt as @name.
</ParamField>

<ParamField body name="category" type="`auto` \| `character` \| `location` \| `prop`">
  Kind of entity (default 'auto').
</ParamField>

<ParamField body name="images" type="string[]">
  2-4 image URLs or output-id tokens.
</ParamField>

<ParamField body name="video" type="string">
  A single video URL or output-id token (alternative to images).
</ParamField>

### `update_kling_element`

<Badge>write</Badge>

Update a saved Kling element's name, description, or category.

<ParamField body name="klingElementId" type="string" required>
  The Kling element id.
</ParamField>

<ParamField body name="category" type="`auto` \| `character` \| `location` \| `prop`">
  What kind of Kling element this is. 'auto' lets the server classify it from the image.
</ParamField>

<ParamField body name="description" type="string">
  What this Kling element is, in words. This is what makes it findable later.
</ParamField>

<ParamField body name="name" type="string">
  Rename the Kling element.
</ParamField>

### `delete_kling_element`

<Badge>write</Badge>

Permanently delete a saved Kling element. Videos already generated with it are unaffected.

<ParamField body name="klingElementId" type="string" required>
  The Kling element id.
</ParamField>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.