[{"name":"animate","description":"Generate a 60-frame (2 s) motion for a rigged skeleton from a text prompt with UniMate, and return the result as JSON with a URL for every output file: the animated GLB (mesh + skeleton + animation), the raw motion features (.npy), per-frame joint positions (JSON), a skeleton preview MP4 and a 6-frame contact sheet PNG (use view_animation to look at it). Takes a few seconds of ZeroGPU time, billed to the caller.","inputSchema":{"type":"object","properties":{"asset":{"type":"string","description":"skeleton id from list_assets: \"unitree_go2\" (quadruped robot), \"eagle\" (bird), \"shark\" (fish), or an uploaded \"u_...\" id."},"prompt":{"type":"string","description":"short caption in the training style: start with \"An object\" and describe one motion, e.g. \"An object walks forward.\" or \"An object flaps its wings.\"."},"num_samples":{"type":"integer","description":"1-4 independent samples of the same prompt (default 1).","default":1},"cfg_scale":{"type":"number","description":"classifier-free guidance scale 1.0-15.0 (default 3.0; 5-7 when the prompt is ignored, lower for calmer motion).","default":3.0},"seed":{"type":"integer","description":"integer seed for reproducibility; -1 (default) picks a random one.","default":-1},"preview":{"type":"boolean","description":"also render the skeleton MP4 and contact sheet (default true).","default":true}},"required":["asset","prompt"]},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"animate"}},{"name":"inbetween","description":"Motion in-betweening: keep the listed frames of an earlier result (same asset) exactly and regenerate every other frame under a prompt, with UniMate's replacement-style flow sampling (upstream --inbetween). Returns the same JSON as animate (60 frames, file URLs) plus the reference and the resolved keep_frames.","inputSchema":{"type":"object","properties":{"reference_job_id":{"type":"string","description":"job_id of an earlier animate / inbetween / edit / expand result (kept 24 h)."},"prompt":{"type":"string","description":"caption for the regenerated frames, training style (\"An object jumps in place.\")."},"keep_frames":{"type":"string","description":"comma-separated frame indices to hold (0-59; negatives count from the end). Default \"0,-1\" keeps the first and last frame; \"0,1,2,-3,-2,-1\" keeps three at each end.","default":"0,-1"},"reference_sample":{"type":"integer","description":"which sample of the reference result (default 0)."},"reference_start":{"type":"integer","description":"first frame of the 60-frame reference window (default 0; use it to pick a window of a longer expand result)."},"num_samples":{"type":"integer","description":"1-4 samples (default 1).","default":1},"cfg_scale":{"type":"number","description":"guidance 1.0 < x <= 15.0 (default 3.0).","default":3.0},"seed":{"type":"integer","description":"integer seed; -1 (default) picks a random one.","default":-1},"preview":{"type":"boolean","description":"also render the skeleton MP4 and contact sheet (default true).","default":true}},"required":["reference_job_id","prompt"]},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"inbetween"}},{"name":"edit_joints","description":"Text-guided joint editing: keep the listed joints of an earlier result exactly (all 60 frames) and regenerate the other joints under a new prompt (upstream --motion_edit --keep_joints), e.g. keep the legs of a walking clip and ask for flapping wings. Returns the same JSON as animate plus the kept and edited joints.","inputSchema":{"type":"object","properties":{"reference_job_id":{"type":"string","description":"job_id of an earlier result of the same asset (kept 24 h)."},"prompt":{"type":"string","description":"caption for the regenerated joints, training style (\"An object flaps its wings.\")."},"keep_joints":{"type":"string","description":"comma-separated joint names or anatomical labels from list_assets (case-insensitive); a label such as \"Left Wing\" selects every joint with that label. Every name must match."},"reference_sample":{"type":"integer","description":"which sample of the reference result (default 0)."},"reference_start":{"type":"integer","description":"first frame of the 60-frame reference window (default 0)."},"num_samples":{"type":"integer","description":"1-4 samples (default 1).","default":1},"cfg_scale":{"type":"number","description":"guidance 1.0 < x <= 15.0 (default 3.0).","default":3.0},"seed":{"type":"integer","description":"integer seed; -1 (default) picks a random one.","default":-1},"preview":{"type":"boolean","description":"also render the skeleton MP4 and contact sheet (default true).","default":true}},"required":["reference_job_id","prompt","keep_joints"]},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"edit_joints"}},{"name":"expand","description":"Motion expansion: chain several prompts into one continuous long motion (upstream --motion_expand). One 60-frame segment per prompt; each further segment starts pinned to the last `overlap` frames of the previous one, so the result has 60 + (60 - overlap) x (prompts - 1) frames (3 prompts: 160 frames, 5.3 s) in one GLB / .npy / JSON. Returns the same JSON as animate plus prompts, overlap and the frame range of each segment. num_samples x prompts is limited to 8 per call (about 7 s of GPU time each).","inputSchema":{"type":"object","properties":{"asset":{"type":"string","description":"skeleton id from list_assets."},"prompts":{"type":"array","items":{"type":"string"},"description":"2-6 captions in order, training style, e.g. [\"An object trots forward.\", \"An object turns around.\", \"An object sits down.\"]."},"overlap":{"type":"integer","description":"frames pinned between consecutive segments, 1-59 (default 10).","default":10},"num_samples":{"type":"integer","description":"1-4 samples of the whole chain (default 1).","default":1},"cfg_scale":{"type":"number","description":"guidance 1.0 < x <= 15.0 (default 3.0).","default":3.0},"seed":{"type":"integer","description":"integer seed; -1 (default) picks a random one.","default":-1},"preview":{"type":"boolean","description":"also render the skeleton MP4 and contact sheet (default true).","default":true}},"required":["asset","prompts"]},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"expand"}},{"name":"list_assets","description":"The skeletons this service can animate, with their joint names and anatomical labels (both usable in edit_joints' keep_joints), hierarchy and rest-pose GLB URL. Your own rigged asset can be added with POST /api/assets (a zipped data_process.rig_preprocess output).","inputSchema":{"type":"object","properties":{}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"list_assets"}},{"name":"get_result","description":"A finished result again (kept 24 h): mode, prompt, seed, per-sample file URLs, timings, provenance.","inputSchema":{"type":"object","properties":{"job_id":{"type":"string","description":"the job_id returned by animate, inbetween, edit_joints or expand."}},"required":["job_id"]},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"get_result"}},{"name":"view_animation","description":"Look at a generated motion: a PNG contact sheet of 6 skeleton frames spanning the whole clip (left to right) of one sample of a result.","inputSchema":{"type":"object","properties":{"job_id":{"type":"string","description":"the job_id returned by animate, inbetween, edit_joints or expand."},"sample":{"type":"integer","description":"which sample (0-based, default 0)."}},"required":["job_id"]},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"view_animation"}},{"name":"service_info","description":"What this service does, every parameter with its default, limits, model provenance and licenses, and who pays the GPU time for this connection.","inputSchema":{"type":"object","properties":{}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"service_info"}},{"name":"guide","description":"The full agent guide (same as /llms.txt): workflow, parameters, prompting advice, errors, examples.","inputSchema":{"type":"object","properties":{}},"meta":{"file_data_present":false,"mcp_type":"tool","endpoint_name":"guide"}}]