Skip to main content
Glama
southleft

figma-console-mcp

by southleft

figma_apply_animation

Applies Figma Motion animations to a node via presets, custom styles, or manual keyframe tracks, with easing, duration, and timeline offset controls.

Instructions

Animate a node with Figma Motion. Pass exactly one of:

  • preset: a Figma animation style (Position, Scale, Rotation, Size, Opacity, Path, TextStagger), with optional duration, timelineOffset, easing and preset props. List presets and their props with figma_manage_animation_styles action 'list_presets'.

  • customStyleId: a local custom animation style (see figma_manage_animation_styles).

  • keyframeTracks: manual keyframes per property, paint color or effect field. Each track replaces any existing track for that target. Easing can be a literal curve or an EASING variable (easing.variableId); a preset's duration can be bound to a TIMING variable (durationVariableId). Main components can't be animated through the Plugin API: use an instance or frame. Motion plays in Figma's preview and video export, not in static screenshots.

Input Schema

NameRequiredDescriptionDefault
propsNoPreset-specific options (e.g. {type:'fadeIn'}, {direction:'right', distance:120}). Valid keys and defaults per preset: figma_manage_animation_styles action 'list_presets'.
easingNoEasing: a literal curve, or an EASING variable to bind
nodeIdYesNode to animate (an instance or frame, not a main component)
presetNoFigma animation style id, e.g. 'Opacity', 'Scale', 'Position'
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
durationNoPreset duration in seconds
customStyleIdNoLocal custom animation style id
keyframeTracksNoManual keyframe tracks
timelineOffsetNoStart offset on the timeline in seconds
durationVariableIdNoBind the preset's duration to a TIMING variable

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.46.0

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does well: it discloses that keyframe tracks replace existing tracks for a target, explains easing and duration variable binding, warns that main components cannot be animated, and clarifies that motion appears in preview/video export rather than static screenshots. It does not cover permissions, failure modes, or return behavior, so it is strong but not complete.

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 action and the mutually exclusive modes, then uses tight bullets for each mode and a final constraint note. Every sentence carries relevant information and there is no boilerplate.

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?

Given the complex nested schema and lack of annotations, the description covers the critical usage modes, constraints, and visual-output limitation. It stops short of describing success/return behavior or failure cases, which is a minor gap for a mutation tool without an output schema.

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 coverage is 100%, so the schema already documents individual parameters. The description adds important cross-parameter semantics by requiring exactly one of preset, customStyleId, or keyframeTracks, and by explaining how easing and duration can bind to variables.

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 and resource: 'Animate a node with Figma Motion.' It immediately distinguishes the tool's modes and routes preset discovery to figma_manage_animation_styles, so an agent can identify the operation without opening the schema.

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 'Pass exactly one of' instruction gives clear mode-selection guidance for preset, customStyleId, and keyframeTracks. It also states that main components cannot be animated and must use an instance or frame, but it does not explicitly contrast this tool with sibling tools such as figma_get_animations, figma_remove_animation, or figma_export_animation.

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