Skip to main content
Glama
andreycretsu

Cursor Talk to Figma MCP

by andreycretsu

Cursor Talk to Figma MCP

This project implements a Model Context Protocol (MCP) integration between Cursor AI and Figma, allowing Cursor to communicate with Figma for reading designs and modifying them programmatically.

https://github.com/user-attachments/assets/129a14d2-ed73-470f-9a4c-2240b2a4885c

Project Structure

  • src/talk_to_figma_mcp/ - TypeScript MCP server for Figma integration

  • src/cursor_mcp_plugin/ - Figma plugin for communicating with Cursor

  • src/socket.ts - WebSocket server that facilitates communication between the MCP server and Figma plugin

Related MCP server: Cursor Talk To Figma MCP

Get Started

  1. Install Bun if you haven't already:

curl -fsSL https://bun.sh/install | bash
  1. Run setup, this will also install MCP in your Cursor's active project

bun setup
  1. Start the Websocket server

bun socket
  1. MCP server

bunx cursor-talk-to-figma-mcp
  1. NEW Install Figma plugin from Figma community page or install locally

Quick Video Tutorial

Video Link

Design Automation Example

Bulk text content replacement

Thanks to @dusskapark for contributing the bulk text replacement feature. Here is the demo video.

Instance Override Propagation Another contribution from @dusskapark Propagate component instance overrides from a source instance to multiple target instances with a single command. This feature dramatically reduces repetitive design work when working with component instances that need similar customizations. Check out our demo video.

Manual Setup and Installation

MCP Server: Integration with Cursor

Add the server to your Cursor MCP configuration in ~/.cursor/mcp.json:

{
  "mcpServers": {
    "TalkToFigma": {
      "command": "bunx",
      "args": ["cursor-talk-to-figma-mcp@latest"]
    }
  }
}

WebSocket Server

Start the WebSocket server:

bun socket

Figma Plugin

  1. In Figma, go to Plugins > Development > New Plugin

  2. Choose "Link existing plugin"

  3. Select the src/cursor_mcp_plugin/manifest.json file

  4. The plugin should now be available in your Figma development plugins

Windows + WSL Guide

  1. Install bun via powershell

powershell -c "irm bun.sh/install.ps1|iex"
  1. Uncomment the hostname 0.0.0.0 in src/socket.ts

// uncomment this to allow connections in windows wsl
hostname: "0.0.0.0",
  1. Start the websocket

bun socket

Usage

  1. Start the WebSocket server

  2. Install the MCP server in Cursor

  3. Open Figma and run the Cursor MCP Plugin

  4. Connect the plugin to the WebSocket server by joining a channel using join_channel

  5. Use Cursor to communicate with Figma using the MCP tools

MCP Tools

The MCP server provides the following tools for interacting with Figma:

Document & Selection

  • get_document_info - Get information about the current Figma document

  • get_selection - Get information about the current selection

  • read_my_design - Get detailed node information about the current selection without parameters

  • get_node_info - Get detailed information about a specific node

  • get_nodes_info - Get detailed information about multiple nodes by providing an array of node IDs

Annotations

  • get_annotations - Get all annotations in the current document or specific node

  • set_annotation - Create or update an annotation with markdown support

  • set_multiple_annotations - Batch create/update multiple annotations efficiently

  • scan_nodes_by_types - Scan for nodes with specific types (useful for finding annotation targets)

Prototyping & Connections

  • get_reactions - Get all prototype reactions from nodes with visual highlight animation

  • set_default_connector - Set a copied FigJam connector as the default connector style for creating connections (must be set before creating connections)

  • create_connections - Create FigJam connector lines between nodes, based on prototype flows or custom mapping

Creating Elements

  • create_rectangle - Create a new rectangle with position, size, and optional name

  • create_frame - Create a new frame with position, size, and optional name

  • create_text - Create a new text node with customizable font properties

Modifying text content

  • scan_text_nodes - Scan text nodes with intelligent chunking for large designs

  • set_text_content - Set the text content of a single text node

  • set_multiple_text_contents - Batch update multiple text nodes efficiently

Auto Layout & Spacing

  • set_layout_mode - Set the layout mode and wrap behavior of a frame (NONE, HORIZONTAL, VERTICAL)

  • set_padding - Set padding values for an auto-layout frame (top, right, bottom, left)

  • set_axis_align - Set primary and counter axis alignment for auto-layout frames

  • set_layout_sizing - Set horizontal and vertical sizing modes for auto-layout frames (FIXED, HUG, FILL)

  • set_item_spacing - Set distance between children in an auto-layout frame

Styling

  • set_fill_color - Set the fill color of a node (RGBA)

  • set_stroke_color - Set the stroke color and weight of a node

  • set_corner_radius - Set the corner radius of a node with optional per-corner control

Layout & Organization

  • move_node - Move a node to a new position

  • resize_node - Resize a node with new dimensions

  • delete_node - Delete a node

  • delete_multiple_nodes - Delete multiple nodes at once efficiently

  • clone_node - Create a copy of an existing node with optional position offset

Components & Styles

  • get_styles - Get information about local styles

  • get_local_components - Get information about local components

  • create_component_instance - Create an instance of a component

  • get_instance_overrides - Extract override properties from a selected component instance

  • set_instance_overrides - Apply extracted overrides to target instances

Export & Advanced

  • export_node_as_image - Export a node as an image (PNG, JPG, SVG, or PDF) - limited support on image currently returning base64 as text

Connection Management

  • join_channel - Join a specific channel to communicate with Figma

MCP Prompts

The MCP server includes several helper prompts to guide you through complex design tasks:

  • design_strategy - Best practices for working with Figma designs

  • read_design_strategy - Best practices for reading Figma designs

  • text_replacement_strategy - Systematic approach for replacing text in Figma designs

  • annotation_conversion_strategy - Strategy for converting manual annotations to Figma's native annotations

  • swap_overrides_instances - Strategy for transferring overrides between component instances in Figma

  • reaction_to_connector_strategy - Strategy for converting Figma prototype reactions to connector lines using the output of 'get_reactions', and guiding the use 'create_connections' in sequence

Development

Building the Figma Plugin

  1. Navigate to the Figma plugin directory:

    cd src/cursor_mcp_plugin
  2. Edit code.js and ui.html

Best Practices

When working with the Figma MCP:

  1. Always join a channel before sending commands

  2. Get document overview using get_document_info first

  3. Check current selection with get_selection before modifications

  4. Use appropriate creation tools based on needs:

    • create_frame for containers

    • create_rectangle for basic shapes

    • create_text for text elements

  5. Verify changes using get_node_info

  6. Use component instances when possible for consistency

  7. Handle errors appropriately as all commands can throw exceptions

  8. For large designs:

    • Use chunking parameters in scan_text_nodes

    • Monitor progress through WebSocket updates

    • Implement appropriate error handling

  9. For text operations:

    • Use batch operations when possible

    • Consider structural relationships

    • Verify changes with targeted exports

  10. For converting legacy annotations:

    • Scan text nodes to identify numbered markers and descriptions

    • Use scan_nodes_by_types to find UI elements that annotations refer to

    • Match markers with their target elements using path, name, or proximity

    • Categorize annotations appropriately with get_annotations

    • Create native annotations with set_multiple_annotations in batches

    • Verify all annotations are properly linked to their targets

    • Delete legacy annotation nodes after successful conversion

  11. Visualize prototype noodles as FigJam connectors:

  • Use get_reactions to extract prototype flows,

  • set a default connector with set_default_connector,

  • and generate connector lines with create_connections for clear visual flow mapping.

License

MIT

Available Tools

38 tools
clone_nodeC

Clone an existing node in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node to clone
xNoNew X position for the clone
yNoNew Y position for the clone

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Clone' implies a mutation operation, the description doesn't specify whether this requires edit permissions, what happens to the original node, whether the clone inherits properties, or any rate limits. This is a significant gap for a mutation tool with zero annotation coverage.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, with every word earning its place in conveying the core functionality.

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?

For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what the clone operation returns, what properties are copied, whether the operation is reversible, or permission requirements. Given the complexity of cloning operations and lack of structured data, the description should provide more behavioral context.

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 all three parameters (nodeId, x, y) with clear descriptions. The description doesn't add any additional parameter semantics beyond what's in the schema, such as explaining coordinate systems or node ID formats. This meets the baseline for high schema coverage.

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 ('Clone') and resource ('an existing node in Figma'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'create_frame' or 'create_rectangle' which also create visual elements, leaving some ambiguity about when cloning is preferred over creating new elements.

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 doesn't mention when cloning is appropriate versus creating new nodes with sibling tools like 'create_frame', nor does it specify prerequisites such as needing an existing node ID. This leaves the agent without contextual usage information.

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

create_component_instanceC

Create an instance of a component in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
componentKeyYesKey of the component to instantiate
xYesX position
yYesY position

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Create an instance' which implies a write/mutation operation, but doesn't clarify permissions needed, whether it's destructive to existing elements, rate limits, or what happens on success/failure. For a mutation tool with zero annotation coverage, this is a significant gap in 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 a single, efficient sentence that front-loads the core purpose without unnecessary words. Every word earns its place, and there's no redundancy or fluff. It's appropriately sized for a straightforward tool.

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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like permissions, side effects, or return values, leaving gaps that could hinder an agent's ability to use it correctly. The high schema coverage helps with parameters, but overall context is lacking.

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 all three parameters (componentKey, x, y) with clear descriptions. The description adds no additional meaning about parameters beyond what's in the schema, such as explaining what a 'componentKey' represents or coordinate system details. Baseline 3 is appropriate when the schema does the heavy lifting.

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 an instance') and resource ('of a component in Figma'), making the purpose immediately understandable. It distinguishes itself from siblings like 'create_frame' or 'create_rectangle' by focusing on component instantiation rather than creating new elements from scratch. However, it doesn't specify what distinguishes 'component' from other elements or mention the sibling 'clone_node', which might have overlapping functionality.

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 doesn't mention prerequisites (e.g., needing an existing component), exclusions, or compare it to siblings like 'clone_node' (which might duplicate nodes) or 'create_frame' (which creates new frames). Without this context, an agent must infer usage from the tool name alone.

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

create_connectionsC

Create connections between nodes using the default connector style

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionsYesArray of node connections to create

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions 'default connector style' but doesn't disclose critical behaviors: whether connections are bidirectional, if they can be edited/deleted later, what happens with invalid node IDs, or if there are rate limits. For a creation tool with zero annotation coverage, this leaves significant gaps in understanding its operational impact.

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, efficient sentence that front-loads the core action ('create connections between nodes') and adds a useful constraint ('using the default connector style'). There is no wasted wording, and it directly addresses the tool's function without 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?

Given no annotations, no output schema, and a creation tool with potential side effects (modifying node relationships), the description is incomplete. It lacks details on behavioral traits (e.g., error handling, idempotency), return values, or usage context. For a tool that alters a design environment, more guidance is needed to ensure safe and effective 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 description coverage is 100%, with clear documentation for the 'connections' array and its nested properties (startNodeId, endNodeId, text). The description adds minimal value beyond the schema, only implying the 'default connector style' applies to all created connections. No additional syntax or format details are provided, meeting the baseline for high schema coverage.

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 connections') and resource ('between nodes'), specifying it uses 'default connector style'. It distinguishes from siblings like 'set_default_connector' (which configures style) and 'clone_node' (which duplicates nodes). However, it doesn't explicitly differentiate from tools like 'move_node' or 'set_axis_align' that might involve node relationships.

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 doesn't mention prerequisites (e.g., existing nodes), exclusions (e.g., invalid node IDs), or comparisons to siblings like 'set_default_connector' (for style changes) or 'move_node' (for repositioning). Usage is implied but not explicitly stated.

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

create_frameC

Create a new frame in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position
yYesY position
widthYesWidth of the frame
heightYesHeight of the frame
nameNoOptional name for the frame
parentIdNoOptional parent node ID to append the frame to
fillColorNoFill color in RGBA format
strokeColorNoStroke color in RGBA format
strokeWeightNoStroke weight
layoutModeNoAuto-layout mode for the frame
layoutWrapNoWhether the auto-layout frame wraps its children
paddingTopNoTop padding for auto-layout frame
paddingRightNoRight padding for auto-layout frame
paddingBottomNoBottom padding for auto-layout frame
paddingLeftNoLeft padding for auto-layout frame
primaryAxisAlignItemsNoPrimary axis alignment for auto-layout frame. Note: When set to SPACE_BETWEEN, itemSpacing will be ignored as children will be evenly spaced.
counterAxisAlignItemsNoCounter axis alignment for auto-layout frame
layoutSizingHorizontalNoHorizontal sizing mode for auto-layout frame
layoutSizingVerticalNoVertical sizing mode for auto-layout frame
itemSpacingNoDistance between children in auto-layout frame. Note: This value will be ignored if primaryAxisAlignItems is set to SPACE_BETWEEN.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Create a new frame' which implies a write operation, but doesn't specify permissions needed, whether it's destructive to existing elements, rate limits, or what the response looks like (e.g., returns a node ID). For a mutation tool with zero annotation coverage, this is a significant gap in 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 a single, efficient sentence that directly states the tool's purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to parse quickly.

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 complexity (20 parameters, no output schema, no annotations), the description is inadequate. It doesn't explain what a 'frame' is in Figma context, how it differs from other elements, what happens on success/failure, or provide any behavioral context. For a tool with this many parameters and mutation behavior, more guidance 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 description coverage is 100%, so the schema already documents all 20 parameters thoroughly with descriptions, constraints, and enums. The description adds no additional meaning about parameters beyond what's in the schema, such as explaining relationships between parameters (e.g., how layoutMode interacts with padding). Baseline 3 is appropriate when the schema does the heavy lifting.

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 ('a new frame in Figma'), making the purpose immediately understandable. However, it doesn't differentiate this from sibling tools like 'create_rectangle' or 'create_component_instance', which also create design elements in Figma, so it doesn't reach the highest score.

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. With sibling tools like 'create_rectangle' and 'create_component_instance' available, there's no indication of when a frame is preferred over other shapes or components, nor any mention of prerequisites or context for usage.

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

create_rectangleC

Create a new rectangle in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position
yYesY position
widthYesWidth of the rectangle
heightYesHeight of the rectangle
nameNoOptional name for the rectangle
parentIdNoOptional parent node ID to append the rectangle to

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Create a new rectangle' implies a write operation, but it doesn't specify permissions needed, whether the creation is reversible, how it interacts with the Figma document (e.g., layer ordering), or what happens on success/failure. This leaves significant gaps for a mutation tool with no annotation coverage.

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, efficient sentence that front-loads the core purpose without unnecessary words. It's appropriately sized for a straightforward tool, with zero waste or 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?

Given the complexity of a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., effects, permissions), usage context relative to siblings, and expected return values, leaving the agent with insufficient information for reliable invocation.

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 all parameters (x, y, width, height, name, parentId) with basic descriptions. The description adds no additional meaning beyond implying creation occurs in Figma, which is redundant with the schema's context. Baseline 3 is appropriate when the schema handles parameter documentation adequately.

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 a new rectangle') and resource ('in Figma'), making the purpose immediately understandable. However, it doesn't differentiate this tool from similar creation tools like 'create_frame' or 'create_component_instance' among the siblings, which would require more specific context about what makes a rectangle distinct.

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. With siblings like 'create_frame' and 'create_component_instance', there's no indication of when a rectangle is preferred over other shape or container types, nor any mention of prerequisites or exclusions for its use.

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

create_textB

Create a new text element in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position
yYesY position
textYesText content
fontSizeNoFont size (default: 14)
fontWeightNoFont weight (e.g., 400 for Regular, 700 for Bold)
fontColorNoFont color in RGBA format
nameNoSemantic layer name for the text node
parentIdNoOptional parent node ID to append the text to

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure but offers minimal information. It states this is a creation operation but doesn't mention whether it requires specific permissions, what happens on success/failure, whether the text becomes part of the current selection, or any rate limits. For a mutation tool with zero annotation coverage, this leaves significant behavioral questions unanswered.

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, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized for a tool with comprehensive schema documentation and gets straight to the point with zero wasted text.

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 creation tool with no annotations and no output schema, the description is minimally adequate. The schema provides excellent parameter documentation, but the description doesn't address behavioral aspects like what the tool returns, error conditions, or integration with the Figma document structure. Given the mutation nature of the tool and lack of output schema, more contextual information would be helpful.

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 description coverage is 100%, so the schema already documents all 8 parameters thoroughly. The description adds no additional parameter information beyond what's in the schema, which is acceptable given the comprehensive schema documentation. The baseline score of 3 reflects adequate coverage through schema alone.

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 ('new text element in Figma'), making the purpose immediately understandable. However, it doesn't differentiate this tool from other creation tools like create_frame or create_rectangle, which would require mentioning it specifically creates text elements rather than other types of design elements.

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. With sibling tools like create_frame, create_rectangle, and set_text_content available, there's no indication whether this is for creating standalone text elements versus modifying existing ones, or how it relates to other text manipulation tools like set_multiple_text_contents.

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

delete_multiple_nodesC

Delete multiple nodes from Figma at once

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesArray of node IDs to delete

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Delete multiple nodes from Figma at once', which implies a destructive mutation, but doesn't address critical aspects like permissions required, whether deletions are permanent or reversible, error handling for invalid node IDs, or rate limits. For a destructive tool with zero annotation coverage, this is a significant gap in behavioral context.

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, efficient sentence with zero waste: 'Delete multiple nodes from Figma at once'. It is front-loaded with the core action and resource, making it immediately understandable. Every word earns its place, and there is no redundant or verbose language.

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 destructive nature, lack of annotations, and absence of an output schema, the description is incomplete. It doesn't cover behavioral traits like permanence, permissions, or error handling, nor does it explain return values or side effects. For a mutation tool with no structured safety hints, the description should provide more context to ensure safe and correct usage.

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, with the parameter 'nodeIds' clearly documented as 'Array of node IDs to delete'. The description adds no additional semantic context beyond what the schema provides, such as format examples or constraints on node ID validity. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

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 verb ('Delete') and resource ('multiple nodes from Figma'), making the purpose unambiguous. It distinguishes from the sibling 'delete_node' by specifying 'multiple nodes at once', though it doesn't explicitly name the alternative. The description is specific but could be more explicit about the sibling differentiation.

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 'delete_node'. It mentions 'multiple nodes at once', which implies a batch operation, but doesn't specify thresholds or scenarios where batch deletion is preferred over individual deletion. No exclusions, prerequisites, or explicit alternatives are provided.

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

delete_nodeC

Delete a node from Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node to delete

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits. It doesn't mention whether deletion is permanent, requires specific permissions, affects linked components, or has side effects like cascading changes, which is critical for a destructive 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?

The description is a single, direct sentence with zero waste, front-loading the essential action and resource. It's appropriately sized for a simple tool, making it easy to scan and understand immediately.

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?

For a destructive tool with no annotations and no output schema, the description is incomplete. It lacks crucial details like what happens post-deletion (e.g., confirmation, error handling), return values, or implications in a collaborative Figma environment, leaving significant gaps for an AI agent.

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 description coverage is 100%, with the single parameter 'nodeId' clearly documented in the schema. The description doesn't add any extra meaning beyond what the schema provides, such as examples or constraints, but this is acceptable given the high coverage, resulting in a baseline score.

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 ('Delete') and target resource ('a node from Figma'), which is specific and unambiguous. However, it doesn't differentiate from sibling 'delete_multiple_nodes', which handles multiple deletions, leaving some room for improvement in distinguishing between similar 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 alternatives like 'delete_multiple_nodes' for bulk operations or other deletion-related tools. The description lacks context about prerequisites, permissions, or typical scenarios for single-node deletion.

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

export_node_as_imageC

Export a node as an image from Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node to export
formatNoExport format
scaleNoExport scale

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a write/export operation but doesn't disclose whether this consumes API credits, has rate limits, requires specific permissions, or what happens on failure (e.g., invalid node ID). The description is technically accurate but lacks operational context.

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, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it immediately scannable and appropriately sized for a straightforward export tool.

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?

For a mutation tool (export generates output) with no annotations and no output schema, the description is insufficient. It doesn't explain what the tool returns (e.g., image data, download link, status), error conditions, or practical constraints. The context signals indicate this tool has behavioral complexity that isn't addressed.

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%, providing complete parameter documentation. The description adds no parameter-specific information beyond what's in the schema (nodeId, format, scale). This meets the baseline of 3 since the schema adequately covers parameter semantics.

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 verb ('Export') and resource ('a node as an image from Figma'), making the tool's purpose immediately understandable. It distinguishes from siblings like 'get_node_info' (read-only) or 'delete_node' (destructive), but doesn't explicitly differentiate from other export-related tools since none are listed among siblings.

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 doesn't mention prerequisites (e.g., needing a valid node ID), constraints (e.g., export limits), or related operations (e.g., using 'get_node_info' first to verify node existence).

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

get_annotationsC

Get all annotations in the current document or specific node

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdNoOptional node ID to get annotations for specific node
includeCategoriesNoWhether to include category information

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions 'Get all annotations' but doesn't disclose behavioral traits such as whether this is a read-only operation (implied by 'get'), potential permissions needed, rate limits, pagination, or what happens if no document is open. The description adds minimal context beyond the basic action.

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, efficient sentence with zero waste. It front-loads the core action ('Get all annotations') and specifies scope ('in the current document or specific node') concisely. Every word earns its place, making it easy to parse quickly.

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 no annotations, no output schema, and 2 parameters with full schema coverage, the description is incomplete. It lacks context on behavioral aspects (e.g., read-only safety, error conditions), output format (what 'annotations' include), and usage guidelines. For a tool in a design/UI context with many sibling tools, more guidance is needed to help an agent use it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents both parameters (nodeId and includeCategories). The description adds no additional meaning beyond implying 'nodeId' targets a 'specific node' and 'all annotations' might default to the current document. Baseline 3 is appropriate as the schema does the heavy lifting, but the description doesn't compensate with extra insights like parameter interactions or default behaviors.

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 verb 'Get' and resource 'annotations', specifying scope with 'in the current document or specific node'. It distinguishes from siblings like 'set_annotation' (write vs read) and 'get_document_info' (annotations vs general info), though not explicitly named. However, it doesn't fully differentiate from all siblings like 'get_reactions' or 'get_styles' which are also read operations on document elements.

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 doesn't mention prerequisites (e.g., needing an open document), exclusions, or compare to siblings like 'get_document_info' (which might include annotations) or 'scan_nodes_by_types' (which might filter nodes). Usage is implied by the name and purpose but not explicitly stated.

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

get_document_infoB

Get detailed information about the current Figma document

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Get detailed information' but doesn't specify what information is included, whether it's read-only, if it requires permissions, or how it handles errors. For a tool with no annotation coverage, this is insufficient to inform safe and effective use.

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, efficient sentence that directly states the tool's purpose without any wasted words. It's front-loaded and appropriately sized for a simple tool, making it easy to parse quickly.

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 complexity (0 parameters, no output schema, no annotations), the description is incomplete. It doesn't explain what 'detailed information' entails, the return format, or behavioral aspects like read-only nature. For a tool in a design context with siblings that handle specific data, more context is needed to guide the agent effectively.

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 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics, but it could hint at implicit context like 'current document' if relevant. Since no parameters exist, a baseline of 4 is appropriate as there's nothing to compensate for.

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 verb 'Get' and the resource 'detailed information about the current Figma document', making the purpose specific and understandable. However, it doesn't explicitly differentiate from siblings like 'get_node_info' or 'get_nodes_info', which focus on nodes rather than the entire document, leaving some ambiguity about scope.

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 doesn't mention context like needing document-level metadata, prerequisites, or exclusions, such as not using it for node-specific details. This lack of usage context leaves the agent to infer based on tool names alone.

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

get_instance_overridesB

Get all override properties from a selected component instance. These overrides can be applied to other instances, which will swap them to match the source component.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdNoOptional ID of the component instance to get overrides from. If not provided, currently selected instance will be used.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It mentions that overrides 'can be applied to other instances', which hints at potential use cases, but doesn't disclose critical behavioral traits like whether this is a read-only operation, what permissions are needed, what format the overrides are returned in, or whether there are any rate limits. For a tool with zero annotation coverage, this leaves significant gaps.

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 appropriately sized with two sentences that each serve a purpose: the first states the core functionality, the second explains potential applications. It's front-loaded with the main purpose. There's minimal waste, though the second sentence could be slightly more concise.

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 no annotations and no output schema, the description is incomplete for a tool that presumably returns structured override data. It doesn't explain what format the overrides are returned in, what properties are included, or how to interpret the results. For a tool with zero structured metadata, the description should provide more complete context about the operation and its outputs.

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 fully documents the single optional parameter. The description doesn't add any parameter-specific information beyond what's in the schema, maintaining the baseline score of 3. It doesn't explain what happens when nodeId is omitted beyond what the schema states.

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 verb 'Get' and resource 'override properties from a selected component instance', making the purpose understandable. It distinguishes from siblings like 'get_node_info' or 'get_styles' by focusing specifically on overrides. However, it doesn't explicitly differentiate from 'set_instance_overrides' beyond the get/set distinction.

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 needing to copy overrides between instances, but doesn't explicitly state when to use this tool versus alternatives like 'get_node_info' or 'get_styles'. It mentions applying overrides to other instances, which provides some context, but lacks clear when-not-to-use guidance or explicit alternative recommendations.

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

get_local_componentsB

Get all local components from the Figma document

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states it 'gets' components, implying a read-only operation, but doesn't specify details like whether it returns a list, format, pagination, or error conditions. For a tool with zero annotation coverage, this is inadequate, as it lacks critical behavioral context.

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, efficient sentence that directly states the tool's purpose without any wasted words. It's front-loaded and appropriately sized for a simple tool, making it easy to parse quickly.

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 lack of annotations and no output schema, the description is incomplete for a tool that retrieves data. It doesn't explain what 'local components' entail, the return format, or any limitations. For a read operation with no structured output information, this leaves significant gaps in understanding how to interpret results.

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 0 parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to add parameter information, so it meets the baseline for no parameters. It implies no inputs are required, which aligns with 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?

The description clearly states the verb ('Get') and resource ('all local components from the Figma document'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_document_info' or 'get_node_info', which might also retrieve document-related information, so it doesn't fully distinguish itself in context.

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 doesn't mention prerequisites, context, or exclusions, such as whether it's for retrieving components vs. other document elements or how it relates to tools like 'get_document_info'. This leaves the agent with minimal usage direction.

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

get_node_infoC

Get detailed information about a specific node in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node to get information about

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states it 'gets' information, implying a read-only operation, but does not disclose behavioral traits like whether it requires authentication, rate limits, error handling, or the format of the returned information. This leaves significant gaps for an agent to understand how to use it effectively.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy for an agent to parse quickly.

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 complexity of a Figma node query tool with no annotations and no output schema, the description is incomplete. It lacks details on what 'detailed information' includes, how errors are handled, or any context about the Figma environment, making it insufficient for reliable agent 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?

The input schema has 100% description coverage, with the single parameter 'nodeId' clearly documented. The description does not add any meaning beyond the schema, such as examples of node IDs or context on where to obtain them, so it meets the baseline for high schema coverage without compensating further.

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 verb 'Get' and the resource 'detailed information about a specific node in Figma', which is specific and unambiguous. However, it does not explicitly differentiate from sibling tools like 'get_nodes_info' (plural) or 'get_document_info', leaving some ambiguity about scope.

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 sibling tools like 'get_nodes_info' for multiple nodes or 'get_document_info' for broader context, nor does it specify prerequisites such as needing a valid node ID from the Figma document.

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

get_nodes_infoC

Get detailed information about multiple nodes in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesArray of node IDs to get information about

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure but only states what the tool does, not how it behaves. It doesn't mention whether this is a read-only operation, what format the information returns in, whether there are rate limits, authentication requirements, or error conditions for invalid node IDs.

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, focused sentence that efficiently communicates the core function without unnecessary words. It's appropriately sized for a straightforward tool and front-loads the essential information immediately.

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?

For a tool with no annotations, no output schema, and multiple sibling tools (including the similar 'get_node_info'), the description is insufficient. It doesn't explain what 'detailed information' includes, how results are structured, or address potential confusion with the singular version of this tool, leaving significant gaps for agent understanding.

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 has 100% description coverage, with the single parameter 'nodeIds' clearly documented as 'Array of node IDs to get information about'. The description adds no additional parameter context beyond what's in the schema, so it meets the baseline for high schema coverage without adding extra value.

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 ('Get detailed information') and resource ('multiple nodes in Figma'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from its sibling 'get_node_info' (singular vs. plural), which could cause confusion about when to use each tool.

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_node_info' (singular) or 'get_document_info'. There's no mention of prerequisites, limitations, or typical use cases, leaving the agent to infer usage context from the tool name alone.

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

get_reactionsA

Get Figma Prototyping Reactions from multiple nodes. CRITICAL: The output MUST be processed using the 'reaction_to_connector_strategy' prompt IMMEDIATELY to generate parameters for connector lines via the 'create_connections' tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesArray of node IDs to get reactions from

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses critical behavioral traits: the output requires immediate processing with a specific prompt and tool ('reaction_to_connector_strategy' and 'create_connections'), which is essential context beyond basic functionality. However, it doesn't cover other aspects like error handling, rate limits, or authentication needs, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

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

The description is two sentences, but the second sentence is lengthy and includes specific tool/prompt names, which may be necessary but adds complexity. It's front-loaded with the core purpose, but the critical instruction could be more streamlined. Overall, it's adequately sized but not optimally 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?

Given the complexity (no annotations, no output schema, 1 parameter with full schema coverage), the description is fairly complete. It explains the purpose, usage guidelines, and critical behavioral context (output processing). However, it lacks details on return values or error cases, which would enhance completeness for a tool with no output schema.

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, with 'nodeIds' documented as 'Array of node IDs to get reactions from.' The description adds no parameter-specific information beyond what the schema provides. According to the rules, with high schema coverage (>80%), the baseline score is 3 when no param info is in the description, which applies here.

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's purpose: 'Get Figma Prototyping Reactions from multiple nodes.' It specifies the verb ('Get') and resource ('Figma Prototyping Reactions'), and distinguishes it from siblings like 'get_annotations' or 'get_node_info' by focusing on reactions. However, it doesn't explicitly differentiate from hypothetical similar tools (e.g., 'get_single_reaction'), though none exist in the sibling list.

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 usage guidance: 'CRITICAL: The output MUST be processed using the 'reaction_to_connector_strategy' prompt IMMEDIATELY to generate parameters for connector lines via the 'create_connections' tool.' This clearly states when to use it (as a precursor to 'create_connections') and implies an alternative workflow, though it doesn't specify when not to use it or name other alternatives directly.

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

get_selectionB

Get information about the current selection in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't describe how it behaves: e.g., whether it returns structured data, what happens if no selection exists (error vs. empty result), or if it's read-only (implied by 'Get' but not explicit). For a tool with zero annotation coverage, this leaves significant gaps in understanding its operational traits.

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 efficiently conveys the core functionality without any fluff. It's front-loaded with the key action and resource, making it easy to parse. Every word earns its place, adhering to best practices for concise tool descriptions.

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 tool's simplicity (0 parameters, no annotations, no output schema), the description is adequate as a basic overview. However, it lacks details on output format (e.g., what information is returned about the selection) and behavioral context (e.g., error handling), which could help an agent use it more effectively. For a read operation in a design tool context, more completeness would be beneficial.

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 has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't mention parameters, focusing instead on the tool's purpose. This aligns with the baseline expectation for zero-parameter tools, where the description needn't compensate for schema gaps.

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 ('Get information') and target resource ('current selection in Figma'), making the purpose immediately understandable. However, it doesn't distinguish itself from similar sibling tools like 'get_node_info' or 'get_nodes_info', which also retrieve information about Figma elements, so it doesn't fully differentiate its specific scope.

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 doesn't specify if this is for real-time selection updates, how it differs from 'get_node_info' (which might require node IDs), or any prerequisites like needing an active selection in Figma. Without such context, the agent must infer usage from the tool name alone.

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

get_stylesB

Get all styles from the current Figma document

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves styles but doesn't describe what 'styles' includes (e.g., text, color, effect styles), whether it's read-only (implied by 'Get'), potential rate limits, authentication needs, or the return format. For a tool with zero annotation coverage, this leaves significant behavioral gaps.

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, efficient sentence that front-loads the core purpose ('Get all styles'). There is no wasted language, repetition, or unnecessary elaboration, making it highly concise and well-structured for quick understanding.

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 tool has 0 parameters, no annotations, and no output schema, the description is minimally adequate. It specifies the resource ('styles') and scope ('current Figma document'), but lacks details on return values, error conditions, or behavioral traits. For a simple read operation, it meets basic needs but leaves room for improvement in 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?

The tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add parameter details beyond the schema, but with no parameters, this is appropriate. A baseline of 4 is applied as it meets the requirement for parameterless tools without redundancy.

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 ('Get') and resource ('all styles from the current Figma document'), making the purpose immediately understandable. It doesn't explicitly differentiate from siblings like 'get_local_components' or 'get_document_info', but the specificity of 'styles' provides inherent distinction. The description avoids tautology by not just restating the tool name.

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 doesn't mention prerequisites (e.g., needing an open document), exclusions, or compare it to similar tools like 'get_local_components' or 'get_document_info'. The agent must infer usage solely from the tool name and description without explicit context.

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

join_channelC

Join a specific channel to communicate with Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
channelNoThe name of the channel to join

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions the action ('Join') but doesn't disclose behavioral traits such as whether this requires authentication, if it's idempotent, what happens on success/failure, or any side effects (e.g., notifications). The description is minimal and lacks crucial operational details.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and appropriately sized, with every word earning its place by conveying the core action and goal.

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 complexity (a potentially interactive tool with no annotations and no output schema), the description is incomplete. It doesn't explain what 'join' entails operationally, what the expected outcome is, or any error conditions. For a tool that might involve network communication or state changes, more context is needed to guide effective 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?

The input schema has 100% description coverage, with the parameter 'channel' documented as 'The name of the channel to join'. The description doesn't add any meaning beyond this, such as channel naming conventions or examples. With high schema coverage, the baseline score of 3 is appropriate as the schema does the heavy lifting.

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 ('Join') and the resource ('a specific channel'), with the purpose being 'to communicate with Figma'. It's specific about what the tool does, though it doesn't explicitly differentiate from siblings like 'get_document_info' or 'read_my_design', which are read-only operations, whereas this implies an interactive action.

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 explicit guidance on when to use this tool versus alternatives is provided. The description doesn't mention prerequisites (e.g., needing to be in a Figma workspace), exclusions, or related tools. It's a standalone statement with no context for usage decisions.

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

move_nodeC

Move a node to a new position in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node to move
xYesNew X position
yYesNew Y position

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states the tool performs a mutation ('move'), but doesn't disclose behavioral traits such as permissions required, whether the move is reversible, effects on other nodes, error conditions, or rate limits. The description is minimal and misses critical context for a mutation tool.

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, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse. Every word contributes to the purpose without redundancy or fluff.

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 complexity of a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects, error handling, return values, and how it fits with sibling tools. For a tool that modifies Figma nodes, more context is needed to ensure safe and correct usage.

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%, with clear parameter descriptions in the schema. The description adds no additional meaning beyond implying positional movement, which is already covered by the schema's 'x' and 'y' descriptions. Baseline 3 is appropriate as the schema does the heavy lifting, but the description doesn't compensate or enhance parameter understanding.

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 ('move') and resource ('a node') with specific context ('to a new position in Figma'). It distinguishes from siblings like 'resize_node' or 'delete_node' by focusing on positional changes, though it doesn't explicitly contrast with them. The purpose is unambiguous but could be more specific about what constitutes a 'node' in Figma.

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 doesn't mention prerequisites (e.g., needing node permissions), when not to use it (e.g., for non-positional changes), or how it relates to siblings like 'resize_node' or 'set_layout_mode'. Usage is implied by the action but lacks explicit context.

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

read_my_designB

Get detailed information about the current selection in Figma, including all node details

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states it 'Get[s] detailed information' but doesn't disclose behavioral traits like whether it's read-only (implied but not explicit), requires specific permissions, has rate limits, or what happens with no selection. For a tool with zero annotation coverage, this leaves significant gaps in understanding its operation and constraints.

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, efficient sentence that front-loads the core purpose ('Get detailed information about the current selection in Figma') and adds a clarifying detail ('including all node details'). There is zero waste, and every word contributes to understanding the tool's function.

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 0 parameters, 100% schema coverage, and no output schema, the description is minimally adequate but incomplete. It lacks context on prerequisites (e.g., requires a selection), behavioral details (e.g., error handling), and output specifics (e.g., format of 'detailed information'). For a tool in a complex environment like Figma with many siblings, more guidance would be beneficial.

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 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add param info beyond the schema, but with no params, the baseline is 4 as it adequately addresses the lack of inputs without redundancy.

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 verb 'Get' and resource 'detailed information about the current selection in Figma', specifying it includes 'all node details'. It distinguishes from siblings like 'get_selection' by emphasizing detailed node information rather than just selection data. However, it doesn't explicitly contrast with 'get_node_info' or 'get_nodes_info', which may have overlapping functionality.

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_selection', 'get_node_info', or 'get_nodes_info'. It mentions 'current selection' but doesn't clarify prerequisites (e.g., requires an active selection) or exclusions (e.g., works only in Figma editor context). No explicit alternatives or context boundaries are stated.

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

resize_nodeC

Resize a node in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node to resize
widthYesNew width
heightYesNew height

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Resize' implies a mutation operation, but the description doesn't specify whether this requires edit permissions, what happens to child nodes or constraints, if the operation is reversible, or any rate limits. It lacks critical context for a destructive operation in a design tool.

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, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it immediately understandable. Every word earns its place by conveying essential information without 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?

Given the complexity of a mutation tool in a design environment with no annotations and no output schema, the description is insufficient. It doesn't cover behavioral aspects (e.g., permissions, side effects), output expectations, or error conditions. For a tool that modifies Figma nodes, more context is needed to ensure safe and correct usage.

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%, with clear parameter descriptions (nodeId, width, height). The description adds no additional semantic context beyond what the schema provides, such as unit explanations (e.g., pixels) or constraints (e.g., minimum/maximum values beyond exclusiveMinimum). Baseline 3 is appropriate since the schema does the heavy lifting.

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 'Resize a node in Figma' clearly states the action (resize) and target resource (node in Figma). It distinguishes from siblings like move_node, delete_node, or create_rectangle by specifying the resize operation. However, it doesn't explicitly differentiate from tools that might also modify node dimensions indirectly (e.g., set_layout_sizing).

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 doesn't mention prerequisites (e.g., needing a valid nodeId), exclusions (e.g., not applicable to certain node types), or comparisons to sibling tools like move_node or set_layout_sizing. The agent must infer usage from the name alone.

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

scan_nodes_by_typesC

Scan for child nodes with specific types in the selected Figma node

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesID of the node to scan
typesYesArray of node types to find in the child nodes (e.g. ['COMPONENT', 'FRAME'])

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but lacks behavioral details. It doesn't specify whether this is a read-only operation, what happens with invalid inputs, depth of scanning (direct children only or recursive), or output format. The description is minimal and doesn't compensate for the absence of 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, efficient sentence that front-loads the core purpose without unnecessary words. Every part of the sentence contributes directly to understanding the tool's function.

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?

For a tool with 2 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., list of node IDs, node details), error conditions, or behavioral aspects like scanning scope. The context demands more information for effective 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 description coverage is 100%, so the schema already fully documents both parameters (nodeId and types). The description adds no additional meaning beyond what's in the schema, such as examples of valid node types beyond 'COMPONENT' and 'FRAME', or constraints on the nodeId format. Baseline 3 is appropriate when schema does the heavy lifting.

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 ('Scan for child nodes') and resource ('in the selected Figma node'), specifying the filtering criteria ('with specific types'). It distinguishes from siblings like 'scan_text_nodes' by mentioning broader node types, but doesn't explicitly contrast with other scanning/filtering tools that might exist.

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. It doesn't mention prerequisites (e.g., needing a valid node ID), exclusions, or compare with siblings like 'get_nodes_info' or 'scan_text_nodes' for different filtering needs.

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

scan_text_nodesC

Scan all text nodes in the selected Figma node

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesID of the node to scan

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the action without disclosing behavioral traits such as what 'scan' entails (e.g., returns text content, counts nodes, error handling), permissions needed, or rate limits. This leaves significant gaps for a tool that likely reads data.

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, efficient sentence that directly states the tool's function without unnecessary words. It is front-loaded and appropriately sized for its purpose, earning full marks for 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?

Given no annotations, no output schema, and a single parameter with full schema coverage, the description is incomplete. It lacks details on what the scan returns (e.g., list of text nodes, content), error cases, or behavioral context, making it inadequate for effective tool 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?

The input schema has 100% description coverage, with 'nodeId' clearly documented. The description adds no additional meaning beyond the schema, such as format examples or constraints, so it meets the baseline for high schema coverage without compensating value.

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 ('scan') and target ('all text nodes in the selected Figma node'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'scan_nodes_by_types' or 'get_node_info', which could provide similar functionality, so it doesn't reach the highest score.

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 'scan_nodes_by_types' or 'get_node_info', nor does it mention prerequisites or exclusions. It merely states what the tool does without 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_annotationC

Create or update an annotation

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node to annotate
annotationIdNoThe ID of the annotation to update (if updating existing annotation)
labelMarkdownYesThe annotation text in markdown format
categoryIdNoThe ID of the annotation category
propertiesNoAdditional properties for the annotation

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. 'Create or update' implies a mutation operation, but it doesn't specify permissions needed, whether changes are reversible, rate limits, or what happens when updating versus creating. This is inadequate for a mutation tool with zero annotation coverage.

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, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it immediately scannable and appropriately sized for its purpose.

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?

For a mutation tool with 5 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what happens after creation/update, error conditions, or how to distinguish between create and update scenarios. The agent would need to guess about behavioral aspects and output format.

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 all 5 parameters thoroughly. The description adds no additional meaning about parameters beyond what's in the schema, such as explaining the relationship between 'annotationId' for updates versus creates. Baseline 3 is appropriate when schema does the heavy lifting.

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 or update') and resource ('an annotation'), making the purpose immediately understandable. However, it doesn't differentiate this tool from 'set_multiple_annotations' or 'get_annotations' among its siblings, which would require explicit comparison to achieve a perfect score.

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 'set_multiple_annotations' or 'get_annotations'. It lacks any context about prerequisites, appropriate scenarios, or exclusions, leaving the agent to infer usage from the tool name alone.

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

set_axis_alignB

Set primary and counter axis alignment for an auto-layout frame in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the frame to modify
primaryAxisAlignItemsNoPrimary axis alignment (MIN/MAX = left/right in horizontal, top/bottom in vertical). Note: When set to SPACE_BETWEEN, itemSpacing will be ignored as children will be evenly spaced.
counterAxisAlignItemsNoCounter axis alignment (MIN/MAX = top/bottom in horizontal, left/right in vertical)

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states this is a 'Set' operation (implying mutation) but doesn't disclose behavioral traits like whether changes are reversible, permission requirements, error conditions, or what happens if applied to non-auto-layout frames. The description is minimal and lacks crucial context for a mutation tool.

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, efficient sentence that front-loads the core purpose without any wasted words. It directly communicates the tool's function in a compact form.

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?

For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects (e.g., side effects, error handling) or provide usage context. While the schema covers parameters well, the overall tool context lacks necessary disclosure for safe and effective 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 description coverage is 100%, with detailed parameter descriptions already in the schema (e.g., explaining MIN/MAX mappings and SPACE_BETWEEN behavior). The tool description adds no additional parameter semantics beyond what's in the schema, so it meets the baseline of 3 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 specific action ('Set') and target resource ('primary and counter axis alignment for an auto-layout frame in Figma'). It distinguishes this from sibling tools like set_item_spacing or set_layout_mode by specifying the exact alignment properties being modified.

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. While it mentions 'auto-layout frame', it doesn't specify prerequisites (e.g., the frame must already have auto-layout enabled) or contrast with similar tools like set_layout_mode that might affect related properties.

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

set_corner_radiusB

Set the corner radius of a node in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node to modify
radiusYesCorner radius value
cornersNoOptional array of 4 booleans to specify which corners to round [topLeft, topRight, bottomRight, bottomLeft]

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states the action 'set' but lacks details on behavioral traits like whether it modifies existing properties, requires specific permissions, or has side effects. For a mutation tool with zero annotation coverage, this is a significant gap in 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 a single, direct sentence with zero waste. It front-loads the core action and resource efficiently, making it easy to parse and understand without unnecessary elaboration.

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 tool's moderate complexity (3 parameters, no output schema, and no annotations), the description is minimally adequate. It states what the tool does but lacks context on usage, behavioral details, or output expectations, leaving gaps that could hinder an agent's effective 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?

The input schema has 100% description coverage, with clear documentation for nodeId, radius, and corners. The description adds no additional meaning beyond what the schema provides, such as explaining the units for radius or the default behavior if corners is omitted. Baseline 3 is appropriate when the schema does the heavy lifting.

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 verb 'set' and the resource 'corner radius of a node in Figma', making the purpose specific and understandable. It distinguishes itself from siblings like set_fill_color or set_stroke_color by focusing on corner radius, though it doesn't explicitly contrast with them beyond the naming.

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 doesn't mention prerequisites, such as needing a valid node ID, or compare it to similar tools like set_layout_mode or set_padding, leaving the agent to infer usage from context alone.

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

set_default_connectorC

Set a copied connector node as the default connector

ParametersJSON Schema
NameRequiredDescriptionDefault
connectorIdNoThe ID of the connector node to set as default

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool sets a default connector, implying a mutation operation, but doesn't cover critical aspects like required permissions, whether this action is reversible, potential side effects, or error conditions. This is a significant gap for a tool that likely modifies system state.

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, direct sentence that efficiently conveys the core action without unnecessary words. It's front-loaded with the key verb and resource, making it easy to parse and understand quickly, which is ideal for 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?

Given the tool likely performs a mutation (setting a default connector) with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits, error handling, or return values, making it inadequate for safe and effective use by an AI agent in a design or connector management context.

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, with 'connectorId' clearly documented. The description adds no additional parameter semantics beyond what's in the schema, such as format examples or constraints. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

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 ('Set') and resource ('a copied connector node as the default connector'), making the purpose understandable. However, it doesn't explicitly differentiate this tool from sibling tools like 'create_connections' or 'move_node', which might also involve connector operations, leaving some ambiguity about its unique role.

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 doesn't mention prerequisites (e.g., needing a copied connector node), exclusions, or related tools like 'create_connections' for creating connectors, leaving the agent to infer usage context from the tool name alone.

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

set_fill_colorC

Set the fill color of a node in Figma can be TextNode or FrameNode

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node to modify
rYesRed component (0-1)
gYesGreen component (0-1)
bYesBlue component (0-1)
aNoAlpha component (0-1)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral context. It states this modifies a node's fill color but doesn't disclose whether this is a destructive operation, what permissions are required, whether changes are reversible, what happens if the node doesn't exist, or what the response looks like. For a mutation tool with zero annotation coverage, this is inadequate.

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, efficient sentence that gets straight to the point. It's appropriately sized for a straightforward tool, though it could be slightly more structured by front-loading the most critical information about node types or constraints.

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?

For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after the color is set, what errors might occur, whether there are rate limits, or what visual feedback to expect. Given the complexity of modifying design elements and the lack of structured behavioral data, more context 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 description coverage is 100%, so all parameters are documented in the schema. The description adds no additional parameter information beyond what's already in the schema (node types are mentioned but not as parameters). With complete schema coverage, the 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 ('Set the fill color') and target resource ('a node in Figma'), with specific node types mentioned ('TextNode or FrameNode'). It distinguishes this as a color-setting operation, though it doesn't explicitly differentiate from sibling 'set_stroke_color' beyond the fill/stroke distinction.

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 about when to use this tool versus alternatives like 'set_stroke_color' or color-related styling tools. The description mentions node types but doesn't explain prerequisites, permissions needed, or when this operation is appropriate versus other color modification approaches.

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

set_instance_overridesC

Apply previously copied overrides to selected component instances. Target instances will be swapped to the source component and all copied override properties will be applied.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceInstanceIdYesID of the source component instance
targetNodeIdsYesArray of target instance IDs. Currently selected instances will be used.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It describes the mutation action ('swapped', 'applied') but lacks critical behavioral details: whether this is destructive, requires specific permissions, has rate limits, or what happens to existing properties. The phrase 'target instances will be swapped' suggests a potentially significant change, but this isn't elaborated.

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?

Two concise sentences that efficiently convey the core functionality. The description is front-loaded with the main action. No wasted words, though it could be slightly more structured with explicit prerequisites.

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?

For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover error conditions, return values, or important behavioral aspects like whether the operation is reversible. The context of 'previously copied overrides' is mentioned but not explained in relation to tool workflow.

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 both parameters fully. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain format of IDs or what 'previously copied' means in relation to parameters). Baseline 3 is appropriate when schema does the heavy lifting.

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 ('Apply previously copied overrides') and target ('selected component instances'), with specific details about swapping to source component and applying override properties. It doesn't explicitly distinguish from sibling tools like 'get_instance_overrides' or 'clone_node', but the purpose is well-defined.

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 mentions 'previously copied overrides' and 'currently selected instances will be used' as contextual hints, but provides no explicit guidance on when to use this tool versus alternatives like 'clone_node' or 'set_multiple_annotations'. No prerequisites or exclusions are stated.

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

set_item_spacingB

Set distance between children in an auto-layout frame

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the frame to modify
itemSpacingYesDistance between children. Note: This value will be ignored if primaryAxisAlignItems is set to SPACE_BETWEEN.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool modifies a frame (implying mutation) but doesn't disclose permission requirements, whether changes are reversible, rate limits, or what happens if the frame isn't auto-layout. The description mentions the itemSpacing parameter's limitation with SPACE_BETWEEN alignment, which adds some behavioral context, but overall coverage is minimal for a mutation tool.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized for a simple tool with two parameters and front-loads the core functionality. Every word earns its place with zero 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?

For a mutation tool with no annotations and no output schema, the description is minimally adequate. It covers the basic purpose but lacks behavioral context, error conditions, and relationship to other layout tools. The 100% schema coverage helps with parameters, but overall completeness is limited given the tool's potential complexity in a design system context.

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%, providing complete parameter documentation. The description adds no additional parameter semantics beyond what's in the schema. It mentions 'distance between children' which echoes the schema's 'itemSpacing' description, but doesn't clarify units, valid ranges, or edge cases. With high schema coverage, the 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 ('Set distance') and target ('children in an auto-layout frame'), providing a specific verb+resource combination. It distinguishes from siblings like 'set_padding' or 'set_layout_mode' by focusing specifically on child spacing. However, it doesn't explicitly differentiate from all potential layout-related tools beyond the auto-layout context.

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 doesn't mention prerequisites (e.g., needing an auto-layout frame), when-not-to-use scenarios, or how it relates to sibling tools like 'set_layout_sizing' or 'set_padding'. The agent must infer usage from the description alone without explicit direction.

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

set_layout_modeC

Set the layout mode and wrap behavior of a frame in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the frame to modify
layoutModeYesLayout mode for the frame
layoutWrapNoWhether the auto-layout frame wraps its children

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states this is a mutation ('Set'), implying it modifies data, but doesn't disclose behavioral traits like whether changes are reversible, permission requirements, side effects on child elements, or error conditions. This is inadequate for a mutation tool with zero annotation coverage.

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, efficient sentence with zero waste. It's front-loaded with the core purpose and appropriately sized for the tool's complexity.

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?

For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks critical context like what the tool returns, error handling, or how it interacts with other layout tools. The high schema coverage helps, but doesn't compensate for missing behavioral and output 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?

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional meaning beyond what's in the schema—it doesn't explain parameter interactions, default behaviors, or practical examples. Baseline 3 is appropriate when the schema does the heavy lifting.

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 ('Set') and target ('layout mode and wrap behavior of a frame in Figma'), providing a specific verb+resource combination. However, it doesn't explicitly distinguish this tool from similar sibling tools like 'set_layout_sizing' or 'set_item_spacing', which also configure layout 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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., requires a frame node), exclusions, or compare it to related tools like 'set_layout_sizing' for sizing behavior or 'create_frame' for initial setup.

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

set_layout_sizingC

Set horizontal and vertical sizing modes for an auto-layout frame in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the frame to modify
layoutSizingHorizontalNoHorizontal sizing mode (HUG for frames/text only, FILL for auto-layout children only)
layoutSizingVerticalNoVertical sizing mode (HUG for frames/text only, FILL for auto-layout children only)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'Set[s]' modes, implying a mutation operation, but does not cover critical aspects like whether this requires specific permissions, if changes are reversible, potential side effects, or error handling. This leaves significant gaps in understanding the tool's behavior beyond the basic action.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded with the core action and target, making it easy to parse quickly, which is ideal for conciseness in tool descriptions.

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 complexity of a mutation tool with no annotations and no output schema, the description is insufficient. It lacks details on behavioral traits, error conditions, return values, or how it integrates with sibling tools. For a tool that modifies layout settings, more context is needed to ensure safe and effective use by an agent.

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, with clear documentation for all parameters, including enums and constraints. The description does not add any semantic details beyond what the schema provides, such as explaining the practical implications of 'HUG' vs 'FILL' modes. Thus, it meets the baseline for adequate but not enhanced parameter understanding.

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 ('Set') and the target ('horizontal and vertical sizing modes for an auto-layout frame in Figma'), making the purpose evident. However, it does not explicitly differentiate this tool from sibling tools like 'set_layout_mode' or 'resize_node', which might also involve layout adjustments, leaving some ambiguity about its unique role.

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. With siblings like 'set_layout_mode' and 'resize_node' that could relate to layout changes, there is no mention of specific contexts, prerequisites, or exclusions, leaving the agent to infer usage without explicit direction.

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

set_multiple_annotationsC

Set multiple annotations parallelly in a node

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node containing the elements to annotate
annotationsYesArray of annotations to apply

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't disclose whether this is a mutation (implied by 'Set'), what permissions are needed, if it's idempotent, how errors are handled, or what 'parallelly' means operationally. This leaves significant behavioral gaps for a write operation.

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, efficient sentence that gets straight to the point without unnecessary words. However, it could be slightly more structured by front-loading key distinctions (e.g., 'batch operation for multiple annotations') to improve immediate comprehension.

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?

For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't cover behavioral aspects (permissions, side effects), doesn't explain the return value or error handling, and doesn't differentiate from sibling tools. Given the complexity of batch annotation operations, more context 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?

The description adds no parameter-specific information beyond what's already in the schema (which has 100% coverage). It doesn't explain the relationship between the top-level 'nodeId' and nested 'nodeId' in annotations, or clarify what 'parallelly' means for the 'annotations' array processing. Baseline 3 is appropriate since the schema does the heavy lifting.

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 ('Set multiple annotations parallelly') and the target ('in a node'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from its sibling 'set_annotation' (singular vs. multiple), which prevents a perfect score.

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 'set_annotation' (for single annotations) or 'get_annotations' (for retrieval). There's no mention of prerequisites, constraints, or typical use cases, leaving the agent without contextual usage direction.

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

set_multiple_text_contentsC

Set multiple text contents parallelly in a node

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node containing the text nodes to replace
textYesArray of text node IDs and their replacement texts

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states 'Set' (implying mutation/write) and 'parallelly' (suggesting concurrent updates), but doesn't disclose critical behavioral traits: whether this is destructive (replaces existing text), requires specific permissions, has rate limits, or what happens on failure. For a mutation tool with zero annotation coverage, this is inadequate.

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, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse. Every word earns its place without redundancy or fluff.

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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what 'parallelly' entails operationally, what the tool returns (success/failure indicators), error conditions, or side effects. For a tool that modifies multiple text nodes, more context is needed for safe and effective 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 description coverage is 100%, with both parameters ('nodeId', 'text') well-documented in the schema. The description adds no additional meaning beyond implying parallel processing for multiple text nodes. Since the schema does the heavy lifting, the 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 ('Set multiple text contents parallelly') and target resource ('in a node'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'set_text_content' (singular vs. multiple) or 'set_instance_overrides' (which might also modify text). The purpose is clear but lacks sibling differentiation.

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. There's no mention of prerequisites (e.g., needing node IDs), when-not-to-use scenarios, or explicit alternatives like 'set_text_content' for single updates. The agent must infer usage from the name and parameters alone.

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

set_paddingC

Set padding values for an auto-layout frame in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the frame to modify
paddingTopNoTop padding value
paddingRightNoRight padding value
paddingBottomNoBottom padding value
paddingLeftNoLeft padding value

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a mutation ('Set padding values') but doesn't mention permissions needed, whether changes are reversible, error conditions (e.g., invalid nodeId), or side effects. This is inadequate for a mutation tool with zero annotation coverage.

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, efficient sentence that front-loads the core purpose with zero wasted words. It immediately communicates what the tool does without unnecessary elaboration, making it easy to parse.

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?

For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens on success (e.g., returns updated frame object), error handling, or important constraints like frame type requirements. Given the complexity of modifying design elements, more context 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 description coverage is 100%, so the schema already documents all parameters thoroughly. The description doesn't add any parameter-specific context beyond what's in the schema (e.g., units for padding values, whether padding is in pixels, default behaviors). Baseline 3 is appropriate when the schema does the heavy lifting.

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 ('Set padding values') and target resource ('an auto-layout frame in Figma'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'set_item_spacing' or 'set_layout_mode' that also modify auto-layout properties, preventing a perfect score.

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. The description doesn't mention prerequisites (e.g., the frame must already exist and be in auto-layout mode), exclusions, or comparisons to similar tools like 'set_item_spacing' for spacing between items versus padding within a frame.

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

set_stroke_colorC

Set the stroke color of a node in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the node to modify
rYesRed component (0-1)
gYesGreen component (0-1)
bYesBlue component (0-1)
aNoAlpha component (0-1)
weightNoStroke weight

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Set' implies a mutation operation, the description doesn't disclose whether this requires specific permissions, whether changes are reversible, what happens if the node doesn't exist, or any rate limits. It provides minimal behavioral context beyond the basic 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?

The description is a single, efficient sentence that states exactly what the tool does with zero wasted words. It's appropriately sized and front-loaded with the essential 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?

For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens on success/failure, what the tool returns, or provide any context about the Figma environment. Given the complexity of modifying design elements and the lack of structured safety information, more guidance 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 description coverage is 100%, so the schema already documents all 6 parameters thoroughly. The description doesn't add any parameter semantics beyond what's in the schema - it doesn't explain relationships between parameters, provide examples, or clarify edge cases. Baseline 3 is appropriate when the schema does the heavy lifting.

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 ('Set') and target ('stroke color of a node in Figma'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from similar sibling tools like 'set_fill_color' or 'set_text_content' beyond the specific property being modified.

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. There's no mention of prerequisites (e.g., needing a valid node ID), when not to use it, or what other tools might be more appropriate for related tasks like setting fill color or other node properties.

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

set_text_contentC

Set the text content of an existing text node in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe ID of the text node to modify
textYesNew text content

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a mutation operation ('Set') but lacks critical details: whether this requires edit permissions, if changes are reversible, potential side effects (e.g., text overflow), or error conditions (e.g., invalid nodeId). This is inadequate for a mutation tool with zero annotation coverage.

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, efficient sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for a simple tool with two parameters.

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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects (permissions, reversibility), error handling, or return values. For a tool that modifies content in a design system, more context is needed for safe and effective 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 description coverage is 100%, with both parameters clearly documented in the schema. The description adds no additional meaning beyond what the schema provides (e.g., format of nodeId, text encoding, or constraints). Baseline 3 is appropriate when the schema does the heavy lifting.

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 ('Set') and target resource ('text content of an existing text node in Figma'), making the purpose immediately understandable. It distinguishes from siblings like 'create_text' (creation vs. modification) and 'set_multiple_text_contents' (single vs. multiple nodes), though the differentiation could be more explicit.

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 doesn't mention prerequisites (e.g., needing a valid text node ID), exclusions (e.g., not for non-text nodes), or comparisons to siblings like 'set_multiple_text_contents' for bulk updates or 'create_text' for new nodes.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 38 tool updatesv1.0.0
    • Changedclone_node5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node to clone",
        +  "type": "string"
        +}
      • addedInput schema / properties / x
        Added value: +{
        +  "description": "New X position for the clone",
        +  "type": "number"
        +}
      • addedInput schema / properties / y
        Added value: +{
        +  "description": "New Y position for the clone",
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId"
        +]
    • Changedcreate_component_instance5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / componentKey
        Added value: +{
        +  "description": "Key of the component to instantiate",
        +  "type": "string"
        +}
      • addedInput schema / properties / x
        Added value: +{
        +  "description": "X position",
        +  "type": "number"
        +}
      • addedInput schema / properties / y
        Added value: +{
        +  "description": "Y position",
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "componentKey",
        +  "x",
        +  "y"
        +]
    • Changedcreate_connections3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / connections
        Added value: +{
        +  "description": "Array of node connections to create",
        +  "items": {
        +    "properties": {
        +      "endNodeId": {
        +        "description": "ID of the ending node",
        +        "type": "string"
        +      },
        +      "startNodeId": {
        +        "description": "ID of the starting node",
        +        "type": "string"
        +      },
        +      "text": {
        +        "description": "Optional text to display on the connector",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "startNodeId",
        +      "endNodeId"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / required
        Added value: +[
        +  "connections"
        +]
    • Changedcreate_frame22 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / counterAxisAlignItems
        Added value: +{
        +  "description": "Counter axis alignment for auto-layout frame",
        +  "enum": [
        +    "MIN",
        +    "MAX",
        +    "CENTER",
        +    "BASELINE"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fillColor
        Added value: +{
        +  "description": "Fill color in RGBA format",
        +  "properties": {
        +    "a": {
        +      "description": "Alpha component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "b": {
        +      "description": "Blue component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "g": {
        +      "description": "Green component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "r": {
        +      "description": "Red component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "r",
        +    "g",
        +    "b"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / height
        Added value: +{
        +  "description": "Height of the frame",
        +  "type": "number"
        +}
      • addedInput schema / properties / itemSpacing
        Added value: +{
        +  "description": "Distance between children in auto-layout frame. Note: This value will be ignored if primaryAxisAlignItems is set to SPACE_BETWEEN.",
        +  "type": "number"
        +}
      • addedInput schema / properties / layoutMode
        Added value: +{
        +  "description": "Auto-layout mode for the frame",
        +  "enum": [
        +    "NONE",
        +    "HORIZONTAL",
        +    "VERTICAL"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / layoutSizingHorizontal
        Added value: +{
        +  "description": "Horizontal sizing mode for auto-layout frame",
        +  "enum": [
        +    "FIXED",
        +    "HUG",
        +    "FILL"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / layoutSizingVertical
        Added value: +{
        +  "description": "Vertical sizing mode for auto-layout frame",
        +  "enum": [
        +    "FIXED",
        +    "HUG",
        +    "FILL"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / layoutWrap
        Added value: +{
        +  "description": "Whether the auto-layout frame wraps its children",
        +  "enum": [
        +    "NO_WRAP",
        +    "WRAP"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Optional name for the frame",
        +  "type": "string"
        +}
      • addedInput schema / properties / paddingBottom
        Added value: +{
        +  "description": "Bottom padding for auto-layout frame",
        +  "type": "number"
        +}
      • addedInput schema / properties / paddingLeft
        Added value: +{
        +  "description": "Left padding for auto-layout frame",
        +  "type": "number"
        +}
      • addedInput schema / properties / paddingRight
        Added value: +{
        +  "description": "Right padding for auto-layout frame",
        +  "type": "number"
        +}
      • addedInput schema / properties / paddingTop
        Added value: +{
        +  "description": "Top padding for auto-layout frame",
        +  "type": "number"
        +}
      • addedInput schema / properties / parentId
        Added value: +{
        +  "description": "Optional parent node ID to append the frame to",
        +  "type": "string"
        +}
      • addedInput schema / properties / primaryAxisAlignItems
        Added value: +{
        +  "description": "Primary axis alignment for auto-layout frame. Note: When set to SPACE_BETWEEN, itemSpacing will be ignored as children will be evenly spaced.",
        +  "enum": [
        +    "MIN",
        +    "MAX",
        +    "CENTER",
        +    "SPACE_BETWEEN"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / strokeColor
        Added value: +{
        +  "description": "Stroke color in RGBA format",
        +  "properties": {
        +    "a": {
        +      "description": "Alpha component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "b": {
        +      "description": "Blue component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "g": {
        +      "description": "Green component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "r": {
        +      "description": "Red component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "r",
        +    "g",
        +    "b"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / strokeWeight
        Added value: +{
        +  "description": "Stroke weight",
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / width
        Added value: +{
        +  "description": "Width of the frame",
        +  "type": "number"
        +}
      • addedInput schema / properties / x
        Added value: +{
        +  "description": "X position",
        +  "type": "number"
        +}
      • addedInput schema / properties / y
        Added value: +{
        +  "description": "Y position",
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "x",
        +  "y",
        +  "width",
        +  "height"
        +]
    • Changedcreate_rectangle8 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / height
        Added value: +{
        +  "description": "Height of the rectangle",
        +  "type": "number"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Optional name for the rectangle",
        +  "type": "string"
        +}
      • addedInput schema / properties / parentId
        Added value: +{
        +  "description": "Optional parent node ID to append the rectangle to",
        +  "type": "string"
        +}
      • addedInput schema / properties / width
        Added value: +{
        +  "description": "Width of the rectangle",
        +  "type": "number"
        +}
      • addedInput schema / properties / x
        Added value: +{
        +  "description": "X position",
        +  "type": "number"
        +}
      • addedInput schema / properties / y
        Added value: +{
        +  "description": "Y position",
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "x",
        +  "y",
        +  "width",
        +  "height"
        +]
    • Changedcreate_text10 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / fontColor
        Added value: +{
        +  "description": "Font color in RGBA format",
        +  "properties": {
        +    "a": {
        +      "description": "Alpha component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "b": {
        +      "description": "Blue component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "g": {
        +      "description": "Green component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "r": {
        +      "description": "Red component (0-1)",
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "r",
        +    "g",
        +    "b"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / fontSize
        Added value: +{
        +  "description": "Font size (default: 14)",
        +  "type": "number"
        +}
      • addedInput schema / properties / fontWeight
        Added value: +{
        +  "description": "Font weight (e.g., 400 for Regular, 700 for Bold)",
        +  "type": "number"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Semantic layer name for the text node",
        +  "type": "string"
        +}
      • addedInput schema / properties / parentId
        Added value: +{
        +  "description": "Optional parent node ID to append the text to",
        +  "type": "string"
        +}
      • addedInput schema / properties / text
        Added value: +{
        +  "description": "Text content",
        +  "type": "string"
        +}
      • addedInput schema / properties / x
        Added value: +{
        +  "description": "X position",
        +  "type": "number"
        +}
      • addedInput schema / properties / y
        Added value: +{
        +  "description": "Y position",
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "x",
        +  "y",
        +  "text"
        +]
    • Changeddelete_multiple_nodes3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeIds
        Added value: +{
        +  "description": "Array of node IDs to delete",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeIds"
        +]
    • Changeddelete_node3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node to delete",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId"
        +]
    • Changedexport_node_as_image5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "Export format",
        +  "enum": [
        +    "PNG",
        +    "JPG",
        +    "SVG",
        +    "PDF"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node to export",
        +  "type": "string"
        +}
      • addedInput schema / properties / scale
        Added value: +{
        +  "description": "Export scale",
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId"
        +]
    • Changedget_annotations3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / includeCategories
        Added value: +{
        +  "default": true,
        +  "description": "Whether to include category information",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "Optional node ID to get annotations for specific node",
        +  "type": "string"
        +}
    • Changedget_document_info1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_instance_overrides2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "Optional ID of the component instance to get overrides from. If not provided, currently selected instance will be used.",
        +  "type": "string"
        +}
    • Changedget_local_components1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_node_info3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node to get information about",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId"
        +]
    • Changedget_nodes_info3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeIds
        Added value: +{
        +  "description": "Array of node IDs to get information about",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeIds"
        +]
    • Changedget_reactions3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeIds
        Added value: +{
        +  "description": "Array of node IDs to get reactions from",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeIds"
        +]
    • Changedget_selection1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_styles1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedjoin_channel2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / channel
        Added value: +{
        +  "default": "",
        +  "description": "The name of the channel to join",
        +  "type": "string"
        +}
    • Changedmove_node5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node to move",
        +  "type": "string"
        +}
      • addedInput schema / properties / x
        Added value: +{
        +  "description": "New X position",
        +  "type": "number"
        +}
      • addedInput schema / properties / y
        Added value: +{
        +  "description": "New Y position",
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "x",
        +  "y"
        +]
    • Changedread_my_design1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedresize_node5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / height
        Added value: +{
        +  "description": "New height",
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node to resize",
        +  "type": "string"
        +}
      • addedInput schema / properties / width
        Added value: +{
        +  "description": "New width",
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "width",
        +  "height"
        +]
    • Changedscan_nodes_by_types4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "ID of the node to scan",
        +  "type": "string"
        +}
      • addedInput schema / properties / types
        Added value: +{
        +  "description": "Array of node types to find in the child nodes (e.g. ['COMPONENT', 'FRAME'])",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "types"
        +]
    • Changedscan_text_nodes3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "ID of the node to scan",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId"
        +]
    • Changedset_annotation7 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / annotationId
        Added value: +{
        +  "description": "The ID of the annotation to update (if updating existing annotation)",
        +  "type": "string"
        +}
      • addedInput schema / properties / categoryId
        Added value: +{
        +  "description": "The ID of the annotation category",
        +  "type": "string"
        +}
      • addedInput schema / properties / labelMarkdown
        Added value: +{
        +  "description": "The annotation text in markdown format",
        +  "type": "string"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node to annotate",
        +  "type": "string"
        +}
      • addedInput schema / properties / properties
        Added value: +{
        +  "description": "Additional properties for the annotation",
        +  "items": {
        +    "properties": {
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "labelMarkdown"
        +]
    • Changedset_axis_align5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / counterAxisAlignItems
        Added value: +{
        +  "description": "Counter axis alignment (MIN/MAX = top/bottom in horizontal, left/right in vertical)",
        +  "enum": [
        +    "MIN",
        +    "MAX",
        +    "CENTER",
        +    "BASELINE"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the frame to modify",
        +  "type": "string"
        +}
      • addedInput schema / properties / primaryAxisAlignItems
        Added value: +{
        +  "description": "Primary axis alignment (MIN/MAX = left/right in horizontal, top/bottom in vertical). Note: When set to SPACE_BETWEEN, itemSpacing will be ignored as children will be evenly spaced.",
        +  "enum": [
        +    "MIN",
        +    "MAX",
        +    "CENTER",
        +    "SPACE_BETWEEN"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId"
        +]
    • Changedset_corner_radius5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / corners
        Added value: +{
        +  "description": "Optional array of 4 booleans to specify which corners to round [topLeft, topRight, bottomRight, bottomLeft]",
        +  "items": {
        +    "type": "boolean"
        +  },
        +  "maxItems": 4,
        +  "minItems": 4,
        +  "type": "array"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node to modify",
        +  "type": "string"
        +}
      • addedInput schema / properties / radius
        Added value: +{
        +  "description": "Corner radius value",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "radius"
        +]
    • Changedset_default_connector2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / connectorId
        Added value: +{
        +  "description": "The ID of the connector node to set as default",
        +  "type": "string"
        +}
    • Changedset_fill_color7 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / a
        Added value: +{
        +  "description": "Alpha component (0-1)",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / b
        Added value: +{
        +  "description": "Blue component (0-1)",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / g
        Added value: +{
        +  "description": "Green component (0-1)",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node to modify",
        +  "type": "string"
        +}
      • addedInput schema / properties / r
        Added value: +{
        +  "description": "Red component (0-1)",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "r",
        +  "g",
        +  "b"
        +]
    • Changedset_instance_overrides4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / sourceInstanceId
        Added value: +{
        +  "description": "ID of the source component instance",
        +  "type": "string"
        +}
      • addedInput schema / properties / targetNodeIds
        Added value: +{
        +  "description": "Array of target instance IDs. Currently selected instances will be used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / required
        Added value: +[
        +  "sourceInstanceId",
        +  "targetNodeIds"
        +]
    • Changedset_item_spacing4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / itemSpacing
        Added value: +{
        +  "description": "Distance between children. Note: This value will be ignored if primaryAxisAlignItems is set to SPACE_BETWEEN.",
        +  "type": "number"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the frame to modify",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "itemSpacing"
        +]
    • Changedset_layout_mode5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / layoutMode
        Added value: +{
        +  "description": "Layout mode for the frame",
        +  "enum": [
        +    "NONE",
        +    "HORIZONTAL",
        +    "VERTICAL"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / layoutWrap
        Added value: +{
        +  "description": "Whether the auto-layout frame wraps its children",
        +  "enum": [
        +    "NO_WRAP",
        +    "WRAP"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the frame to modify",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "layoutMode"
        +]
    • Changedset_layout_sizing5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / layoutSizingHorizontal
        Added value: +{
        +  "description": "Horizontal sizing mode (HUG for frames/text only, FILL for auto-layout children only)",
        +  "enum": [
        +    "FIXED",
        +    "HUG",
        +    "FILL"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / layoutSizingVertical
        Added value: +{
        +  "description": "Vertical sizing mode (HUG for frames/text only, FILL for auto-layout children only)",
        +  "enum": [
        +    "FIXED",
        +    "HUG",
        +    "FILL"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the frame to modify",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId"
        +]
    • Changedset_multiple_annotations4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / annotations
        Added value: +{
        +  "description": "Array of annotations to apply",
        +  "items": {
        +    "properties": {
        +      "annotationId": {
        +        "description": "The ID of the annotation to update (if updating existing annotation)",
        +        "type": "string"
        +      },
        +      "categoryId": {
        +        "description": "The ID of the annotation category",
        +        "type": "string"
        +      },
        +      "labelMarkdown": {
        +        "description": "The annotation text in markdown format",
        +        "type": "string"
        +      },
        +      "nodeId": {
        +        "description": "The ID of the node to annotate",
        +        "type": "string"
        +      },
        +      "properties": {
        +        "description": "Additional properties for the annotation",
        +        "items": {
        +          "properties": {
        +            "type": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "type"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "nodeId",
        +      "labelMarkdown"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node containing the elements to annotate",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "annotations"
        +]
    • Changedset_multiple_text_contents4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node containing the text nodes to replace",
        +  "type": "string"
        +}
      • addedInput schema / properties / text
        Added value: +{
        +  "description": "Array of text node IDs and their replacement texts",
        +  "items": {
        +    "properties": {
        +      "nodeId": {
        +        "description": "The ID of the text node",
        +        "type": "string"
        +      },
        +      "text": {
        +        "description": "The replacement text",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "nodeId",
        +      "text"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "text"
        +]
    • Changedset_padding7 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the frame to modify",
        +  "type": "string"
        +}
      • addedInput schema / properties / paddingBottom
        Added value: +{
        +  "description": "Bottom padding value",
        +  "type": "number"
        +}
      • addedInput schema / properties / paddingLeft
        Added value: +{
        +  "description": "Left padding value",
        +  "type": "number"
        +}
      • addedInput schema / properties / paddingRight
        Added value: +{
        +  "description": "Right padding value",
        +  "type": "number"
        +}
      • addedInput schema / properties / paddingTop
        Added value: +{
        +  "description": "Top padding value",
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId"
        +]
    • Changedset_stroke_color8 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / a
        Added value: +{
        +  "description": "Alpha component (0-1)",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / b
        Added value: +{
        +  "description": "Blue component (0-1)",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / g
        Added value: +{
        +  "description": "Green component (0-1)",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the node to modify",
        +  "type": "string"
        +}
      • addedInput schema / properties / r
        Added value: +{
        +  "description": "Red component (0-1)",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / weight
        Added value: +{
        +  "description": "Stroke weight",
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "r",
        +  "g",
        +  "b"
        +]
    • Changedset_text_content4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / nodeId
        Added value: +{
        +  "description": "The ID of the text node to modify",
        +  "type": "string"
        +}
      • addedInput schema / properties / text
        Added value: +{
        +  "description": "New text content",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "nodeId",
        +  "text"
        +]
  2. 38 tool updates
    • First observedclone_node
    • First observedcreate_component_instance
    • First observedcreate_connections
    • First observedcreate_frame
    • First observedcreate_rectangle
    • First observedcreate_text
    • First observeddelete_multiple_nodes
    • First observeddelete_node
    • First observedexport_node_as_image
    • First observedget_annotations
    • First observedget_document_info
    • First observedget_instance_overrides
    • First observedget_local_components
    • First observedget_node_info
    • First observedget_nodes_info
    • First observedget_reactions
    • First observedget_selection
    • First observedget_styles
    • First observedjoin_channel
    • First observedmove_node
    • First observedread_my_design
    • First observedresize_node
    • First observedscan_nodes_by_types
    • First observedscan_text_nodes
    • First observedset_annotation
    • First observedset_axis_align
    • First observedset_corner_radius
    • First observedset_default_connector
    • First observedset_fill_color
    • First observedset_instance_overrides
    • First observedset_item_spacing
    • First observedset_layout_mode
    • First observedset_layout_sizing
    • First observedset_multiple_annotations
    • First observedset_multiple_text_contents
    • First observedset_padding
    • First observedset_stroke_color
    • First observedset_text_content

TDQS

B3.2/5.0
Disambiguation3/5

Most tools have distinct purposes, but there is some overlap and ambiguity. For example, 'get_selection' and 'read_my_design' both retrieve selection information, and 'get_node_info' vs 'get_nodes_info' differ only in singular/plural. However, descriptions clarify differences, and tools generally target specific actions like creation, deletion, or styling.

Naming Consistency4/5

Naming is mostly consistent with a verb_noun pattern (e.g., create_frame, delete_node, set_fill_color), but there are minor deviations like 'read_my_design' and 'join_channel' that break the pattern. Overall, the naming is predictable and readable, with only a few tools not following the dominant convention.

Tool Count3/5

With 38 tools, the count is borderline high for a Figma integration, feeling heavy and potentially overwhelming. While Figma is a complex domain, many tools could be consolidated (e.g., multiple 'set_' tools for styling). The scope is broad, but the number risks confusion and inefficiency for agents.

Completeness5/5

The tool set provides comprehensive coverage for interacting with Figma, including CRUD operations (create, get, update, delete), styling, layout management, annotations, and prototyping. There are no obvious gaps; tools cover nodes, components, text, images, connections, and document info, enabling full agent workflows without dead ends.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server integration that enables Cursor AI to communicate with Figma, allowing users to read designs and modify them programmatically through natural language commands.
    19
    525
    6,994
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Enables Cursor AI to interact with Figma designs, allowing users to read design information and programmatically modify elements through natural language commands.
    40
    525
    3
    -

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/andreycretsu/cursor-talk-to-figma-mcp-main'

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