Skip to main content
Glama

move_keyframe

DestructiveIdempotent

Moves a single keyframe to a new frame on a binding's section channel, preserving its value, interpolation, and tangents. Idempotent when re-moving onto an existing frame.

Instructions

Move one keyframe (located by 'index' or 'frame') to new_frame on a binding's section channel, preserving its value/interp/tangents. Idempotent: MoveKey(bRemoveDuplicateKeys=true) collapses a duplicate when re-moved onto an existing frame. channel_type selects the proxy view ("double" default | "float" | "bool").

Returns: { sequence_path: string, channel_index: int, channel_type: string, old_frame: int, new_frame: int, key_index: int, moved: bool, saved: bool, save_error?: string }

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
frameNoFrame of the key to move (resolved via FindKey; provide index OR frame).
indexNoIndex of the key to move (mutually exclusive with frame).
new_frameYesDestination frame number for the key.
toleranceNoOptional FindKey frame tolerance when locating by frame (default 0).
track_typeNoOptional class filter (see set_section_easing) selecting the track on the binding.
track_indexNoIndex into the binding's tracks (default 0; used when track_type omitted).
binding_guidNoGUID of the binding whose section to edit.
channel_typeNoChannel value kind: "double" (default) | "float" | "bool".
channel_indexNoIndex of the channel within its proxy view (default 0).
section_indexNoIndex of the section on the resolved track (default 0).
sequence_nameNoAlias for sequence_path.
sequence_pathNoFull /Game path OR bare asset name of the target Level Sequence.
binding_name_or_guidNoAlias for binding_guid, read only when binding_guid is absent; it must also be a GUID string, a bound object's name is not resolved.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.2.0
    • changedInput schema / properties / binding_name_or_guid / description
      Previous value: -"Sequencer binding: the bound object's name or its GUID string."New value: +"Alias for binding_guid, read only when binding_guid is absent; it must also be a GUID string, a bound object's name is not resolved."
    • changedInput schema / required
      Previous value: -[
      -  "sequence_path",
      -  "binding_guid",
      -  "new_frame"
      -]New value: +[
      +  "new_frame"
      +]
  2. First observedv1.1.0

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable context beyond annotations: preservation of value/interp/tangents, duplicate-collapse behavior on re-move, and a detailed return shape including saved and save_error.

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 front-loaded with the core operation, then adds idempotence and channel_type context, followed by a return-shape line. It is appropriately sized for a 13-parameter mutation tool, though the internal MoveKey detail is slightly more implementation-specific than necessary.

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?

No output schema exists, so the description must explain return values, and it does so with a clear object shape including moved, saved, and save_error. Combined with the rich input schema and annotations, the definition gives enough context for an agent to invoke the 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 coverage is 100%, so the input schema already documents all 13 parameters thoroughly. The description mostly restates schema facts such as locating by index or frame and the channel_type options/default, adding little semantic detail beyond the schema baseline.

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 states a specific verb, resource, and destination: moving one keyframe located by index or frame to new_frame on a binding's section channel. It is clear what the tool does, but it does not explicitly differentiate itself from sibling keyframe tools such as remove_keyframe or duplicate_keyframe.

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 explains how to locate the keyframe and notes idempotence, but gives no guidance on when to use this tool versus alternatives like remove_keyframe, duplicate_keyframe, or set_keyframe_interpolation. There are no when-not conditions or routing cues.

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

Deploy Server

Other Tools