Skip to main content
Glama

figma-mcp-go

Figma MCP — Free, No Rate Limits vkhanhqui/figma-mcp-go server

Open-source Figma MCP server with full read/write access via plugin — no REST API, no rate limits. Turn text into designs and designs into real code. Works with Cursor, Claude, GitHub Copilot, and any MCP-compatible AI tool.

Highlights

  • No Figma API token required

  • No rate limits — free plan friendly

  • Read and Write live Figma data via plugin bridge — 73 tools total

  • Full design automation — styles, variables, components, prototypes, and content

  • Design strategies included — read_design_strategy, design_strategy, and more prompts built in

Styles, Variables, Components, Prototypes, and Content

https://github.com/user-attachments/assets/eae41471-fc72-4574-8261-4f42c38b8c99

Text to Design, Design to Code

https://github.com/user-attachments/assets/17bda971-0e83-4f18-8758-8ac2b8dcba62


Why this exists

Most Figma MCP servers rely on the Figma REST API.

That sounds fine… until you hit this:

Plan

Limit

Starter / View / Collab

6 tool calls/month

Pro / Org (Dev seat)

200 tool calls/day

Enterprise

600 tool calls/day

If you're experimenting with AI tools, you'll burn through that in minutes.

I didn't have enough money to pay for higher limits. So I built something that doesn't use the API at all.


Related MCP server: genable-mcp

Installation & Setup

Install via npx — no build step required. Watch the setup video or follow the steps below.

Watch the video

1. Configure your AI tool

Claude Code CLI

claude mcp add -s project figma-mcp-go -- npx -y @vkhanhqui/figma-mcp-go@latest

Codex CLI

codex mcp add figma-mcp-go -- npx -y @vkhanhqui/figma-mcp-go@latest

.mcp.json (Claude and other MCP-compatible tools)

{
  "mcpServers": {
    "figma-mcp-go": {
      "command": "npx",
      "args": ["-y", "@vkhanhqui/figma-mcp-go"]
    }
  }
}

.vscode/mcp.json (Cursor / VS Code / GitHub Copilot)

{
  "servers": {
    "figma-mcp-go": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@vkhanhqui/figma-mcp-go"
      ]
    }
  }
}

2. Install the Figma plugin

  1. In Figma Desktop: Plugins → Development → Import plugin from manifest

  2. Select manifest.json from the plugin.zip

  3. Run the plugin inside any Figma file


Available Tools

Write — Create

Tool

Description

create_frame

Create a frame with optional auto-layout, fill, and parent

create_rectangle

Create a rectangle with optional fill and corner radius

create_ellipse

Create an ellipse or circle

create_text

Create a text node (font loaded automatically)

import_image

Decode base64 image and place it as a rectangle fill

create_component

Convert an existing FRAME node into a reusable component

create_section

Create a Figma Section node to organise frames on a page

Write — Modify

Tool

Description

set_text

Update text content of an existing TEXT node

set_fills

Set solid fill color (hex) on a node

set_strokes

Set solid stroke color and weight on a node

set_opacity

Set opacity of one or more nodes (0 = transparent, 1 = opaque)

set_corner_radius

Set corner radius — uniform or per-corner

set_auto_layout

Set or update auto-layout (flex) properties on a frame

set_visible

Show or hide one or more nodes

lock_nodes

Lock one or more nodes to prevent accidental edits

unlock_nodes

Unlock one or more nodes

rotate_nodes

Set absolute rotation in degrees on one or more nodes

reorder_nodes

Change z-order: bringToFront, sendToBack, bringForward, sendBackward

set_blend_mode

Set blend mode (MULTIPLY, SCREEN, OVERLAY, …) on one or more nodes

set_constraints

Set responsive constraints { horizontal, vertical } on one or more nodes

move_nodes

Move nodes to an absolute x/y position

resize_nodes

Resize nodes by width and/or height

rename_node

Rename a node

clone_node

Clone a node, optionally repositioning or reparenting

reparent_nodes

Move nodes to a different parent frame, group, or section

batch_rename_nodes

Bulk rename nodes via find/replace, regex, or prefix/suffix

find_replace_text

Find and replace text across all TEXT nodes in a subtree or page; supports regex

Write — Delete

Tool

Description

delete_nodes

Delete one or more nodes permanently

Write — Prototype

Tool

Description

set_reactions

Set prototype reactions (triggers + actions) on a node; mode replace or append

remove_reactions

Remove all or specific reactions by zero-based index from a node

Write — Styles

Tool

Description

set_effects

Apply drop shadow / blur effects directly on a node (no style required)

create_paint_style

Create a named paint style with a solid color

create_text_style

Create a named text style with font, size, and spacing

create_effect_style

Create a named effect style (drop shadow, inner shadow, blur)

create_grid_style

Create a named layout grid style (columns, rows, or grid)

update_paint_style

Rename or recolor an existing paint style

apply_style_to_node

Apply an existing local style to a node, linking it to that style

delete_style

Delete any style (paint, text, effect, or grid) by ID

Write — Variables

Tool

Description

create_variable_collection

Create a new local variable collection with an optional initial mode

add_variable_mode

Add a new mode to an existing collection (e.g. Light/Dark)

create_variable

Create a variable (COLOR/FLOAT/STRING/BOOLEAN) in a collection

set_variable_value

Set a variable's value for a specific mode

bind_variable_to_node

Bind a variable to a node property — supports fillColor, strokeColor, visible, opacity, rotation, width, height, corner radii, spacing, and more

delete_variable

Delete a variable or an entire collection

Write — Pages

Tool

Description

add_page

Add a new page to the document (optional name and index)

delete_page

Delete a page by ID or name (cannot delete the only page)

rename_page

Rename a page by ID or current name

Write — Components & Navigation

Tool

Description

navigate_to_page

Switch the active Figma page by ID or name

group_nodes

Group two or more nodes into a GROUP

ungroup_nodes

Ungroup GROUP nodes, moving children to the parent

swap_component

Swap the main component of an INSTANCE node

detach_instance

Detach component instances, converting them to plain frames

Read — Document & Selection

Tool

Description

get_document

Full current page tree

get_metadata

File name, pages, current page

get_pages

All pages (IDs + names) — lightweight, no tree loading

get_selection

Currently selected nodes

get_node

Single node by ID

get_nodes_info

Multiple nodes by ID

get_design_context

Depth-limited tree with detail level (minimal/compact/full)

search_nodes

Find nodes by name substring and/or type within a subtree

scan_text_nodes

All text nodes in a subtree

scan_nodes_by_types

Nodes matching given type list

get_viewport

Current viewport center, zoom, and visible bounds

Read — Styles & Variables

Tool

Description

get_styles

Paint, text, effect, and grid styles

get_variable_defs

Variable collections and values

get_local_components

All components + component sets with variant properties

get_annotations

Dev-mode annotations

get_fonts

All fonts used on the current page, sorted by frequency

get_reactions

Prototype/interaction reactions on a node

Export

Tool

Description

get_screenshot

Base64 image export of any node

save_screenshots

Export images to disk (server-side, no API call)

export_frames_to_pdf

Export multiple frames as a single multi-page PDF file saved to disk

export_tokens

Export design tokens (variables + paint styles) as JSON or CSS

MCP Prompts

Prompt

Description

read_design_strategy

Best practices for reading Figma designs

design_strategy

Best practices for creating and modifying designs

text_replacement_strategy

Chunked approach for replacing text across a design

annotation_conversion_strategy

Convert manual annotations to native Figma annotations

swap_overrides_instances

Transfer overrides between component instances

reaction_to_connector_strategy

Map prototype reactions into interaction flow diagrams



Contributing

Issues and PRs are welcome.

Star History

Available Tools

73 tools
add_pageB
Destructive

Add a new page to the Figma document.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName for the new page (default 'Page')
indexNoPosition index to insert the page (0 = first). Defaults to last position.

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already indicate destructiveHint=true; description only restates the action without additional behavioral details (e.g., overwriting behavior, error cases). Minimal value added.

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?

Single sentence, no unnecessary words. Perfectly concise.

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?

For a simple tool with optional parameters and no output schema, the description is adequate but lacks return value or error context. Acceptable given annotations.

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 description does not need to add parameter meaning. Baseline 3 applies.

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?

Description clearly states verb 'Add' and resource 'page' to the Figma document. No sibling tool has overlapping purpose.

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 on when to use this tool versus alternatives like create_component. No prerequisites or context provided.

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

add_variable_modeA
Destructive

Add a new mode to an existing variable collection (e.g. Light/Dark, Desktop/Mobile). IMPORTANT — Figma free plan only allows 1 mode per collection; calling this tool on a free-plan account will return the error 'Limited to 1 modes only'. If that error occurs, stop retrying and switch to the name-prefix workaround: keep the single default mode and create variables prefixed by mode, e.g. 'light/color-bg' and 'dark/color-bg' in the same collection. Tell the user that native multi-mode variables require a paid Figma plan (Professional or above).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNameYesName for the new mode
collectionIdYesVariable collection ID

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint: true), the description discloses the specific error condition for free plans, the one-mode-per-collection constraint, and the correct fallback behavior. It also instructs the agent to stop retrying and switch strategies, which is critical for correct autonomous operation. 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.

Conciseness4/5

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

The description is well-structured and front-loaded with the core action. It contains three informative sentences without fluff, but the middle part on the workaround is slightly verbose. Overall, it is efficient but not maximally concise—every sentence earns its place, earning a 4.

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?

Given the tool's simplicity (2 params, no output schema, no nested objects) and the presence of clear annotations, the description fully covers the essential aspects: the action, the free plan limitation, the error handling, and the workaround. No missing context for an AI agent to use 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?

The input schema already describes both parameters (modeName and collectionId) with basic descriptions, achieving 100% schema coverage. The description adds example mode names and context about the free plan error, but does not provide additional semantic detail about the parameters themselves. Hence, a score of 3 is appropriate per the rubric (baseline for high schema 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 clearly states the tool adds a new mode to an existing variable collection, with concrete examples like Light/Dark and Desktop/Mobile. It effectively distinguishes itself from sibling tools (e.g., add_page, bind_variable_to_node) by specifying the exact resource and action.

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?

Explicitly explains when to use the tool and, crucially, when not to—detailing the free plan limitation (1 mode per collection) and the error that will occur. Provides a clear alternative (name-prefix workaround) and instructs the agent to inform the user about the paid plan requirement. This is exemplary usage guidance.

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

apply_style_to_nodeA
Destructive

Apply an existing local style (paint, text, effect, or grid) to a node, linking the node to that style.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesTarget node ID in colon format e.g. 4029:12345
targetNoFor paint styles only — apply to 'fill' (default) or 'stroke'
styleIdYesStyle ID to apply (from get_styles)

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destructive and non-read-only behavior. The description adds 'linking the node to that style,' which clarifies the nature of the mutation but does not provide additional behavioral traits beyond what annotations 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 a single sentence with no wasted words. It is front-loaded with the action and resource, making it easy to parse.

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 tool with complete schema coverage and clear annotations, the description is sufficient. It mentions that the style must be existing and local, which is key context. No output schema needed. Minor gap: could specify that the style ID must come from get_styles, but schema already references that.

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 input schema has 100% description coverage for all three parameters. The description adds context about style types but no new semantic meaning beyond what the schema provides. 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 clearly states the verb 'apply' and the resource 'existing local style' to a node, specifying style types (paint, text, effect, or grid). It distinguishes this tool from siblings (e.g., clone_node, create_component) which do not apply styles.

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 usage for applying styles to nodes but does not explicitly state when to use this versus alternatives or when not to use it. No guidance on prerequisites or exclusions.

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

batch_rename_nodesA
Destructive

Rename multiple nodes using find/replace, regex substitution, or prefix/suffix addition.

ParametersJSON Schema
NameRequiredDescriptionDefault
findNoString (or regex pattern when useRegex=true) to search for in the node name
prefixNoString to prepend to the node name
suffixNoString to append to the node name
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']
replaceNoReplacement string. Required when find is provided.
useRegexNoTreat find as a regular expression (default false)
regexFlagsNoRegex flags e.g. 'gi' (default 'g'). Only used when useRegex=true.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, so description doesn't add behavioral context. No contradictions, but no additional disclosure about risks or edge cases.

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?

Single sentence, front-loaded, no wasted words. Efficient and clear.

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?

Adequate for a tool with good schema and annotations, but could elaborate on parameter interactions (e.g., find+replace vs prefix/suffix).

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 has 100% description coverage, so baseline is 3. Description adds little beyond schema, just summarizes methods.

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?

Clearly states the action (rename multiple nodes) and methods (find/replace, regex, prefix/suffix). Distinguishes from sibling tools like clone_node or add_page.

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 on when to use this tool vs alternatives, no exclusions or prerequisites mentioned. Usage is implied but not explicit.

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

bind_variable_to_nodeA
Destructive

Bind a local variable to a node property so the property is driven by the variable's value. COLOR variables: use fillColor or strokeColor. BOOLEAN variables: use visible. FLOAT variables: use opacity, rotation, width, height, cornerRadius, topLeftRadius, topRightRadius, bottomLeftRadius, bottomRightRadius, strokeWeight, itemSpacing, paddingTop, paddingRight, paddingBottom, paddingLeft.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldYesProperty to bind: fillColor | strokeColor | visible | opacity | rotation | width | height | cornerRadius | topLeftRadius | topRightRadius | bottomLeftRadius | bottomRightRadius | strokeWeight | itemSpacing | paddingTop | paddingRight | paddingBottom | paddingLeft
nodeIdYesTarget node ID in colon format e.g. 4029:12345
variableIdYesVariable ID to bind (from get_variable_defs)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, so the agent knows this is a mutation. The description adds the mapping by variable type but does not disclose potential error conditions (e.g., invalid variable-property combination) or required preconditions (node/variable existence).

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, no filler. The first sentence states the core purpose, the second provides essential usage details. Every word adds value.

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 binding tool with three required parameters and no output schema, the description is fairly complete. It covers main usage and type-specific guidance. It lacks discussion of error handling or success feedback, but these are not critical for a straightforward mutation.

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 covers all parameters with descriptions (100% coverage). The description adds meaning for the 'field' parameter by mapping it to variable types, which goes beyond the schema's enumerated list. 'nodeId' and 'variableId' are not further elaborated.

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 tool's action (bind) and resources (local variable to node property). It distinguishes itself from sibling tools which handle page addition, variable modes, style application, renaming, cloning, and component creation, none of which perform binding.

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 provides explicit guidance on which property to use based on variable type (COLOR, BOOLEAN, FLOAT). This helps the agent select the correct field value. However, it does not explicitly mention when to use this tool versus alternatives or state exclusions.

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

clone_nodeB
Destructive

Clone an existing node, optionally repositioning it or placing it in a new parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position of the clone
yNoY position of the clone
nodeIdYesSource node ID in colon format e.g. '4029:12345'
parentIdNoParent node ID for the clone. Defaults to same parent as source.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate destructive=true and read-only=false, so the description adds context about optional repositioning. However, it doesn't mention whether children are cloned or if the operation triggers layout recalculation.

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?

Single sentence, front-loaded with verb and resource, no fluff. Every word earns its place.

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?

Given no output schema and simple parameters, the description is adequate but lacks specifics about clone properties (e.g., inherited styles) and return value. Could be more complete for a mutation 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%, so baseline is 3. The description reinforces the optional nature of x, y, and parentId but adds no extra information beyond the schema descriptions.

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 clearly states the tool clones a node and allows optional repositioning or reparenting, distinguishing it from sibling tools like create_frame or add_page. However, it doesn't elaborate on what 'clone' entails (e.g., deep copy of children).

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 on when to use this tool versus alternatives like create_component or batch_rename_nodes. The description implies usage but doesn't set exclusion criteria or prerequisites.

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

create_componentA
Destructive

Convert an existing FRAME node into a reusable COMPONENT. The frame is replaced in place by the new component.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional name for the component. Defaults to the frame's current name.
nodeIdYesFRAME node ID to convert, in colon format e.g. '4029:12345'

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, and the description adds 'replaced in place' to confirm mutation. However, no additional behavioral context is given (e.g., effect on child nodes, undoability, persistence). Meets minimum but doesn't enrich 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 concise sentences, front-loaded with action and result. No wasted words. Every sentence adds value.

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 conversion tool with no output schema, the description is functionally complete. However, given the large number of siblings (73), additional context about relationships (e.g., to detach_instance) would improve completeness.

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 describes both parameters with full coverage (100%). Description doesn't add meaning beyond the schema (e.g., does not explain colon format for nodeId). Baseline score applies as schema already provides sufficient detail.

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?

Description clearly states the action ('convert'), the resource ('existing FRAME node'), and the result ('into a reusable COMPONENT'). It distinguishes itself from sibling tools like create_frame (creates new) and clone_node (duplicates).

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?

Description implies using this tool when you have a frame to convert to a component, but lacks explicit guidance on when to use it versus alternatives like detach_instance or swap_component. No when-not-to-use or exclusion criteria provided.

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

create_effect_styleB
Destructive

Create a new local effect style (drop shadow, inner shadow, or blur).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesStyle name e.g. 'Shadow/Card'
typeNoEffect type: DROP_SHADOW (default), INNER_SHADOW, LAYER_BLUR, or BACKGROUND_BLUR
colorNoShadow color as hex e.g. #000000 (default #000000, shadows only)
radiusNoBlur radius in pixels (default 8 for shadows, 4 for blurs)
spreadNoShadow spread in pixels (default 0, shadows only)
offsetXNoShadow X offset in pixels (default 0, shadows only)
offsetYNoShadow Y offset in pixels (default 4, shadows only)
opacityNoShadow color opacity 0–1 (default 0.25, shadows only)
descriptionNoOptional style description

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already provide destructiveHint:true, so the description doesn't need to re-emphasize that. However, it adds no further behavioral insight (e.g., whether it overwrites existing styles, permissions needed, or document-level effects). The description is acceptable but does not go beyond 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.

Conciseness4/5

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

The description is a single concise sentence that efficiently communicates the tool's purpose. It is appropriately front-loaded but could benefit from a slight expansion for completeness.

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

Completeness2/5

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

Given the tool has 9 parameters and no output schema, the description is insufficient. It does not explain the return value, effect on the document, or any side effects (e.g., the style is added to the current document's local styles). The complexity is not matched by the description's brevity.

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 description does not need to explain parameters further. The baseline score of 3 is appropriate as the description adds no additional parameter 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.

Purpose5/5

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

The description clearly states the action ('Create'), the resource ('local effect style'), and explicitly lists the supported types ('drop shadow, inner shadow, or blur'), fully distinguishing from sibling tools like create_paint_style.

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 on when to use this tool versus alternatives among the many creation sibling tools. No mention of prerequisites, context, or situations where this tool is preferred.

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

create_ellipseA
Destructive

Create a new ellipse (circle/oval) on the current page or inside a parent node.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position (default 0)
yNoY position (default 0)
nameNoEllipse name
widthNoWidth in pixels (default 100)
heightNoHeight in pixels (default 100)
parentIdNoParent node ID in colon format. Defaults to current page.
fillColorNoFill color as hex e.g. #3B82F6

TDQS

A3.7/5.0
Behavior3/5

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

Annotations indicate destructiveHint=true, readOnlyHint=false, and idempotentHint=false, which align with creation behavior. The description adds no further behavioral details beyond the annotations, such as potential side effects or scope of creation.

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?

Single sentence, front-loaded with action and resource, no redundant words. Efficient and clear.

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?

Description covers creation location (page/parent node) but omits return value information (e.g., created node ID). With no output schema and 7 optional parameters, a brief note on return data would improve completeness.

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 each parameter is already described. The tool description does not add additional semantic value beyond the schema, resulting in baseline score.

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?

Description clearly states the action (create) and resource (ellipse (circle/oval)) with location context (on current page or inside a parent node). It distinguishes from sibling shape creation tools like create_rectangle by specifying the ellipse shape.

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 on when to use this tool versus alternatives like create_rectangle or create_frame. The description implies it is for ellipses, but does not provide usage context or exclusions.

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

create_frameB
Destructive

Create a new frame on the current page or inside a parent node.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position (default 0)
yNoY position (default 0)
nameNoFrame name
widthNoWidth in pixels (default 100)
heightNoHeight in pixels (default 100)
parentIdNoParent node ID in colon format. Defaults to current page.
fillColorNoFill color as hex e.g. #FFFFFF
layoutModeNoAuto-layout direction: HORIZONTAL, VERTICAL, or NONE
layoutWrapNoWrap behaviour: NO_WRAP or WRAP
paddingTopNoAuto-layout top padding
itemSpacingNoAuto-layout gap between children
paddingLeftNoAuto-layout left padding
paddingRightNoAuto-layout right padding
paddingBottomNoAuto-layout bottom padding
counterAxisSpacingNoGap between wrapped rows/columns (only when layoutWrap is WRAP)
counterAxisAlignItemsNoCross-axis alignment: MIN, CENTER, MAX, or BASELINE
counterAxisSizingModeNoCross-axis sizing: FIXED or AUTO (hug)
primaryAxisAlignItemsNoMain-axis alignment: MIN, CENTER, MAX, or SPACE_BETWEEN
primaryAxisSizingModeNoMain-axis sizing: FIXED or AUTO (hug)

TDQS

B3.1/5.0
Behavior2/5

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

The description only states 'Create a new frame', which is inferred as a mutation. Annotations already indicate readOnlyHint=false and destructiveHint=true, but the description does not clarify what makes it destructive (e.g., overwriting existing nodes) or any side effects beyond creation.

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 a single sentence, efficiently conveying the core purpose without unnecessary words. It is front-loaded and easy to parse, though it could benefit from additional context without losing conciseness.

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

Completeness2/5

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

With 19 optional parameters and no output schema, the description is too sparse. It fails to mention defaults, the auto-layout capabilities implied by parameters, or important behaviors like what happens when parentId is omitted. A more comprehensive description is needed given the tool's complexity.

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% with parameter descriptions, so baseline is 3. The description adds no extra parameter semantics beyond what the schema provides, so no improvement is warranted.

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 tool creates a 'frame', a specific resource type, and specifies placement ('on the current page or inside a parent node'). This distinguishes it from sibling creation tools like create_rectangle or create_ellipse.

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 create_frame versus alternatives like create_section or create_component. It does not mention when not to use it or suggest other tools for different container needs.

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

create_grid_styleA
Destructive

Create a new local layout grid style.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesStyle name e.g. 'Grid/Desktop'
colorNoGrid line color as hex e.g. #FF0000 (GRID only, default #FF0000)
countNoNumber of columns or rows (COLUMNS/ROWS only, default 12)
offsetNoMargin/offset in pixels (COLUMNS/ROWS only, default 0)
opacityNoGrid line opacity 0–1 (GRID only, default 0.1)
patternNoGrid pattern: GRID (default), COLUMNS, or ROWS
alignmentNoAlignment: STRETCH (default), CENTER, MIN, or MAX (COLUMNS/ROWS only)
gutterSizeNoGutter size in pixels (COLUMNS/ROWS only, default 16)
descriptionNoOptional style description
sectionSizeNoGrid cell size in pixels (GRID only, default 8)

TDQS

A3.5/5.0
Behavior3/5

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

Annotations indicate destructiveHint=true, which aligns with the 'Create' verb. The description adds no extra behavioral context beyond the annotations, such as side effects or permissions.

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 concise sentence with no wasted words, front-loading the core purpose.

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?

Given the rich schema and annotations, the minimal description is adequate but fails to mention that the style is 'local' or any constraints on creation.

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% with detailed descriptions for all 10 parameters. The description adds no extra meaning beyond the schema, meeting the baseline.

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 specifies the verb 'Create' and the resource 'local layout grid style', clearly distinguishing it from sibling tools like create_effect_style, create_paint_style, etc.

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 vs alternatives (e.g., create_paint_style for paint styles). No prerequisites or exclusions are mentioned.

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

create_paint_styleB
Destructive

Create a new local paint style with a solid fill color.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesStyle name e.g. 'Brand/Primary'
colorYesFill color as hex e.g. #FF5733
descriptionNoOptional style description

TDQS

B3.4/5.0
Behavior3/5

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

Annotations (readOnlyHint=false, destructiveHint=true) already indicate mutation and potential destruction. The description adds the 'solid fill color' detail but does not clarify behavior on name conflicts or side effects beyond what annotations imply.

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?

A single concise sentence with no unnecessary words. While efficient, it could slightly expand on usage or return value without losing conciseness.

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?

No output schema is defined, so the description should indicate what the tool returns (e.g., style ID). The destructiveHint annotation hints at potential overwriting, but the description does not address this. Adequate for simple creation but missing return value information.

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?

Input schema covers all 3 parameters with descriptions and examples, so baseline is 3. The description mentions 'solid fill color', aligning with the color parameter, but adds no additional meaning beyond the schema.

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 ('Create'), the resource ('local paint style'), and a key attribute ('solid fill color'). Among sibling tools like 'create_effect_style' and 'update_paint_style', it is distinct and 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 provided on when to use this tool versus alternatives like 'set_fills' or 'apply_style_to_node'. Lacks explicit context for appropriate usage.

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

create_rectangleA
Destructive

Create a new rectangle on the current page or inside a parent node.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position (default 0)
yNoY position (default 0)
nameNoRectangle name
widthNoWidth in pixels (default 100)
heightNoHeight in pixels (default 100)
parentIdNoParent node ID in colon format. Defaults to current page.
fillColorNoFill color as hex e.g. #FF5733
cornerRadiusNoCorner radius in pixels

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destruction and non-idempotence. Description adds context about defaulting to current page, but no additional behavioral traits like side effects or limits.

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?

Single sentence, 19 words, front-loaded with verb and resource. No wasted words.

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 creation tool with 8 parameters and no output schema, the description is adequate but could mention return value or defaults. Schema already covers defaults, so minimal gap.

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 has 100% coverage with descriptions. Description adds no new parameter info beyond the schema, so baseline 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?

Description clearly states verb 'Create', resource 'rectangle', and scope 'on current page or inside a parent node'. Distinguishes from siblings like create_ellipse and create_frame.

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?

Provides context (current page or parent node) but no explicit guidance on when to use vs alternatives like create_frame or create_ellipse. Usage is implied but not differentiated.

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

create_sectionC
Destructive

Create a Figma Section node on the current page. Sections are the modern way to organize frames and groups on a page.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position (default 0)
yNoY position (default 0)
nameNoSection name (default 'Section')
widthNoWidth in pixels
heightNoHeight in pixels

TDQS

C2.9/5.0
Behavior2/5

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

The description discloses creation behavior, but the destructiveHint=true annotation suggests potential data loss or overwriting, which contradicts the creation action. No additional behavioral context is provided, and the contradiction is not addressed.

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 concise sentences that are front-loaded and free of unnecessary details. Every sentence adds value.

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

Completeness2/5

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

Given the tool's simplicity and lack of output schema, the description is minimally adequate but misses output format details and usage context. The destructive annotation contradiction remains unresolved.

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?

All parameters are fully described in the schema with 100% coverage. The description does not add any extra meaning beyond the schema, so a baseline score of 3 is appropriate.

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 clearly states the action (create) and resource (Figma Section node). It mentions that sections organize frames and groups, but does not explicitly differentiate from similar create tools like create_frame, leaving some ambiguity.

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 on when to use this tool vs alternatives such as create_frame or group_nodes. The description implies it is for organizing, but does not state when a section is preferred over other structures.

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

create_textA
Destructive

Create a new text node on the current page or inside a parent node. The font is loaded automatically before insertion. Returns the created node ID and bounds. Use set_text to update the content of an existing text node.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position in pixels (default 0)
yNoY position in pixels (default 0)
nameNoNode name shown in the layers panel (defaults to the text content)
textYesText content to display
fontSizeNoFont size in pixels (default 14)
parentIdNoParent node ID in colon format. Defaults to current page.
fillColorNoText color as hex e.g. #000000 (default black)
fontStyleNoFont style variant e.g. 'Regular', 'Bold', 'Italic', 'Medium', 'SemiBold' (default Regular). Must match an available style for the chosen fontFamily.
fontFamilyNoFont family name e.g. 'Inter', 'Roboto', 'SF Pro Display' (default Inter). Must be a font installed in Figma.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate write (readOnlyHint=false), destruction (destructiveHint=true), and openness (openWorldHint=true). Description adds value by stating font auto-loading and return of node ID and bounds.

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: first states core purpose and behavior, second provides alternative and return info. Front-loaded and no wasted words.

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 tool creates a text node with many parameters, the description explains the creation scope and return values, while the schema covers parameters. No output schema, but return info is provided.

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 covers all 9 parameters with descriptions (100% coverage). Description adds no additional parameter details beyond the automatic font loading context.

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?

Clearly states verb 'create', resource 'text node', and scope 'on the current page or inside a parent node'. Distinguishes from sibling 'set_text' which updates existing.

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?

Explicitly says to use 'set_text' for updating, and mentions font is loaded automatically, providing when-not and context.

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

create_text_styleA
Destructive

Create a new local text style (typography preset). Returns the new style's ID. Apply it to nodes with apply_style_to_node. Use get_styles to list existing text styles.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesStyle name — use slash notation to organise into groups e.g. 'Heading/H1', 'Body/Regular'
fontSizeNoFont size in pixels (default 16)
fontStyleNoFont style variant e.g. 'Regular', 'Bold', 'Medium', 'SemiBold' (default Regular)
fontFamilyNoFont family name e.g. 'Inter', 'Roboto' (default Inter). Must be installed in Figma.
descriptionNoOptional human-readable description shown in the Figma style panel
lineHeightUnitNoLine height unit: PIXELS (default) or PERCENT
textDecorationNoText decoration: NONE (default), UNDERLINE, or STRIKETHROUGH
lineHeightValueNoLine height value (unit set by lineHeightUnit)
letterSpacingUnitNoLetter spacing unit: PIXELS (default) or PERCENT
letterSpacingValueNoLetter spacing value (unit set by letterSpacingUnit)

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses that the tool returns the new style's ID, which is not in annotations. It implies creation (consistent with destructiveHint=true) and mentions the style is local. No contradictions 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?

Three concise sentences front-load the main action and return value, with no superfluous content.

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 schema covers all parameters and the description explains the return value and related tools, the definition is fairly complete. It could mention error handling (e.g., duplicate names) but is adequate for a creation 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 description coverage is 100%, so the baseline is 3. The description adds no new information beyond what is already in the schema, such as the slash notation for grouping in the name parameter, which is already documented in the schema.

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 tool creates a new local text style (typography preset) and returns its ID. It distinguishes from sibling style creation tools by specifying 'typography preset' and mentions related tools like apply_style_to_node and get_styles.

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 explicitly says to use apply_style_to_node to apply the style and get_styles to list existing styles, providing clear context. It does not explicitly state when not to use, but the guidance is sufficient for an agent to decide.

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

create_variableA
Destructive

Create a new variable (design token) inside an existing collection. Returns the new variable's ID. Use get_variable_defs to find collection IDs, set_variable_value to set values per mode, and bind_variable_to_node to apply the variable to a node property.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesVariable name — use slash notation to group e.g. 'Color/Primary', 'Spacing/MD'
typeYesVariable type: COLOR (hex color), FLOAT (numeric dimension/spacing), STRING (text), or BOOLEAN (true/false toggle)
valueNoInitial value for the first mode. COLOR: hex e.g. #FF5733. FLOAT: number e.g. 16. STRING: text. BOOLEAN: true or false.
collectionIdYesID of the variable collection to add this variable to (from get_variable_defs)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false. Description adds behavioral context by stating the tool creates a new variable and returns its ID, which is beyond what annotations provide. It does not contradict 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 cover purpose, return value, and related tools. No redundant words; front-loaded with essential action.

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 4-parameter tool with no output schema, the description adequately covers creation, return value, and usage context. It lacks details on error handling or value validation but is sufficient for typical use.

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% with descriptions for all 4 parameters. The description does not add meaning beyond the schema, so baseline score of 3 applies.

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?

Description clearly states the action 'Create a new variable (design token) inside an existing collection' and its return 'Returns the new variable's ID'. This specific verb+resource combination distinguishes it from siblings like set_variable_value and bind_variable_to_node.

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?

Description explicitly tells the agent to 'Use get_variable_defs to find collection IDs, set_variable_value to set values per mode, and bind_variable_to_node to apply the variable'. This provides clear when-to-use and alternatives guidance.

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

create_variable_collectionA
Destructive

Create a new local variable collection with an optional initial mode name. NOTE — Figma free plan limits each collection to 1 mode. If you need Light/Dark (or any multi-mode) theming and the user is on the free plan, do NOT try to call add_variable_mode; instead use the name-prefix workaround: create all variables in a single collection and prefix each variable name with its mode, e.g. 'light/color-bg' and 'dark/color-bg'. Inform the user of this limitation.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCollection name
initialModeNameNoName for the initial mode (default 'Mode 1')

TDQS

A3.8/5.0
Behavior2/5

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

The description does not clarify why the tool is marked with destructiveHint=true. While it mentions the free plan limitation, it contradicts the annotation by only describing additive behavior. The openWorldHint is also unexplained.

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 concise with two sentences, front-loading the main action. The second sentence is lengthy but packs essential guidance without redundancy.

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?

The description covers the free plan limitation and provides a workaround, but lacks details on return values, required permissions, or the implications of the destructive annotation. It is adequate but not fully comprehensive.

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 schema already documents both parameters. The description adds minimal value by restating the optional initial mode name, but no format or constraints beyond what's in the schema.

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 tool creates a new local variable collection with an optional initial mode name, using a specific verb and resource. It distinguishes from sibling tools like add_variable_mode by explicitly mentioning when not to use that alternative.

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?

The description provides explicit when-to-use and when-not-to-use guidance, naming the alternative tool (add_variable_mode) and offering a workaround for the free plan limitation. This is comprehensive.

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

delete_nodesA
Destructive

Delete one or more nodes. This cannot be undone via MCP — use with care.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesNode IDs to delete in colon format e.g. ['4029:12345']

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark destructiveHint=true. The description adds that deletion cannot be undone via MCP, which is a useful behavioral trait beyond the annotation. However, it does not mention other side effects like cascading deletion of child nodes.

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, zero filler. Every word serves a purpose: stating the action, scope, and critical warning. Extremely 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 destructive tool with one parameter and no output schema, the description covers action, irreversibility, and parameter format (via schema). It could mention error handling or what happens to dependent elements, but overall 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?

Input schema covers 100% of parameters with clear description of 'nodeIds' format. The tool description adds no additional parameter information, so 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?

Description clearly states 'Delete one or more nodes', specifying the verb and resource. It is distinguishable from sibling tools like 'delete_page', 'delete_style', and 'delete_variable'.

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 warning 'cannot be undone via MCP — use with care' implies careful usage but does not explicitly state when to use this tool versus alternatives (e.g., other deletion tools or undo operations). No explicit when-not-to-use or alternative tool names are provided.

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

delete_pageA
Destructive

Delete a page from the Figma document. Cannot delete the only remaining page.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdNoPage node ID in colon format e.g. '0:2'
pageNameNoExact page name to delete (alternative to pageId)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, and the description adds the critical behavior that it cannot delete the only remaining page. No contradictions.

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, front-loaded with the primary action, and the second sentence adds a crucial constraint with no wasted words.

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 destructive tool with two optional parameters and no output schema, the description covers the essential purpose and a key safety constraint. Could mention behavior when no parameters provided, but sufficient overall.

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?

Input schema coverage is 100% with both parameters already described in schema. The description does not add any additional meaning beyond what the schema provides, so a baseline of 3 applies.

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 'Delete a page from the Figma document', using a specific verb and resource. It distinguishes from other deletion tools like delete_nodes by targeting pages specifically.

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 explicitly states 'Cannot delete the only remaining page', providing a key constraint. It does not mention alternatives or when not to use, but the constraint is valuable guidance.

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

delete_styleA
Destructive

Delete a style (paint, text, effect, or grid) by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleIdYesStyle ID to delete

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already show destructiveHint=true, so the agent knows deletion is destructive. The description adds no further behavioral details (e.g., whether deletion fails if the style is in use or affects history).

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 concise sentence that immediately states the action and object. No unnecessary words.

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 tool with one parameter and no output schema, the description combined with annotations provides complete context. The agent can understand what the tool does and its destructive nature.

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 schema already describes the styleId parameter. The description's mention of 'by its ID' adds no new information beyond the schema.

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 explicitly states 'Delete a style' with specific types (paint, text, effect, or grid) and identifies the method (by its ID). This clearly differentiates it from sibling tools like create_paint_style or delete_variable.

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 indicates the tool is used to delete styles, providing clear context. However, it does not specify when not to use it or mention any prerequisites or side effects, such as how deletion interacts with styles applied to nodes.

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

delete_variableA
Destructive

Delete a single variable (provide variableId) or an entire collection and all its variables (provide collectionId). Provide exactly one of the two — not both.

ParametersJSON Schema
NameRequiredDescriptionDefault
variableIdNoVariable ID to delete
collectionIdNoCollection ID to delete (removes all variables in the collection)

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, indicating a destructive operation. Description adds the scope of deletion (single variable vs. entire collection) but does not provide further behavioral details such as irreversibility or cascading effects.

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?

A single sentence that is front-loaded with the action and quickly conveys the two modes and constraint. Every word is necessary; no superfluous content.

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 delete tool, the description fully explains what is deleted and the required input constraint. Annotations cover safety (destructive), and no output schema is needed for a deletion action.

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?

Input schema has 100% coverage with descriptions for both parameters. Description adds the critical constraint that exactly one must be provided, which is not in the schema, enhancing parameter understanding.

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?

Description clearly states the tool deletes a single variable or an entire collection, with specific verb 'Delete' and resource. It distinguishes the two modes and provides the constraint of exactly one ID, making it distinct from siblings.

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?

Explicitly states to provide exactly one of variableId or collectionId, providing clear usage constraint. However, it does not mention when to use this tool over alternatives like delete_nodes or delete_page, but the tool name and resource specificity make it clear.

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

detach_instanceA
Destructive

Detach one or more component instances, converting them to plain frames. The link to the main component is broken; all visual properties are preserved.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesINSTANCE node IDs in colon format e.g. ['4029:12345']

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true, and the description adds that visual properties are preserved, which is valuable behavioral context beyond the annotations. 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?

Two sentences with no wasted words. The action and effect are clearly stated upfront, making it easy to parse.

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 tool with one parameter and no output schema, the description covers the core behavior sufficiently. It does not address error conditions, but that is acceptable given the tool's simplicity.

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 description does not add extra meaning beyond the schema's explanation of nodeIds. The schema already documents the format and type adequately.

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 'Detach', the resource 'component instances', and the effect: converting to plain frames, breaking the link, preserving visual properties. This distinguishes it from sibling tools like swap_component or create_component.

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 usage when wanting to break component-instance links while keeping properties, but it does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or when-not-to-use scenarios.

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

export_frames_to_pdfA
Destructive

Export multiple frames as a single multi-page PDF file. Each frame becomes one page in order. Ideal for pitch decks, proposals, and slide exports.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesOrdered list of frame node IDs to export as PDF pages, colon format e.g. '4029:12345'
outputPathYesFile path to write the PDF to, must end in .pdf (relative to working directory or absolute)

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, so the description does not need to repeat that. However, it adds no additional behavioral context beyond the export action (e.g., file overwriting behavior). 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 long, front-loaded with the action and result, and contains no fluff. Every sentence provides value.

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 tool with two fully described parameters, no output schema, and annotations covering behavior, the description is complete. It explains what the tool does and the use cases, which is 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 both parameters are well-described in the schema (nodeIds as ordered list, outputPath as file path). The description adds no extra meaning beyond the schema, so 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 (export) and resource (frames to PDF), specifies that each frame becomes a page, and provides use cases (pitch decks, proposals, slide exports). It differentiates from siblings as no other tool offers PDF export.

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 indicates ideal use cases ('Ideal for pitch decks, proposals, and slide exports') but does not explicitly state when not to use or mention alternatives. Given the sibling list lacks similar tools, this is acceptable but could be more comprehensive.

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

export_tokensA
Destructive

Export all design tokens (variables and paint styles) as JSON or CSS custom properties. Ideal for bridging Figma variables into your codebase.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format: json (default) or css

TDQS

A3.7/5.0
Behavior1/5

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

The description claims an export operation, which is non-destructive and read-only, but the annotations set destructiveHint: true and readOnlyHint: false, directly contradicting the description. This is a serious inconsistency.

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 cover purpose, resource, output formats, and usage context with no wasted words. The information is front-loaded and efficient.

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?

The description explains what the tool does and its output, but given the annotation contradiction and lack of output schema, it does not fully disclose the tool's actual behavior or side effects.

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 single parameter 'format' is fully described in the schema with 100% coverage. The description adds value by explicitly stating the default ('json') and options ('json or css'), clarifying the expected values.

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 (export), the resource (design tokens including variables and paint styles), and the output formats (JSON or CSS). It distinguishes from the many sibling tools, none of which perform this specific export function.

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 phrase 'Ideal for bridging Figma variables into your codebase' provides a clear use case. However, it does not explicitly exclude scenarios where this tool should not be used or mention alternatives.

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

find_replace_textA
Destructive

Find and replace text content across all TEXT nodes in a subtree. Searches the entire current page if no nodeId is given.

ParametersJSON Schema
NameRequiredDescriptionDefault
findYesText string (or regex pattern when useRegex=true) to search for
nodeIdNoRoot node ID to scope the search. Defaults to the entire current page.
replaceYesReplacement string (use empty string to delete matches)
useRegexNoTreat find as a regular expression (default false)
regexFlagsNoRegex flags e.g. 'gi' (default 'g'). Only used when useRegex=true.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark destructiveHint=true and openWorldHint=true. The description adds value by explaining that an empty replace string deletes matches and that searching scopes to a subtree or entire page. 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?

Two sentences, front-loaded with the core action. Every sentence adds value: first sentence states the main operation, second clarifies scope and default behavior. No fluff.

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 5-parameter tool with no output schema, the description covers the essential scope behavior and delete capability. It is complete enough for an agent to understand when and how to invoke it. Could mention return value but not necessary.

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 documents each parameter's purpose. The description does not add new parameter-level information beyond what the schema provides, so baseline 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 it finds and replaces text across all text nodes in a subtree, with fallback to entire page if no nodeId. This is a specific verb+resource+scope that distinguishes it from siblings like set_text (single node) or batch_rename_nodes (node renaming).

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 mentions when to use nodeId to scope search and implies use of regex flags, but does not explicitly state when not to use this tool or suggest alternatives for single-node changes. Still, the context is clear enough for an agent.

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

get_annotationsA
Destructive

Get dev-mode annotations in the current document or scoped to a specific node. Returns annotation objects with label text, measurement type, and the ID of the annotated node. Omit nodeId to retrieve all annotations on the current page.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdNoOptional — scope results to annotations on this node and its descendants, colon format e.g. '4029:12345'

TDQS

A3.8/5.0
Behavior1/5

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

Description implies read-only ('Get'), but annotations indicate destructiveHint=true and readOnlyHint=false, creating a contradiction. No behavioral context beyond the misleading implication.

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?

Three concise sentences, front-loaded with verb and resource, no superfluous content.

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?

Adequate for a single-parameter tool with no output schema. Explains return object fields and two usage modes. Could mention error handling for invalid nodeId.

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 covers 100% of parameters. Description adds value by explaining the optional nodeId's purpose and providing a colon format example.

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?

Description clearly states it retrieves dev-mode annotations, scoped or all, and specifies return fields. No sibling competitors for annotation retrieval.

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?

Guidance on omitting nodeId for all annotations vs providing nodeId for scoping is clear. No when-not or prerequisites mentioned, but sufficient for this simple tool.

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

get_design_contextA
Destructive

Get a depth-limited, token-efficient tree of the current selection or page. Use this instead of get_document when exploring large files. Supports detail levels (minimal/compact/full) and dedupe_components for pages heavy with repeated component instances.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoHow many levels deep to traverse (default 2)
detailNoProperty verbosity: minimal (id/name/type/bounds only), compact (+fills/strokes/opacity), full (everything, default)
dedupe_componentsNoWhen true, INSTANCE nodes are serialized compactly (mainComponentId + componentProperties + overrides array of differing text/nested content) and unique component definitions are collected once in a top-level componentDefs map. Highly token-efficient for screens with many repeated component instances.

TDQS

A3.9/5.0
Behavior2/5

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

Annotations declare destructiveHint=true, but the description describes a read-only operation (getting a tree). The description does not clarify any side effects or destructive behavior, contradicting the annotation. No extra behavioral context added.

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 redundancy. First sentence covers purpose and comparison, second adds parameter nuance. Every word contributes.

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?

No output schema, so description should clarify return format. It only says 'tree' without structure details. The destructive annotation is unexplained. Parameter coverage is good, but overall completeness is moderate given the lack of output and behavioral clarification.

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%, and the description enriches parameter understanding by explicitly naming detail levels (minimal, compact, full) and explaining dedupe_components for repeated instances, adding value beyond schema descriptions.

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?

Description states the tool fetches a depth-limited, token-efficient tree of the current selection or page, clearly identifying the resource and action. It also explicitly contrasts with get_document, distinguishing it from a sibling 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 advises using this tool instead of get_document for large files, providing explicit alternative. However, it lacks explicit when-not-to-use guidance or exclusions.

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

get_documentA
Destructive

Get the full node tree of the current page (not the whole file — only the active page). Returns all nodes recursively and can be very large. Prefer get_design_context for exploration or when token efficiency matters.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond annotations (which indicate destructiveHint and readOnlyHint), the description adds that the tool 'Returns all nodes recursively and can be very large', helping the agent anticipate performance implications. 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?

Two sentences: first states purpose, second provides usage guidance. No wasted words, front-loaded with key 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?

Despite no parameters or output schema, the description sufficiently covers what the tool returns, potential size, and how it differs from a sibling. For a simple retrieval tool, this is complete.

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?

Tool has zero parameters, so baseline is 4. Description does not need to add parameter info, and it doesn't, which is appropriate given 100% schema 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?

Description clearly states 'Get the full node tree of the current page', specifying the action (Get), resource (full node tree), and scope (current page only, not entire file). It also distinguishes itself from a sibling tool, get_design_context.

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?

Explicitly advises preferring get_design_context for exploration or token efficiency, providing clear when-to-use and when-not-to-use guidance relative to an alternative.

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

get_fontsA
Destructive

List all fonts used in the current page, sorted by usage frequency. Useful for understanding typography without scanning all text nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior1/5

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

The description describes a read operation, but annotations indicate destructiveHint=true and readOnlyHint=false, a direct contradiction that misleads about side effects. No additional behavioral context provided.

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 short sentences, front-loaded with the action, and every sentence provides useful context with no redundancy.

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?

For a tool with no parameters and no output schema, the description adequately explains what it returns. However, the annotation contradiction creates a completeness gap in terms of behavioral context.

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?

There are zero parameters, so schema coverage is 100%. The description adds value beyond the schema by mentioning sorting by usage frequency, which is not in the input schema.

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 'List all fonts used in the current page, sorted by usage frequency,' specifying a concrete action and resource. It distinguishes from siblings like scan_text_nodes or get_annotations by focusing solely on fonts.

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 adds 'Useful for understanding typography without scanning all text nodes,' which implies a use case but does not explicitly exclude alternatives or state when not to use it.

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

get_local_componentsC
Destructive

Get all components defined in the current Figma file.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior1/5

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

Annotations declare destructiveHint=true, but description portrays a read-only operation ('Get all components'). This contradiction is misleading; the description does not clarify the destructive nature.

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?

Single concise sentence with no filler, front-loaded with the core action.

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

Completeness2/5

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

Despite no parameters, the description lacks detail on what 'components' includes (e.g., nested components, instances?). No output schema, so return format is unaddressed. Annotation contradiction further undermines completeness.

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?

No parameters exist, so description need not add meaning beyond the empty schema. Baseline 4 applies.

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 clearly states it gets all components from the current Figma file, specifying the resource and scope. It distinguishes from sibling tools like create_component and swap_component by being a read operation.

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 on when to use this tool versus alternatives like get_styles or scan_nodes_by_types. No exclusions or usage context provided.

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

get_metadataB
Destructive

Get metadata about the current Figma document: file name, pages, current page

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior1/5

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

The description labels the tool as 'Get metadata', implying a read-only operation, but annotations set destructiveHint=true, creating a direct contradiction. Additional behavioral context is lacking.

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, concise sentence that immediately and clearly conveys the tool's purpose, with no unnecessary words.

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?

The description lists the returned metadata (file name, pages, current page), but does not specify the format or whether 'pages' includes page IDs or names. This is mostly adequate for a simple getter.

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 tool has no parameters, so the schema already fully documents them. The description adds no parameter info but also requires none. Baseline score of 4 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 tool retrieves metadata about the current Figma document, listing specific items: file name, pages, and current page. This verb+resource combination is specific and distinct from sibling tools like get_document or get_fonts.

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_document or get_fonts. It does not mention conditions for use or exclusions.

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

get_nodeA
Destructive

Get a single node by ID with full detail. Use get_nodes_info to fetch multiple nodes in one round-trip instead of calling this repeatedly. Node ID must be colon format e.g. '4029:12345', never hyphens.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesNode ID in colon format e.g. '4029:12345'

TDQS

A3.9/5.0
Behavior1/5

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

Description says 'Get' implying read-only, but annotations set destructiveHint=true, indicating potential side effects. This is a direct contradiction, leaving the agent uncertain about the operation's safety.

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 front-loaded with purpose. No wasted words; efficient and clear.

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?

No output schema, but description notes 'full detail' without clarifying return structure. Contradictory annotations reduce completeness; adequate but could mention error handling or extent of detail.

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 covers nodeId parameter (100% coverage). Description adds valuable format guidance (colon format, avoid hyphens) that goes beyond schema definition.

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?

Description clearly states 'Get a single node by ID with full detail', specifying verb and resource. It distinguishes from sibling get_nodes_info which fetches multiple nodes.

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?

Explicitly advises using get_nodes_info for multiple nodes to avoid repeated calls, and provides specific format rule (colon format, no hyphens).

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

get_nodes_infoA
Destructive

Get full details for multiple nodes by ID in one round-trip. Prefer this over calling get_node repeatedly when you need several nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesList of node IDs in colon format e.g. ['4029:12345', '4029:67890']

TDQS

A3.5/5.0
Behavior1/5

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

The description implies a read operation ('Get full details'), but annotations set destructiveHint=true and readOnlyHint=false, indicating potential destructive behavior. This is a clear contradiction that severely misleads an agent about side effects.

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 concise sentences that front-load the action and the key benefit over alternatives. No unnecessary words.

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?

Lacks explanation of return values (no output schema) and does not clarify 'full details'. The annotation contradiction further undermines completeness, preventing an agent from understanding the tool's full behavior.

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 single parameter 'nodeIds' is fully described in the schema with format examples. The description adds no extra meaning beyond the schema, and with 100% schema coverage, a 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 clearly states the verb 'Get', the resource 'nodes', and explicitly differentiates from the sibling 'get_node' with the benefit of a single round-trip for multiple nodes.

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?

Explicitly recommends use over repeated calls to 'get_node' when multiple nodes are needed, providing clear usage context. No exclusion criteria are given.

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

get_pagesA
Destructive

List all pages in the document with their IDs and names. Lightweight alternative to get_document.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior1/5

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

The description states the tool lists pages, implying a read-only operation. However, annotations set destructiveHint=true and readOnlyHint=false, contradicting the description. The description does not acknowledge this contradiction or clarify any potential side effects.

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 succinct sentences. The first states the action and output; the second provides context. No unnecessary words.

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 listing tool with no output schema, the description adequately describes the output (IDs and names). However, the contradiction with annotations reduces completeness since an agent cannot fully trust the description.

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?

No parameters exist, and schema coverage is 100%. The description does not need to add parameter information, so it performs adequately.

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 identifies the tool's action (list all pages) and the resource (document), and distinguishes it from the sibling tool get_document by calling it a 'lightweight alternative'.

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?

Explicitly says 'Lightweight alternative to get_document,' implying when only page IDs and names are needed, use this instead. Lacks explicit when-not-to-use scenarios, but the alternative is clear.

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

get_reactionsA
Destructive

Get the prototype reactions defined on a node. Returns an array of reaction objects — each has a trigger (e.g. ON_CLICK, ON_HOVER, AFTER_TIMEOUT) and an actions array (navigate to node, open URL, go back, etc.). Use set_reactions to add or replace reactions, remove_reactions to delete them.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesNode ID in colon format e.g. '4029:12345'

TDQS

A3.5/5.0
Behavior1/5

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

The description describes a read-only get operation, but annotations set readOnlyHint=false and destructiveHint=true, contradicting the described behavior. This inconsistency severely impairs transparency.

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 front-load the purpose and then list alternatives. Every word is informative, no redundancy.

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?

The description covers essential output (array of reaction objects with trigger and actions) and related tools. However, the annotation contradiction undermines completeness, and no output schema or pagination details are provided, but given simplicity, it's minimally adequate.

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 covers 100% of parameters, including description for nodeId. The tool description adds no extra parameter details beyond the schema, so a 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 'Get the prototype reactions defined on a node', specifying the verb (get) and resource (prototype reactions on a node). It distinguishes from siblings like set_reactions and remove_reactions by naming them explicitly.

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 implies when to use (to retrieve reactions) and mentions alternative tools for adding/replacing (set_reactions) or deleting (remove_reactions). It lacks an explicit 'when not to use' but provides clear context.

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

get_screenshotA
Destructive

Export a screenshot of one or more nodes as base64-encoded image data (held in memory). Use save_screenshots instead when you want to write images directly to disk without base64 in the response.

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoExport scale for raster formats (default 2)
formatNoExport format: PNG (default), SVG, JPG, or PDF
nodeIdsNoOptional node IDs to export, colon format. If empty, exports current selection.

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses that the image is held in memory and base64-encoded, complementing the destructiveHint annotation. It does not contradict any 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 compact sentences: first states the core functionality and output format, second provides the key alternative. No wasted words.

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?

The description covers the tool's purpose and output format, but does not detail the response structure (e.g., exact key names for the base64 data). However, lacking an output schema, this is a minor gap.

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 description adds no new parameter information beyond what the schema already provides. 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 uses a specific verb ('Export') and resource ('screenshot of nodes'), and immediately distinguishes itself from the sibling tool 'save_screenshots' by noting the memory vs disk difference.

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?

The description explicitly states when to use the alternative tool 'save_screenshots' ('when you want to write images directly to disk without base64 in the response'), providing clear criteria for choosing between the two.

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

get_selectionA
Destructive

Get the nodes currently selected in Figma. Returns an empty array if nothing is selected. Use get_design_context or get_node to retrieve deeper detail about a specific node by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior1/5

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

The description states this is a read-like operation, but annotations have destructiveHint=true, which is contradictory. The description does not clarify why it might be destructive or disclose any side effects. With no additional behavioral context beyond the contradiction, the score is 1.

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: the first states the core function and return behavior, the second provides usage guidance with alternatives. Every word serves a purpose, and it is front-loaded with the main action.

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

Completeness2/5

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

Given the contradiction with annotations, the description fails to provide complete context about the tool's behavior. It does not explain the destructive nature implied by annotations, nor does it specify the format of returned nodes. For a simple tool, it should clarify the discrepancy.

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 tool has no parameters, and schema coverage is 100%. As per the rubric, 0 parameters gives a baseline of 4. The description does not need to add parameter semantics since there are none.

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 verb 'Get' and the resource 'nodes currently selected in Figma'. It also specifies the return behavior (empty array if nothing selected) and distinguishes from siblings by mentioning get_design_context and get_node for deeper detail.

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?

The description explicitly says when to use this tool (to get the current selection) and when not to (use get_design_context or get_node for deeper detail on a specific node). It provides clear alternatives.

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

get_stylesA
Destructive

Get all local styles in the document (paint, text, effect, and grid). Returns each style's ID, name, type, and properties. Use the style ID with apply_style_to_node or update_paint_style. For design tokens (variables), use get_variable_defs instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior2/5

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

Annotations indicate readOnlyHint=false and destructiveHint=true, but the description only describes a read operation ('Get'). No side effects or destructive behavior are mentioned, creating a contradiction and lack of transparency.

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, front-loaded with action and output specification. Every sentence adds value with no redundancy.

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?

With no output schema, the description fully explains return values (ID, name, type, properties) and provides context for using the output. It also distinguishes from related tools, making it complete for a zero-parameter tool.

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 input schema is empty with 100% coverage, so the description does not need to add parameter details. However, it could explicitly state 'no parameters required.' The description adds value by explaining what is returned and how to use the output.

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 tool gets all local styles in the document, listing the type categories (paint, text, effect, grid) and the returned fields (ID, name, type, properties). This distinguishes it from sibling tools like get_variable_defs.

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 explicitly tells the agent to use the style ID with apply_style_to_node or update_paint_style, and directs to get_variable_defs for design tokens. This provides clear when-to-use and when-not-to-use guidance.

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

get_variable_defsA
Destructive

Get all local variable definitions: collections, modes, and values. Variables are Figma's design token system.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior1/5

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

The description implies a read-only operation ('Get'), but annotations set destructiveHint=true and readOnlyHint=false, creating a contradiction. The description does not clarify the discrepancy, misleading the agent.

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, front-loaded with the main action, no redundant text. Efficient and direct.

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 zero-parameter tool with no output schema, the description adequately explains purpose and output. However, the contradiction with annotations reduces trust, but the description alone is complete.

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?

No parameters exist; the description adds value by explaining the return structure (collections, modes, values) beyond the empty input schema.

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 'Get all local variable definitions' with a specific resource, and explains the content includes collections, modes, and values, distinguishing it from other variable tools.

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 on when to use this tool versus alternatives. Sibling tools like create_variable and delete_variable imply different use cases, but no explicit when/when-not advice.

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

get_viewportB
Destructive

Get the current Figma viewport: scroll center, zoom level, and visible bounds.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior1/5

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

The description describes a read operation ('Get'), but annotations indicate destructiveHint=true, implying potential side effects. There is no explanation for this contradiction, severely lacking behavioral transparency.

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 one concise sentence, front-loaded with the action and resource, containing no filler words.

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?

While the description lists the data returned, it lacks detail on format or structure. More importantly, it fails to address the annotation contradiction, leaving the agent uncertain about side effects.

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?

No parameters exist, so baseline score applies. The description does not need to add parameter meaning, and it correctly omits any.

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 tool gets the current Figma viewport and lists specific data returned (scroll center, zoom level, visible bounds), making it distinct from sibling getter tools.

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 provided on when to use this tool versus other getter tools (e.g., get_selection, get_document). The description only states what it does, not when it's appropriate.

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

group_nodesA
Destructive

Group two or more nodes into a GROUP. All nodes must share the same parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional name for the new group
nodeIdsYesNode IDs to group (minimum 2), in colon format e.g. ['4029:12345', '4029:12346']

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the safety profile is clear. The description adds the grouping action but does not detail what happens to the original nodes (e.g., are they removed or kept). Minimal added value 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 no redundancy. First sentence states the action and resource, second adds a crucial constraint. Front-loaded 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 grouping tool, the description covers the core action and constraint. Missing details about the group node's properties (e.g., position) but no output schema needed. Annotations and sibling tools provide additional context. Adequate for an AI agent.

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% and both parameters have descriptions. The description adds valuable details for nodeIds: minimum of 2 and colon format requirement, which is not in the schema. This compensates for the lack of name parameter elaboration.

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 (group nodes) and the resource (nodes into a GROUP) with a specific constraint (same parent). It distinguishes from sibling tools like ungroup_nodes.

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 provides a key constraint (nodes must share the same parent) but does not explicitly state when to use this tool vs alternatives like ungroup_nodes or clone_node. Usage context is implied but not fully explicit.

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

import_imageA
Destructive

Import a base64-encoded image into Figma as a rectangle with an image fill. Use get_screenshot to capture images or provide your own base64 PNG/JPG.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position (default 0)
yNoY position (default 0)
nameNoNode name
widthNoWidth in pixels (default 200)
heightNoHeight in pixels (default 200)
parentIdNoParent node ID in colon format. Defaults to current page.
imageDataYesBase64-encoded image data (PNG or JPG)
scaleModeNoImage scale mode: FILL (default), FIT, CROP, or TILE

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already provide safety info (destructive, open world). Description adds no extra behavioral context, but does not contradict 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, efficient and front-loaded with purpose and alternative tool reference.

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?

No output schema; description does not specify return value or side effects. Adequate but could be more complete given 8 parameters.

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 covers all parameters with descriptions. Description adds no extra semantic value beyond schema.

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 tool imports a base64-encoded image as a rectangle with image fill, distinguishing it from other shape creation tools.

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?

Mentions using get_screenshot for capturing images or providing own base64, but does not explicitly exclude other alternatives or state when not to use.

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

lock_nodesA
Destructive

Lock one or more nodes to prevent accidental edits in Figma.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, so the description adds limited behavioral context by explaining the effect on edits. However, it doesn't mention reversibility, permissions, or impact on other operations.

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?

Single sentence with no redundancy. All words are necessary and directly convey the tool's core function.

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 lock operation with one parameter and no output schema, the description is adequate. It could mention that locking is reversible via its sibling tool, but overall completeness is high given the low complexity.

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 input schema fully describes the nodeIds parameter with format details. The description only adds 'one or more nodes' without further elaboration, so value beyond schema is minimal.

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 (lock), resource (nodes), and purpose (prevent accidental edits). It distinguishes the tool from its sibling unlock_nodes.

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 on when to use this tool versus alternatives other than implicit contrast with unlock_nodes. No context on prerequisites or situations where locking is inappropriate.

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

move_nodesA
Destructive

Move one or more nodes to an absolute canvas position. The same x/y is applied to every node independently (not a relative offset from current position).

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoTarget X position
yNoTarget Y position
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructive hint (true) and mutation (readOnlyHint false). The description adds context about absolute vs relative positioning. No contradiction; the description supplements annotations well.

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 concise sentences that front-load the purpose and critical nuance. Every sentence is necessary 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 move tool with 3 parameters and no output schema, the description covers core behavior. It could mention that it mutates node positions, but annotations handle that. Complete enough.

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 baseline is 3. The description adds value by clarifying that x/y are absolute and applied independently to each node, which is beyond the schema descriptions.

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: 'Move one or more nodes to an absolute canvas position.' It distinguishes from relative offsets, and the sibling tools like reparent_nodes, rotate_nodes, and set_auto_layout are clearly different.

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 usage for absolute positioning but does not explicitly state when to use this tool vs alternatives like reparent_nodes or resize_nodes. No exclusion or when-not guidance is provided.

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

remove_reactionsA
Destructive

Remove prototype reactions from a node. Omit indices to remove all reactions. Provide a zero-based indices array to remove specific reactions (use get_reactions first to see current indices).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesNode ID in colon format e.g. '4029:12345'
indicesNoZero-based indices of reactions to remove. Omit or pass [] to remove all.

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses the destructive nature via the annotation destructiveHint=true, and adds behavioral details (omitting indices removes all, zero-based indices). It does not contradict 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 concise sentences, front-loaded with the primary action. Every sentence adds value, no repetition or fluff.

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 tool with only two parameters and no output schema, the description is complete. It covers both usage modes and references a related tool. Could mention that the operation is destructive, but the annotation already covers that.

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%, and the description adds meaningful context: it explains the meaning of omitting indices vs providing an array, and advises using get_reactions. This goes beyond the schema's basic description.

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 starts with a clear verb and resource: 'Remove prototype reactions from a node'. It specifies two modes of operation (remove all vs specific indices) and references the sibling tool get_reactions to guide the user.

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 explicitly tells the user to use get_reactions first to obtain current indices, and explains how to use the indices parameter. However, it does not provide explicit 'when not to use' guidance, but the context is clear for this operation.

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

rename_nodeA
Destructive

Rename a single node by ID. Returns the updated node with its new name. Use batch_rename_nodes to rename multiple nodes at once or to apply find/replace patterns across many nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew name for the node. Figma supports slash-separated path notation e.g. 'Icons/Arrow/Left' to organise nodes in component panels.
nodeIdYesNode ID in colon format e.g. '4029:12345'

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate the tool is destructive and not read-only. The description adds that it returns the updated node, which is helpful. No contradictions with annotations. Some additional context about error cases or permissions would further improve transparency.

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 the core action and result in the first sentence and the alternative in the second. No wasted words and optimally front-loaded.

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 mutation tool with full annotations and schema coverage, the description covers the main functionality and alternatives. It lacks mention of prerequisites like node existence, but given the destructive annotation, completeness is sufficient.

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?

Schema coverage is 100%, but the description adds significant extra meaning for the 'name' parameter, explaining Figma's slash-separated path notation. This goes beyond the schema description and aids correct parameter usage.

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 'rename a single node by ID' and mentions the return value. It also distinguishes from the sibling tool 'batch_rename_nodes' by name, making the tool's scope unambiguous.

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 explicitly advises using 'batch_rename_nodes' for multiple nodes or find/replace patterns, providing good guidance on alternative usage. However, it does not mention other relevant siblings like 'rename_page', which could be confused.

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

rename_pageB
Destructive

Rename an existing page in the Figma document.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdNoPage node ID in colon format e.g. '0:2'
newNameYesNew name for the page
pageNameNoCurrent page name to find (alternative to pageId)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description's 'rename' is consistent but adds no extra behavioral context like reversibility or side effects.

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?

Single sentence is concise and focused, but could be slightly expanded for clarity without losing efficiency.

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

Completeness2/5

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

Lacks details on parameter selection (pageId vs pageName), naming constraints, error handling, and return value, making it incomplete for confident use despite having good schema coverage.

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?

Input schema has 100% description coverage, so the description adds no value beyond what the schema already explains (pageId, newName, pageName). Baseline 3.

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 tool renames an existing page in Figma, distinguishing it from sibling tools like 'delete_page' or 'rename_node'.

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 on when to use this tool vs alternatives (e.g., 'rename_node' for other elements), nor prerequisites like page existence or permissions.

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

reorder_nodesB
Destructive

Change the z-order (layer stack position) of one or more nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderYesOrder operation: bringToFront, sendToBack, bringForward, or sendBackward
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']

TDQS

B3.2/5.0
Behavior2/5

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

Annotations indicate destructive operation, but description adds no detail about side effects, reversibility, or impact on other nodes. Misses opportunity to clarify behavior beyond what annotations provide.

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?

Single sentence, no fluff. Could be slightly more informative but remains appropriately concise for a simple tool.

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?

Adequate for a simple two-parameter tool. Lacks mention of immediate effect or validation, but schema and context signals cover basics.

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 baseline is 3. Description does not add extra meaning beyond schema fields. No elaboration on order options or node ID format.

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?

Clearly states action ('change') and resource ('z-order of nodes'). Distinguishes from sibling tools like move_nodes or resize_nodes by focusing on layer stack position.

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 on when to use this tool versus alternatives. Does not mention prerequisites or when not to use it.

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

reparent_nodesB
Destructive

Move one or more nodes to a different parent frame, group, or section.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesNode IDs to move in colon format e.g. ['4029:12345']
parentIdYesTarget parent node ID in colon format e.g. '4029:99'

TDQS

B3.4/5.0
Behavior2/5

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

The description only states the operation ('Move'), which aligns with the destructiveHint annotation, but adds no additional behavioral details such as side effects on child nodes, error conditions, or permissions needed.

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, clear sentence that is front-loaded with the key action. No extraneous words, making it highly concise.

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 tool with two parameters and no output schema, the description is adequate. It could mention the destructive nature or parent validity checks, but not essential given the annotations and simplicity.

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% with descriptions for both parameters. The description adds no further meaning beyond what the schema provides, so baseline 3 applies.

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 ('Move') and resource ('nodes') and specifies the target ('different parent frame, group, or section'). It clearly distinguishes from siblings like 'move_nodes' by implying reparenting rather than just moving position.

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 (e.g., 'move_nodes', 'group_nodes'). No exclusionary conditions or context for selection are mentioned.

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

resize_nodesA
Destructive

Resize one or more nodes. The same width/height is applied to every node in the list independently. Provide width, height, or both.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNoNew width in pixels
heightNoNew height in pixels
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']

TDQS

A4/5.0
Behavior3/5

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

Annotations indicate destructive and read-write behavior. The description adds that width/height are applied independently to each node and that either or both can be provided, but does not detail side effects like constraint handling or undo 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?

Two sentences convey the core action and key constraints without any unnecessary words. Information is front-loaded and every sentence adds value.

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?

With three parameters fully described in the schema and annotations present, the description covers the main behavior. However, it omits edge cases like empty nodeIds or error handling, and does not mention output or side effects beyond destructive hint.

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% with clear descriptions. The description adds value by stating that width, height, or both can be provided (clarifying optionality beyond schema) and that the same values apply to all nodes, which is not in schema.

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 verb 'resize', the resource 'one or more nodes', and specifies that the same width/height is applied independently. This distinguishes it from sibling tools like move_nodes or rotate_nodes.

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 usage for resizing nodes but does not explicitly state when to use this tool versus alternatives like apply_style_to_node or scale operations. No when-not or alternative tool names are provided.

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

rotate_nodesA
Destructive

Rotate one or more nodes to an absolute angle in degrees.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']
rotationYesRotation angle in degrees (positive = counter-clockwise in Figma)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate destructiveHint: true and readOnlyHint: false. The description adds the detail 'absolute angle', hinting that it replaces existing rotation rather than adding to it. However, it does not elaborate on side effects or auth requirements, so it adds only marginal value 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?

The description is a single, front-loaded sentence with no unnecessary words. Every part earns its place, conveying the core action and the absolute nature of the rotation.

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 tool's simplicity, full schema coverage, and absence of output schema, the description is mostly complete. It could be improved by explicitly stating that the rotation replaces any existing rotation, but the current version is sufficient for an agent to understand the basic 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%, so baseline is 3. The description does not add meaning beyond the schema: it repeats 'rotation angle in degrees' and 'positive = counter-clockwise' which are already in the schema descriptions. No new parameter context is provided.

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 verb 'rotate' and the resource 'nodes', and specifies 'absolute angle in degrees', which distinguishes it from any potential relative rotation tool. There are no sibling rotation tools, so it is well-differentiated.

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. It does not mention that this sets absolute rotation (not incremental), nor does it suggest when not to use it. No explicit context or exclusions are given.

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

save_screenshotsA
Destructive

Export screenshots for multiple nodes and write them to the local filesystem. Returns file metadata (path, size, dimensions) — no base64 in the response. Use get_screenshot instead when you need the image data in memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesList of {nodeId, outputPath, format?, scale?} objects
scaleNoDefault export scale for raster formats (default 2)
formatNoDefault export format: PNG (default), SVG, JPG, or PDF

TDQS

A4.2/5.0
Behavior4/5

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

The description adds critical behavioral details beyond annotations: it writes to the local filesystem (side effect) and returns metadata without base64. This complements the destructiveHint and readOnlyHint annotations, making the tool's behavior transparent.

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 first sentence states action and outcomes; the second provides a usage alternative. Every word 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 tool with no output schema, the description covers the return format (metadata). It explains the core function and provides a useful sibling reference. Minor omission: no mention of default resolution or potential file overwrite, but overall complete given the low complexity.

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% with all parameters described. The description provides context that the tool writes files and returns metadata, but does not add specific parameter semantics beyond what the schema already offers. 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 clearly defines the tool's action (export screenshots and write to filesystem) and resource (multiple nodes). It distinguishes from the sibling get_screenshot by specifying that this tool saves to disk and returns metadata, not base64.

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 explicitly directs the agent to use get_screenshot when image data is needed in memory, providing a clear alternative. It does not cover all possible alternatives (e.g., export_frames_to_pdf) but is sufficient for basic guidance.

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

scan_nodes_by_typesA
Destructive

Find all nodes of specific types in a subtree, regardless of name. Use search_nodes instead when you need to filter by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
typesYesNode types to find e.g. ['FRAME', 'COMPONENT', 'INSTANCE']
nodeIdYesRoot node ID to scan from, colon format e.g. '4029:12345'

TDQS

A3.8/5.0
Behavior1/5

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

Description says 'Find' implying a non-destructive read operation, but annotations set destructiveHint=true, a direct contradiction. No additional behavioral context is provided beyond the annotation mismatch.

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?

Extremely concise two-sentence definition with no wasted words; key information is front-loaded.

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?

Covers purpose, differentiation from sibling, and parameter context. Lacks explicit mention of return value, but given it's a search tool without output schema, the description is sufficient for most use cases.

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% with descriptive parameter descriptions. The description does not add meaningful semantic value beyond what the schema already provides.

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 'Find all nodes of specific types in a subtree' with explicit resource and scope, and differentiates from the sibling tool 'search_nodes'.

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?

Provides explicit when to use (for type-based search) and when not to (for name-based search, use search_nodes instead), with a clear alternative.

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

scan_text_nodesA
Destructive

Scan all TEXT nodes in a subtree and return their content. Shorthand for scan_nodes_by_types with ['TEXT'] — use when you only need text copy from a component or frame.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesRoot node ID to scan from, colon format e.g. '4029:12345'

TDQS

A3.7/5.0
Behavior1/5

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

Description implies a read operation (scanning text) but annotations set destructiveHint=true, contradicting the description. No behavioral detail provided beyond the operation.

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, front-loaded with purpose and shorthand hint. Every sentence adds value; no waste.

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?

Description does not specify return format or error conditions, though the tool is simple. Output schema is missing, but for a straightforward tool it's adequate.

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% for nodeId with format description. The tool description does not add further meaning beyond the schema, so 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?

Clearly states verb (scan), resource (TEXT nodes in a subtree), and purpose (return content). Distinguishes from sibling scan_nodes_by_types by explicitly calling itself a shorthand.

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?

Explicitly specifies when to use: 'use when you only need text copy from a component or frame.' Implies not to use for other node types.

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

search_nodesB
Destructive

Search for nodes by name substring and/or type within a subtree. Use this when you know (part of) the node name. Use scan_nodes_by_types when you want all nodes of a type regardless of name.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 50)
queryYesName substring to match (case-insensitive)
typesNoFilter by Figma node type e.g. ['TEXT', 'FRAME', 'COMPONENT']
nodeIdNoScope search to this subtree (default: current page), colon format e.g. '4029:12345'

TDQS

B3.4/5.0
Behavior1/5

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

The description claims a search/read operation, but annotations indicate destructiveHint=true, suggesting potential modification or deletion. This contradiction is not addressed in the description. No behavioral traits beyond the search are disclosed, which is a significant gap given 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?

The description consists of two concise sentences: the first states the core purpose, the second provides usage guidance. No redundant or extraneous information.

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

Completeness2/5

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

Given the absence of an output schema, the description should explain the return format or pagination (e.g., max results via limit). It also fails to address the conflicting destructiveHint annotation, leaving a major gap in completeness for a tool with four parameters.

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 the description adds minimal extra meaning beyond repeating the parameters (name substring, type, subtree). The schema itself is sufficiently descriptive, so the description does not significantly enhance understanding.

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 (search), the resource (nodes), and the filters (name substring and/or type) within a subtree. It explicitly distinguishes from the sibling 'scan_nodes_by_types' by specifying when to use each, providing strong differentiation.

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 tells when to use this tool ('when you know (part of) the node name') and explicitly names an alternative ('scan_nodes_by_types') for different scenarios. It lacks a 'when not to use' statement but is clear enough for an agent.

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

set_auto_layoutB
Destructive

Set or update auto-layout (flex) properties on an existing frame.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesFrame node ID in colon format e.g. '4029:12345'
layoutModeNoAuto-layout direction: HORIZONTAL, VERTICAL, or NONE
layoutWrapNoWrap behaviour: NO_WRAP or WRAP
paddingTopNoTop padding
itemSpacingNoGap between children
paddingLeftNoLeft padding
paddingRightNoRight padding
paddingBottomNoBottom padding
counterAxisSpacingNoGap between wrapped rows/columns (only when layoutWrap is WRAP)
counterAxisAlignItemsNoCross-axis alignment: MIN, CENTER, MAX, or BASELINE
counterAxisSizingModeNoCross-axis sizing: FIXED or AUTO (hug)
primaryAxisAlignItemsNoMain-axis alignment: MIN, CENTER, MAX, or SPACE_BETWEEN
primaryAxisSizingModeNoMain-axis sizing: FIXED or AUTO (hug)

TDQS

B3.2/5.0
Behavior2/5

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

Description merely restates mutability; annotations note destructiveHint, but no added context on overwrite behavior or failure modes.

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?

Single sentence, front-loaded, no redundancy.

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

Completeness2/5

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

Minimal description for a complex 13-param tool; lacks explanation of defaults, interaction effects, or validation rules.

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%, description adds no extra meaning beyond param names and types.

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?

Clear verb 'Set or update' and resource 'auto-layout properties on an existing frame'. Unambiguous and distinct from sibling tools.

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 on when to use this tool vs alternatives, no prerequisites or context for selection.

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

set_blend_modeA
Destructive

Set the blend mode of one or more nodes (e.g. MULTIPLY, SCREEN, OVERLAY).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']
blendModeYesBlend mode: NORMAL, MULTIPLY, SCREEN, OVERLAY, DARKEN, LIGHTEN, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, DIFFERENCE, EXCLUSION, HUE, SATURATION, COLOR, LUMINOSITY, PASS_THROUGH

TDQS

A3.6/5.0
Behavior3/5

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

Description is consistent with annotations (destructiveHint=true) by stating 'Set' which modifies state. It adds minimal extra context by mentioning 'one or more nodes' and providing examples, but no deeper behavioral details beyond what annotations already 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?

Extremely concise single sentence that includes purpose, resource, and examples. No redundant 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 simple two-parameter tool with no output schema and high schema coverage, the description provides essential elements. Could be slightly improved by noting implications (e.g., only affects nodes with fill properties), but current completeness is adequate.

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% with detailed parameter descriptions. The description adds value by giving example blend modes, but these are a subset of the full enum listed in the schema. Overall, the description adds some semantic context but does not significantly surpass the schema.

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?

Description clearly states the verb 'Set' and the resource 'blend mode of one or more nodes', with specific examples (MULTIPLY, SCREEN, OVERLAY). It is distinct from all sibling tools, which are other operations.

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 on when to use this tool vs alternatives. Among many set_* siblings, the description does not specify context, prerequisites, or exclusions.

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

set_constraintsB
Destructive

Set layout constraints (pinning behaviour) on one or more nodes relative to their parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']
verticalNoVertical constraint: MIN (top), MAX (bottom), CENTER, STRETCH, or SCALE
horizontalNoHorizontal constraint: MIN (left), MAX (right), CENTER, STRETCH, or SCALE

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate destructiveHint=true, so the description aligns with mutation. However, it does not disclose specific behavioral traits beyond what annotations offer, such as overwriting existing constraints, potential interaction with auto layout, or error conditions. It adds minimal context beyond the structured fields.

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 that conveys the essential action without extraneous words. It is appropriately sized for a tool with three well-documented parameters.

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?

Given the simple parameter set and lack of output schema, the description is somewhat complete but lacks context on behavior such as what happens when constraints conflict or are applied to non-frame parents, and does not mention the return value or side effects beyond destruction.

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 input schema has 100% description coverage for all parameters, providing clear definitions for nodeIds, vertical, and horizontal. The tool description does not add any additional meaning beyond the schema, so it meets the baseline but does not exceed it.

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 clearly states the tool sets layout constraints (pinning behavior) on nodes relative to their parent. It uses specific verbs and resources, but does not explicitly distinguish it from sibling tools like set_auto_layout, which also alters layout. However, the purpose 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 usage guidelines are provided. The description does not specify when to use this tool versus alternatives (e.g., set_auto_layout) or mention prerequisites, such as the parent needing to be a frame. There is no guidance on when not to use it.

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

set_corner_radiusA
Destructive

Set corner radius on one or more nodes. Provide a uniform cornerRadius or individual per-corner values.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']
cornerRadiusNoUniform corner radius applied to all corners
topLeftRadiusNoTop-left corner radius
topRightRadiusNoTop-right corner radius
bottomLeftRadiusNoBottom-left corner radius
bottomRightRadiusNoBottom-right corner radius

TDQS

A3.5/5.0
Behavior2/5

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

Annotations indicate destructiveHint=true, but description adds no behavioral context like side effects (e.g., overwriting existing corner values) or idempotency. The minimal description does not enhance transparency 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 short sentences, front-loaded with the action. No wasted words; every sentence earns its place.

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?

Lacks details on constraints (e.g., valid radius range), interaction when both uniform and per-corner are provided, or behavior on nodes that don't support corner radius. Moderately complete for a simple mutation tool but has gaps.

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%, and description clarifies the relationship between 'cornerRadius' and individual radii, explaining they are alternatives. This adds value beyond the schema's individual descriptions.

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 ('Set corner radius') and the resource ('nodes'), and distinguishes between uniform and per-corner options. It differentiates from sibling tools that modify other properties.

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 on when to use this tool vs alternatives or when not to use it. For example, it doesn't mention node compatibility or preconditions. With many sibling tools, explicit instructions would be helpful.

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

set_effectsA
Destructive

Apply one or more effects (drop shadow, inner shadow, layer blur, background blur) directly to a node. Replaces all existing effects. Pass an empty array to clear all effects.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesTarget node ID in colon format e.g. 4029:12345
effectsYesArray of effect objects. Each has: type (DROP_SHADOW | INNER_SHADOW | LAYER_BLUR | BACKGROUND_BLUR), radius, color (hex, shadows only), opacity (0–1, shadows only), offsetX, offsetY (shadows only), spread (shadows only), visible (default true)

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses that the operation replaces all existing effects and can clear effects, which adds behavioral context beyond the annotations (destructiveHint=true). No contradiction with annotations. It could mention idempotency or permission requirements but is sufficient.

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 concise sentences that efficiently convey the purpose and key behavior. No unnecessary words, and the critical information about replacing effects and clearing is front-loaded.

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 mutation tool with no output schema, the description adequately covers the side effect and parameter structure. It could mention the response (e.g., returns the updated node or success status) but is not essential given the destructive nature.

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 input schema already has full (100%) description coverage for both parameters. The description does not add additional semantic detail about parameters beyond what the schema provides. 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 it applies specific effects (drop shadow, inner shadow, layer blur, background blur) to a node, explicitly replaces all existing effects, and can clear effects with an empty array. This distinguishes it from sibling tools like set_fills or set_strokes.

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 provides clear context on when to use the tool (to apply effects) and what happens (replaces existing effects). It does not explicitly state when not to use it or provide alternatives, but the purpose is obvious and the sibling tools list shows distinct alternatives like create_effect_style.

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

set_fillsA
Destructive

Set the fill color on a single node (takes one nodeId, not an array). Use mode='append' to stack a new fill on top of existing fills instead of replacing them.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo'replace' (default) overwrites all existing fills; 'append' stacks this fill on top of existing ones
colorYesFill color as hex: #RRGGBB e.g. #FF5733 or #RRGGBBAA e.g. #FF573380 for 50% alpha
nodeIdYesNode ID in colon format e.g. '4029:12345'
opacityNoFill opacity 0–1 (default 1). Combines multiplicatively with any alpha in the color hex.

TDQS

A4.5/5.0
Behavior4/5

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

Description aligns with annotations (destructiveHint=true indicates overwrite behavior) and adds context that it handles a single node and the distinction between replace/append modes, enhancing transparency 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, front-loaded with the action and key distinguishing feature (single node), no redundant words.

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?

Given 4 parameters, no output schema, and no nested objects, the description covers the core behavior (single node, mode options) sufficiently for the agent to use the tool appropriately.

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 baseline is 3. Description adds value by clarifying nodeId takes one value (not array) and explicitly explaining mode behavior, which slightly exceeds the schema detail.

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 tool sets fill color on a single node, specifying it takes one nodeId (not an array) and explains mode options, distinguishing it from other node manipulation tools.

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?

Provides clear guidance on when to use mode='append' versus the default replace behavior, but does not explicitly state when to use this tool versus alternatives like update_paint_style or other set_* tools.

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

set_opacityA
Destructive

Set the opacity of one or more nodes (0 = fully transparent, 1 = fully opaque).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']
opacityYesOpacity value between 0 and 1

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare destructiveHint: true and readOnlyHint: false, indicating mutation. The description adds the opacity range meaning but does not disclose additional behavioral traits like impact on child nodes or reversibility.

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?

Single sentence, no wasted words. Front-loaded with verb and target, followed by clarifying range. Perfectly concise.

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 setter with two parameters and no output schema, the description is sufficient. It could mention that opacity is a visual property, but overall complete enough given the low complexity.

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% with both parameters already described (nodeIds format, opacity range). The description's range clarification adds minimal value beyond schema. Baseline 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 explicitly states the action (set opacity), the target (one or more nodes), and the value range (0-1 with meanings). It clearly distinguishes from sibling tools like set_visible or set_blend_mode.

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?

While the purpose is distinct and no alternative tool exists, the description does not include explicit guidance on when to use or not use this tool. However, the context is clear enough for an agent to infer usage.

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

set_reactionsA
Destructive

Set prototype reactions on a node. Use mode "replace" (default) to overwrite all reactions, or "append" to add to existing ones.

Supported triggers: ON_CLICK, ON_HOVER, ON_PRESS, ON_DRAG, AFTER_TIMEOUT, MOUSE_ENTER, MOUSE_LEAVE, MOUSE_UP, MOUSE_DOWN Supported action types: NODE (navigation), BACK, CLOSE, URL NODE navigation values: NAVIGATE, OVERLAY, SCROLL_TO, SWAP, CHANGE_TO Transition types: DISSOLVE, SMART_ANIMATE, MOVE_IN, MOVE_OUT, PUSH, SLIDE_IN, SLIDE_OUT DISSOLVE / SMART_ANIMATE: {"type":"DISSOLVE","duration":0.3,"easing":{"type":"EASE_OUT"}} Directional (PUSH, MOVE_IN, MOVE_OUT, SLIDE_IN, SLIDE_OUT): also require "direction" (LEFT|RIGHT|TOP|BOTTOM) and "matchLayers" (bool): {"type":"PUSH","direction":"LEFT","matchLayers":false,"duration":0.3,"easing":{"type":"EASE_OUT"}}

Each reaction has a "trigger" and an "actions" array (plural). Each action in the array is an Action object.

Example — on-click navigate with dissolve: {"nodeId":"1:2","reactions":[{"trigger":{"type":"ON_CLICK"},"actions":[{"type":"NODE","destinationId":"1:3","navigation":"NAVIGATE","transition":{"type":"DISSOLVE","duration":0.3,"easing":{"type":"EASE_OUT"}},"preserveScrollPosition":false}]}]}

Example — on-click navigate with push (directional transition): {"nodeId":"1:2","reactions":[{"trigger":{"type":"ON_CLICK"},"actions":[{"type":"NODE","destinationId":"1:3","navigation":"NAVIGATE","transition":{"type":"PUSH","direction":"LEFT","matchLayers":false,"duration":0.3,"easing":{"type":"EASE_OUT"}},"preserveScrollPosition":false}]}]}

Example — open URL on hover: {"nodeId":"1:2","reactions":[{"trigger":{"type":"ON_HOVER"},"actions":[{"type":"URL","url":"https://example.com"}]}]}

Example — auto-advance after 3 seconds: {"nodeId":"1:2","reactions":[{"trigger":{"type":"AFTER_TIMEOUT","timeout":3000},"actions":[{"type":"NODE","destinationId":"1:4","navigation":"NAVIGATE","transition":{"type":"DISSOLVE","duration":0.3,"easing":{"type":"EASE_OUT"}},"preserveScrollPosition":false}]}]}

Example — go back on click: {"nodeId":"1:2","reactions":[{"trigger":{"type":"ON_CLICK"},"actions":[{"type":"BACK"}]}]}

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo"replace" (default) overwrites all existing reactions; "append" adds to them
nodeIdYesNode ID in colon format e.g. '4029:12345'
reactionsYesArray of reaction objects. Each has a 'trigger' and an 'actions' array (plural) of Action objects.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate destructive and non-read-only. Description adds overwrite vs append behavior. No contradictions. Provides comprehensive behavioral context 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.

Conciseness4/5

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

Well-structured with clear sections: main action, mode, supported values, examples. Slightly lengthy but every part adds value; efficient for the complexity.

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?

Given the tool's complexity (triggers, actions, transitions), the description is exhaustive. Examples cover key scenarios. No output schema, but return is implied success/failure.

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?

100% schema coverage. Description explains all parameters, including format nuances (nodeId colon notation, reactions structure). Examples illustrate complex object shapes clearly.

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?

Clearly states 'Set prototype reactions on a node' with modes. Differentiates from siblings like get_reactions and remove_reactions via detailed behavior.

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?

Explicitly describes replace vs append modes. Extensive lists of supported triggers, actions, and transitions guide usage. Lacks explicit when-not-to-use but contextual alternatives exist.

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

set_strokesA
Destructive

Set the stroke color and weight on a single node (takes one nodeId, not an array). Use mode='append' to stack a new stroke on top of existing strokes instead of replacing them.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo'replace' (default) overwrites all strokes; 'append' stacks on top of existing strokes
colorYesStroke color as hex e.g. #000000
nodeIdYesNode ID in colon format e.g. '4029:12345'
strokeWeightNoStroke weight in pixels (default 1)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds context about stacking strokes with append, confirming mutation. 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?

Two sentences, front-loaded with the main action. Every sentence is necessary and clearly structured.

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?

No output schema, but the description explains the outcome (set stroke). It lacks mention of return values or error conditions, but for a mutation tool, it is fairly complete.

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 description adds limited new meaning. It mentions nodeId format but schema already describes it. The mode description is helpful but not essential beyond schema.

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 tool sets stroke color and weight on a single node, specifies the nodeId format, and distinguishes from siblings by noting it takes one nodeId, not an array.

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 provides usage context by explaining mode options ('replace' vs 'append') and when to use each. It implies single-node usage but does not explicitly mention when not to use or list alternatives among siblings.

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

set_textB
Destructive

Update the text content of an existing TEXT node.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesNew text content
nodeIdYesTEXT node ID in colon format e.g. '4029:12345'

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the description adds little beyond 'Update'. It does not explain that the operation replaces all existing text or any side effects on formatting.

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?

Single, clear sentence with no unnecessary words. Efficient for a simple tool.

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?

Given no output schema and simple parameters, the description is minimally adequate. However, it could mention that the update is destructive and irreversible (as per annotations) to improve completeness.

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 the description merely restates 'text content' without adding new semantics. Baseline score of 3 applies.

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 clearly states it updates text content of an existing TEXT node. It implicitly distinguishes from create_text by specifying 'existing', but does not explicitly contrast with find_replace_text or other text manipulation tools.

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 offers no guidance on when to use this tool versus alternatives like find_replace_text (which can replace across multiple nodes) or create_text. No context for prerequisites or exclusions.

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

set_variable_valueC
Destructive

Set a variable's value for a specific mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesValue to set. COLOR: hex e.g. #FF5733. FLOAT: number e.g. 16. STRING: text. BOOLEAN: true or false.
modeIdYesMode ID within the collection
variableIdYesVariable ID

TDQS

C2.7/5.0
Behavior2/5

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

Annotations indicate destructive and non-idempotent, but description adds no behavioral context (e.g., overwrites existing value, permanent change). It relies entirely on annotations, which are present but the description should elaborate.

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?

Extremely concise at one sentence. No wasted words, but could be slightly expanded without losing brevity.

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

Completeness2/5

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

Given low complexity and presence of annotations and schema, the description is too minimal. It lacks context about the effect of setting a variable, the meaning of mode, or any return behavior. Incomplete for a mutation tool.

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

Parameters2/5

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

Schema coverage is 100% with descriptions for each parameter, but the tool description adds no additional meaning. It does not explain how values are interpreted or validated beyond the schema.

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?

Description clearly states the action (set), the resource (variable's value), and the context (for a specific mode). It distinguishes from sibling tools like create_variable or bind_variable_to_node. However, it could be more explicit about what 'mode' refers to.

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 on when to use this tool vs alternatives. No mention of prerequisites or conditions. The description does not help the agent decide between this and other variable-related tools.

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

set_visibleA
Destructive

Show or hide one or more nodes by setting their visibility.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']
visibleYestrue to show the node, false to hide it

TDQS

A3.6/5.0
Behavior3/5

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

Annotations indicate destructiveHint=true, so description aligns. But description adds no behavioral context beyond the action itself; no mention of side effects, permissions, or undo 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?

Single sentence clearly states purpose with no wasted words.

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 tool's simplicity and the presence of annotations, the description is sufficiently complete. No output schema is needed for a boolean setter. Could mention return value but not critical.

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 covers both parameters with descriptions; description provides no additional semantic meaning. Baseline 3 due to high schema coverage (100%).

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?

Describes a specific action: 'Show or hide one or more nodes by setting their visibility.' Clearly distinguishes from sibling tools that set other node properties like opacity, fills, or strokes.

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 on when to use this tool versus alternatives (e.g., set_opacity for visibility via opacity). No when-not or context provided.

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

swap_componentA
Destructive

Swap the main component of an existing INSTANCE node, replacing it with a different component while keeping position and size.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesINSTANCE node ID in colon format e.g. 4029:12345
componentIdYesTarget COMPONENT node ID in colon format (from get_local_components)

TDQS

A3.5/5.0
Behavior3/5

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

Annotations indicate destructiveHint=true, and the description adds that position and size are preserved. However, it does not disclose other behavioral aspects such as whether instance overrides are maintained, or what happens to the old component. It adds some value beyond annotations but is incomplete.

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 sentence that is front-loaded with the verb and resource. No redundant information; every word earns its place.

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?

Given the simplicity of the tool and the presence of annotations, the description provides adequate context for basic usage. However, it lacks information about return value or side effects on other nodes, which would be helpful for a destructive 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 coverage is 100% with clear descriptions for both parameters. The description provides minor additional context by referencing 'get_local_components' as the source for componentId, but does not significantly enhance understanding beyond the schema.

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 (swap), the resource (main component of INSTANCE node), and the preservation of position and size. It distinguishes from siblings like detach_instance or create_component.

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, nor does it specify prerequisites or when not to use it. The only hint is the parameter description mentioning 'from get_local_components', but this is in the schema, not the main description.

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

ungroup_nodesA
Destructive

Ungroup one or more GROUP nodes, moving their children to the parent and removing the group.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesGROUP node IDs in colon format e.g. ['4029:12345']

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, so the description's mention of 'removing the group' is consistent. It adds context about moving children to the parent. No contradictions, but little additional behavioral detail 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?

Single sentence, concise, front-loaded with verb and resource. Every word adds value with no 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 one-parameter tool without output schema, the description covers the primary action and effect. Could mention handling of non-GROUP nodes or irreversibility, but annotations cover destructiveness. Nearly complete.

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%, providing the parameter description with format example. The tool description does not add new meaning beyond reinforcing that nodeIds are for GROUP nodes. Baseline 3.

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 identifies the action 'ungroup', the target 'GROUP nodes', and the outcome 'moving their children to the parent and removing the group'. It distinguishes from sibling tools like 'group_nodes' (opposite) and 'delete_nodes' (removes nodes entirely).

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 on when to use this tool versus alternatives. With many sibling tools like 'delete_nodes' and 'reparent_nodes', explicit context for when to ungroup rather than delete or move would be helpful.

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

unlock_nodesA
Destructive

Unlock one or more nodes, allowing them to be edited again.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesNode IDs in colon format e.g. ['4029:12345']

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already provide readOnlyHint and destructiveHint. The description adds that unlocking allows editing, but does not disclose further behavioral traits (e.g., reversibility, effects on related nodes). With annotations covering safety profile, a 3 is appropriate.

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?

A single sentence that is concise, front-loaded with the action and resource, and contains no extraneous words.

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 unlock action with one parameter and no output schema, the description is nearly complete. It lacks information about behavior when nodes are already unlocked or any side effects, but these are reasonable omissions.

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 the description adds no additional parameter meaning beyond what the schema already provides. Therefore, baseline score of 3.

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 verb 'unlock' and the resource 'nodes', and explains the effect 'allowing them to be edited again'. This distinguishes it from siblings like lock_nodes.

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 usage when nodes are locked and need to be editable, but does not explicitly state when to use this tool versus alternatives, nor does it mention prerequisites or exclusions.

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

update_paint_styleA
Destructive

Update an existing paint style's name, color, or description. Only paint styles support in-place updates — to modify text, effect, or grid styles, use delete_style and recreate them.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew style name
colorNoNew fill color as hex e.g. #FF5733
styleIdYesPaint style ID
descriptionNoNew style description

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate destructiveHint: true and readOnlyHint: false, so the description's mention of 'in-place updates' aligns. It adds context that this is the only style type supporting such updates, which is valuable 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, no wasted words. First sentence states purpose, second provides usage guidelines. Highly efficient.

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?

Given the tool simplicity, good schema coverage, and annotations, the description is fully sufficient. It covers the use case and limits, and no output schema is needed.

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% with descriptions for each parameter. The description mentions the parameters (name, color, description) but adds no new semantic detail beyond what the schema provides, so 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 clearly states the verb 'update' and resource 'paint style', specifying the mutable attributes (name, color, description). It also distinguishes from sibling tools by noting that only paint styles support in-place updates.

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?

Explicitly tells when to use this tool (for paint styles) versus alternatives (for text, effect, or grid styles, use delete_style and recreate). This is direct and actionable.

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

TDQS

A3.6/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, but there is some overlap between get_node, get_nodes_info, get_document, get_design_context, get_selection, and get_pages, which could cause confusion for an agent. Similarly, batch_rename_nodes and rename_node, or scan_nodes_by_types and search_nodes, are closely related.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., create_frame, set_fills, get_pages). The naming is predictable and clear, with no mixing of conventions or ambiguous verbs.

Tool Count3/5

With 73 tools, the server is on the heavier side. While this may be justified given the complexity of Figma (covering design, variables, styles, prototyping), many tools are highly specific (e.g., export_frames_to_pdf, get_fonts) and could potentially be consolidated or omitted.

Completeness4/5

The tool set covers a broad range of Figma operations: creation, manipulation, styles, variables, prototyping, and exports. However, there are minor gaps, such as lacking a dedicated update_variable tool (though set_variable_value exists) and no support for shared styles or library components.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Write-side MCP server for Figma — build, edit, and search Figma designs from Claude Code, Cursor, Cline, or any MCP client. Complements Figma's official read-only MCP with 41 tools for tree creation, variables, components, and visual verification.
    41
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Read, create, and modify Figma designs programmatically via MCP, empowering AI to execute Figma changes safer, cleaner, and faster.
    45
    79
    9
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that provides write access to Figma through the Plugin API, enabling AI agents to create, modify, and manage Figma designs programmatically.
    23

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vkhanhqui/figma-mcp-go'

If you have feedback or need assistance with the MCP directory API, please join our Discord server