Skip to main content
Glama

Animate 3D model with a preset

animate3DModelPreset

Apply a curated animation preset to an already-rigged 3D model (retargeting). Pass the rigged GLB in model (URL or base64; the 3D asset file, not an AI model name) and a preset_id from the animation presets list (from listAnimationPresets; any preset id works). Any rig type can take a preset, though retargeting does not succeed on every model: when it does not, the job fails. The job result is one retargeted animation - a standalone animation-only GLB in glb_url plus an mp4 preview_url - in the same animations envelope as the animate endpoint. crop_loop trims the clip to its seamlessly-looping span (omit to follow the preset's own loop flag); in_place removes net travel so the character moves on the spot, as game-engine locomotion expects (omit to keep the preset's own travel). Credits are held when the job is accepted and refunded if it fails or is cancelled. Async generation job: returns {id, status} - poll getApiJob (job and credit contract: see the server instructions).

Credits: This endpoint consumes 0.5 credits per call.

Input Schema

NameRequiredDescriptionDefault
requestBodyYesPayload for animating a rigged 3D model with a preset animation

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / requestBody / properties / model / description
      Previous value: -"The already-rigged 3D asset, as a URL or base64-encoded GLB file (not an AI model name). Rig it first, with rigModel or with create3DModel's rig (any rig type)."New value: +"The already-rigged 3D asset, as a URL or base64-encoded GLB file (not an AI model name). Rig it first, with rigModel or with create3DModel's rig (any rig type). Up to 30MB; a larger file is rejected with HTTP 400."
  2. Changed1 schema field changed
    • addedInput schema / properties / requestBody / description
      Added value: +"Payload for animating a rigged 3D model with a preset animation"
  3. Changed1 schema field changed
    • changedInput schema / properties / requestBody / properties / model / description
      Previous value: -"The already-rigged 3D asset, as a URL or base64-encoded GLB file (not an AI model name). Rig it with rigModel using rig_type humanoid_template or humanoid_template_hands first."New value: +"The already-rigged 3D asset, as a URL or base64-encoded GLB file (not an AI model name). Rig it first, with rigModel or with create3DModel's rig (any rig type)."
  4. Changed1 schema field changed
    • changedInput schema / properties / requestBody / properties / preset_id / description
      Previous value: -"id of an animation preset from the presets list. Only presets that expose a clip_url can be applied to a 3D model."New value: +"id of an animation preset from listAnimationPresets. Any preset id from that list works."
  5. Changed3 schema fields changed
    • changedInput schema / properties / requestBody / properties / in_place / description
      Previous value: -"Remove the animation's net travel so the character moves on the spot (engine-driven locomotion). Omit to follow crop_loop."New value: +"Remove the animation's net travel so the character moves on the spot (engine-driven locomotion). Omit to keep the preset's own travel."
    • changedInput schema / properties / requestBody / properties / model / description
      Previous value: -"URL or base64-encoded already-rigged GLB (rig it with a humanoid_template rig_type first)."New value: +"The already-rigged 3D asset, as a URL or base64-encoded GLB file (not an AI model name). Rig it with rigModel using rig_type humanoid_template or humanoid_template_hands first."
    • changedInput schema / properties / requestBody / properties / request_id / description
      Previous value: -"Optional client-provided identifier, unique per request. Re-sending the same request_id returns the existing job instead of generating again. Also usable with the results endpoint."New value: +"Optional client-provided identifier, unique per request. Re-sending the same request_id returns the existing job instead of generating again. Also usable as the request_id filter of listGenerations."
  6. Changed1 schema field changed
    • changedInput schema / properties / requestBody / properties / request_id / description
      Previous value: -"Optional client-provided id to retrieve the result later."New value: +"Optional client-provided identifier, unique per request. Re-sending the same request_id returns the existing job instead of generating again. Also usable with the results endpoint."
  7. Changed1 schema field changed
    • changedInput schema / properties / requestBody / properties / model / example
      Previous value: -"<url> OR data:image/png;base64,..."New value: +"<url> OR data:model/gltf-binary;base64,..."
  8. Added

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only declare that this is a non-read-only, non-idempotent, non-destructive, closed-world write. The description goes well past that: credits are held on acceptance and refunded on failure/cancellation, the call is async and returns {id, status} that must be polled via getApiJob, and jobs can outright fail when retargeting doesn't take. It also pins the output shape (animation-only GLB in glb_url plus an mp4 preview in the same animations envelope), which the annotations can't convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single dense block that front-loads the action, then the inputs, then the failure and output behavior, with the credit note last. Every sentence carries information, though the crop_loop/in_place explanations repeat the schema and the paragraph is long enough that the async/polling instruction could get lost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description has to carry return values, and it does: {id, status} from the call, glb_url and preview_url in the animations envelope from the finished job. With complexity driven by an async job, credit consumption, and a nested request body, it covers prerequisites, failure handling, polling, and cost — nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every field, including the crop_loop and in_place semantics the description largely restates. The one genuinely additive clarification is that model is a 3D asset file rather than an AI model name — a real disambiguation given siblings like create3DModel — plus the note that any preset id is acceptable, but the rest is duplication rather than new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Apply a curated animation preset to an already-rigged 3D model (retargeting).' It clearly distinguishes itself from listAnimationPresets (which supplies the preset_id) and from rigModel (a stated prerequisite), but it never explicitly contrasts itself with its closest siblings, animate3DModel and transferMotion, leaving the agent to infer the split.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Prerequisites and sourcing are explicit: the model must be rigged first, via rigModel or create3DModel's rig, and preset_id must come from listAnimationPresets. It also states that any preset id works and that retargeting is not guaranteed, so the agent knows what to do on failure. What's missing is an explicit 'use this instead of X when Y' rule against animate3DModel/transferMotion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.