Skip to main content
Glama

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: 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. 'Clone an existing node' implies a mutation operation but doesn't specify whether this requires edit permissions, what happens to the original node, or if there are rate limits. It lacks details about the cloning behavior (e.g., does it copy styles, children, or overrides?).

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?

For a mutation tool with no annotations and no output schema, the description is inadequate. It doesn't explain what the clone operation returns, what happens on failure, or important behavioral aspects like whether the clone inherits all properties. Given the complexity of node operations in Figma, 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 three parameters (nodeId, x, y) adequately. The description doesn't add any additional meaning beyond what's in the schema, such as explaining coordinate systems or node ID formats, but it doesn't need to given the 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 target resource ('an existing node in Figma'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'create_frame' or 'create_rectangle' that also create new nodes, leaving some ambiguity about when cloning is preferable to creation.

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 'create_frame' or 'create_rectangle', nor does it mention prerequisites such as needing an existing node ID. There's no context about appropriate use cases or limitations.

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?

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Create' implies a write/mutation operation, the description doesn't address important behavioral aspects: whether this requires specific permissions, what happens if the componentKey doesn't exist, whether the instance inherits properties from the component, or what the tool returns upon success/failure.

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 communicates the essential purpose without any wasted words. It's appropriately sized for a tool with three straightforward parameters and gets directly to the point.

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 constitutes success/failure, what the tool returns, error conditions, or how this operation fits within the broader Figma context. The agent would need to guess about important behavioral aspects.

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 semantics beyond what's already in the schema (componentKey, x, y positions). This meets the baseline expectation when schema coverage is complete.

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 ('component in Figma'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'clone_node' or 'create_frame', which would require more specific context about what makes component instances unique compared to other creation operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'create_frame', 'create_rectangle', and 'clone_node' available, there's no indication of when component instantiation is preferred over other creation methods or what prerequisites might exist for using this tool.

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?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It mentions 'default connector style' but doesn't explain what this means, whether connections are bidirectional, if they can be edited/deleted later, or what happens on failure. The description doesn't contradict annotations (none exist), but provides inadequate transparency for a creation 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 and front-loaded, with every element contributing to understanding 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 creation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'connections' represent in this context, what happens after creation, error conditions, or return values. The mention of 'default connector style' is vague without elaboration, leaving significant gaps in understanding the tool's behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents the 'connections' parameter and its nested properties. The description adds no additional parameter information beyond what's in the schema, maintaining the baseline score of 3 for adequate coverage through structured data 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 connections') and the resource ('between nodes'), specifying the use of 'default connector style'. It distinguishes from siblings like 'set_default_connector' by focusing on creation rather than configuration, but doesn't explicitly differentiate from all siblings like 'clone_node' or 'move_node'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description mentions 'default connector style' but doesn't explain when to use this versus other styling methods or sibling tools like 'set_default_connector'. There's no mention of prerequisites, constraints, or typical use cases.

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?

With no annotations provided, the description carries full burden for behavioral disclosure. 'Create a new frame' implies a write/mutation operation, but the description doesn't mention permissions needed, whether this modifies existing documents, rate limits, or what happens on success/failure. For a complex creation tool with 20 parameters, this is a significant gap.

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 with zero wasted words. It's appropriately sized for a tool where the schema handles most of the documentation burden, and it front-loads the essential purpose without unnecessary elaboration.

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 complex creation tool with 20 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what a frame is in Figma context, what happens after creation, or how this tool fits into design workflows. The agent would struggle to use this effectively despite the detailed 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?

Schema description coverage is 100%, so the schema already documents all 20 parameters thoroughly. The description adds no parameter information beyond what's in the schema, which meets the baseline expectation when schema coverage is high. However, it doesn't provide any higher-level guidance about parameter relationships or typical usage patterns.

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 tool from other creation tools like create_rectangle or create_text, which would require mentioning what distinguishes a frame from other 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 like create_rectangle or create_component_instance. There's no mention of prerequisites, context, or typical use cases for frames in Figma workflows.

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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Create a new rectangle' which implies a write operation, but doesn't cover permissions, whether it's destructive to existing elements, rate limits, or what happens on success/failure. 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, clear sentence with no wasted words, making it highly concise and front-loaded. It efficiently communicates the core purpose without unnecessary elaboration.

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 lacks details on behavioral traits, error handling, or return values, which are crucial for an agent to use it correctly in a design context with sibling tools.

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 (x, y, width, height, name, parentId). The description adds no additional meaning beyond what's in the schema, such as units for coordinates or default behaviors for optional fields, meeting the baseline for high 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') and resource ('new rectangle in Figma'), making the purpose evident. However, it doesn't differentiate from sibling tools like 'create_frame' or 'create_component_instance', which also create visual elements in Figma, so it's not fully specific.

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 'create_frame' or 'create_component_instance', nor does it mention prerequisites such as needing an active Figma document or selection context. It's a basic statement with no usage context.

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

create_textC

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

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' implies a write operation, but the description doesn't mention permission requirements, whether the creation is reversible, what happens if parentId is invalid, or what the tool returns. 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 exactly what the tool does without any wasted words. It's appropriately sized for a straightforward creation tool and gets directly to the point.

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 creation/mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't address what happens after creation (does it return the new node ID?), error conditions, or integration with the broader Figma context. The agent would need to guess about the tool's behavior and results.

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 mentions creating a 'text element' which implies parameters like text content and styling, but doesn't add specific meaning beyond what the 100% schema coverage already provides. The schema thoroughly documents all 8 parameters including their purposes, formats, and defaults, so the description's minimal contribution 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 ('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 what makes text elements 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. There's no mention of prerequisites (like needing an active Figma document), comparison to similar tools (create_frame, create_rectangle), or typical use cases for text elements versus other element types.

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 the tool performs deletion (a destructive operation) but doesn't mention critical details like whether deletions are permanent, require specific permissions, have rate limits, or what happens on partial failures. This leaves significant gaps 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 any fluff or redundancy. It is front-loaded and appropriately sized for its function, 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 as a destructive batch operation with no annotations and no output schema, the description is insufficient. It lacks details on behavior, error handling, permissions, and output expectations, which are crucial for safe and effective use in a Figma 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 schema description coverage is 100%, with the parameter 'nodeIds' clearly documented in the schema as an array of node IDs to delete. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, so it 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 ('Delete multiple nodes') and target resource ('from Figma'), which is specific and unambiguous. However, it doesn't distinguish this tool from its sibling 'delete_node', which appears to handle single deletions, so it misses full 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' for single deletions or other mutation tools. It lacks context about prerequisites, permissions, or scenarios where batch deletion is preferred, offering minimal usage direction.

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 for behavioral disclosure. 'Delete' implies a destructive mutation, but it doesn't specify whether this is permanent, reversible, requires specific permissions, or has side effects on connected nodes. This is inadequate 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, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it immediately scannable and perfectly 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?

For a destructive mutation tool with no annotations and no output schema, the description is insufficient. It should address behavioral aspects like permanence, permissions, or error conditions, but provides only basic purpose without operational 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% with the single parameter 'nodeId' well-documented in the schema. The description adds no additional parameter context beyond what the schema provides, so it 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 'Delete a node from Figma' clearly states the action (delete) and resource (node in Figma), making the purpose immediately understandable. However, it doesn't differentiate from sibling 'delete_multiple_nodes' which handles multiple deletions, so it's not a perfect 5.

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 'delete_multiple_nodes' for bulk operations or other deletion-related tools. The description offers no context about prerequisites, permissions needed, or typical use cases.

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?

No annotations are provided, so the description carries the full burden. It mentions 'Export' but doesn't disclose behavioral traits such as whether this requires write permissions, if it's a read-only operation, what happens to the exported file (e.g., saved location, format limitations), or potential side effects like rate limits. This leaves significant gaps for an agent to understand the tool's behavior.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core action ('Export a node as an image') and specifies the source ('from Figma'). There's no wasted verbiage, making it highly concise and well-structured.

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 an export operation (likely involving file generation or data output), no annotations, and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., image data, file path, success status), which is critical for an agent to use it effectively in a workflow with other tools.

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', 'format' (including enum values), and 'scale'. The description adds no additional parameter semantics beyond what's in the schema, so it meets the baseline of 3 for adequate coverage without 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 verb ('Export') and resource ('a node as an image from Figma'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from potential sibling tools like 'get_node_info' or 'scan_nodes_by_types', which might also involve node operations but for different purposes.

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 'get_node_info' (for retrieving node details) or 'create_rectangle' (for creating nodes), there's no indication of context, prerequisites, or exclusions for exporting images.

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?

With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Get all annotations' implies a read operation, it doesn't specify what format the annotations are returned in, whether there are pagination limits, authentication requirements, or error conditions. The description is minimal and lacks important 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.

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 with no wasted words. It's appropriately sized for a simple retrieval tool, though it could potentially benefit from slightly more context about what 'annotations' means in this specific system.

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 and no output schema, the description is insufficiently complete. It doesn't explain what 'annotations' are in this context, what format they're returned in, or any behavioral characteristics. Given the complexity of working with document annotations and the lack of structured metadata, the description should provide more operational 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?

With 100% schema description coverage, the input schema already documents both parameters thoroughly. The description mentions 'specific node' which aligns with the nodeId parameter, but adds no additional semantic context beyond what the schema provides. The baseline score of 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 ('Get all annotations') and target resource ('in the current document or specific node'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'set_annotation' or 'set_multiple_annotations' beyond the obvious read vs write 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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to prefer this over other annotation-related tools, nor does it provide context about prerequisites or typical use cases. 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_document_infoB

Get detailed information about 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. It states the tool retrieves information, implying it's read-only, but doesn't disclose behavioral traits like whether it requires authentication, rate limits, or what 'detailed information' includes (e.g., metadata, structure). This leaves gaps for a tool in a Figma context where operations might have 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, clear sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core action and resource, making it efficient and easy to parse.

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 no parameters, no annotations, and no output schema, the description is minimal but covers the basic purpose. However, for a tool in a complex environment like Figma, it lacks details on what 'detailed information' entails (e.g., document properties, version info) and how it differs from sibling tools, making it adequate but with clear gaps.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here. A baseline of 4 is applied as it compensates adequately for the lack of parameters by focusing on the tool's purpose.

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 ('detailed information about the current Figma document'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_node_info' or 'get_nodes_info', which also retrieve information but about specific nodes rather than the entire document.

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 (e.g., use this for overall document metadata vs. node-specific details) or prerequisites, 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.

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.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. It describes the tool's function and potential application ('applied to other instances'), but lacks critical behavioral details: whether this is a read-only operation, what permissions are needed, the format of returned overrides, or any rate limits. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness4/5

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

The description is concise and front-loaded, with two sentences that directly state the tool's purpose and utility. Every sentence adds value: the first defines the action, and the second explains the use case. There's no wasted text, though it could be slightly more structured with bullet points or examples for clarity.

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 (1 parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and application but lacks details on return values, error handling, or integration with siblings like 'set_instance_overrides.' Without annotations or output schema, the description should do more to compensate, but it meets a bare minimum for 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?

Schema description coverage is 100%, with the single parameter 'nodeId' well-documented in the schema. The description doesn't add any parameter-specific information 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 need to given the schema's completeness.

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 all override properties from a selected component instance.' It specifies the verb ('Get') and resource ('override properties'), and distinguishes it from siblings like 'get_node_info' or 'get_styles' by focusing on component instance 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 by stating 'These overrides can be applied to other instances,' suggesting a workflow context. It doesn't provide explicit when-to-use guidance, alternatives, or exclusions compared to siblings like 'get_node_info' or 'get_styles.' The input schema hints at default behavior (using currently selected instance if no nodeId provided), but the description itself lacks clear usage directives.

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.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 'Get all local components', implying a read-only operation, but doesn't clarify aspects like whether it returns a list or structured data, if there are rate limits, or if it requires authentication. For a 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, clear sentence that front-loads the essential information: 'Get all local components from the Figma document'. It is appropriately sized with zero waste, making it highly efficient and easy to parse.

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 minimal but adequate for a simple retrieval operation. However, it lacks details on return format (e.g., list structure, data types) and behavioral nuances, which could be important for an AI agent. It meets the minimum viable threshold but has clear gaps 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 the input schema has 100% description coverage (though empty). The description doesn't need to add parameter details, so it naturally compensates by focusing on the tool's purpose. A baseline of 4 is appropriate as there are no parameters to document, and the description efficiently conveys the action.

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 'all local components from the Figma document', which is specific and unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_document_info' or 'get_node_info', which might also retrieve document-related data, so it falls short of 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. It doesn't mention prerequisites, context, or exclusions, such as whether it requires a specific document state or differs from other 'get' 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 of behavioral disclosure. While 'Get detailed information' implies a read-only operation, it doesn't specify what 'detailed information' includes, whether authentication is required, rate limits, error conditions, or response format. This leaves significant behavioral gaps for a 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 immediately conveys the core purpose without any wasted words. It's appropriately sized for a simple retrieval tool and front-loads 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 tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what 'detailed information' includes, the response format, error handling, or how this differs from similar sibling tools. Given the context of multiple related Figma tools, 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?

With 100% schema description coverage, the input schema already fully documents the single 'nodeId' parameter. The description doesn't add any additional semantic context about what constitutes a valid node ID, where to find node IDs, or examples of node types. 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 ('Get detailed information') and resource ('about a specific node in Figma'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'get_nodes_info' (plural) which appears to serve a similar purpose, 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?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_nodes_info' (plural) and 'get_document_info' available, there's no indication whether this is for single nodes, what context it applies in, or any prerequisites for usage.

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

get_nodes_infoB

Get detailed information about multiple nodes in Figma

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYesArray of node IDs to get information about

TDQS

B3.2/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 what the tool does without behavioral details. It doesn't disclose whether this is a read-only operation, what format the information returns, potential 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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded with 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 tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'detailed information' includes, the return format, or behavioral aspects like whether it's a safe read operation. Given the complexity of Figma nodes and the lack of structured metadata, 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 schema description coverage is 100%, with the single parameter 'nodeIds' clearly documented as 'Array of node IDs to get information about'. The description doesn't add any additional semantic context beyond what the schema provides, such as format examples or constraints on the number of nodes.

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 multiple nodes in Figma'), making the purpose immediately understandable. It distinguishes from the sibling 'get_node_info' by specifying 'multiple nodes' rather than a single node, though it doesn't explicitly name this 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 detailed information about multiple nodes is needed, but doesn't provide explicit guidance on when to use this versus alternatives like 'get_node_info' (for single nodes) or 'get_document_info' (for broader document context). No exclusions or prerequisites are mentioned.

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.2/5.0
Behavior4/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 adds valuable context by specifying that the output must be processed immediately for use with another tool ('create_connections'), which is a critical behavioral trait not covered by any structured fields. However, it doesn't mention potential limitations like rate limits or authentication needs.

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 extremely concise and front-loaded, consisting of just two sentences that efficiently convey the tool's purpose and critical usage instructions. Every sentence earns its place by providing essential information without any waste or redundancy.

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

Completeness4/5

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

Given the complexity (a read operation with no annotations and no output schema), the description is reasonably complete. It explains the purpose and critical post-processing step, but it doesn't detail the output format or potential errors, which could be helpful for an AI agent. However, the strong usage guidelines partially compensate for this gap.

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

Parameters3/5

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

The input schema has 100% description coverage, with the parameter 'nodeIds' clearly documented as an array of node IDs. The description doesn't add any additional meaning beyond this, such as explaining what node IDs are or how to obtain them, so it meets the baseline for high schema coverage without 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 verb ('Get') and resource ('Figma Prototyping Reactions from multiple nodes'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_annotations' or 'get_node_info', which also retrieve information but for different data types, so it misses full sibling distinction.

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 guidance on when to use this tool by stating that the output MUST be processed using 'reaction_to_connector_strategy' prompt to generate parameters for the 'create_connections' tool. This clearly defines the intended workflow and alternative tools involved, offering strong contextual direction.

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.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 the tool 'Get information' but does not specify what type of information is returned, whether it requires an active selection, or any error conditions. This leaves significant gaps in understanding the tool's behavior beyond a basic read 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 directly states the tool's purpose without any wasted words. It is front-loaded and appropriately sized for a simple tool with no parameters, making it highly concise and well-structured.

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 output schema, the description is incomplete for a tool that retrieves information. It does not explain what information is returned, the format, or any constraints (e.g., requires an active selection), leaving the agent with insufficient context to use the tool effectively beyond its basic purpose.

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 does not mention parameters, aligning with the schema, and thus meets the baseline for this dimension without requiring additional compensation.

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 'information about the current selection in Figma', making the purpose specific and understandable. However, it does not explicitly distinguish this tool from siblings like 'get_node_info' or 'get_nodes_info', which might also retrieve selection-related data, leaving some ambiguity in 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. With siblings like 'get_node_info' and 'get_nodes_info' that might overlap in functionality, there is no indication of context, prerequisites, 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.

get_stylesB

Get all styles from 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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states a read operation ('Get') but lacks details on permissions, rate limits, response format, or whether it returns all styles at once or paginated. This is inadequate for a 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 without unnecessary words. It earns its place by clearly stating what the tool does, making it highly concise and well-structured.

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

Completeness2/5

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

Given the tool's simplicity (0 parameters, no output schema), the description is minimal but incomplete. It lacks behavioral context (e.g., response format, error handling) and usage guidelines, which are crucial for an agent to invoke it correctly. With no annotations or output schema, more detail is needed.

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 compensate for any gaps, making it sufficient in this dimension. A baseline of 4 is appropriate as no parameter information is required.

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. However, it doesn't explicitly differentiate from sibling tools like 'get_annotations' or 'get_document_info', which also retrieve document metadata but focus on different resources.

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 an open document), exclusions, or compare it to siblings like 'get_local_components' or 'get_document_info', leaving the agent to infer usage 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?

With no annotations, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits such as required permissions, whether joining is reversible, rate limits, or what happens on success/failure. 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 directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, earning its place with zero waste.

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, no output schema, and incomplete behavioral disclosure, the description is insufficient. It lacks details on outcomes, error handling, or integration with sibling tools, making it incomplete for effective 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?

Schema description coverage is 100%, so the schema already documents the 'channel' parameter. The description adds no additional meaning beyond implying the channel is for Figma communication, which is minimal value. Baseline 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 resource ('a specific channel'), specifying it's for communication with Figma. However, it doesn't differentiate from sibling tools like 'create_connections' or 'set_default_connector' that might also involve channel/connection operations, keeping it from 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 explicit guidance on when to use this tool versus alternatives is provided. The description implies usage for channel-based communication but doesn't specify prerequisites, exclusions, or compare to siblings like 'create_connections', leaving the agent with minimal context for selection.

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?

With no annotations provided, the description carries full burden but only states the basic action without behavioral details. It doesn't disclose whether this requires edit permissions, if it's destructive (likely yes, but unstated), what happens on failure, or any rate limits. 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 with zero waste. It's front-loaded with the core action and resource, making it immediately understandable without unnecessary elaboration.

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 'move' entails behaviorally (e.g., if it affects child nodes, coordinate systems, or returns success/failure), leaving significant gaps for an AI agent to understand tool behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents parameters (nodeId, x, y). The description adds no additional meaning beyond implying positional movement, which is already clear from parameter names. Baseline 3 is appropriate as 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 ('move') and resource ('a node') with the specific context 'in Figma'. It distinguishes from siblings like 'resize_node' by focusing on positional changes rather than dimensional ones, though it doesn't explicitly contrast with all siblings like 'clone_node' or 'delete_node'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., needing node permissions), exclusions (e.g., cannot move locked nodes), or when to choose other tools like 'resize_node' for size changes or 'clone_node' for duplication with movement.

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.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 full burden. It states it 'gets' information, implying a read-only operation, but doesn't disclose behavioral traits like permissions needed, rate limits, or what 'detailed information' entails. This is inadequate for a 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 purpose without wasted words. Every part contributes to understanding what the tool does, making it appropriately sized for its 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?

Given no annotations and no output schema, the description is incomplete. It doesn't explain what 'detailed information' includes, the return format, or any constraints, leaving significant gaps for an agent to use the tool effectively in a context with many sibling tools.

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 discuss parameters, earning a baseline score of 4 for not adding unnecessary information.

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 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 IDs, though not explicitly named.

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' or 'get_node_info'. It implies usage when detailed node details are needed but lacks explicit context, prerequisites, or exclusions.

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

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?

With no annotations provided, the description carries full burden for behavioral disclosure. 'Resize' implies a mutation operation, but the description doesn't state whether this requires edit permissions, whether it's destructive to existing content, what happens with constraints or auto-layout, or what the response looks like. 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 with zero waste. It's appropriately sized for a simple tool and front-loads the core purpose immediately. Every word earns its place without redundancy or unnecessary elaboration.

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, no output schema, and 3 required parameters, the description is incomplete. It doesn't address behavioral aspects like permissions, constraints, or response format. The 100% schema coverage helps with parameters, but overall context for safe and effective use 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%, with all parameters (nodeId, width, height) well-documented in the schema. The description adds no additional parameter semantics beyond what's already in the structured schema. Baseline 3 is appropriate when the schema does the heavy lifting for parameter documentation.

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's specific but doesn't distinguish from sibling tools like 'move_node' or 'set_layout_sizing' which might also affect node dimensions. The purpose is unambiguous 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 permissions), when not to use it (e.g., for text nodes vs. shapes), or comparison to similar tools like 'set_layout_sizing' or 'move_node' that might affect size indirectly. Usage is implied but not articulated.

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

scan_nodes_by_typesB

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

B3.2/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 disclosure. It states what the tool does but doesn't describe what 'scan' entails operationally (e.g., depth of search, return format, pagination, error conditions). For a tool with no annotation coverage, this leaves significant gaps in understanding how it behaves.

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. Every word earns its place with no redundancy or unnecessary elaboration, making it highly concise while still being informative.

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 tool that performs a filtered search operation, the description is insufficiently complete. It doesn't explain what the tool returns (e.g., list of node IDs, full node info), search depth, or error handling. For a 2-parameter tool with no structured output documentation, this leaves too many operational questions unanswered.

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. The description adds no additional parameter semantics beyond what's in the schema (e.g., no examples beyond the schema's 'e.g. ['COMPONENT', 'FRAME']', no constraints on valid types). Baseline 3 is appropriate when the schema does all the parameter documentation work.

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 ('selected Figma node'), with the specific filtering criteria ('with specific types'). It distinguishes from siblings like 'scan_text_nodes' by mentioning general node types rather than just text nodes. However, it doesn't explicitly contrast with other scanning/filtering tools beyond the sibling list context.

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 you need to find child nodes of certain types within a parent node, but provides no explicit guidance on when to use this versus alternatives like 'get_nodes_info' or 'scan_text_nodes'. No exclusions or prerequisites are mentioned, leaving usage context somewhat implicit.

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 the full burden of behavioral disclosure. It states the action ('scan') but doesn't explain what 'scan' entails—whether it returns text content, metadata, positions, or other details. It also omits information about permissions, rate limits, or side effects, leaving the agent uncertain about the tool's behavior.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, 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 lack of annotations and output schema, the description is incomplete. It doesn't specify what the scan returns (e.g., text content, node IDs, positions), which is critical for a tool with no structured output documentation. This gap makes it inadequate for an agent to understand the full context of 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 parameter semantics beyond implying that 'selected Figma node' corresponds to 'nodeId', which is already covered by the schema. 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 ('scan') and target ('all text nodes in the selected Figma node'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'scan_nodes_by_types' or 'get_node_info', which could have overlapping functionality for text-related operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

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), exclusions, or comparisons to similar tools like 'scan_nodes_by_types' or 'get_node_info' that might retrieve text information differently.

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 the full burden of behavioral disclosure. While 'create or update' implies mutation, it doesn't specify whether this requires specific permissions, if updates are idempotent, what happens on conflicts, or what the response looks like. For a mutation tool with zero annotation coverage, this leaves critical behavioral traits undocumented.

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 ('create or update') and resource ('an annotation'), making it immediately scannable. Every word earns its place.

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 response format. While the schema covers parameters well, the overall context for safe and effective use is lacking, especially compared to sibling tools with more descriptive names (e.g., 'get_annotations' clearly indicates read-only).

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 beyond what's in the schema (e.g., it doesn't explain the relationship between nodeId and annotationId, or what 'properties' might contain). The baseline of 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 ('create or update') and resource ('an annotation'), making the purpose immediately understandable. It distinguishes this from sibling tools like 'get_annotations' (read-only) and 'set_multiple_annotations' (batch operation). However, it doesn't specify what an annotation is in this context (e.g., a note attached to a design node), leaving some ambiguity about the resource.

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 to choose 'set_annotation' over 'set_multiple_annotations' for batch operations, or clarify if it's for single annotations only. There's also no information about prerequisites (e.g., needing an existing node) or error conditions.

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

set_axis_alignC

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

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 modifies an auto-layout frame, implying a mutation, but does not disclose any behavioral traits such as permissions required, whether changes are reversible, error conditions (e.g., invalid nodeId), or side effects. The description is minimal and lacks critical context for safe invocation.

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 directly states the tool's purpose without unnecessary words. It is front-loaded with the core action and target, making it easy to parse. Every part of the description earns its place by specifying the exact alignment properties and context (auto-layout frame in Figma).

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 mutation tool with no annotations and no output schema), the description is incomplete. It lacks information on behavioral aspects like error handling, permissions, or what the tool returns. While the schema covers parameters well, the description does not compensate for the absence of annotations or output schema, leaving gaps in understanding the tool's full 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%, with detailed descriptions for each parameter, including enum values and their meanings (e.g., MIN/MAX mappings). The description does not add any additional parameter semantics beyond what the schema provides. According to the rules, with high schema coverage (>80%), the baseline score is 3, as the schema adequately documents parameters.

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 ('primary and counter axis alignment for an auto-layout frame in Figma'), making the purpose evident. It specifies the resource type (auto-layout frame) and the exact properties being modified. However, it does not explicitly differentiate from sibling tools like 'set_layout_mode' or 'set_item_spacing', which also configure auto-layout frames.

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 prerequisites (e.g., the node must be an auto-layout frame), exclusions, or comparisons to sibling tools like 'set_layout_mode' or 'set_item_spacing'. Usage is implied only by the tool's name and description, with no explicit context.

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

set_corner_radiusC

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

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 the tool modifies a node but doesn't cover critical aspects like whether this requires edit permissions, if changes are reversible, potential side effects, or error conditions. This is inadequate 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 function without any fluff. 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?

For a mutation tool with no annotations and no output schema, the description is insufficient. It lacks behavioral context, usage prerequisites, and details on what happens upon execution. Given the complexity of modifying design elements, more completeness 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 parameters are well-documented in the schema. The description adds no additional semantic context beyond implying the tool applies to Figma nodes, which is already clear from the schema. 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 verb ('Set') and resource ('corner radius of a node in Figma'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'set_fill_color' or 'set_stroke_color' beyond the specific property being modified, which keeps it from 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. It doesn't mention prerequisites (e.g., needing a valid node ID), exclusions, or related tools for similar modifications, leaving usage context entirely implicit.

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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a mutation ('Set') but does not specify permissions, side effects, or response behavior. This is inadequate for a tool that likely changes system state without any safety or 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 waste, clearly front-loading the core action. It is appropriately sized for a simple tool, making it highly concise and well-structured.

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. It fails to address key aspects like what 'default connector' means, potential impacts, or return values, which are crucial for a mutation tool in a design context with many siblings.

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 input schema fully documents the 'connectorId' parameter. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, meeting the baseline for high 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 verb 'Set' and the resource 'a copied connector node as the default connector', making the purpose specific and understandable. However, it does not explicitly differentiate from sibling tools like 'create_connections' or 'move_node', which might involve connectors, so it misses full sibling 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?

The description provides no guidance on when to use this tool versus alternatives. It lacks context on prerequisites (e.g., needing a copied connector node), exclusions, or comparisons to sibling tools like 'create_connections', leaving usage unclear.

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 for behavioral disclosure. It states this is a modification operation ('Set'), implying mutation, but doesn't disclose permission requirements, whether changes are reversible, error conditions, or what happens if the node doesn't support fill colors. For a mutation tool with zero annotation coverage, this is insufficient.

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 communicates the core purpose without unnecessary words. It could be slightly improved by front-loading the most critical information more explicitly, but it's 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 no annotations and no output schema, the description is incomplete. It doesn't explain what happens after setting the color, what the return value might be, error conditions, or constraints beyond node types. Given the complexity of modifying Figma nodes, 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 fully documents all 5 parameters. The description doesn't add any parameter-specific information beyond what's in the schema, but 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 ('a node in Figma'), and specifies the node types ('TextNode or FrameNode'). It distinguishes from siblings like set_stroke_color by focusing on fill color, but doesn't explicitly contrast with other color-related 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 set_stroke_color or other styling tools. The description mentions node types but doesn't explain when this operation is appropriate or what prerequisites might exist.

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

set_instance_overridesB

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

B3.3/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 describes the action ('Apply', 'swapped') which implies mutation, but doesn't specify whether this is destructive (e.g., overwrites existing overrides), requires specific permissions, has side effects on other instances, or what happens on failure. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core action ('Apply previously copied overrides to selected component instances') and adds necessary detail in a second clause. Every word contributes to understanding the tool's function without redundancy or fluff.

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 complexity (a mutation operation with 2 required parameters), lack of annotations, and no output schema, the description is minimally adequate. It covers the basic purpose and parameters but lacks details on behavioral traits (e.g., side effects, error handling) and output expectations. For a tool that modifies component instances, more context on safety and results would be beneficial.

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 ('sourceInstanceId' and 'targetNodeIds') fully documented in the schema. The description adds marginal value by implying that 'targetNodeIds' corresponds to 'selected component instances' and that overrides are 'previously copied', but doesn't provide additional syntax, format, or constraints beyond what the schema already states. 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'), specifying that target instances will be swapped to the source component with copied override properties applied. It distinguishes from sibling tools like 'get_instance_overrides' (which retrieves overrides) and 'clone_node' (which creates copies), though it doesn't explicitly name alternatives.

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 context by mentioning 'previously copied overrides' and 'selected component instances', suggesting it should be used after copying overrides and when instances are selected. However, it doesn't explicitly state when to use this tool versus alternatives like 'clone_node' or 'set_layout_mode', nor does it provide exclusion criteria or prerequisites beyond the implied state.

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

set_item_spacingC

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

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 the tool modifies a frame but doesn't specify whether this is a destructive mutation, permission requirements, error conditions, or what happens when applied incorrectly (e.g., to non-auto-layout frames). The description is minimal and 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 with zero wasted words. It's appropriately sized and front-loaded, making every word earn its place.

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 address what the tool returns, error handling, side effects, or how it interacts with other layout properties. Given the complexity of modifying auto-layout frames, 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%, providing complete parameter documentation. The description doesn't add any meaningful parameter semantics beyond what's in the schema (e.g., it doesn't explain units for 'itemSpacing' or valid ranges). Baseline 3 is appropriate when the schema does all the work.

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 resource ('children in an auto-layout frame'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'set_layout_mode' or 'set_layout_sizing' that also affect layout properties, missing full 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. It doesn't mention prerequisites (e.g., requiring an auto-layout frame), exclusions, or compare to related tools like 'set_padding' or 'set_layout_sizing', leaving usage context entirely implicit.

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 the full burden of behavioral disclosure. It states the tool modifies a frame, implying a mutation, but does not cover critical aspects like permissions needed, whether changes are reversible, error conditions, or what happens to existing settings. 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 is front-loaded and wastes no space, making it highly concise and well-structured.

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 that this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits, error handling, and output expectations, which are crucial for an agent to use the tool effectively. The high schema coverage does not compensate for these gaps in 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 description mentions 'layout mode and wrap behavior', which aligns with the parameters 'layoutMode' and 'layoutWrap' in the schema. However, schema description coverage is 100%, so the schema already fully documents all parameters. The description adds minimal value beyond what the schema provides, justifying the baseline score of 3.

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 ('layout mode and wrap behavior of a frame in Figma'), making the purpose understandable. However, it does not explicitly differentiate this tool from sibling tools like 'set_layout_sizing' or 'set_item_spacing', which also modify layout properties, so it lacks sibling 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?

The description provides no guidance on when to use this tool versus alternatives, such as other layout-related tools in the sibling list (e.g., 'set_layout_sizing' or 'set_item_spacing'). It also does not mention prerequisites, exclusions, or specific contexts for usage, leaving the agent without clear direction.

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 this is a mutation tool ('Set'), implying it modifies the design, but doesn't disclose permissions needed, whether changes are reversible, error conditions, or rate limits. 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 part earns its place by specifying the action, target, and context concisely.

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 cover behavioral aspects like permissions, reversibility, or error handling, and lacks usage guidelines. For a tool that modifies design elements, more context is needed to ensure safe and correct usage 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?

Schema description coverage is 100%, with clear descriptions and enums for parameters, so the baseline is 3. The description adds no additional parameter semantics beyond what the schema provides (e.g., it doesn't explain the implications of 'HUG' vs 'FILL' in more detail), but it doesn't need to compensate for 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 verb ('Set') and resource ('horizontal and vertical sizing modes for an auto-layout frame in Figma'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'set_layout_mode' or 'resize_node', which might have overlapping functionality in layout adjustments.

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., the node must be an auto-layout frame), exclusions, or compare to similar tools like 'set_layout_mode' or 'resize_node', 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_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.6/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 if this is a mutation, requires permissions, has side effects, rate limits, or error handling. 'Parallelly' hints at concurrency but is undefined, leaving critical behavioral traits unclear.

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's front-loaded with the core action. However, 'parallelly' is ambiguous and could be clarified, slightly reducing effectiveness. Overall, it's concise with minimal waste.

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 behavioral context, usage guidelines, and details on what 'parallelly' entails. Given the complexity of batch operations and missing structured data, more explanation is needed for adequate 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?

Schema description coverage is 100%, so the schema fully documents parameters. The description adds no meaning beyond the schema, not explaining 'parallelly' in parameter context or providing examples. Baseline 3 is appropriate as the schema handles parameter semantics adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

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

The description 'Set multiple annotations parallelly in a node' states the action (set) and resource (annotations) with a scope (multiple, parallelly, in a node), but it's vague about what 'parallelly' means operationally and doesn't differentiate from sibling 'set_annotation'. It's not tautological but lacks specificity about the parallel execution aspect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus 'set_annotation' or other annotation-related tools like 'get_annotations'. The description implies batch operations but doesn't specify scenarios, prerequisites, or exclusions, leaving the agent without clear usage context.

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?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'parallelly' which suggests concurrent processing, but doesn't explain what this means operationally (e.g., atomicity, error handling, performance implications). For a mutation tool that modifies multiple text nodes, this is insufficient 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 gets straight to the point with zero wasted words. It's appropriately sized for a tool with good schema documentation and no complex behavioral nuances to explain.

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 inadequate. It doesn't explain what happens on success/failure, whether changes are reversible, what permissions are required, or what the return value contains. The 'parallelly' hint is insufficient given the tool's complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents both parameters. The description doesn't add any meaningful semantic context beyond what's in the schema (e.g., what constitutes valid node IDs, text length limits, or the relationship between the parent node and text nodes). 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 ('Set multiple text contents parallelly') and target ('in a node'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from its sibling 'set_text_content' (singular vs. multiple), which is a missed opportunity for 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 'set_text_content' (for single text nodes) or other text manipulation tools. There's no mention of prerequisites, constraints, or appropriate contexts for this parallel operation.

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?

No annotations are provided, so the description carries full burden. It implies a mutation ('Set') but doesn't disclose behavioral traits such as required permissions, whether changes are reversible, error handling (e.g., if nodeId is invalid), 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 without unnecessary words. Every part earns its place by specifying the action and target clearly.

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 as a mutation with no annotations and no output schema, the description is incomplete. It lacks details on behavioral context (e.g., success/failure responses, constraints), making it insufficient for safe and effective use by 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?

Schema description coverage is 100%, with clear descriptions for all parameters in the schema. The description adds no additional meaning beyond what the schema provides, such as units for padding values or default behaviors. Baseline 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 ('Set padding values') and target resource ('auto-layout frame in Figma'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'set_item_spacing' or 'set_layout_mode' that also modify layout properties, missing explicit 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 on when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., the frame must exist and be in auto-layout mode), exclusions, or comparisons with 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, it doesn't specify whether this operation is destructive, requires specific permissions, has side effects, or what happens if the node doesn't support strokes. The description lacks critical behavioral 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 communicates the core purpose without any wasted words. It's appropriately sized for a straightforward tool and gets directly to the point.

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/failure, whether changes are reversible, or what the tool returns. Given the complexity of modifying visual properties in a design tool, more context about behavior and outcomes 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 schema description coverage is 100%, providing complete documentation for all 6 parameters. The description doesn't add any parameter semantics beyond what's already in the schema, so it meets the baseline of 3 where 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'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'set_fill_color' or 'set_corner_radius', but the specificity of 'stroke color' provides inherent 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?

The description provides no guidance on when to use this tool versus alternatives like 'set_fill_color' or 'set_corner_radius'. It doesn't mention prerequisites (e.g., needing a valid node ID) or contextual constraints (e.g., only works on nodes that support stroke 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 full burden but only states it modifies text content without addressing key behaviors: whether it requires edit permissions, if changes are reversible, what happens to formatting, or error conditions. For a mutation tool, 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 and target without any wasted words. It's appropriately sized for a straightforward 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?

For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain return values, error handling, or behavioral nuances like permissions or side effects, leaving the agent with incomplete context for safe 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 parameters are fully documented in the schema. The description adds no additional meaning beyond implying 'nodeId' refers to an existing text node and 'text' is new content, which the schema already covers. 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 ('Set') and target ('text content of an existing text node in Figma'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'set_multiple_text_contents' or 'create_text', which would require a 5.

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_text_contents' for bulk updates or 'create_text' for new nodes. It mentions 'existing text node' but doesn't clarify prerequisites or exclusions, leaving usage context implied at best.

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/5.0
Disambiguation3/5

Most tools have distinct purposes, but some overlap exists, such as 'get_node_info' and 'read_my_design' (both retrieve node details), and 'delete_node' and 'delete_multiple_nodes' (similar deletion functions). The descriptions help clarify differences, but agents might occasionally misselect between closely related tools.

Naming Consistency4/5

The tool names follow a consistent verb_noun pattern throughout, using snake_case uniformly, which aids readability. Minor deviations include 'read_my_design' (which uses 'my' instead of a direct verb_noun) and 'join_channel' (which is less descriptive of the domain), but overall the naming is predictable.

Tool Count2/5

With 38 tools, the count is excessive for a Figma interaction server, making it heavy and potentially overwhelming for agents. While Figma has a broad API, many tools could be consolidated (e.g., multiple set_* tools for styling), indicating poor scoping and an unnecessarily large surface.

Completeness5/5

The tool set provides comprehensive coverage for Figma operations, including CRUD for nodes (create, get, update, delete), styling (colors, layout, annotations), export, and component management. No obvious gaps exist; agents can perform full design workflows without dead ends.

Maintenance

ActivityInactive
ResponsivenessSyncing

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
    Not graded
    quality
    A
    maintenance
    Enables Cursor to access Figma files through the Model Context Protocol, enhancing its ability to accurately interpret and utilize design data for code generation.
    81,586
    15,747
    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
    894
    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/pipethedev/Talk-to-Figma-MCP'

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