Skip to main content
Glama
Cartwhl
by Cartwhl

Cartwheel MCP

Create and auto-rig characters. Generate, capture and edit their motion.

Cartwheel MCP connects your AI assistant to Cartwheel's public API. Create a character from text or an image, upload and auto-rig your own model, then animate it. Generate body motion from text with swing-edit, constrain it with Motion Editor controls, or capture up to four performers from a video with Comic 4, including facial animation. Edit performances with paths and poses, loop or stitch clips, measure motion metadata, and run the bundled Three.js game reference.

After Hours — generated motion rendered in Blender

Watch the Blender demo · Production setup walkthrough · MCP Blender workflow · More Blender examples

Three generated characters, one Blender scene

Lantern Port — three generated characters animated with Comic 4 and swing-edit

Lantern Port takes three text descriptions through character generation and auto-rigging, combines Comic 4 acting with swing-edit walking, then renders a miniature skyport with four camera shots and a frog close-up. The example includes the three rigged assets, exact prompts, reproducible Blender scripts, and the reviewed shoulder, face and Gaussian foot-contact fixes.

Watch Lantern Port · Rebuild the scene · Create and auto-rig characters

Related MCP server: Blender MCP Server

What you need

  • Node.js 22 or newer and Git.

  • A Cartwheel production account with API access and a project API key. Check the current plans; API access is not included in every plan.

  • An MCP client that can launch local stdio servers. This repository runs on your machine; it is not a hosted MCP URL.

  • Blender only if you want to render the examples. The MCP server itself does not require Blender.

1. Get a Cartwheel API key

  1. Open Cartwheel, choose an API-enabled plan, and create your account. Complete email verification and any plan setup shown by the site.

  2. Open your Cartwheel dashboard and select API keys.

  3. Create or reveal a key for your workspace/project. Key management may require a workspace administrator.

  4. Copy the secret key value. The project ID and API Gateway key ID are not substitutes.

The setup guide includes a recording of the actual production signup interface and the steps that follow.

2. Install

git clone https://github.com/Cartwhl/cartwheel-mcp.git
cd cartwheel-mcp
npm ci

There is no compilation step. The source runs directly on Node.js.

3. Connect your assistant

For clients with a JSON mcpServers configuration, add the following. Replace the absolute path and provide your own key through the client's environment or secret settings:

{
  "mcpServers": {
    "cartwheel": {
      "command": "node",
      "args": ["/absolute/path/to/cartwheel-mcp/src/index.mjs"],
      "env": {
        "CARTWHEEL_API_KEY": "YOUR_CARTWHEEL_PROJECT_API_KEY"
      }
    }
  }
}

Use an absolute path: clients may launch the process from a different working directory. Restart or reconnect the client after changing its configuration.

For Codex, add this to ~/.codex/config.toml and make CARTWHEEL_API_KEY available in the environment that launches Codex:

[mcp_servers.cartwheel]
command = "node"
args = ["/absolute/path/to/cartwheel-mcp/src/index.mjs"]
env_vars = ["CARTWHEEL_API_KEY"]

See the Codex MCP configuration documentation for app setup and environment settings.

For a local terminal session, you can instead copy .env.example to .env, enter your key there, and run npm start. The .env file is gitignored. A running stdio server waits quietly for MCP input; it does not display a web page.

4. Choose a motion workflow

Option

Use it for

Entry point

swing-edit

Fresh text-to-motion, paths, poses and constrained editing. Used by the MHR game example.

edit_motion; read the swing_edit_motion prompt or cartwheel://workflows/swing-edit.

Swing

Standalone text generation in batches.

generate_motion with requestedModel: "swing".

Comic 4

Video capture with one to four performers and optional faces.

generate_motion_from_video.

For swing-edit, ask:

Use the swing-edit workflow. Find an accessible seed motion, create an isolated scene on MHR, and generate a new relaxed walk from text only. Review the completed performance, apply it, then export the scene with root travel intact.

swing-edit uses an existing scene timeline slot as its skeleton and export template. Text-only requests omit both constraints and keyPoses; the old body performance does not condition generation. Source-dependent hierarchy and unmapped finger channels still need attention. The swing-edit guide covers character selection, static hand poses and the complete lifecycle. Use edit_motion for swing-edit; generate_motion.requestedModel belongs to the separate standalone generation API.

For a standalone Swing batch, try:

List my Cartwheel characters. Use one to generate an eight-second joyful disco dance with Swing. Submit it once, check the batch until it finishes, and give me the BVH download link.

The workflow is:

list_characters → generate_motion → get_batch → list_batch_motions → download BVH

Generation is asynchronous and consumes Cartwheel credits. Submitting another generation does not check the first one; it starts another job. Poll the returned batch instead.

Example generate_motion arguments:

{
  "batchName": "My first MCP animation",
  "prompts": ["A person dancing a playful disco groove in place"],
  "requestedModel": "swing",
  "swingProperties": { "duration": 8 },
  "exportSettings": {
    "characterID": "REPLACE_WITH_AN_ID_FROM_LIST_CHARACTERS",
    "exportType": "bvh",
    "forward": "Z",
    "up": "Y",
    "frameRate": 24,
    "frameStepSize": 1
  }
}

For list_batch_motions, pass both batchID and limit (for example, 10). Responses retain the API's pagination tokens and download URLs. Asset URLs can expire; retrieve the motion again for a fresh link.

Tools

Tool

What it does

generate_motion

Submit text prompts with model and export settings. Consumes credits.

create_media_upload

Prepare signed upload slots for videos or character-reference images. The client uploads the bytes.

get_media

Retrieve reference-media metadata and a fresh download URL.

generate_motion_from_video

Capture a video with Comic 4, one to four actors, and optional faces. Consumes credits.

get_batch

Check an asynchronous batch's status and progress.

list_batch_motions

Get a batch's motions, BVH links, and previews.

get_motion

Retrieve a motion and optional character/export parameters.

list_motions

Browse recent generations.

search_motions

Search the motion library by text, category, or tags.

list_characters

Find accessible character IDs and assets.

get_character

Poll character generation or auto-rigging and retrieve assets for the exact requested ID.

prepare_character_generation

Prepare a character from a text prompt or uploaded image. Consumes credits.

submit_character_generation

Start generation using the prepared job ID; returns a character ID for polling.

create_character_upload

Prepare signed model/config/optional thumbnail upload slots.

submit_character_upload

Auto-rig an uploaded mesh or detect an existing rig after bytes are uploaded.

list_scenes

Browse scenes.

get_scene

Inspect one scene.

create_scene

Create an editable scene from accessible motion IDs.

loop_motion

Trim and loop an existing motion; creates a new motion.

stitch_motions

Trim/blend two motions in order; creates a new motion.

edit_motion

Generate with swing-edit from text, or constrain motion with paths, poses, hand/foot controls and curved repathing. Consumes credits.

edit_key_poses

Regenerate with swing-edit around compatible native pose snapshots. Consumes credits.

save_key_poses

Save or clear the complete editor pose list without generation.

set_scene_character

Retarget an existing scene object to the selected accessible character.

list_motion_edits

Inspect edit history for a scene timeline slot.

get_motion_edit

Check a submitted edit and retrieve its completed output.

apply_motion_edit

Apply a reviewed, completed edit to its verified scene slot, or revert using a completed historical job.

export_scene

Export the scene on its chosen characters, including applied swing-edit edits.

get_scene_exports

Check scene exports and retrieve fresh download links.

analyze_motion

Measure contacts, root travel, strides, flight candidates and loop endpoints; inspect setup-frame handling.

List pagination uses nextToken. Search requires pageSize and uses the response's lastSort array as searchAfter.

Character creation and auto-rigging

Use create_rigged_character or cartwheel://workflows/characters. Ask your assistant:

Create a friendly forest courier from this reference image, wait for the rigged character, and test a short swing-edit walk in Blender.

Or:

Upload this GLB, auto-rig it, download the rigged GLB and config, and inspect the shoulders and knees with a short animation.

Text/image: prepare_character_generation → submit_character_generation → get_character
Model:     create_character_upload → upload bytes → submit_character_upload → get_character

For a reference image, first use create_media_upload and upload the PNG, JPG, JPEG or WebP bytes. Preparation accepts exactly one prompt or mediaID and consumes credits. A model upload needs no config to start: the API auto-rigs unrigged meshes and detects existing rigs. The client handles file bytes with the bundled upload helper.

Wait for uploadStatus: "COMPLETE" and actual deliverables. For uploaded models, use baseFbxURL or baseGlbURL for the rigged result; characterFileURL may still be the original unrigged mesh. Generation's 3D_CONVERT_COMPLETE is not rig completion. Failed or validation-required jobs need inspection, not automatic resubmission.

The complete character workflow covers optional configs, processing states, timeout recovery, downloads and reuse with swing-edit. Review the resulting rig with a short animation before building a full scene. Auto-rigging does not promise facial blendshapes or conversion to MHR.

swing-edit game animation and Motion Editor

Version 0.7.0 includes the swing-edit Motion Playground: one MHR character, four swing-edit body performances, idle/walk/run transitions, an interruptible right-arm signal, contact-driven effects and a small crowd. Static hand poses are chosen explicitly. The native MHR pose corrections handle deformation; there is no consumer shoulder-rotation patch.

npm run example:game

Open the printed localhost URL. The bundled game needs no API key. Walk/run cadence follows actual movement distance through reviewed interior cycles. Hip sway is retained; the signal replaces the corresponding right-arm locomotion tracks. Source & metrics shows each swing-edit prompt and the playback measurements. Each clip’s metadata also records its seed, skeleton identity and source/prepared hashes. The preparation helper handles setup frames, trims, event remapping and measured travel.

Two MCP workflows work together:

  • swing_edit_motion / cartwheel://workflows/swing-edit: generate, constrain, review, apply and export.

  • game_ready_animation / cartwheel://workflows/game: prepare compatible assets and integrate them into the playable controller.

find an accessible seed motion → create_scene → get_scene
  → set_scene_character → edit_motion / edit_key_poses
  → get_motion_edit → review → apply_motion_edit
  → export_scene → get_scene_exports
  → client prepares BVH + metadata → Three.js game

The swing-edit workflow documents every supported Motion Editor primitive:

Primitive

Controls

Fresh text motion

Prompt, duration and optional seed; omit constraints and key poses.

Root path and facing

Sparse or dense X/Z waypoints and optional heading pairs.

Full-body or native key poses

Timed local rotations and root positions; native snapshots retain the exact scene BVH order and units.

Hand, foot and selected effectors

Left/right hand or foot, or a selected set of hands, feet and hips. These require correctly converted swing-edit SOMA-30 or SOMA-77 poses.

Curved repathing

Bézier handles, holds, tangent/original heading, source-detail preservation and optional pose/effector stamps.

Editor state and delivery

Save/clear poses, inspect history, apply/revert, change character and export the applied scene.

Read the coordinate contracts before constructing constraints: inline positions are meters, native pose positions retain source units, and rotations are axis-angle radians. End-effector constraints do not remap arbitrary MHR or Axel pose arrays. The bundled SOMA-30 joint order identifies the expected order; it is not a rig converter. Ordinary inline constraints and native key poses cannot be mixed; the documented built-in repath envelope is the supported exception.

Edits are asynchronous and consume credits. Submit once and poll the existing job. Loop/stitch operations act on motion IDs, not editor job IDs or unapplied scene edits; they create new motion IDs and can take up to four minutes. After an uncertain mutation, inspect existing state before resubmitting.

Contacts are kinematic estimates. Authored signal/VFX timing is separate. Selected cycles, transitions, masks and character retargets still need visual review; switching to swing-edit is not a general repair for every motion/character combination. The audit records the changes and limits.

See the game workflow, runnable example and asset provenance. Reconnect the MCP after updating to discover 30 tools and five workflows.

Comic 4: video to editable 3D

One video, two performers — Comic 4 capture recast in Blender

Watch the 10-second camera reveal · Clean Blender shot · How the demo was made

The demo captures two performers together, preserves their timing and placement, and turns them into botanical androids in a conservatory. A moving Blender camera shows a viewpoint absent from the reference. The scene, costumes and camera work are authored; Comic 4 supplies the body, hand and facial performances.

Ask your assistant:

Use the Comic 4 Blender workflow to capture both people and their faces from this video. Keep their relative placement, import the complete performance into Blender, and render a camera angle that wasn't in the original video.

The comic4_blender_scene prompt and cartwheel://workflows/comic4 resource provide the full process:

create_media_upload → client PUTs video bytes → generate_motion_from_video
  → get_batch → list_batch_motions → import every actor into Blender

Use an authorized video of at most 30 seconds and less than 250 MB. Select comicModel: "comic4", set numPeople explicitly for a group, and enable facialCapture when needed. The runnable upload helper and complete request example explain each step. The helper runs through your client's local execution tools; the MCP server has no filesystem access tool.

Capture returns editable performance data, not a finished scene. Preserve actor indices and shared world placement. Retrieve all body and face outputs from list_batch_motions, including the source-camera FBX when available. The API's legacy faceURLs[i].bvhURL field points to an MHR FBX, not a BVH; a custom character needs a compatible rig or facial retargeting. Use get_motion with characterID and bodyIndex to retarget a particular actor's body. See the Comic 4 workflow for import checks and camera-reveal guidance.

After updating, reconnect your MCP server to discover the new tools, prompt, and resource.

Default Blender workflow in MCP

The server exposes the approved grounding and rendering process directly through MCP:

  • Prompt: grounded_blender_scene, with an optional scene description.

  • Resource: cartwheel://workflows/blender.

  • Bundled files: Blender scripts, validation, and all four generated example motions under examples/blender/.

Choose the prompt in a client that supports MCP prompts, or ask your assistant:

Use Cartwheel's grounded Blender workflow to make a playful robot scene. Start with a motion preview, check foot contact and pose continuity, then render the final movie.

The server instructions direct Blender requests to this workflow. The complete guide covers generation, preserved root travel, Gaussian contact easing, stable knee IK, continuous foot yaw, validation, and final rendering. The example driver runs the contact and continuity checks before rendering movies. Your MCP client's authorized local tools run Blender and handle files.

After updating this repository, restart or reconnect the MCP server so your client discovers the new prompt and resource.

The examples use Cartwheel-generated BVH motion, procedural characters and sets, and Blender Cycles rendering. The scene source and original music are included.

Example

Style

Motion

After Hours

Glossy neon toy diorama

Two generated dances and an animated DJ

Slow Morning

Pastel paper-and-clay garden

Flowing tai chi

Moon Mail

Cinematic lunar miniature

Generated walking on a curved Blender trajectory

Slow Morning — tai chi in a pastel garden

Moon Mail — a lunar courier

See the Blender guide for source files, rendering instructions, and motion provenance.

Paths and poses: generate_motion is text generation. Use the new edit_motion and edit_key_poses tools for Motion Editor conditioning. The older Moon Mail demo uses a Blender trajectory and contact solve; it was not generated with these editor tools.

Security and scope

  • Calls go to Cartwheel's fixed public production API using your own project key.

  • The server exposes 30 explicit tools. It has no generic HTTP proxy, database access, shell tools, account administration, billing, or deletion tools.

  • analyze_motion reads bounded BVH assets only from approved Cartwheel production storage. API keys are never sent to asset storage. The optional game server is a separate loopback-only process without an API proxy.

  • It does not expose callback registration, subscriber management, or impersonation fields.

  • Requests are validated, redirects are rejected, and failed requests are never automatically retried.

  • Keys stay in the local environment. They are not bundled in the package or examples.

  • Tool results are visible to your MCP client and its model provider. Treat returned metadata as data, not instructions.

Read SECURITY.md for the trust boundary and reporting details.

Troubleshooting

Symptom

Action

CARTWHEEL_API_KEY is required

Supply the key in the environment of the process your MCP client launches.

HTTP 403

Check the secret key, production environment, workspace permissions, and API-enabled plan.

Invalid arguments

Read the tool's schema. Text generation requires prompts and requestedModel; video capture requires mediaIDs and comicModel: "comic4". Both require complete exportSettings.

Video capture cannot read the reference

Creating a media slot does not upload the video. Complete the signed PUT before submitting capture.

Character is still unrigged after download

Wait for COMPLETE; for uploads, use baseFbxURL/baseGlbURL, not the original characterFileURL.

Character preparation times out

It may have consumed credits. Do not repeat automatically. Preserve any returned job ID; see the character workflow for recovery.

HTTP 429

Respect retryAfter and your plan's batch/concurrency limits.

Generation times out

It may have been accepted. Check recent motions before submitting again.

Server starts but prints nothing

Expected for stdio. Connect an MCP client to communicate with it.

Hosted-only client asks for a URL

This version is local stdio. A GitHub repository URL is not an MCP endpoint.

Development

npm ci
npm test
npm pack --dry-run

Tests use the official MCP client, in-memory transports, and a real stdio subprocess. They validate tool and workflow discovery, prompt/resource retrieval, request schemas, authentication, pagination, character generation, model/image upload, auto-rig submission and status handling, motion generation submission, error redaction, route boundaries, and package contents without using real credentials or spending credits.

src/tools.json, src/game-tools.mjs, src/swing-edit-constraints.mjs, src/scene-tools.mjs and src/character-tools.mjs contain the selected authenticated API contracts. Keep changes aligned with the public Cartwheel API documentation. The server is self-contained and does not require any other Cartwheel repository. Three.js supplies BVH loading, transforms and animation utilities; there is no local model runtime.

Distribution

This GitHub repository is the source distribution and installation entry point. It is not itself a hosted MCP service. The npm manifest is ready for packaging, but this README does not claim an npm release or MCP Registry listing.

The MCP Registry is a separate discovery service that points to installable packages or remote servers. Registry listing and package publication are separate from publishing source on GitHub.

License

MIT. Cartwheel service access and generated assets remain subject to your Cartwheel account terms.

Available Tools

13 tools
create_media_uploadA

Prepare signed upload URLs for video references. This creates media slots; it does not upload the file bytes. Use the client's authorized file tools to PUT each selected local video to its returned mediaUploadURL without an API key header. Upload before calling generate_motion_from_video. Video references must be at most 30 seconds and smaller than 250 MB. Keep signed URLs private.

ParametersJSON Schema
NameRequiredDescriptionDefault
mediaYes

TDQS

A4.6/5.0
Behavior5/5

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

With annotations limited to hints, the description carries the burden and delivers: it reveals the two-phase behavior (slot creation only, no byte upload), the auth-omission requirement for the PUT, the ordering dependency on generate_motion_from_video, the 30-second/250 MB constraints, and a security caution to keep signed URLs private. None of this contradicts the annotations.

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

Conciseness5/5

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

Five short sentences with the primary purpose front-loaded, followed by scope clarification, workflow, and grouped constraints. No filler; every sentence earns its place.

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

Completeness4/5

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

For a two-phase tool with no output schema, the description names the key returned field (mediaUploadURL) and lays out the full lifecycle. It does not mention slot expiry, behavior on repeated calls, or error cases, but an agent has what it needs to invoke and follow through correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the prose must compensate. It adds the 250 MB limit that the schema cannot express and frames the media array as 'selected local videos,' clarifying the intent behind name/extension. It does not explicitly explain every field (e.g., resolution format), but the schema's enum, pattern, and maximum make those partially self-documenting.

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

Purpose5/5

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

The opening sentence 'Prepare signed upload URLs for video references' gives a specific verb and resource, and the second sentence disambiguates from actual byte upload ('it does not upload the file bytes'). It also distinguishes the tool from the sibling generate_motion_from_video by positioning this step before it.

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?

The description gives explicit workflow instructions: use the client's authorized file tools to PUT each video to the returned mediaUploadURL without an API key header, and upload before calling generate_motion_from_video. It provides clear context but does not name a competing alternative tool or state when not to use this one.

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

generate_motionA

Generates motion animation based on text prompts. Returns a batch ID for tracking the generation progress. Consumes generation credits. Submit once, then use get_batch and list_batch_motions to poll; do not resubmit to check progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
loopNoIf true, the motion generation will be looped on a seamless repeat. Applied to all motions in a batch. Defaults to false.
promptsYesThe prompts describing the desired motions
batchNameNoAn optional name to be associated with the batch. Will be used to identify the batch in the Cartwheel UI and email notifications.
exportSettingsYesThe export settings for the motion generation
requestedModelYesThe model to use for the motion generation
swingPropertiesNoOptional parameters specific to the 'swing' model. Ignored if requestedModel is not 'swing'.

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses that the call consumes generation credits, returns a batch ID for tracking, and should not be repeated merely to check progress. This is important side-effect and lifecycle information that the annotations alone do not provide. No contradiction with the annotations exists.

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

Conciseness5/5

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

The description is three short, purposeful sentences: it states the action, the return value, and the critical usage caveat about credits and polling. Every sentence adds value and there is no redundancy or filler.

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?

For an asynchronous creation tool with no output schema, the description provides the essential return contract (a batch ID), the cost implication (credits), and the follow-up polling tools. Together with the fully documented input schema, an agent has enough context to invoke the tool correctly and avoid common misuse.

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%, and every parameter including nested objects has detailed descriptions, examples, enums, and defaults. The description itself adds no parameter-specific semantics, but the schema fully carries that burden, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action and resource: 'Generates motion animation based on text prompts.' It also distinguishes itself from the sibling generate_motion_from_video by specifying the text-prompt input modality, and clarifies it is a creation/submission tool rather than a retrieval or listing tool.

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?

The description gives explicit workflow guidance: submit once, then use get_batch and list_batch_motions to poll, and do not resubmit to check progress. It does not explicitly name generate_motion_from_video as the video alternative, but the text-prompt qualifier and sibling names make the choice reasonably clear.

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

generate_motion_from_videoA

Capture editable body, hand and optional face performance from uploaded videos using Comic 4. Supports 1–4 people per video. Requires uploaded media IDs and complete export settings. Consumes credits: submit once, then poll get_batch and list_batch_motions. Preserve every actor's ordered exports, MHR face/body assets and camera from list_batch_motions. Use get_motion with characterID and bodyIndex for a particular actor's body retarget. Keep moveInPlace false to preserve interactions and shared world placement.

ParametersJSON Schema
NameRequiredDescriptionDefault
loopNo
mediaIDsYes
batchNameNo
numPeopleNo
comicModelYesExplicitly select the Comic 4 performance capture pipeline.
facialCaptureNo
exportSettingsYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations are sparse (safety hints only), so the description carries the disclosure burden and earns it: credit consumption, the submit-once-then-poll async pattern, the 1–4 person capacity, and the requirement to preserve actor exports and MHR assets across calls are all non-obvious behaviors that a caller would otherwise discover by trial and error. No contradiction with the annotations; 'submit once' aligns with idempotentHint=false.

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?

Purpose is front-loaded in the first sentence, followed by prerequisites, cost/workflow, and downstream usage — every sentence earns its place and no filler exists. The final sentence packs three ideas (preservation, retargeting routing, moveInPlace) into one dense block, so it is efficient but slightly bundle-heavy.

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

Completeness4/5

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

For a complex tool (7 top-level params, nested exportSettings with 13 sub-properties, no output schema, minimal annotations), the description supplies what matters most: purpose, prerequisites, async polling workflow, capacity limits, and sibling routing. Its main gaps are not describing what the submit response returns (e.g., the batch ID needed to poll get_batch) and never linking mediaIDs to the create_media_upload sibling.

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 coverage is only 14%, so the description must compensate and partially does: it grounds mediaIDs (uploaded IDs), numPeople (1–4), facialCapture (optional), and gives moveInPlace a purpose ('preserve interactions and shared world placement'). However, loop and batchName receive no semantic grounding, and the exportSettings object is only described as needing to be 'complete' without touching its many sub-fields.

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

Purpose5/5

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

Opens with a specific verb and resource: 'Capture editable body, hand and optional face performance from uploaded videos using Comic 4.' It names the input (uploaded videos), the pipeline (Comic 4), the output (editable performance), and the capacity constraint (1–4 people). The 'from uploaded videos' qualifier clearly separates it from the sibling generate_motion, which handles the non-video path.

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

Usage Guidelines5/5

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

Gives explicit prerequisites ('Requires uploaded media IDs and complete export settings'), a concrete workflow ('submit once, then poll get_batch and list_batch_motions'), and routes the agent to get_motion with the exact keys (characterID and bodyIndex) for per-actor retargeting. It also warns to keep moveInPlace false to preserve interactions and shared world placement — actionable guidance an agent can execute without further inference.

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

get_batchA
Read-onlyIdempotent

Retrieves batch details including status, progress, and export settings. Use this endpoint to check the status of a batch job created via /motion/fromVideo or /motion/fromText.

ParametersJSON Schema
NameRequiredDescriptionDefault
batchIDYesThe batch ID to retrieve

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering safety and idempotency. The description adds that the response includes status, progress, and export settings, which is useful but not a rich behavioral disclosure beyond annotations.

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

Conciseness5/5

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

Two sentences with the main action and relevant context front-loaded. Every sentence earns its place; there is no repetitive or extraneous wording.

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

Completeness4/5

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

For a single-parameter read-only tool with no output schema, the description gives enough context: what it returns, how to use it, and where the batch ID comes from. It could additionally point to list_batch_motions for obtaining batch IDs, but the description is functionally sufficient.

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 coverage is 100% and the parameter already has a clear description and example. The description adds minimal parameter meaning, mostly linking batchID to the creation endpoints, but does not provide additional format or lifecycle details.

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 uses a specific verb ('Retrieves') and clearly identifies the resource as batch details, listing status, progress, and export settings. It does not explicitly contrast with sibling tools like get_motion or list_batch_motions, but the batch-specific scope is clear enough.

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?

The second sentence gives a direct use case: check the status of batch jobs created via /motion/fromVideo or /motion/fromText. It does not state when not to use it or name an alternative tool, but the intended context is clear.

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

get_characterA
Read-onlyIdempotent

Retrieves a character's details, uploadStatus, and presigned download URLs. Poll this after submitting an upload until uploadStatus is COMPLETE (or FAILED); while processing, the response includes an estimatedSecondsWaitTime. Once complete, it returns download URLs for the rigged character (characterFileURL, baseFbxURL, baseGlbURL), its config (configURL), and thumbnail (thumbnailURL).

ParametersJSON Schema
NameRequiredDescriptionDefault
characterIDYesThe character ID to retrieve

TDQS

A4.4/5.0
Behavior5/5

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

The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false; the description adds valuable lifecycle behavior beyond that: polling semantics, state values (COMPLETE/FAILED), the presence of estimatedSecondsWaitTime during processing, and the exact URL fields returned. This is exactly the kind of context annotations cannot convey.

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

Conciseness5/5

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

The description is compact yet information-dense, front-loading the main purpose before detailing the polling lifecycle and resulting URLs. Every clause earns its place and the structure follows the natural call flow.

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

Completeness4/5

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

There is no output schema, but the description enumerates the key response fields and gives enough polling context for an agent to use the tool correctly. It could additionally describe failure payloads or other possible uploadStatus values, but those are minor gaps for a single-parameter, read-only tool.

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 coverage is 100%: the single characterID parameter has its own description and example. The description does not add new parameter syntax or format details beyond what the schema already provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Retrieves') and names the exact resource ('a character's details') plus the distinctive payload (uploadStatus and presigned download URLs). This makes it immediately distinguishable from sibling list tools like list_characters and other get_* tools by resource and purpose.

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?

It gives an explicit when-to-use instruction: 'Poll this after submitting an upload until uploadStatus is COMPLETE (or FAILED)'. It does not spell out when-not-to-use or name alternative tools, so it falls just short of a 5.

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

get_mediaA
Read-onlyIdempotent

Retrieve an accessible reference media item and its current signed download URL. Use sourceVideoMediaID from a motion to retrieve its original reference. Media registration alone does not prove that file bytes have been uploaded.

ParametersJSON Schema
NameRequiredDescriptionDefault
mediaIDYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds valuable context beyond that: the URL is a 'current signed download URL' and 'media registration alone does not prove that file bytes have been uploaded,' which prevents the agent from assuming upload completion. No contradiction with annotations.

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

Conciseness5/5

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

The description is two sentences with no filler. The main purpose and output are front-loaded in the first sentence, and the important caveat about upload status is placed second. Every sentence contributes necessary information.

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?

For a simple one-parameter read-only tool, the description is complete: it states the returned data (media item and current signed download URL), explains how to obtain the ID, and warns about the upload caveat. Since there is no output schema, the description adequately covers return semantics.

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

Parameters4/5

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

The schema only provides mediaID as a required string with minLength 1 and no description. The tool description adds meaningful semantic guidance by indicating that mediaID should come from a motion's sourceVideoMediaID. It does not elaborate further on ID format, but for a single required parameter this is a useful addition.

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

Purpose5/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: 'Retrieve an accessible reference media item and its current signed download URL.' It clearly specifies both the action and the returned data, and distinguishes itself from motion/scene/character siblings by pointing to sourceVideoMediaID from a motion and the original reference relationship.

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?

The description gives clear when-to-use context: use a sourceVideoMediaID from a motion to retrieve the original reference. It does not explicitly name alternative tools or state when not to use this tool, but the guidance is sufficient for a tool with no close sibling overlap.

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

get_motionA
Read-onlyIdempotent

Retrieve primary motion status/downloads or apply one actor’s body to another accessible character. For multi-person Comic retargeting provide characterID and its zero-based bodyIndex. Use list_batch_motions for the complete ordered body, facial, identity and source-camera output arrays.

ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNoOptional output frame rate for BVH output. Defaults to 60.
motionIDYesThe motion job ID to retrieve
bodyIndexNoZero-based person index for multi-person Comic body retargeting. Defaults to 0. An index above 0 requires characterID; it selects that actor before retargeting.
characterIDNoOptional character ID to apply while retrieving this motion. Requires access to the character.
downloadTypeNoOptional download format to return. Requires characterID. Defaults to bvh. Use cwms for MotionSync CWMS text. Use fbx only when the character asset is FBX. Use gltf for a GLB/GLTF download when the character asset is GLTF or GLB.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already cover the read-only, idempotent, non-destructive profile, so the description only needs to add context beyond that. It adds the retargeting behavior and the primary-vs-batch distinction, but it does not explain what shape 'status/downloads' take or whether 'apply' changes anything persistently. No contradiction with annotations is present.

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?

The description is compact at three sentences and front-loads the main retrieval purpose before the retargeting variant and the sibling pointer. The first sentence is slightly overloaded by joining retrieval and retargeting with 'or,' but there is no redundant filler.

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

Completeness3/5

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

With no output schema, the description should clarify return semantics; 'primary motion status/downloads' gives only a partial picture. The sibling reference to list_batch_motions and the parameter schema fill in some gaps, but an agent is left unsure exactly what fields or file payload to expect from get_motion.

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 baseline is 3; the schema already documents motionID, fps, bodyIndex, characterID, and downloadType with examples and enums. The description adds useful context about multi-person Comic retargeting and zero-based indexing but mostly restates schema information.

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 'Retrieve primary motion status/downloads', identifying a specific verb and resource, and also mentions the retargeting capability via characterID/bodyIndex. It distinguishes itself from list_batch_motions by pointing out that the sibling returns 'complete ordered...output arrays,' but the qualifier 'primary' is vague enough to keep it from full clarity.

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?

It gives an explicit condition: for multi-person Comic retargeting, provide characterID and zero-based bodyIndex. It also tells the agent to use list_batch_motions when complete output arrays are needed, which is a clear when-not/alternative. However, it does not contrast with other motion-related siblings such as search_motions, list_motions, or get_batch.

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

get_sceneA
Read-onlyIdempotent

Retrieves a scene accessible to the authenticated service account.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneIDYesThe scene ID

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare this tool as read-only, idempotent, non-destructive, and open-world, so the description carries a lighter burden. It adds the useful context that access is limited to scenes the service account can access, but it does not describe behavior for missing or inaccessible scenes.

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

Conciseness5/5

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

The description is a single, well-structured sentence that communicates the core action and access scope with no filler. It is appropriately sized for a tool with one parameter and a straightforward purpose.

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

Completeness4/5

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

For a simple, read-only retrieval tool with a fully documented single parameter and strong annotations, the description is largely sufficient. It does not specify the return payload or error behavior, but the absence of an output schema and the simplicity of the operation make this a minor gap rather than a critical one.

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?

The schema already documents the single sceneID parameter with type, example, and description, giving 100% coverage. The tool description adds no additional meaning about the parameter beyond what the schema provides, so the baseline score is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Retrieves') and a clear resource ('a scene'), making the tool's function immediately understandable. It also adds the scoping qualifier 'accessible to the authenticated service account,' which helps distinguish it from broader scene-listing tools like list_scenes.

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

Usage Guidelines3/5

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

The description implies this tool should be used when retrieving a single scene by ID, especially given the required sceneID parameter. However, it does not explicitly mention when to prefer this over list_scenes or other sibling tools, nor does it state any exclusions or alternatives.

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

list_batch_motionsA
Read-onlyIdempotent

Retrieves a paginated list of motion generations for a specific batch. Returns motion generation records with presigned URLs for BVH files and preview videos. Comic 4 items include ordered per-person body, face, identity and export arrays plus the captured camera when available. Preserve null slots. get_motion does not replace this complete batch listing.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitYesMaximum number of results to return per page
batchIDYesThe batch identifier to retrieve motions for
nextTokenNoPagination token from a previous response to fetch the next page

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds useful behavioral detail beyond that: pagination, presigned URL contents, structured 'Comic 4' arrays, optional camera data, and the instruction to preserve null slots. It does not contradict the annotations; it only lacks potential details like URL expiry or auth behavior.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then efficiently packs in return format and key behavioral caveats. Every sentence adds information: pagination, presigned URLs, array structure, null handling, and the comparison with get_motion. There is no filler.

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 appropriately compensates by detailing what the response contains: motion generation records, presigned URLs, per-person arrays, camera, and null-slot preservation. Combined with the fully documented parameters and annotations, an agent has enough context to call this tool correctly.

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 explains batchID, limit, and nextToken adequately. The description does not add parameter-level semantics beyond reinforcing the batch-specific scope and paginated nature, so the baseline score of 3 is appropriate.

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

Purpose5/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: 'Retrieves a paginated list of motion generations for a specific batch.' It also clarifies the output (motion generation records, presigned URLs, BVH files, preview videos) and explicitly distinguishes itself from get_motion, so an agent can tell this tool apart from similar siblings.

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

Usage Guidelines5/5

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

It clearly states when to use this tool ('for a specific batch') and gives an explicit when-not: 'get_motion does not replace this complete batch listing.' This is strong routing guidance for an agent deciding between list_batch_motions and get_motion.

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

list_charactersA
Read-onlyIdempotent

Retrieves a list of characters available to the authenticated service account. Includes presigned URLs for character assets.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of characters to return
nextTokenNoPagination token from a previous response
sortAscendingNoSort results in ascending order by creation time

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description doesn't need to repeat safety. It adds useful context by noting the scope is limited to the authenticated service account and that presigned URLs are included in the response, but it omits details like pagination behavior or sorting semantics, which are only hinted at in parameters.

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

Conciseness5/5

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

The description is two concise sentences with no redundant words. The core action and scope come first, and the presigned URL note is placed second. Every sentence contributes value, making it well-structured and efficient.

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

Completeness4/5

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

For a simple list operation with no required parameters and full annotations, the description covers the essential purpose and a key response feature (presigned URLs). Pagination and sorting are implied by parameters, and the lack of an output schema isn't critical here given the straightforward list nature. It is nearly complete, though it could explicitly mention pagination or the returned character fields.

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% for all three parameters (limit, nextToken, sortAscending), so the schema already handles parameter documentation. The description adds no further meaning about these parameters; this matches the baseline for high coverage.

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

Purpose5/5

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

The description's first sentence uses the specific verb 'Retrieves' with the resource 'a list of characters', clearly distinguishing this from the sibling get_character tool. It also names the scope ('available to the authenticated service account') and mentions presigned URLs, which adds a meaningful resource detail.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like get_character or list_scenes. It implies a list operation through the tool name, but there is no explicit context, exclusions, or mention of sibling tools that could help an agent choose correctly.

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

list_motionsB
Read-onlyIdempotent

Retrieves a paginated list of recent motion generations created for the authenticated service account. Results are sorted by creation time, newest first by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of motions to return
nextTokenNoPagination token from a previous response
sortAscendingNoSort results in ascending order by creation time

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds pagination, service-account scoping, and default sort order, which is useful context but does not reveal deeper behaviors like rate limits or response structure.

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

Conciseness5/5

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

Two sentences with no filler; the action, scope, pagination, and ordering are all clearly stated. Every sentence contributes meaningful information without redundancy.

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

Completeness4/5

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

For a simple read-only list operation with fully documented parameters and strong annotations, the description covers purpose, scope, pagination, and sorting. It could mention that nextToken continues previous results, but the schema already defines it, so no critical gap remains.

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 limit, nextToken, and sortAscending are fully documented in the schema. The description adds the default ordering context ('newest first by default'), which complements but does not replace the schema's parameter information.

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 uses a specific verb ('retrieves') and resource ('motion generations'), and adds scope ('authenticated service account') and pagination/sorting details. It does not explicitly differentiate from siblings like search_motions or list_batch_motions, but the core operation is unambiguous.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives such as search_motions or list_batch_motions. There is no mention of filtering capabilities, exclusions, or conditions that would select this tool over others.

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

list_scenesA
Read-onlyIdempotent

Retrieves scenes available to the authenticated service account.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of scenes to return
nextTokenNoPagination token from a previous response
sortAscendingNoSort results in ascending order by creation time

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description only needs to add behavioral context. It adds the scoping detail of the authenticated service account, but does not mention pagination, sorting, or response format.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It states the verb, resource, and scope efficiently, which is entirely appropriate for a simple list operation.

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

Completeness3/5

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

With no output schema, the description does not describe what fields a scene contains or how results are returned. The input side is well-covered by the schema, but an agent may be left uncertain about the response structure for this list operation.

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%, with all three optional parameters (limit, nextToken, sortAscending) documented in the input schema. The description adds no additional parameter meaning, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Retrieves') and resource ('scenes'), and adds a clear scope ('available to the authenticated service account'). This makes it immediately distinguishable from siblings like get_scene (singular retrieval) and search_motions (searching a different resource).

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

Usage Guidelines3/5

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

No explicit guidance is given about when to use this tool instead of alternatives such as get_scene, search_motions, or list_motions. Usage is only implied by the plural resource name and straightforward list semantics, with no exclusions or conditions.

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

search_motionsA
Read-onlyIdempotent

Searches the motion library with optional filtering by category, subcategory, tags, and search term. Returns paginated results with motion items and category aggregation information.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoFilter results by tags
categoryNoFilter results by category
pageSizeYesNumber of results to return per page
searchTermNoText search query to find matching motions
searchAfterNoA pagination token from a previous search response (lastSort value). Use this to fetch subsequent pages.
subcategoryNoFilter results by subcategory (requires category to be set)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already convey that this is read-only, idempotent, and non-destructive. The description adds a useful detail about the return payload ('paginated results with motion items and category aggregation information'), which goes slightly beyond the annotations, but it does not disclose deeper behavior such as default ordering, filter combination logic, or pagination token usage, though some of that is covered by the schema.

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

Conciseness5/5

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

The description is two sentences with no filler. The main action and filter capabilities are front-loaded, and the return summary is included without unnecessary elaboration.

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

Completeness4/5

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

For a read-only search tool, the description is reasonably complete: all six parameters have schema documentation, the safety profile is covered by annotations, and the return shape is summarized despite the lack of an output schema. It could be more complete by explaining the relationship to list_motions or clarifying what 'category aggregation information' means, but the core information needed to call it correctly is present.

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 description does not need to repeat parameter details. It does mention the filter dimensions (category, subcategory, tags, search term) which aligns with the schema, but it adds no new meaning beyond what the schema already provides.

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 uses a specific verb ('Searches'), identifies the resource ('motion library'), and states the main capabilities: optional filtering and pagination. It is clear, but it does not explicitly call out how it differs from the sibling list_motions tool, so it stops short of full differentiation.

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

Usage Guidelines3/5

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

The description implies this tool is for filtering the motion library by category, subcategory, tags, or text, and for paginating results. However, it gives no explicit guidance on when to use search_motions instead of list_motions or another sibling, and it does not state any exclusions or alternatives.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv0.3.0
    • First observedcreate_media_upload
    • First observedgenerate_motion
    • First observedgenerate_motion_from_video
    • First observedget_batch
    • First observedget_character
    • First observedget_media
    • First observedget_motion
    • First observedget_scene
    • First observedlist_batch_motions
    • First observedlist_characters
    • First observedlist_motions
    • First observedlist_scenes
    • First observedsearch_motions

TDQS

A4.2/5.0

Scored across 13 tools

Disambiguation5/5

Each tool maps cleanly to a distinct resource and operation: list/get separate collection from detail, text and video generation are split, and motion retrieval is divided by batch, individual, user history, and library search. Descriptions also clarify polling workflows, reducing the chance of selecting the wrong retrieval tool.

Naming Consistency5/5

All tool names follow the same snake_case verb_noun convention, using get_/list_ for reads, generate_/create_ for creation, and search_ for queries. Multi-word targets such as batch_motions and media_upload are applied consistently, with no camelCase or mixed verb styles.

Tool Count5/5

Thirteen tools is well within the ideal range for a platform MCP, and each tool earns its place in the workflow: resource listing/detail, media upload setup, text/video motion generation, batch polling, and motion search/retrieval. There are no redundant or throwaway tools.

Completeness5/5

The set covers the full motion-generation lifecycle: create media uploads, generate from text or video, poll batch status, retrieve batch/individual outputs, and search/list existing motions. Characters and scenes are exposed as read-only resources appropriate to their role, so no critical operation is missing.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers