Skip to main content
Glama

Update style

figma_update_style
Idempotent

Update a local Figma style in place by ID or name so every node using it follows. Change colors, text, effects, grids, or variable bindings without detaching nodes.

Instructions

Change a local style IN PLACE — every node using it follows; deleting and recreating would detach them all. By styleId or styleName (+ type when a name is shared). Any kind: name, description. Paint: color or fills, with opacity; opacity alone fades every paint and keeps bound colours. A gradient style's angle is exact only on a square node — a style has no size; for an exact CSS angle on a known node use figma_set_fills, or give transform. Text: font, size, line height, letter spacing, case, decoration, paragraph spacing/indent. Effect: effects. Grid: grids. variables binds tokens inside the style: text fields by name (fontSize, fontFamily…), a paint's "color", "effect.color" / "effect.radius" …, "grid.count" …, with index for the entry. A field that does not fit the style's kind, and a library style, are refused before anything changes. Editors: Design; unverified: FigJam, Slides.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
caseNo
nameNoRename the style.
typeNoOnly to tell same-named styles apart.
colorNoA solid colour. Give this or `fills`.
fillsNoSeveral paints or a gradient, entries as in figma_set_fills.
gridsNoReplaces the grids; entries as in figma_set_layout_grids.
weightNoFont weight as a number ("600") or a Figma style name ("Semi Bold" — Inter uses spaces, not "SemiBold").
effectsNoReplaces the effects; entries as in figma_set_effects.
opacityNo
sessionNoOptional sessionId or file name, to pick a Figma file when more than one is connected.
styleIdNoA style id from figma_get_styles.
fontSizeNo
styleNameNoOr its exact name, e.g. "Heading/H1".
variablesNo
decorationNo
fontFamilyNoDefault Inter (create); the style's own family (update).
lineHeightNo"auto", px ("32") or percent ("150%"). A string, not a number.
descriptionNoWhat the style is for — shown in Figma's style picker.
letterSpacingNopx ("0.5") or percent ("-2%"). A string, not a number.
idempotencyKeyNoCaller-owned retry key, ≤128 chars. Re-calling with the same key never executes twice: it returns the existing result, or waits for the op still in flight. Supply your own for anything large — if the MCP client times out (rather than the bridge), only a key you chose can be used to retry safely.
paragraphIndentNopx of first-line indent.
paragraphSpacingNopx between paragraphs.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.1

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the safety profile (destructiveHint=false, idempotentHint=true), and the description aligns rather than contradicts it. It adds real behavioral context the annotations cannot carry: refusal semantics ('a field that does not fit the style's kind, and a library style, are refused before anything changes'), in-place propagation to every consuming node, and editor support (Design verified; FigJam/Slides unverified). It does not describe the return payload, which is why it stops at 4.

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 most important fact (in-place change) is front-loaded, and the dense telegraphic style ('Text: font, size, line height, letter spacing, case, decoration, paragraph spacing/indent.') is proportionate to 22 parameters and five style kinds. It is a single long block rather than grouped bullets, so scanning cost is higher than it needs to be, but almost every clause carries information.

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 22-parameter mutation tool with no output schema, the description covers addressing, per-kind fields, variable binding, failure/refusal behavior, caveats, and editor support — enough for an agent to invoke it correctly. The remaining gaps are the response shape and whether omitted fields are left untouched.

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

Parameters5/5

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

Well beyond the 77% schema coverage: it groups fields by style kind (text/fill/effect/grid), explains `variables` binding semantics (text fields by name, a paint's 'color', 'effect.radius', 'grid.count', with `index` for the entry), and states non-obvious behavior such as '`opacity` alone fades every paint and keeps bound colours.' The gradient-angle-on-a-style caveat explicitly resolves a schema field whose per-node description would otherwise mislead here.

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?

States a specific verb + resource and immediately distinguishes itself from the create/delete siblings: 'Change a local style IN PLACE — every node using it follows; deleting and recreating would detach them all.' The agent can tell this apart from figma_create_paint_style, figma_delete_style, and figma_apply_style_to_node without opening any 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?

Gives concrete routing: address by `styleId` (from figma_get_styles) or `styleName` plus `type`, and explicitly redirects for the gradient-angle case — 'for an exact CSS angle on a known node use figma_set_fills, or give `transform`.' It also implies the when-to-use rationale (in-place edit vs. delete+recreate). What's missing is an explicit when-not-to-use framing and prerequisites such as required permissions, so it lands just short of 5.

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