Skip to main content
Glama
southleft

figma-console-mcp

by southleft

Figma Console MCP Server

MCP npm License: MIT Documentation Sponsor

Your design system as an API. A design-system-focused Model Context Protocol server for Figma. It works in both directions (Figma ⇄ code), writes to Figma, and runs deterministic checks for design-code parity, accessibility, and design-system health. It hands the AI exact tokens, variants, bindings, and states as structured data rather than prescribing a framework or house style, so generated code follows your team's own stack and conventions.

🆕 Shaders, grid and auto layout, OKLCH and P3 color, text wrap and variable fonts (latest v1.46.0): apply shaders and set their properties by name (figma_apply_shader, figma_list_shaders), set auto layout or grid layout in one call with CSS-style grid tracks (figma_set_layout), use OKLCH, Display P3 and other CSS colors on fills and strokes, and set text wrap (balance, pretty) and variable-font axes with figma_set_text (v1.46.0). v1.45 added Motion: animate layers with presets, custom animation styles or keyframes bound to Timing and Easing tokens, export video, and find code layers. See what's new →

What is this?

Figma Console MCP connects AI assistants (like Claude) to Figma, enabling:

  • 🎨 Design system extraction - Pull variables, components, and styles

  • 🧬 Codebase → design system extraction - Scan a production codebase, mine its de-facto styling into DTCG tokens with per-token provenance, scaffold a design-system package with a wired Storybook workshop, and gate it with deterministic fidelity evals — then round-trip the tokens into Figma variables (Local Mode)

  • 🔁 Bidirectional token sync - Export Figma variables to DTCG JSON (legacy or 2025.10 dialect) + 9 more formats; push code-side edits back to Figma with full apply — creates, renames, alias re-targeting, and replace-gated deletes. Replaces Style Dictionary and Tokens Studio's export pipeline.

  • 📸 Visual debugging - Take screenshots for context

  • ✏️ Design creation - Create UI components, frames, and layouts directly in Figma — including one-call component-set creation from a variant axes matrix

  • 🔧 Variable management - Create, update, rename, and delete design tokens

  • 🕰 Version history & time-series awareness - List versions, diff snapshots, generate markdown changelogs, trace property/variant introduction via binary-search blame, and fold per-component design + git history into generated component docs

  • ⚡ Real-time monitoring - Watch console logs from the Desktop Bridge plugin

  • 📌 FigJam boards - Create stickies, flowcharts, tables, and code blocks on collaborative boards

  • 🎞️ Slides presentations - Build and manage Figma Slides decks programmatically

  • ♿ Accessibility scanning - 14 WCAG design checks with conformance level tagging, component scorecards, axe-core code scanning, design-to-code parity

  • 🔍 Design-code parity & component docs - Deterministic comparison of a Figma component with its code (visual, spacing, typography, tokens, component API, accessibility), and generated component documentation with per-variant tokens and an optional design + git changelog

  • 📋 Design-system health audits - Lighthouse-style scored audit across naming, tokens, component metadata, accessibility, consistency, and coverage — available as a plain tool for any MCP client (with per-finding auto-fix guidance) and as a visual dashboard app

  • 🛡 Cross-MCP identity - Every tool response carries _mcp: "figma-console-mcp" and errors are prefixed [figma-console-mcp] so attribution stays unambiguous in agents running multiple Figma MCPs

  • ☁️ Cloud Write Relay - Web AI clients (Claude.ai, v0, Replit) can design in Figma via cloud pairing

  • 🔄 Four ways to connect - Remote SSE, Cloud Mode, NPX, or Local Git


Related MCP server: Figma MCP Server

⚡ Quick Start

Choose Your Setup

First, decide what you want to do:

I want to...

Setup Method

Time

Create and modify designs with AI

NPX Setup (Recommended)

~10 min

Design from the web (Claude.ai, v0, Replit, Lovable)

Cloud Mode

~5 min

Contribute to the project

Local Git Setup

~15 min

Just explore my design data (read-only)

Remote SSE

~2 min

⚠️ Important: Capability Differences

Capability

NPX / Local Git

Cloud Mode

Remote SSE

Read design data

✅

✅

✅

Create components & frames

✅

✅

❌

Edit existing designs

✅

✅

❌

Manage design tokens/variables

✅

✅

❌

FigJam boards (stickies, flowcharts)

✅

✅

❌

Real-time monitoring (console, selection)

✅

❌

❌

Codebase → design system extraction (figma_ds_*)

✅

❌

❌

Desktop Bridge plugin

✅

✅

❌

Requires Node.js

Yes

No

No

Total tools available

130

105 after pairing

Read-only subset

Bottom line: Remote SSE is read-only until you pair the plugin. Cloud Mode unlocks write access (105 tools) from web AI clients without Node.js. NPX/Local Git gives the full 130 tools with real-time monitoring.


Best for: Designers who want full AI-assisted design capabilities.

What you get: All 130 tools including design creation, variable management, and component instantiation.

Prerequisites

  • Node.js 18+ — Check with node --version (Download)

  • Figma Desktop installed (not just the web app)

  • An MCP client (Claude Code, Cursor, Windsurf, Claude Desktop, etc.)

Step 1: Get Your Figma Token

  1. Go to Manage personal access tokens in Figma Help

  2. Follow the steps to create a new personal access token

  3. Enter description: Figma Console MCP

  4. Set scopes (all Read unless noted): File content, File versions, Library content, Library assets, Comments (Read and write), Current user, and Variables (Enterprise only, optional). See why each is needed

  5. Copy the token — you won't see it again! (starts with figd_)

Step 2: Configure Your MCP Client

Claude Code (CLI):

claude mcp add figma-console -s user -e FIGMA_ACCESS_TOKEN=figd_YOUR_TOKEN_HERE -e ENABLE_MCP_APPS=true -- npx -y figma-console-mcp@latest

OpenAI Codex (CLI):

codex mcp add figma-console --env FIGMA_ACCESS_TOKEN=figd_YOUR_TOKEN_HERE --env ENABLE_MCP_APPS=true -- npx -y figma-console-mcp@latest

Then set startup_timeout_sec = 60 and tool_timeout_sec = 300 for it in ~/.codex/config.toml (Codex's 10 s / 60 s defaults are too short). The Codex app and IDE extension share this config. Full Codex setup →

Gemini CLI:

gemini mcp add -s user -e FIGMA_ACCESS_TOKEN=figd_YOUR_TOKEN_HERE -e ENABLE_MCP_APPS=true figma-console npx -y figma-console-mcp@latest

Google Antigravity (IDE, CLI, app): add the JSON below to ~/.gemini/config/mcp_config.json, plus "timeoutSeconds": 300 in the server entry. Full Antigravity setup →

Cursor / Windsurf / Claude Desktop:

Add to your MCP config file (see Where to find your config file below):

{
  "mcpServers": {
    "figma-console": {
      "command": "npx",
      "args": ["-y", "figma-console-mcp@latest"],
      "env": {
        "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE",
        "ENABLE_MCP_APPS": "true"
      }
    }
  }
}

📂 Where to Find Your Config File

If you're not sure where to put the JSON configuration above, here's where each app stores its MCP config:

App

macOS

Windows

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json

%APPDATA%\Claude\claude_desktop_config.json

Claude Code (CLI)

~/.claude.json

%USERPROFILE%\.claude.json

Cursor

~/.cursor/mcp.json

%USERPROFILE%\.cursor\mcp.json

Windsurf

~/.codeium/windsurf/mcp_config.json

%USERPROFILE%\.codeium\windsurf\mcp_config.json

OpenAI Codex (app, CLI, IDE)

~/.codex/config.toml (TOML, see format)

%USERPROFILE%\.codex\config.toml

Gemini CLI

~/.gemini/settings.json

%USERPROFILE%\.gemini\settings.json

Google Antigravity (IDE, CLI, app)

~/.gemini/config/mcp_config.json

%USERPROFILE%\.gemini\config\mcp_config.json

Tip for designers: The ~ symbol means your home folder. On macOS, that's /Users/YourName/. On Windows, it's C:\Users\YourName\. You can open these files in any text editor — even TextEdit or Notepad.

Can't find the file? If it doesn't exist yet, create it. The app will pick it up on its next restart. Make sure the entire file is valid JSON (watch for missing commas or brackets).

Claude Code users: You can skip manual editing entirely. Just run the claude mcp add command above and it handles everything for you.

Step 3: Connect to Figma Desktop

Desktop Bridge Plugin:

  1. Open Figma Desktop normally (no special flags needed) and open a file

  2. Go to Plugins → Development → Import plugin from manifest...

  3. Select ~/.figma-console-mcp/plugin/manifest.json (stable path, auto-created by the MCP server). Run npx figma-console-mcp --print-path to print the exact path for your machine.

  4. Run the plugin in your Figma file — it scans ports 9223–9232 and connects automatically to your running MCP server

Can't see the folder in the import dialog? .figma-console-mcp starts with a dot, so macOS hides it. In the dialog, press ⌘⇧G and paste the path (or press ⌘⇧. to show hidden files). On Windows the folder is visible as normal.

Heads-up on plugin updates. Figma caches plugin files (code.js and ui.html) at the application level. The MCP server refreshes the files at ~/.figma-console-mcp/plugin/ on every startup, but Figma keeps using its cached copy until you re-import the manifest.

Re-importing is required only when a release notes entry says so — typically when the plugin adds a new method the server needs (e.g. v1.22.4, v1.10.0). The plugin files last changed in v1.41.5; if your imported plugin predates that, re-import once. The plugin shows an update banner when the server bundles a newer plugin than the one running. For most upgrades the new server stays wire-compatible with the previous plugin, and re-importing is optional: you'll still get every functional change, just not the cosmetic plugin-side touches (status-pill copy, pluginVersion reporting).

When you do re-import: Plugins → Manage plugins → re-import ~/.figma-console-mcp/plugin/manifest.json. The stable path never changes, so it's a one-click step.

Step 4: Restart Your MCP Client

Restart your MCP client to load the new configuration.

Step 5: Test It!

Check Figma status

→ Should show connection status with active WebSocket transport

Create a simple frame with a blue background

→ Should create a frame in Figma (confirms write access!)

📖 Complete Setup Guide


For Contributors: Local Git Mode

Best for: Developers who want to modify source code or contribute to the project.

What you get: Same 130 tools as NPX, plus full source code access.

Quick Setup

# Clone and build
git clone https://github.com/southleft/figma-console-mcp.git
cd figma-console-mcp
npm install
npm run build:local

Configure Your MCP Client

Add to your config file (see Where to find your config file):

{
  "mcpServers": {
    "figma-console": {
      "command": "node",
      "args": ["/absolute/path/to/figma-console-mcp/dist/local.js"],
      "env": {
        "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE",
        "ENABLE_MCP_APPS": "true"
      }
    }
  }
}

Then follow NPX Steps 3-5 above.

📖 Complete Setup Guide


📡 Remote SSE (Read-Only Exploration)

Best for: Quickly evaluating the tool or read-only design data extraction.

What you get: the read-only tools — view file data, components, styles, comments and version history, take screenshots, read logs, check design-code parity. Cannot create or modify designs.

Claude Desktop (UI Method)

  1. Open Claude Desktop → Settings → Connectors

  2. Click "Add Custom Connector"

  3. Enter:

    • Name: Figma Console (Read-Only)

    • URL: https://figma-console-mcp.southleft.com/sse

  4. Click "Add" — Done! ✅

OAuth authentication happens automatically when you first use design system tools.

Claude Code

⚠️ Known Issue: Claude Code's native --transport sse has a bug. Use mcp-remote instead:

claude mcp add figma-console -s user -- npx -y mcp-remote@latest https://figma-console-mcp.southleft.com/sse

💡 Tip: For full capabilities, use NPX Setup instead of Remote SSE.

Other Clients (Cursor, Windsurf, etc.)

{
  "mcpServers": {
    "figma-console": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://figma-console-mcp.southleft.com/sse"]
    }
  }
}

Upgrading to Full Capabilities

Ready for design creation? Follow the NPX Setup guide above, or try Cloud Mode if you don't want to install Node.js.

📖 Complete Setup Guide


☁️ Cloud Mode (Web AI Clients)

Best for: Using Claude.ai, v0, Replit, or Lovable to create and modify Figma designs — no Node.js required.

What you get: 105 tools including full write access — design creation, variable management, component instantiation, and all REST API tools. Only real-time monitoring (console logs, selection tracking, document changes) requires Local Mode.

Prerequisites

  • Figma Personal Access Token — Create one here (starts with figd_)

  • Figma Desktop with the Desktop Bridge plugin installed (see Desktop Bridge setup)

  • A web AI client that supports MCP (Claude.ai, Lovable, v0, Replit, etc.)

Step 1: Add the MCP Connector

Add this endpoint to your AI platform's MCP settings:

URL: https://figma-console-mcp.southleft.com/mcp Auth: Your Figma PAT as Bearer token

In Claude.ai: Settings → Connectors → Add Custom Connector → paste the URL above. In Lovable/v0/Replit: Look for "Add MCP Server" or "Integrations" in settings → paste the URL and add your token.

Step 2: Pair the Plugin

  1. Open the Desktop Bridge plugin in Figma Desktop (Plugins → Development → Figma Desktop Bridge)

  2. Tell your AI assistant:

    Connect to my Figma plugin
  3. The AI gives you a 6-character pairing code (expires in 5 minutes)

  4. In the plugin: Toggle "Cloud Mode" → enter the code → click Connect

  5. You're paired! Full write access is now available

What You Can Do

Once paired, use natural language to design:

Create a card component with a header image, title, description, and action button
Set up a color token collection with Light and Dark modes
Add a "High Contrast" mode to my existing token collection

How It Works

Your AI client sends write commands through the cloud MCP server, which relays them via WebSocket to the Desktop Bridge plugin running in your Figma Desktop. The plugin executes the commands using the Figma Plugin API and returns results back through the same path.

AI Client → Cloud MCP Server → Durable Object Relay → Desktop Bridge Plugin → Figma

Variables on any plan: Cloud Mode uses the Plugin API (not the Enterprise REST API), so variable management works on Free, Pro, and Organization plans.

📖 Complete Setup Guide


📊 Installation Method Comparison

Feature

NPX (Recommended)

Cloud Mode

Local Git

Remote SSE

Setup time

~10 minutes

~5 minutes

~15 minutes

~2 minutes

Total tools

130

105 after pairing

130 (Local Git)

Read-only subset

Design creation

✅

✅

✅

❌

Variable management

✅

✅

✅

❌

Component instantiation

✅

✅

✅

❌

FigJam boards

✅

✅

✅

❌

Real-time monitoring

✅

❌

✅

❌

Desktop Bridge plugin

✅

✅

✅

❌

Variables (no Enterprise)

✅

✅

✅

❌

Console logs

✅ (zero latency)

❌

✅ (zero latency)

✅

Read design data

✅

✅

✅

✅

Requires Node.js

Yes

No

Yes

No

Authentication

PAT (manual)

OAuth (automatic)

PAT (manual)

OAuth (automatic)

Automatic updates

✅ (@latest)

✅

Manual (git pull)

✅

Source code access

❌

❌

✅

❌

Key insight: Remote SSE is read-only. Cloud Mode adds write access for web AI clients without Node.js. NPX/Local Git give the full 130 tools.

📖 Complete Feature Comparison


🎯 Test Your Connection

After setup, try these prompts:

Basic test (all modes):

Navigate to https://www.figma.com and check status

Design system test (requires auth):

Get design variables from [your Figma file URL]

Cloud Mode test:

Connect to my Figma plugin

→ Follow the pairing flow, then try: "Create a simple blue rectangle"

Plugin test (Local Mode only):

Show me the primary font for [your theme name]

🔐 Authentication

Remote Mode - OAuth (Automatic)

When you first use design system tools:

  1. Browser opens automatically to Figma authorization page

  2. Click "Allow" to authorize (one-time)

  3. Token stored securely and refreshed automatically

  4. Works with Free, Pro, and Enterprise Figma plans

Local Mode - Personal Access Token (Manual)

  1. Visit https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens

  2. Generate token with scopes (all Read unless noted): File content, File versions, Library content, Library assets, Comments (Read and write), Current user, and Variables (Enterprise only, optional)

  3. Add to MCP config as FIGMA_ACCESS_TOKEN environment variable


🛠️ Available Tools

Status & Diagnostics

  • figma_get_status - Check WebSocket bridge connection and file context

  • figma_diagnose - Designer-readable health check + setup guidance

  • figma_reconnect - Force reconnect to the Desktop Bridge plugin

  • figma_navigate - Switch the active file target among connected plugins (Local), or navigate the cloud headless browser (Remote/Cloud)

  • figma_list_open_files - List files connected through the Desktop Bridge and which one is active (Local Mode)

Console Debugging

  • figma_get_console_logs - Retrieve console logs

  • figma_watch_console - Real-time log streaming

  • figma_clear_console - Clear log buffer

  • figma_reload_plugin - Reload current page

Visual Debugging

  • figma_take_screenshot - Export an image of a page or node (Desktop Bridge first, REST fallback)

  • figma_capture_screenshot - Render a node from the plugin runtime, reflecting changes that haven't reached the REST API yet

👁️ Real-Time Awareness (Local Mode only)

  • figma_get_selection - The nodes currently selected in Figma

  • figma_get_design_changes - Buffered document-change events, for polling what changed

Design System Extraction

  • figma_get_design_system_kit - Full design system in one call — tokens, components, styles, visual specs

  • figma_get_variables - Extract design tokens/variables

  • figma_get_component - Get component data (metadata or reconstruction spec)

  • figma_get_component_for_development - Component + image

  • figma_get_component_image - Just the image

  • figma_get_styles - Color, text, effect styles

  • figma_get_file_data - Full file structure

  • figma_get_file_for_plugin - Optimized file data

  • figma_get_design_system_summary / figma_get_token_values - Compact design-system overview and variable values by mode (Local Mode only)

  • figma_audit_design_system_report - Scored health audit for any MCP client — six-category report (naming, tokens, metadata, accessibility, consistency, coverage) with per-finding remediation ("can this MCP fix it?"), chunked per-category drill-down, live-first data with disclosed source, 5-minute cache

📚 Shared Library Inspection

  • figma_get_library_component_by_key - Resolve any component key to full properties + variants + visual specs — without needing the source library file's URL. Works for both COMPONENT_SET and standalone COMPONENT keys. Adaptive compression at >500KB.

  • figma_get_library_components - Discover all components in a library file (requires library file URL/key)

  • figma_get_library_variables - List every variable from team libraries the current file has subscribed. Works on every Figma plan — uses the Plugin API path, not the Enterprise-only REST endpoint. Filter by libraryName, collectionName, or resolvedType.

  • figma_import_library_variable - Import a library variable into the current file. Returns a local id ready to pass to figma_set_fills / figma_update_variable / any variable-binding tool.

☁️ Cloud Relay

  • figma_pair_plugin - Generate a pairing code to connect a Desktop Bridge plugin via the cloud relay

✏️ Design Creation (Local Mode + Cloud Mode)

  • figma_execute - Power tool: Run any Figma Plugin API code to create designs

    • Create frames, shapes, text, components

    • Apply auto-layout, styles, effects

    • Build complete UI mockups programmatically

    • Optional fileKey targets one specific connected file directly (Local Mode only), without touching the active file or target lock

  • figma_execute_across_files - Local Mode only. Run the same script in several Desktop Bridge-connected files at once, concurrently, returning a per-file result map — for cross-file consistency checks and fixes across a multi-file design system, replacing "open file, run plugin, repeat per file"

    • Name the files with fileKeys (from figma_list_open_files), or pass allFiles: true to hit every connected file — one of the two is required, so a script never fans out to files you didn't mean to touch

    • Per-file timeouts and error isolation: one slow or failing file doesn't delay or fail the others

  • figma_create_component_set - Create a component set with variants in one declarative call

    • Generate every variant combination from an axes matrix (e.g. { State: ["default", "hover", "disabled"], Size: ["sm", "lg"] } → 6 variants) off a base component, or combine existing components

    • Prop=Value variant naming, combineAsVariants under the hood, optional auto-arranged labeled grid

    • Returns each variant's key, ready for figma_instantiate_component

  • figma_arrange_component_set - Organize variants into professional component sets

    • Convert multiple component variants into a proper Figma component set

    • Applies native purple dashed border visualization automatically

    • Creates white container frame with title, row labels, and column headers

    • Row labels vertically centered with each grid row

    • Column headers horizontally centered with each column

    • Use natural language like "arrange these variants" or "organize as component set"

  • figma_set_description - Document components with rich descriptions

    • Add descriptions to components, component sets, and styles

    • Supports markdown formatting for rich documentation

    • Descriptions appear in Dev Mode for developers

🧩 Figma Slots (Local Mode + Cloud Mode)

  • figma_create_slot - Add a slot to a component via the GA createSlot() API — the linked SLOT property is created automatically; works on standalone components and variants inside a component set

  • figma_get_slots - List slots on a component, component set (aggregated across variants), or instance — ids, names, property keys, dimensions, and current children

  • figma_append_to_slot - Populate an instance's slot by cloning an existing node or creating new content (setProperties rejects slot values by design — this is the population path)

  • figma_reset_slot - Clear a slot's content on an instance

  • figma_add_slot_property - Retrofit an existing frame as a slot via a manual SLOT property binding, with description and preferredValues

🎬 Motion (Local Mode + Cloud Mode)

Figma Motion (Plugin API beta). Animations play in Figma's preview and in video export, not in static screenshots.

  • figma_get_animations - Read a layer's animation styles, keyframe tracks and timeline, with CSS easings and token bindings

  • figma_apply_animation - Animate a layer with a Figma preset (Opacity, Scale, Position, Rotation, Size, Path, TextStagger), a custom animation style, or manual keyframes for any animatable property, paint color or effect. Easing and duration can bind to EASING/TIMING variables

  • figma_remove_animation - Remove one animation style, one keyframe track, or everything

  • figma_manage_animation_styles - Build reusable motion styles: list Figma's presets and their options, and create, update or delete custom animation styles

  • figma_export_animation - Export an animated frame as MP4, GIF or WebM

🧱 Code Layers (Local Mode + Cloud Mode)

  • figma_get_code_layers - Find Figma code layers on a page or across the file, with position, size and linked dev resources. Figma's APIs don't expose code-layer source, so creating and editing them stays in Figma or Figma's own MCP (send_code_to_figma)

✨ Shaders (Local Mode + Cloud Mode)

  • figma_list_shaders - List shaders applied in the file (with each property's name, type and default, and the layers using them) and shaders from your libraries

  • figma_apply_shader - Apply a shader or change its properties by name ({turbulence: 40, cloudColor: '#E8F4FF'}) on fills, strokes or effects, including variable bindings. Shaders themselves are created in Figma or with Figma's own MCP

📐 Layout (Local Mode + Cloud Mode)

  • figma_set_layout - Auto layout and grid layout in one call: direction, gaps, padding, alignment including SPACE_EVENLY/SPACE_AROUND, wrap, sizing, and grid tracks written CSS-style ('240px 1fr 1fr', repeat(3, 1fr)) with child placement and spans

🔍 Design-Code Parity (All Modes)

  • figma_check_design_parity - Compare Figma component specs against code implementation, producing a scored diff report with actionable fix items

  • figma_generate_component_doc - Generate platform-agnostic markdown documentation by merging Figma design data with code-side info; the optional history parameter adds a changelog from Figma version history and git log

🔬 Components, Nodes & Deep Analysis (Local Mode + Cloud Mode unless noted)

  • figma_search_components / figma_get_component_details - Find components (local + library) and get their variants, properties, and keys (Local Mode only)

  • figma_instantiate_component / figma_set_instance_properties - Place instances and set their TEXT, BOOLEAN, INSTANCE_SWAP, and VARIANT properties

  • figma_add_component_property / figma_edit_component_property / figma_delete_component_property - Manage component properties

  • figma_create_child, figma_move_node, figma_resize_node, figma_clone_node, figma_rename_node, figma_delete_node, figma_set_text, figma_set_fills, figma_set_strokes, figma_set_image_fill - Structured node edits, including variable binding on fills and strokes, OKLCH/Display P3 and other CSS colors on fills and strokes, and text wrap style and variable-font axes on text

  • figma_get_component_for_development_deep - Full component tree with resolved token names and instance references

  • figma_analyze_component_set - A variant set as a state machine, with CSS pseudo-class mappings and per-variant diffs

♿ Accessibility (Local Mode + Cloud Mode)

  • figma_lint_design - WCAG and design-system lint on the canvas, with AA and best-practice level tagging

  • figma_audit_component_accessibility - Component scorecard: state coverage, focus indicators, color-blind simulation

  • figma_scan_code_accessibility - axe-core scan of HTML

📝 Annotations & Comments

  • figma_get_annotations / figma_set_annotations / figma_get_annotation_categories - Read and write designer annotations (Local Mode + Cloud Mode)

  • figma_get_comments / figma_post_comment / figma_delete_comment - File comments, optionally pinned to a node

🕰 Version History

  • figma_get_file_versions / figma_get_file_at_version - List versions and snapshot a file or node at a past version

  • figma_diff_versions / figma_get_changes_since_version - Structured diffs, including component property and binding changes

  • figma_generate_changelog - Markdown changelog for release notes

  • figma_blame_node - Find when, and by whom, a property or variant was introduced

🔁 Token Sync (Local Mode + Cloud Mode)

  • figma_export_tokens - Export Figma variables to design token files in your codebase. Canonical DTCG JSON (legacy hex dialect by default, or DTCG 2025.10 object colors/dimensions via dtcgDialect: "2025") plus CSS, Tailwind v4/v3, SCSS, TS, JSON, Style Dictionary, and Tokens Studio formats. Diff-aware merge against existing source files (only writes what changed). tokens.config.json autodiscovery means zero-arg calls after first setup. Scopes and codeSyntax metadata round-trip via $extensions. Replaces Style Dictionary and Tokens Studio's export pipeline for popular styling methods.

  • figma_import_tokens - Push code-side token edits back to Figma with a full apply phase. Diffs against current Figma state, then applies value updates, creates missing collections/variables, applies renames, writes real alias (VARIABLE_ALIAS) references, and — only under strategy: "replace" — deletes Figma-only variables. Round-trip safe — Figma variable IDs preserved in DTCG $extensions["figma-console-mcp"] so renames on either side don't create duplicates. Accepts both DTCG dialects. Dry-run strategy for safe previews. In Cloud Mode, pass tokens inline via payload or files (no local filesystem access).

🧬 Design System Extraction (Local Mode only)

Turn a production codebase into a design system: analyze → extract tokens → scaffold → port components → verify. Local Mode only — these tools read and write your local filesystem, so they are never registered in Cloud Mode.

  • figma_ds_analyze - Scan one or more production app codebases — framework/styling/vendor-layer detection; a usage-ranked component inventory classified vendored / wrapped / pure-vendor / bespoke, with prop contracts, variant inference from real call sites, and duplicate detection; iconography + typography capture; and architecture classification (atomic levels, specializations like FollowButton → Button, missing generic primitives — the "UI kit vs design system" analysis)

  • figma_ds_extract_tokens - Mine the app's styling into DTCG tokens. Declared intent first — multi-mode CSS custom properties (.dark / [data-theme] and other conventions), SCSS variables, Tailwind config values, shadcn HSL triples — plus Tailwind utility-class frequency mining valued from the app's own theme, and frequency-promoted recurring raw values. Every token carries provenance (source file:line, confidence, frequency) in $extensions; the output imports straight into Figma variables via figma_import_tokens

  • figma_ds_scaffold - Generate the design-system package — package skeleton, token files via the shared formatter engine, token/typography/iconography showcase docs pages, framework peer deps, and a workflow README

  • figma_ds_setup_storybook - Wire a freshly-initialized Storybook workshop to the extraction — a preview stylesheet carrying the source app's @theme mapping, custom @utility definitions, @layer base, and @font-face rules; self-hosted font copying; config patches (Tailwind vite plugin, automatic JSX runtime); and a theme toolbar built from the extracted modes

  • figma_ds_extract_component - Deep-extract one component for porting — source, prop contract, observed call-site variants, style touchpoints, and a ready-to-adapt CSF3 story scaffold

  • figma_ds_verify - Deterministic fidelity evals — DTCG parse + alias integrity, quoted-CSS-expression scan, workshop var() resolution, structure + porting coverage, and Figma round-trip readiness

  • figma_ds_status - Read or record porting progress, persisted across sessions

🔧 Variable Management (Local Mode + Cloud Mode)

  • figma_create_variable_collection - Create new variable collections with modes

  • figma_create_variable - Create COLOR, FLOAT, STRING, or BOOLEAN variables

  • figma_update_variable - Update variable values in specific modes

  • figma_rename_variable - Rename variables while preserving values

  • figma_delete_variable - Delete variables

  • figma_delete_variable_collection - Delete collections and all their variables

  • figma_add_mode - Add modes to collections (e.g., "Dark", "Mobile")

  • figma_rename_mode - Rename existing modes

  • figma_batch_create_variables - Create up to 100 variables in one call (10-50x faster)

  • figma_batch_update_variables - Update up to 100 variable values in one call

  • figma_setup_design_tokens - Create complete token system (collection + modes + variables) atomically — values accept DTCG brace references ("{color.blue.600}") that resolve to real variable aliases

📌 FigJam Board Tools (Local Mode + Cloud Mode)

  • figjam_create_sticky - Create a sticky note with color options

  • figjam_create_stickies - Batch create up to 200 stickies

  • figjam_create_connector - Connect nodes with labeled connector lines

  • figjam_create_shape_with_text - Create flowchart shapes (diamond, ellipse, etc.)

  • figjam_create_table - Create tables with cell data

  • figjam_create_code_block - Add code snippets with syntax highlighting

  • figjam_create_section - Group board content in a section

  • figjam_auto_arrange - Arrange nodes in grid, horizontal, or vertical layouts

  • figjam_get_board_contents - Read all content from a FigJam board

  • figjam_get_connections - Read the connection graph (flowcharts, relationships)

🎞️ Slides Presentation Tools (Local Mode + Cloud Mode)

  • figma_list_slides - List all slides with IDs, positions, and skip status

  • figma_get_slide_content - Get the full content tree of a slide

  • figma_get_slide_grid - Get the 2D grid layout of the presentation

  • figma_get_slide_transition - Read transition settings for a slide

  • figma_get_focused_slide - Get the currently focused slide

  • figma_create_slide - Create a new blank slide

  • figma_delete_slide - Delete a slide from the presentation

  • figma_duplicate_slide - Clone an existing slide

  • figma_reorder_slides - Reorder slides via new 2D grid layout

  • figma_set_slide_transition - Set transition effects (22 styles, 8 curves)

  • figma_skip_slide - Toggle whether a slide is skipped in presentation mode

  • figma_add_text_to_slide - Add text to a slide with custom fonts, colors, alignment, and wrapping

  • figma_add_shape_to_slide - Add rectangle or ellipse shapes with color

  • figma_set_slide_background - Set a slide's background color (creates or updates)

  • figma_get_text_styles - Get all local text styles with IDs, fonts, and sizes

  • figma_set_slides_view_mode - Toggle grid vs. single-slide view

  • figma_focus_slide - Navigate to a specific slide

📖 Detailed Tool Documentation


📖 Example Prompts

Cloud Mode (Web AI Clients)

Connect to my Figma plugin so we can start designing
Pair with my Figma file and create a login form with email, password, and submit button
Set up a brand color token collection with Light and Dark modes

Plugin Debugging

Navigate to my Figma plugin and show me any console errors
Watch the console for 30 seconds while I test my plugin
Get the last 20 console logs

Design System Extraction

Get all design variables from https://figma.com/design/abc123
Extract color styles and show me the CSS exports
Get the Button component with a visual reference image
Get the Badge component in reconstruction format for programmatic creation

Design Creation (Local Mode + Cloud Mode)

Create a success notification card with a checkmark icon and message
Design a button component with hover and disabled states
Build a navigation bar with logo, menu items, and user avatar
Create a modal dialog with header, content area, and action buttons
Arrange these button variants into a component set
Organize my icon variants as a proper component set with the purple border

Variable Management (Local Mode + Cloud Mode)

Create a new color collection called "Brand Colors" with Light and Dark modes
Add a primary color variable with value #3B82F6 for Light and #60A5FA for Dark
Rename the "Default" mode to "Light Theme"
Add a "High Contrast" mode to the existing collection

Design-Code Parity

Compare the Button component in Figma against our React implementation
Check design parity for the Card component before sign-off
Generate component documentation for the Dialog from our design system

FigJam Boards

Create a retrospective board with "Went Well", "To Improve", and "Action Items" columns
Build a user flow diagram for the checkout process with decision points
Read this brainstorming board and summarize the key themes
Generate an affinity map from these meeting notes
Create a comparison table of our three platform options

Slides Presentations

List all slides and tell me which ones are skipped
Add a new slide with the title "Thank You" in 72px text
Set a DISSOLVE transition on the first slide with 0.5 second duration
Duplicate slide 5 for an A/B comparison
Skip slides 8 and 9 — they're not ready for the client presentation
Reorder my slides so the conclusion comes before Q&A

Visual Debugging

Take a screenshot of the current Figma canvas
Navigate to this file and capture what's on screen

📖 More Use Cases & Examples


🎨 AI-Assisted Design Creation

Requires Desktop Bridge: This feature works with Local Mode (NPX or Local Git) and Cloud Mode. Remote SSE without Cloud Mode pairing is read-only and cannot create or modify designs.

One of the most powerful capabilities of this MCP server is the ability to design complete UI components and pages directly in Figma through natural language conversation with any MCP-compatible AI assistant like Claude Desktop or Claude Code.

What's Possible

Create original designs from scratch:

Design a login card with email and password fields, a "Forgot password?" link,
and a primary Sign In button. Use 32px padding, 16px border radius, and subtle shadow.

Leverage existing component libraries:

Build a dashboard header using the Avatar component for the user profile,
Button components for actions, and Badge components for notifications.

Generate complete page layouts:

Create a settings page with a sidebar navigation, a main content area with form fields,
and a sticky footer with Save and Cancel buttons.

How It Works

  1. You describe what you want in plain English

  2. The AI searches your component library using figma_search_components to find relevant building blocks

  3. Components are instantiated with proper variants and properties via figma_instantiate_component

  4. Custom elements are created using the full Figma Plugin API via figma_execute

  5. Visual validation automatically captures screenshots and iterates until the design looks right

Who Benefits

Role

Use Case

Designers

Rapidly prototype ideas without manual frame-by-frame construction. Explore variations quickly by describing changes.

Developers

Generate UI mockups during planning discussions. Create visual specs without switching to design tools.

Product Managers

Sketch out feature concepts during ideation. Communicate visual requirements directly to stakeholders.

Design System Teams

Test component flexibility by generating compositions. Identify gaps in component coverage.

Agencies

Speed up initial concept delivery. Iterate on client feedback in real-time during calls.

Example Workflows

Brand New Design:

"Create a notification toast with an icon on the left, title and description text, and a dismiss button. Use our brand colors."

The AI creates custom frames, applies your design tokens, and builds the component from scratch.

Component Composition:

"Build a user profile card using the Avatar component (large size), two Button components (Edit Profile and Settings), and a Badge for the user's status."

The AI searches your library, finds the exact components, and assembles them with proper spacing and alignment.

Design Iteration:

"The spacing feels too tight. Increase the gap between sections to 24px and make the heading larger."

The AI modifies the existing design, takes a screenshot to verify, and continues iterating until you're satisfied.

Visual Validation

The AI automatically follows a validation workflow after creating designs:

  1. Create → Execute the design code

  2. Screenshot → Capture the result

  3. Analyze → Check alignment, spacing, and visual balance

  4. Iterate → Fix any issues detected

  5. Verify → Final screenshot to confirm

This ensures designs aren't just technically correct—they look right.


The Figma Desktop Bridge plugin is the recommended way to connect Figma to the MCP server. It communicates via WebSocket — no special Figma launch flags needed, and it persists across Figma restarts.

Setup

  1. Open Figma Desktop (normal launch — no debug flags needed)

  2. Go to Plugins → Development → Import plugin from manifest...

  3. Select ~/.figma-console-mcp/plugin/manifest.json — the stable path the MCP server keeps up to date (npx figma-console-mcp --print-path prints it; on macOS press ⌘⇧G in the dialog and paste it, since the folder is hidden). If you cloned this repo for development, you can select figma-desktop-bridge/manifest.json from the clone instead.

  4. Run the plugin in your Figma file — it auto-connects via WebSocket (scans ports 9223–9232)

  5. Ask your AI: "Check Figma status" to verify the connection

One-time import. Once imported, the plugin stays in your Development plugins list. Just run it whenever you want to use the MCP.

📖 Desktop Bridge Documentation

Capabilities

Read Operations:

  • Variables without Enterprise API

  • Reliable component descriptions (bypasses API bugs)

  • Multi-mode support (Light/Dark/Brand variants)

  • Real-time selection tracking and document change monitoring

Write Operations:

  • Design Creation - Create frames, shapes, text, components via figma_execute

  • Variable Management - Full CRUD operations on variables and collections

  • Mode Management - Add and rename modes for multi-theme support

How the Transport Works

  • The MCP server communicates via WebSocket through the Desktop Bridge plugin

  • The server tries port 9223 first, then automatically falls back through ports 9224–9232 if needed

  • The plugin scans all ports in the range and connects to every active server it finds

  • All 130 tools work through the WebSocket transport

Multiple files: The WebSocket server supports multiple simultaneous plugin connections — one per open Figma file. Each connection is tracked by file key with independent state (selection, document changes, console logs).

Environment variables:

  • FIGMA_WS_PORT — Override the preferred WebSocket port (default: 9223). The server will fall back through a 10-port range starting from this value if the preferred port is occupied.

  • FIGMA_WS_HOST — Override the WebSocket server bind address (default: localhost). Set to 0.0.0.0 when running inside Docker so the host machine can reach the MCP server.

  • FIGMA_MCP_HTTP_PORT — Also serve MCP over Streamable HTTP at http://127.0.0.1:<port>/mcp, so other local clients can share this server's Figma connection. Off by default. See Sharing one server over HTTP.

  • FIGMA_MCP_HTTP_TOKEN — With FIGMA_MCP_HTTP_PORT, require Authorization: Bearer <token> on every HTTP request.

Cloud Mode: The plugin also supports a Cloud Mode toggle for pairing with web AI clients (Claude.ai, v0, Replit, Lovable). Toggle "Cloud Mode" in the plugin UI, enter the 6-character pairing code from your AI assistant, and click Connect. See Cloud Mode for details.

Plugin Limitation: In Local Mode, works with NPX or Local Git. In Cloud Mode, pairs with the remote MCP endpoint. Remote SSE without Cloud Mode pairing is read-only.


🔀 Multi-Instance Support (v1.10.0)

Figma Console MCP now supports multiple simultaneous instances — perfect for designers and developers who work across multiple projects or use Claude Desktop's Chat and Code tabs at the same time.

The Problem (Before v1.10.0)

When two processes tried to start the MCP server (e.g., Claude Desktop's Chat tab and Code tab), the second one would crash with EADDRINUSE because both competed for port 9223.

How It Works Now

  • The server tries port 9223 first (the default)

  • If that port is already taken, it automatically tries 9224, then 9225, and so on up to 9232

  • The Desktop Bridge plugin in Figma connects to all active servers simultaneously

  • Every server instance receives real-time events (selection changes, document changes, console logs)

  • figma_get_status shows which port you're on and lists other active instances

What This Means for You

Scenario

Before v1.10.0

Now

Two Claude Desktop tabs (Chat + Code)

Second tab crashes

Both work independently

Multiple CLI terminals on different projects

Only one can run

All run simultaneously

Claude Desktop + Claude Code CLI

Port conflict

Both coexist

Do I Need to Do Anything?

Nothing. Multi-instance support is fully automatic:

  • Each MCP server claims the next available port in the range

  • The Desktop Bridge plugin scans all ports and connects to every active server

  • Orphaned processes from closed tabs are automatically cleaned up on startup

  • No manual port management — the plugin already scans the whole range

(Re-importing the manifest is only required when the plugin code itself changes — e.g. after a package update. Port-range scanning is already in the shipped plugin.)

Sharing one server over HTTP (optional)

Normally each MCP client starts its own server over stdio. To let several local clients share one server and its Figma connection, set FIGMA_MCP_HTTP_PORT. The server then also serves MCP at http://127.0.0.1:<port>/mcp, and lists that URL in its port file (mcpHttpUrl) and in figma_get_status (transport.mcpHttp).

# Start a shared server in a terminal (keep it open)
FIGMA_ACCESS_TOKEN=figd_... FIGMA_MCP_HTTP_PORT=9300 npx -y figma-console-mcp@latest

# Point clients at it, e.g. Claude Code:
claude mcp add --transport http figma-console-shared http://127.0.0.1:9300/mcp
  • Loopback only. It binds 127.0.0.1 and refuses requests whose Host isn't localhost (DNS rebinding) or that come from a non-localhost browser page. Set FIGMA_MCP_HTTP_TOKEN to also require a bearer token.

  • Each client gets its own session, as with stdio, and all of them share the plugin connection. Idle sessions close after 30 minutes and clients reconnect automatically.

  • The endpoint lives as long as the server process. When an MCP client spawned the server, closing that client ends it.

  • Avoid port 3845, which Figma's own Dev Mode MCP server uses, and the bridge range 9223–9232.


🧩 MCP Apps (Experimental)

Figma Console MCP includes support for MCP Apps — rich interactive UI experiences that render directly inside any MCP client that supports the MCP Apps protocol extension. Built with the official @modelcontextprotocol/ext-apps SDK.

What are MCP Apps? Traditional MCP tools return text or images to the AI. MCP Apps go further — they render interactive HTML interfaces inline in the chat, allowing users to browse, filter, and interact with data directly without consuming AI context.

Token Browser

An interactive design token explorer.

Usage: Ask Claude to "browse the design tokens" or "show me the design tokens" while connected to a Figma file.

Features:

  • Browse all tokens organized by collection with expandable sections

  • Filter by type (Colors, Numbers, Strings) and search by name/description

  • Per-collection mode columns (Light, Dark, Custom) matching Figma's Variables panel

  • Color swatches, alias resolution, and click-to-copy on any value

  • Works without Enterprise plan via Desktop Bridge (local mode)

Design System Dashboard

A Lighthouse-style health scorecard that audits your design system across six categories.

Usage: Ask Claude to "audit the design system" or "show me design system health" while connected to a Figma file.

Features:

  • Overall weighted score (0–100) with six category gauges: Naming, Tokens, Components, Accessibility, Consistency, Coverage

  • Expandable category sections with individual findings, severity indicators, and actionable details

  • Diagnostic locations linking findings to specific variables, components, or collections

  • Tooltips explaining each check's purpose and scoring criteria

  • Refresh button to re-run the audit without consuming AI context

  • Pure scoring engine with no external dependencies — all analysis runs locally

No MCP Apps support? Same audit, plain tool: figma_audit_design_system_report runs the identical scoring engine and returns the report as data — summary by default, per-category drill-down via category, full JSON via format: "full" — with a remediation section stating which findings this MCP can fix (design), which need a design decision first (design-assisted), and which need human design work (manual). Works in every MCP client with no ENABLE_MCP_APPS flag; results cache for 5 minutes (forceRefresh to re-crawl).

Enabling MCP Apps:

MCP Apps are enabled by default in the setup configurations above (via "ENABLE_MCP_APPS": "true"). If you set up before v1.10.0 and don't have this in your config, add it to your env section:

"env": {
  "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE",
  "ENABLE_MCP_APPS": "true"
}

Note: MCP Apps require an MCP client with ext-apps protocol support (e.g. Claude Desktop). This feature is experimental and the protocol may evolve.

Future MCP Apps Roadmap

Planned MCP Apps:

  • Component Gallery — Visual browser for searching and previewing components with variant exploration

  • Style Inspector — Interactive panel for exploring color, text, and effect styles with live previews

  • Variable Diff Viewer — Side-by-side comparison of token values across modes and branches

The architecture supports adding new apps with minimal boilerplate — each app is a self-contained module with its own server-side tool registration and client-side UI.


🚀 Advanced Topics


🤝 vs. Figma's Official MCP Server

The two servers are complementary, and both can run in the same MCP client.

Figma's official MCP server is hosted by Figma. It focuses on design-to-code context (get_design_context), Code Connect, library search, and creating content in Figma: it writes through use_figma, creates files, generates FigJam diagrams, generates code layers, and works with shaders.

Figma Console MCP focuses on design-system operations:

  • Deterministic checks: design-code parity, accessibility (canvas and code), and design-system health

  • Token export in 10 formats and DTCG import with round-trip variable IDs

  • Variable reads and writes on any Figma plan through the Desktop Bridge plugin

  • Component documentation with design and code history, and version-history diffs

  • Codebase → design system extraction

  • Plugin console capture, selection tracking, and multi-file execution (Local Mode)

📖 Full comparison


🛤️ Roadmap

Current Status: v1.46.0 (Stable) - Production-ready. Latest: shaders applied with properties set by name, figma_set_layout for auto layout and grid layout, OKLCH/Display P3 and other CSS colors on fills and strokes, and text wrap style and variable-font axes in figma_set_text (server-only). On top of v1.45.1's figma_get_code_layers no longer hangs on a file in a background window, and the tool docs were audited against every tool's real parameters (server-only). On top of v1.45.0's Motion tools — apply, read, remove and export Figma Motion animations, manage custom animation styles, write Timing and Easing variables from token files, and find code layers (server-only). On top of v1.44.2's Cloud sign-in requests library_assets:read, so component lookups by key work over OAuth (server-only). On top of v1.44.1's Cloud Mode accepting personal access tokens without the Current user scope, 403 errors name the missing scope, and setup guides for Codex, Gemini CLI and Antigravity (server-only). On top of v1.44.0's opt-in Streamable HTTP endpoint for Local Mode (FIGMA_MCP_HTTP_PORT, loopback only, optional bearer token) so several local clients share one server and its Figma connection (server-only). On top of v1.43.0's @modelcontextprotocol/sdk 1.32.1 and zod 4 clear all seven production security advisories, with tool behavior unchanged and Gemini-safe schemas (server-only). On top of v1.42.1's commands to a plugin stuck on a timed-out script fail fast with a busy message instead of queuing behind it, port-exhaustion eviction ends the least recently used server instead of the oldest, and figma_execute accepts up to a 300 s timeout (server-only). On top of v1.42.0's figma_get_comments returning compact threads (root + replies, newest activity first) with node_id, thread_id and since filters and limit/offset paging, 30 threads by default; summary counts are per thread (server-only, PR #139). On top of v1.41.5's component-set analysis reporting gradient/image/paint-opacity, corner radius, typography and label text, swapped spacing tokens, nested layer geometry and vector shape changes (re-import the plugin). On top of v1.41.4's variant background/stroke and auto-layout changes. On top of v1.41.3's component-set analysis reporting changes inside nested layers (instance swaps, nested token changes, opacity on the variant itself) and no longer reports a layer hidden in every variant as a change (re-import the plugin). On top of v1.41.2's design-system summary and figma_get_token_values report the file's tokens (they always reported 0) (server-only). On top of v1.41.1's component-set analysis reports real variant differences (Figma's default variant, size and layer changes), component loading no longer times out on large files (throttled plugin timers), relevance-ranked component search, and figma_get_variables paging that works with format: "full" (re-import the plugin for the component fixes). On top of v1.41.0's Cloud Mode sign-in hardening (per-session tokens on /sse, single-use authorization codes bound to client, redirect URI and PKCE, a consent page for unrecognized destinations), a script-execution fix in the accessibility scanner, figma_import_tokens refusing empty imports and scoping replace deletes to imported collections, figma_arrange_component_set no longer deleting other arranged sets, live variable reads for token export/import, Windows orphan-server exit (PR #140), and fileKey for the Slots tools (PR #112) (server-only, no plugin re-import). On top of v1.40.9's composed colors (a color variable set to another color at an opacity, "grey/900 at 50%") export and import with the link to the primitive intact — color-mix() in CSS/Tailwind v4, rgba() in SCSS, an alpha modifier in Tokens Studio, the resolved color plus the composition in DTCG — where the export previously failed or wrote [object Object] (server-only, no plugin re-import). On top of v1.40.8's min/max width and height survive every way of extracting a component as JSON — the design system kit, the reconstruction format and figma_get_file_data now carry them, design-code parity compares them, and the reconstruction format returns real geometry again instead of 50×50 placeholders when the plugin is connected (server-only, no plugin re-import). On top of v1.40.7's clearer Color Tokens table in generated docs — layers revealed by a boolean property are printed once under that property, and stroke/fill rows name the nested instance they belong to (server-only, no plugin re-import). On top of v1.40.6's overrides in extended variable collections are visible (previously reported as nonexistent), and a third round of generated-doc fidelity fixes — radius tokens read per corner, boolean props compared in Design-Code Parity, source links pinned to a commit, hidden layers linked to the property that shows them (server-only, no plugin re-import). On top of v1.40.5's clean dependency audit for the npm package — Worker-only dependencies (@cloudflare/puppeteer, which pulled in a high-severity extract-zip advisory with no upstream fix, and agents) no longer install for npm users, so npm install figma-console-mcp audits at 0 vulnerabilities and is 64 MB instead of 173 MB; the server also reports its real version to MCP clients instead of 0.1.0 (server-only, no plugin re-import). On top of v1.40.4's fixes found by live-testing v1.40.3 on hard production components — tools given a fileUrl now read variables, descriptions and annotations from THAT file rather than whichever file is active (previously every token name could vanish, or on an id collision come from the wrong file; figma_get_component could return a different component), a tool result over 16 MB no longer disconnects the server, anatomy labels sizing by the layout's real axes, and the icon/typography/anatomy output stays readable on large components (server-only, no plugin re-import). On top of v1.40.3's fidelity fixes for generated component docs on harder components — hidden layers are labeled instead of documented as rendered, one-sided borders report the weight that actually renders, typography and layer structure are compared across every variant instead of read from the first, gradients/shadows/opacity are no longer silently dropped, truncated trees say so, and SLOT properties are listed (server-only, no plugin re-import). On top of v1.40.2's data-loss fix for figma_export_tokens — with a different file active in Figma than intended, an export could replace a real token file with an empty one (or with another file's tokens) and report success; exports now refuse to write when a requested collection is missing, when the export is empty, when the target was generated from a different Figma file, or when overwriting would destroy tokens the export doesn't manage, and strategy: "merge" — documented as preserving code-only tokens but never implemented — is now a genuinely safe default (server-only, no plugin re-import). On top of v1.40.1's accuracy fixes for generated component docs across variants — a descendant's fill (typically an icon's) could be documented as a variant's Background, Color Token headings kept only a property literally named Variant, spacing was read from the first variant alone, and icons were only detected by layer name — plus figma_export_tokens accepting a file path as outputPath instead of failing with a raw EEXIST or silently creating a directory (server-only, no plugin re-import). On top of v1.40.0's design system extraction from production codebases — seven Local-Mode figma_ds_* tools that scan one or more apps (framework/styling/vendor detection, usage-ranked component inventory classified vendored/wrapped/pure-vendor/bespoke, variant inference from real call sites, duplicate detection, and an architecture pass separating UI-kit specializations from the missing generic primitives), mine the de-facto styling into DTCG tokens with per-token provenance (multi-mode CSS custom properties, SCSS, Tailwind config, shadcn HSL triples, utility-class frequency mining valued from the app's own theme), scaffold the design-system package with showcase docs pages, wire a fresh Storybook workshop to the app's real theme layers and fonts, deep-extract components for porting with CSF3 story scaffolds, verify with deterministic fidelity evals, and persist porting progress across sessions — the extracted tokens import straight into Figma variables via figma_import_tokens. On top of v1.39.1's fix for a plugin-update banner that could never be cleared — an older server instance nagging a newer plugin to re-import, which only ever installs the same or a newer plugin. On top of v1.39.0's multi-file execution — figma_execute_across_files runs one script against several Desktop Bridge-connected files concurrently (four files x 2s of work in ~3s, not ~8s), and figma_execute takes an optional fileKey to target a single file without moving the active file or releasing target lock; targeting must be explicit (fileKeys or allFiles: true), so nothing fans out to files you did not name. From community PR #107 by @Wolfr. Ships with a relay fix: handleResult() in the plugin's ui.html rebuilt each response field by field and silently dropped resultAnalysis and fileContext, so the resultAnalysis.warning check that figma_execute's own description tells callers to perform has never been possible (re-import manifest.json for those two fields; everything else works without it). On top of v1.38.2's connection-stability fix — the server's own orphan reaper was terminating healthy MCP servers because its liveness probe used an IPv4 literal while the server binds the IPv6 loopback, which turned every kill-safety gate into a rubber stamp; this was the cause of recurring "Server disconnected" errors across all MCP clients. Alongside v1.38.1's fix for the shared-library variable tools, which had silently reported zero collections since v1.29.0 and reported failed imports as successes. On top of v1.38.0's ongoing component changelogs in generated docs — figma_generate_component_doc takes an opt-in history parameter that pulls per-component design history from Figma version history (each version diffed and scoped to that component, so renames, added properties, and token bindings show up as rows) alongside code history from git log on the component's source files, rendered as a ## History section with design, code, and release-note tables. Prefers labeled versions, falls back to auto-saves when a file has none, and is off by default so existing calls are unchanged (server-only, no plugin re-import). On top of v1.37.x's design-system health audit for every client — figma_audit_design_system_report runs the dashboard's deterministic six-category scoring engine and returns the report as data with per-finding remediation, live-first fileKey-verified data (source disclosed), chunked per-category drill-down, and a 5-minute cache (server-only, no plugin re-import). On top of v1.36.0's target lock for multi-file parallel work — — figma_navigate takes a lock: true flag that pins the active file so an AI agent can work in one file while you work in another without commands routing to the wrong file. On top of v1.35.0's Figma Slots write support — create, inspect, populate, and reset Slots (GA at Config 2026) via 5 new tools (figma_create_slot, figma_get_slots, figma_append_to_slot, figma_reset_slot, figma_add_slot_property), live-validated against the GA Plugin API and based on community PR #77. On top of v1.34.0's Bidirectional Token Sync v2 + DTCG 2025.10 — figma_import_tokens applies the complete diff plan (creates missing collections/variables, applies renames, writes real VARIABLE_ALIAS references, and deletes only under explicit replace), figma_export_tokens speaks the DTCG 2025.10 dialect on request (legacy default byte-identical), variable scopes/codeSyntax round-trip via $extensions, figma_setup_design_tokens accepts alias values via DTCG brace references, and figma_create_component_set builds a full variant set from an axes matrix in one call. On top of the v1.33.x line: version-handshake fix (re-import banner only fires when plugin files actually changed), security dependency sweep, and the v1.33.0 connection UX overhaul (honest status pill derived from live connection state, /health auto-discovery with self-healing reconnect) + a 33-fix full-codebase audit (lossless DTCG multi-mode round-trips, cross-collection alias resolution, branch-URL correctness across REST tools, cache-poisoning and CSWSH fixes, bridge-first screenshots). Built on WCAG-accurate accessibility auditing (line height below 1.5× is no longer mis-flagged as a failure; readability hints decoupled from conformance checks and scoped to multi-line text; code-side WCAG 1.4.12 check), a self-healing Desktop Bridge connection (zombie-process reaper + auto-reconnect watchdog — fixes the recurring "not connected until restart" bug), native variable binding on fills/strokes + typography control in the write tools, shared-library inspection (key-based component resolution + library variable read/import without Enterprise plan), 10-format token export pipeline (DTCG, CSS, Tailwind v4, Tailwind v3, SCSS, TS module, JSON flat/nested, Style Dictionary v3, Tokens Studio), bidirectional Figma↔code token sync, version history & time-series awareness, FigJam + Slides support, Cloud Write Relay, Design System Kit, WebSocket-only connectivity, smart multi-file tracking, 130 tools (Local) / 105 tools (Cloud) / read-only subset (Remote), Comments API, cross-MCP identity disambiguation, and MCP Apps.

Recent Releases:

  • v1.46.0 - figma_list_shaders, figma_apply_shader (properties by name), figma_set_layout (auto layout and grid), CSS colors on fills/strokes, text wrap and variable-font axes (#150). Server-only.

  • v1.45.1 - figma_get_code_layers no longer hangs on background-window files (#149); tool docs audited against real parameters (#151). Server-only.

  • v1.45.0 - Motion tools (apply, read, remove, export MP4/GIF/WebM, custom animation styles), Timing/Easing token import and writes, easing export fix, and figma_get_code_layers (#147). Server-only.

  • v1.44.2 - Cloud sign-in requests library_assets:read; component lookups by key work over OAuth. Server-only.

  • v1.44.1 - Cloud Mode accepts PATs without current_user:read; 403s name the missing scope; complete token scopes and Codex/Gemini CLI/Antigravity setup. Server-only.

  • v1.44.0 - Opt-in Streamable HTTP endpoint for Local Mode (FIGMA_MCP_HTTP_PORT) so local clients can share one server (#48). Server-only.

  • v1.43.0 - @modelcontextprotocol/sdk 1.32.1 and zod 4: 0 production advisories (#141). Server-only.

  • v1.42.1 - Fail fast while the plugin is stuck on a timed-out script (#94); evict the least recently used server, never one in use (#69); figma_execute timeout up to 300 s. Server-only.

  • v1.42.0 - figma_get_comments compact threads with node/thread/date filters and paging, 30 threads by default (PR #139 by @OAPrilepa). Server-only.

  • v1.41.5 - Component-set analysis diffs paints (gradients, images, opacity), corner radius, typography and label text, swapped tokens (tokens), nested size/position/rotation and vector shapes. Plugin re-import.

  • v1.41.4 - Component-set analysis diffs the variant's own fill/stroke (button backgrounds) and auto-layout (layout). Plugin re-import.

  • v1.41.3 - Component-set analysis diffs nested layers by path (instance swaps, nested fill/stroke tokens), variant-level opacity, and visibility in both directions; a layer hidden in every variant is no longer reported as a change. Plugin re-import.

  • v1.41.2 - Design-system summary and token values read the bridge's variables response correctly (always 0 tokens before). Server-only.

  • v1.41.1 - Component-set analysis finds Figma's default variant and diffs size/layers (#121); component loading drops throttled setTimeout yields and uses native search — 300s timeouts → ~1.5s (#120); summary fails loudly; search ranked by relevance; figma_get_variables full-format paging and one pagination shape (#98, #99); deep extraction mixed-text fix and unlimited depth (PRs #85, #86 by @DarWiM). Plugin re-import for component fixes.

  • v1.41.0 - Security & data-safety. Cloud Mode: /sse sessions use their own token (a shared slot let REST calls run with another user's token), authorization codes are random/single-use/10-minute and bound to client_id + redirect_uri + PKCE S256, unregistered redirects refused, consent page for other registered destinations, callback error page escaped. Local: accessibility scan no longer executes scanned scripts; figma_import_tokens refuses 0-token imports and scopes replace deletes to imported collections; figma_arrange_component_set replaces only its own set's arrangement; token export/import read variables live; stdin-EOF exit (PR #140 by @RomanOdokienko); Slots fileKey (PR #112 by @Wolfr); batch-create aliases. Server-only. Reported in #104, #122, #53, #91, #116.

  • v1.40.9 - Composed colors (color variable = another color at an opacity): export keeps the link in CSS/Tailwind v4/SCSS/Tokens Studio/DTCG and the resolved color elsewhere; import writes the composition back; resolver, audit, contrast and token-browser fixes; aliased colors no longer read as black in the design-system summary. Server-only. Reported by Isabella Minzly.

  • v1.40.8 - Min/max sizing in every JSON extraction path (design system kit, reconstruction format, figma_get_file_data, component docs) and in design-code parity; reconstruction reads the full REST tree with real geometry, alignment, hidden layers and absolute positioning; nodeIds honored by the file-data tools; Cloud Mode figma_diagnose on /mcp. Server-only. Reported by Brett Cooper.

  • v1.40.7 - Color Tokens readability: a layer shown by a boolean property is printed once under that property when identical across variants (kept per variant when it differs); paints on nested instances carry the instance's variant, and same-named fills/strokes are qualified by instance. Server-only. Reported by Robin Di Capua.

  • v1.40.6 - Extended collections + doc fidelity. figma_get_variables reads extended variable collections (overrides live on the collection; they were invisible and reported as nonexistent) — summary, per-collection resolved values marked overridden/inherited, per-variable overrides; the mode filter no longer drops 0/false values; figma_export_tokens explains instead of emitting empty sets. figma_generate_component_doc: radius and per-side stroke bindings read per corner/side, Design-Code Parity compares booleans and never prints an empty section, source links pinned to a commit (no raw relative paths, no local paths, credentials stripped), hidden layers linked to the boolean that shows them, same-named layers qualified by instance. Server-only. Reported by Brett Cooper and Robin Di Capua.

  • v1.40.5 - Clean dependency audit. @cloudflare/puppeteer (→ @puppeteer/browsers → extract-zip, high, no upstream fix) and agents were regular dependencies but are only used by the Cloudflare Worker; they are now devDependencies and the Worker build is excluded from the npm package, so a fresh install audits at 0 vulnerabilities (was 4 high) and drops from 173 MB to 64 MB. The local server now reports its real version to MCP clients instead of 0.1.0. A new test guards both directions of the dependency split. Server-only. Reported by Daniel Westerlund.

  • v1.40.4 - Live-test fixes. Tools given a fileUrl (figma_generate_component_doc, figma_get_component, figma_get_component_for_development) read bridge data from the ACTIVE file instead of the named one — token names vanished, and on an id collision another file's names, description, annotations or even component were returned; they now target the named file and fall back to REST. A tool result over 16 MB disconnected the server for the session (the client closes the transport); results are now size-capped centrally with an actionable error. Anatomy sizing labels follow the real layout axes (vertical layouts were mislabeled); icons are grouped, counted and named by the glyph in the slot; typography rows are identified by (element, style); identical sibling layers collapse to ×N. Found by testing on hard production components. Server-only.

  • v1.40.3 - Component-doc fidelity on harder components. figma_generate_component_doc: hidden layers labeled rather than documented as rendered; border width honors individualStrokeWeights (a tab underline is 4px bottom, not the vestigial scalar) and is reported only where a stroke is painted; typography and anatomy compared across every variant (an Applies to column; one tree per distinct layer structure) instead of read from the first; gradients, images, shadows, blurs and opacity reported instead of dropped; fetch depth raised from 4 to 8 with an explicit note when a tree may be cut off; boolean-valued variant properties keep their name; Configurable Properties renders for variant-only sets and lists SLOT properties; every icon shown, not just the first; Design-Code Parity compares property values (it could report a property name as a missing variant); placeholder status/version/description no longer asserted. Server-only. Reported by Robin Di Capua.

  • v1.40.2 - Token export data-loss fix. figma_export_tokens reads from whichever file is active in Figma Desktop; with the wrong one focused it could overwrite a real token file with an empty document — or, for CSS/SCSS/Tailwind/TS outputs, with another file's tokens — and report success: true. Exports now refuse (writing nothing) when a requested collection isn't in the file that was read, when the export is empty, when the target was generated from a different Figma file (generated files now record their source), when a DTCG target can't be parsed or would be replaced by a different kind of output, or when overwriting would destroy hand-added tokens or another collection's tokens. strategy: "merge" had been documented as preserving code-only tokens but was never implemented; it is now the safe default and replace is the explicit override. Every response reports the source Figma file. Server-only. Reported by Isabella Minzly; two further loss paths found in code review.

  • v1.40.1 - Component-doc variant accuracy + token export file paths. figma_generate_component_doc: Background now comes only from the variant's own fills (a transparent outline/ghost variant no longer borrows its icon's color), Color Token headings name every variant property under any property names, Spacing Tokens are compared across all variants (varies by **Size**: …, with a Spacing Inconsistencies list for properties tokenized on some variants and hardcoded on others), and icons resolve from the main component and INSTANCE_SWAP slots rather than a layer name containing "icon". figma_export_tokens: an outputPath that is an existing file or ends in a token-file extension is written as that exact file; multi-file exports into a file path are rejected before anything is written. figma_search_components no longer reports a failed component load as a successful empty search. Server-only. Reported by Robin Di Capua and Isabella Minzly.

  • v1.40.0 - Design System Extraction. Seven new Local-Mode-only tools that turn a production codebase into a design system, plus the supporting extraction engine. figma_ds_analyze scans one or more app codebases: framework/styling/vendor-layer detection (React/Next/Angular/Web Components; Tailwind v3/v4, CSS Modules, SCSS, Emotion, styled-components; shadcn/ui, Radix, MUI, Chakra…), a usage-ranked component inventory classified vendored/wrapped/pure-vendor/bespoke with prop contracts, variant inference from real call sites, duplicate detection, iconography + typography capture, and an architecture classification separating a UI kit from a design system (atomic levels, specializations like FollowButton → Button, missing generic primitives). figma_ds_extract_tokens mines de-facto styling into DTCG tokens — multi-mode CSS custom properties across .dark/[data-theme] conventions, SCSS variables, Tailwind config values, shadcn HSL triples, Tailwind utility-class frequency mining valued from the app's own theme, frequency-promoted raw values — with per-token provenance in $extensions, importable straight into Figma variables via figma_import_tokens. figma_ds_scaffold generates the package (token files via the shared formatters, token/typography/iconography showcase pages); figma_ds_setup_storybook wires a fresh Storybook workshop to the app's real theme layers and fonts; figma_ds_extract_component produces per-component porting manifests with CSF3 story scaffolds; figma_ds_verify gates the result with deterministic fidelity evals plus Figma round-trip readiness; figma_ds_status persists porting progress across sessions. Also fixes the CSS/SCSS/Tailwind v4 formatters quoting CSS functional expressions (a quoted cubic-bezier(...) silently kills transitions — affects figma_export_tokens too). Server-only, no plugin re-import.

  • v1.39.1 - Plugin update banner could never be cleared. computePluginUpdateAvailable() was a bare inequality with no direction check, so a server whose bundled plugin copy was OLDER than the connected plugin still told the user to re-import — which only ever installs the same or a newer plugin. Not an edge case: the 9223–9232 port range keeps several server instances alive, BUNDLED_PLUGIN_VERSION is parsed once at module load, and every server left running from before an upgrade nags a correctly-updated plugin. Reproduced live with four leftover v1.38.2 servers against a freshly re-imported 1.39.0 plugin. Now flags only when the bundled copy is genuinely newer. Server-only, no plugin re-import. 1452 tests.

  • v1.39.0 - Multi-file execution. New figma_execute_across_files runs one script against several Desktop Bridge-connected files concurrently, with per-file error isolation and independent timeouts (verified live: four files × 2s of work in ~3.0s, all dispatches within 5ms — versus ~8s serialized). figma_execute gained an optional fileKey to target a single non-active file without moving the active file or releasing target lock. Targeting is deliberately explicit — fileKeys or allFiles: true, no fan-out-to-everything default — because this runs arbitrary code in files you may be actively editing, including one pinned by target lock. The transport was already concurrent (sendCommand has always taken a target file key, and every hop is request-id keyed); only the tool layer was missing. Community PR #107 by @Wolfr. Also fixes a Desktop Bridge relay bug that silently dropped resultAnalysis and fileContext from every figma_execute response since they were introduced — making the resultAnalysis.warning check the tool's own description tells callers to perform impossible — guarded now by a test that reads the real plugin files. Re-import manifest.json for those two fields; the rest works without it, and mixed plugin versions degrade cleanly. 52 suites / 1443 tests.

  • v1.38.2 - Connection stability: the orphan reaper was terminating healthy MCP servers, the cause of recurring "Server disconnected" errors across every MCP client (reproduced in both Claude Code and Claude Desktop; unrelated to the Desktop Bridge plugin). The reaper probes a sibling's /health before deciding it is dead, but requested 127.0.0.1 while the WebSocket server binds localhost — resolved to the IPv6 loopback on dual-stack macOS, with nothing on IPv4 — so the probe reported "nothing responding" for healthy servers and every kill-safety gate built on it became a rubber stamp, including the one written to spare siblings after the machine sleeps. Three supporting defects: port files written non-atomically (a reader landing mid-rewrite got a parse error that both cleanup paths treated as "corrupt, delete it", stranding a healthy server), an orphan path that terminated fileless port-holders without probing at all, and a heartbeat that gave up permanently once its own file went missing. Fixes: probe localhost, atomic temp+rename writes, never delete on a parse failure, health-probe before the orphan kill in both paths, and self-healing re-advertisement guarded by in-process port ownership. Fully restart MCP clients after upgrading — older running builds keep the broken probe and still terminate healthy siblings. Server-only, no plugin re-import. 1422 tests (7 new regressions, each verified to fail pre-fix).

  • v1.38.1 - Shared-library variable tools fixed. figma_get_library_variables returned totalCollections: 0 for every file, on every plan, since it shipped in v1.29.0, and figma_import_library_variable reported failed imports as successes with id: undefined. Both read the Desktop Bridge's { success, result } envelope as if it were the injected script's bare return value, so Array.isArray() was always false, the __error guard was dead code, and .id was always undefined. The failure presented as a success with a plausible hint attached ("subscribe a library via the Assets panel"), which is why it survived two months unreported. Both tools now unwrap through a shared helper that also maps a bridge-level success: false onto the error path, so a plugin timeout surfaces as a real error instead of being swallowed as "0 collections"; an import yielding no id is now an explicit error. All 26 executeCodeViaUI call sites audited — only these two were affected. Test mocks had encoded a wire contract that does not exist, which is why CI stayed green; they now reproduce the real envelope, plus six regression tests verified to fail against the pre-fix source. Reported by Isabella Minzly. Server-only — no plugin re-import needed.

  • v1.38.0 - Ongoing component changelogs in generated docs. figma_generate_component_doc gained an opt-in history parameter that produces a real changelog instead of only echoing hand-written codeInfo.changelog rows: history.figma walks Figma version history and diffs each consecutive pair scoped to the component (reusing the same engine as figma_diff_versions, so a rename, a newly added component property, or a token binding each become a row), while history.git runs git log over the component's source files auto-derived from codeInfo.filePath / sourceFiles[]. Labeled versions are preferred but auto-saves are used automatically when a file has none — verified against a mature system with 72 auto-saves and 0 labeled versions, where a labeled-only walk yields nothing. Detailed-mode bindings group by property (binding one token across a 24-variant set otherwise produced 44 near-identical bullets in a single table cell). Both sources default off, so existing callers get byte-identical output. No new tools; server-only, no plugin re-import.

  • v1.37.0 - Design-system health audit for every MCP client. New figma_audit_design_system_report runs the Design System Dashboard's deterministic scoring engine (naming, token architecture, component metadata, accessibility, consistency, coverage) and returns the scored report as data — no MCP Apps support or ENABLE_MCP_APPS needed (the previous registration gated everything, making the audit unreachable outside Claude Desktop). Component data is now live-first: a fileKey-verified per-page bridge crawl (30s/page, failures isolated per page) with REST published-library fallback, and the chosen source is disclosed in the report (bridge-live / rest-published / none) so stale-publish scores can't masquerade as live ones. Output is token-safe by design: bounded summary, per-category chunked drill-down, clamped full JSON, 5-minute raw-data cache. Every finding carries a remediation verdict — auto-fixable by this MCP's write tools, fixable after a design decision, or manual — with the exact tools named. Scoring accuracy pass: variant components no longer poison PascalCase/casing checks, Title Case accepted, component-set names count toward core-component coverage, color/content/* recognized in contrast pairing, state synonyms (active≈pressed etc.), and ./_-prefixed internals excluded. Server-only — no plugin re-import needed.

  • v1.36.0 - Target lock for multi-file parallel work. figma_navigate gains a lock: true flag that pins the active file — new connections, reconnects, and the user's own selection/page changes in other files no longer move the command target, so an agent can safely write to one file while the user works in another. Auto-releases when the pinned file disconnects or navigates away; figma_list_open_files reports a targetLocked flag for pre-write guards. Server-only — no plugin re-import needed.

  • v1.35.0 - Figma Slots write support, closing #29 (the tracker's most-requested feature) via community PR #77 by @simonesalvucci, updated to the GA API. Five new tools: figma_create_slot (slot + auto-linked SLOT property; variants inside component sets supported — the beta restriction was lifted at GA), figma_get_slots, figma_append_to_slot (clone or create content into instance slots; snaps clones to the slot origin), figma_reset_slot, and figma_add_slot_property (retrofit an existing frame as a slot). Hardened by live validation: VARIANT defaultValue passthrough restored (Figma requires non-empty), destructive-path reorder in the append handler (content validated before clearExisting empties anything), relay whitelist fix for slot payloads. Plugin re-import required (code.js + ui.html changed).

  • v1.34.0 - Bidirectional Token Sync v2 + DTCG 2025.10. figma_import_tokens now applies the complete diff plan: missing collections and variables are created (with modes, inferred/recorded types, and values set in dependency order — aliases in a second pass), token-path renames route to the update phase by round-trip variable ID (no more create+delete pairs that would permanently destroy the original under replace), reference values write real { type: "VARIABLE_ALIAS", id } payloads via a four-tier resolver, and deletes are strictly gated behind strategy: "replace". figma_export_tokens gains dtcgDialect: "2025" (object-form colors from full-precision floats, object dimensions) while the legacy default stays byte-identical; import accepts both dialects unconditionally with dialect-insensitive diff normalization. Variable scopes + codeSyntax round-trip through $extensions["figma-console-mcp"]. figma_setup_design_tokens accepts DTCG brace references ("{color.blue.600}") that resolve to real aliases, including forward references. New tool figma_create_component_set builds a variant set from an axes matrix (or combines existing components) with Prop=Value naming, optional auto-arranged grid, and variant keys in the response — with count-scaled timeouts and rollback on failure. Plugin re-import required (code.js + ui.html changed — the component-set handler and relay). 183 tests across the token/write-tools suites.

  • v1.33.2 - Version-handshake false-positive fix. The v1.33.0 handshake compared the plugin's reported version against the server's package version, so server-only releases (like the v1.33.1 dependency sweep) flagged every up-to-date plugin as stale and pushed the re-import banner for files that hadn't changed. The server now compares against the PLUGIN_VERSION embedded in the figma-desktop-bridge/code.js it ships — exactly what a re-import would install — and PLUGIN_VERSION itself now means "last release in which plugin files changed" (release tooling bumps it only when figma-desktop-bridge/ actually changed since the last tag). figma_get_status gains transport.websocket.bundledPluginVersion; figma_diagnose blames the right version. No new tools, no plugin re-import required (one-time exception: if you re-imported at v1.33.1, the banner appears once more — clear it with one final re-import). 1245 tests passing (9 new).

  • v1.33.1 - Security dependency sweep. All runtime and critical npm audit alerts resolved via in-range bumps (ws 8.21.0, hono 4.12.27, undici 7.28.0, handlebars 4.7.9 — the lone critical, dev-only — plus lodash, path-to-regexp, basic-ftp, fast-uri, vite). wrangler deliberately held at 4.72.0 because newer versions require Node ≥22; the only residual audit findings are inside wrangler/miniflare's dev-time toolchain, which never ships in the npm package or Worker bundle. Supersedes dependabot PRs #81/#82/#84. No code changes, no API changes, no plugin re-import. 1236 tests passing unchanged.

  • v1.33.0 - Connection UX overhaul + full-codebase audit. The plugin's status pill now derives from live connection state instead of Figma's variables loading (it used to glow green with zero MCP servers connected); HTTP /health auto-discovery reconnects restarted servers automatically (including one-dead-among-live, previously a permanent dead end); a version handshake banners the plugin UI when a re-import is needed and surfaces the mismatch in figma_get_status/figma_diagnose; cloud pairing config survives plugin reopen and its status line is derived + labeled (no more orphaned "Disconnected" under a green pill); all plugin copy is designer-language. The audit fixed 33 verified issues: lossless DTCG multi-mode round-trips, set-qualified cross-collection aliases, TIMING/EASING mapped to DTCG duration/cubicBezier, two cache-poisoning bugs (the "search returns 0 components" reports), a CSWSH origin bypass (startsWith → exact match), post-sleep reaper kill-safety (plus a shell-free /health probe with os.devNull so Windows curl can't false-negative a healthy sibling), branch-URL correctness across REST tools, and bridge-first figma_take_screenshot. figma_arrange_component_set now rearranges variants in place so placed instances survive. No new tools; plugin re-import required (code.js + ui.html changed — and the new handshake makes this the last one you have to discover on your own). 1236 tests passing (33 new).

  • v1.32.1 - Documentation-generator fix reported by Robin Di Capua: figma_generate_component_doc documented colors as raw hex (with — in the Figma Variable column) even when fills/strokes were bound to variables, while spacing tokens documented correctly. Two root causes — an id→name lookup that read the wrong keys (.id/.name instead of variableId/variableName), and variable names only ever being sourced from the Enterprise-only REST /variables/local endpoint (403 elsewhere). The generator now resolves names via the Desktop Bridge Plugin API (works on every plan) and threads them through the States, Color Tokens, and Spacing tables, so real token names like color/content/default and spacing/1 appear. No new tools, no arg-shape changes, no plugin re-import required. 1203 tests passing.

  • v1.32.0 - Accessibility-audit correctness fix reported by Isabella (a11y collaborator): figma_lint_design was flagging line height below 1.5× as an accessibility failure on hundreds of components. That misreads WCAG 1.4.12 Text Spacing, which requires content to support user spacing overrides without loss — not that designs ship at 1.5× — so a sub-1.5 line height is not a conformance failure. Line/paragraph-spacing checks are now scoped to multi-line text (single-line labels and buttons exempt); readability hints (text-size, line-height, letter-spacing, paragraph-spacing) are decoupled from the wcag group into an opt-in best-practice group, so the default audit (['wcag','design-system','layout']) and rules: ['wcag'] return genuine conformance only; and a new code-side text-spacing-support advisory in figma_scan_code_accessibility flags fixed-px typography — where 1.4.12/1.4.4 are actually verifiable. No new tools, no arg-shape changes; plugin re-import required to pick up the new audit behavior (bridge protocol unchanged, so an un-updated plugin stays compatible). 1196 tests passing.

  • v1.31.0 - Fixes the most-reported reliability bug: the Desktop Bridge connection dropping and staying down until you closed the plugin, restarted your MCP client, or killed ports by hand. Root cause was zombie MCP server processes squatting the WebSocket port range (9223–9232) after a bad shutdown. The reaper now escalates SIGTERM → SIGKILL (a hung server that ignores graceful shutdown can no longer survive), sweeps the range every 5 minutes via an unref'd periodic reaper, and a shutdown backstop prevents a server from zombifying in the first place. The redesigned Desktop Bridge plugin adds an auto-reconnect watchdog (re-probes every ~12s while disconnected), a context-aware Pause / Resume / Reconnect button, and a live server-count badge. No new tools; plugin re-import required (bridge ui.html + code.js changed). 1190 tests passing, including an integration test that spawns a real SIGTERM-ignoring process and asserts the reaper kills it.

  • v1.30.0 - Native variable binding + typography in the structured write tools, closing the Plugin API gaps that used to force raw figma_execute. figma_set_fills / figma_set_strokes accept a variableId to bind a fill/stroke to a color variable via setBoundVariableForPaint (any plan, via the bridge). figma_set_text gains fontFamily / fontStyle with space-insensitive normalization (SemiBold → Semi Bold) and graceful Regular fallback. figma_instantiate_component pre-loads instance text fonts before applying overrides (fixes silently-skipped text overrides on non-Regular weights) and returns a warnings array for failed overrides. Also fixes a mixed-font crash in figma_set_text and a ui.html relay that was dropping new message fields. No new tools; plugin re-import required (bridge ui.html + code.js changed). Validated live; 1185 tests passing.

  • v1.29.2 - Bug fix: figma_generate_component_doc now renders Figma component descriptions faithfully and reliably tags atomic-design level. Single-# headings in descriptions render as real sections (Usage Guidelines, Implementation Considerations, Accessibility Requirements, Content Configuration) instead of leaking as - # Heading list items; frontmatter description takes the first sentence instead of truncating on the word "Accessibility"; the generated Figma URL no longer doubles ?node-id=; and the component's atomic level (atom/molecule/organism/template) is auto-detected via a single ids=<node> file request + divider walk-back, with no dependency on library publishing. No new tools; plugin re-import not required.

  • v1.29.1 - Bug fix: figma_get_design_system_kit now resolves variables bridge-first (Desktop Bridge / cloud relay → REST fallback) instead of calling the Enterprise-only Variables REST API directly. Non-Enterprise users no longer hit a 403 on the kit's token section when a bridge is connected, and a REST 403 now points the caller back to the bridge instead of dead-ending. 7 new tests, 1185 total passing. No new tools; plugin re-import not required.

  • v1.29.0 - Shared library inspection: three new tools close the gap between "I have a component key" and "I can actually use it." figma_get_library_component_by_key resolves any 40-char component key to full componentPropertyDefinitions + variants (with their published keys) + per-variant visual specs — without needing the source library file's URL. figma_get_library_variables lists library tokens via Plugin API (works on every Figma plan; the REST equivalent is Enterprise-only). figma_import_library_variable imports a library token to the current file so it can be bound to nodes. 27 new tests, 1178 total passing. Plugin re-import optional.

  • v1.28.1 - Bug fix patch surfacing from live-fire testing of the v1.28.0 formatters against multi-tier semantic-token design systems. Fixes: Tailwind v3 emitted empty module.exports for alias-only sets (now resolves alias chains to literal values); TypeScript module + JSON flat + JSON nested formatters emitted "{alias.path}" strings as literal values (now resolves); Tailwind v4 namespace-prefix doubling (--color-theme-color-X is now --color-theme-X). Adds resolveAliasChain public helper. 1151 tests still passing.

  • v1.28.0 - Full formatter coverage for figma_export_tokens. Seven new output formats: Tailwind v4 @theme inline, Tailwind v3 config, SCSS variables, TypeScript module, JSON flat/nested, Style Dictionary v3, Tokens Studio multi-file. Combined with DTCG + CSS variables, ships 10 fully-implemented output formats with zero third-party build-tool dependencies. Tool description updated, docs/tools.md table all-green. 22 new Jest tests, 1151 total passing.

  • v1.27.1 - Documentation patch. No code behavior changes. Sweeps stale "Phase 1 ships with DTCG only" claims across tool descriptions, error messages, and internal comments after CSS variables formatter and the apply phase shipped during the v1.27.0 dev cycle. Refreshes README banner + capability bullets + roadmap. Adds Phase 3.5: Stale-Content Audit to the release runbook so future releases get a strict pre-publish grep sweep across banners, tool descriptions, error messages, source comments, and tool-count consistency.

  • v1.27.0 - Bidirectional token sync: figma_export_tokens + figma_import_tokens replace Style Dictionary and Tokens Studio's export pipeline. Canonical DTCG JSON + CSS custom properties. Diff-aware merge with round-trip ID preservation via $extensions["figma-console-mcp"]. Apply phase pushes hex-value edits back to Figma via the plugin bridge. Verified end-to-end against 713-token + 280-token design systems.

  • v1.26.0 - Internal cleanup + cross-MCP identity: Local-mode CDP/Puppeteer transport removed entirely (WebSocket-only). figma_diagnose tool for designer-readable health checks. Every response tagged _mcp: "figma-console-mcp"; errors prefixed [figma-console-mcp] so attribution is unambiguous when running multiple Figma MCPs. Plugin status pill now reads Local · ready / Cloud · ready / Local + Cloud · ready. Net diff: −7,299 lines, plugin re-import optional.

  • v1.25.0 - Description + Dev Mode annotation tracking in figma_diff_versions via plugin session buffer. Description and annotation edits made during a session now appear in diff output (REST API doesn't return these — bridged through the plugin's documentchange listener).

  • v1.24.0 - Honest scope coverage on version diffs. scope_coverage object surfaces what figma_diff_versions does and doesn't track; always-on coverage warnings prevent silent invisibility on token-value changes and component-instance placements.

  • v1.23.0 - Version History & Time-Series Awareness: 6 new tools (list versions, snapshot any past version, diff two versions for component/binding deltas, generate markdown changelogs, trace property/variant introduction via binary-search blame walker). Author attribution flows from autosaves, not just labeled releases.

  • v1.17.0 - Figma Slides support: 15 tools for managing presentations.

  • v1.16.0 - FigJam support: 9 tools for creating and reading FigJam boards.

  • v1.12.0 - Cloud Write Relay: web AI clients can create and modify Figma designs without Node.js.

  • v1.11.0 - Complete CDP removal, improved multi-file active tracking with focus detection.

  • v1.10.0 - Multi-instance support (dynamic port fallback 9223–9232, multi-connection plugin, instance discovery).

  • v1.9.0 - Figma Comments tools, improved port conflict detection.

  • v1.8.0 - WebSocket Bridge transport (CDP-free connectivity), real-time selection/document tracking.

  • v1.7.0 - MCP Apps (Token Browser, Design System Dashboard), batch variable operations, design-code parity tools.

Coming Next:

  • Token sync — non-DTCG input parsers - Parsers for non-DTCG input (Tokens Studio, CSS vars, Tailwind v4, Tailwind v3 config, SCSS, Style Dictionary v3, JSON flat/nested) so figma_import_tokens can ingest the same formats it exports. (The import-side apply expansion — creates, replace-gated deletes, alias-target updates — shipped in v1.34.0.)

  • Cross-library variable resolution - Resolve cross-library aliases via getVariableByIdAsync so they render as real var(--target) references in exports instead of comments.

  • Component template library - Common UI pattern generation

  • Visual regression testing - Screenshot diff capabilities

📖 Full Roadmap


💻 Development

git clone https://github.com/southleft/figma-console-mcp.git
cd figma-console-mcp
npm install

# Local mode development
npm run dev:local

# Cloud mode development
npm run dev

# Build
npm run build

📖 Development Guide


📄 License

MIT - See LICENSE file for details.


Available Tools

130 tools
figjam_auto_arrangeA

Arrange nodes on a FigJam board in a grid, horizontal row, or vertical column layout. Use after batch-creating elements to organize them neatly.

NameRequiredDescriptionDefault
layoutNoLayout type: grid, horizontal, or verticalgrid
columnsNoNumber of columns for grid layout (defaults to sqrt of node count)
nodeIdsYesArray of node IDs to arrange (max 500)
spacingNoSpacing between nodes in pixels

TDQS

A3.5/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 disclosure burden for a mutating tool that repositions user content. It says nothing about whether existing positions are overwritten, whether the move is undoable, how invalid or cross-board node IDs are handled, or the 500-node ceiling (left to the schema). That's a significant gap for a repositioning operation.

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

Conciseness5/5

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

Two sentences, zero filler, with the capability statement front-loaded ahead of the usage hint. Every sentence earns its place.

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

Completeness3/5

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

With no output schema and no annotations, the description is the only place to learn behavior, and it stops short of covering what the tool does not arrange (sections, tables, connectors) or what the result looks like. The fully documented schema compensates for parameter gaps but not behavioral ones.

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 `layout`, `columns`, `spacing`, and `nodeIds` (with its 500 cap and sqrt default) are already fully documented in the schema. The description adds only a restatement of the layout values; baseline 3 applies.

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

Purpose4/5

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

Names a specific verb (arrange) and resource (nodes on a FigJam board) and enumerates the three layout modes, which matches the `layout` enum exactly. It's clearly distinguishable from sibling figjam_* tools, which all create content rather than reposition it, though it never says so explicitly.

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

Usage Guidelines4/5

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

"Use after batch-creating elements to organize them neatly" gives a concrete trigger and implies the workflow position relative to figjam_create_stickies/figjam_create_section. There are no exclusions or stated alternatives, so it falls short of a 5.

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

figjam_create_code_blockA

Create a code block on a FigJam board. Use for sharing code snippets, config examples, or technical documentation in collaborative boards.

NameRequiredDescriptionDefault
xNoX position on canvas
yNoY position on canvas
codeYesThe code content
languageNoProgramming language (e.g., 'JAVASCRIPT', 'PYTHON', 'TYPESCRIPT', 'JSON', 'HTML', 'CSS')

TDQS

A3.8/5.0
Behavior3/5

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

Since no annotations are provided, the description carries the full burden. It is accurate but non-technical; it doesn't disclose operational behaviors like placement defaults (for x, y), content sanitization, or rate limits. It avoids contradiction but provides limited deep behavioral insight.

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 highly concise. It is a single, focused paragraph where every sentence contributes directly to defining the tool's function and scope, without filler.

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

Completeness4/5

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

The description is nearly complete for a creation tool. However, it lacks contextual information regarding the default behavior for positioning (x, y) coordinates if they are omitted, which is a key functional detail for a canvas-based editor.

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

Parameters3/5

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

The input schema already has 100% description coverage. The description adds baseline semantic value by defining what the parameters ('code', 'language') are semantically intended for, specifically linking them to code snippets and technical formats.

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 and the resource ('Create a code block on a FigJam board'). It provides excellent semantic context by outlining common use cases like 'sharing code snippets' and 'technical documentation', which distinguishes it from general FigJam text tools.

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

Usage Guidelines4/5

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

It provides clear guidance on when to use the tool, focusing on specific scenarios (code, config, documentation). This helps the agent decide if a simple text box or a code block is more appropriate for the user's request.

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

figjam_create_connectorA

Connect two nodes with a connector line in FigJam. Use to create flowcharts, diagrams, and relationship maps.

Nodes must exist on the board (stickies, shapes, etc.). Use their node IDs from creation results.

Magnet positions: AUTO (default), TOP, BOTTOM, LEFT, RIGHT — controls where the connector attaches to each node.

NameRequiredDescriptionDefault
labelNoOptional text label on the connector
endMagnetNoMagnet position on the end nodeAUTO
endNodeIdYesNode ID of the end element
startMagnetNoMagnet position on the start nodeAUTO
startNodeIdYesNode ID of the start element

TDQS

A4.1/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It usefully discloses the prerequisite (nodes must pre-exist) and the attachment semantics (magnet positions with AUTO default), but says nothing about failure behavior for invalid node IDs, whether the call is idempotent, or what the response contains (e.g. the new connector's ID).

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?

Front-loaded with purpose, then prerequisite, then the magnet note in a short bolded block. Every sentence carries information, though re-listing the enum values already present in the schema is slightly redundant.

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

Completeness4/5

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

For a 5-parameter creation tool with no annotations and no output schema, the description covers purpose, prerequisites, ID sourcing and attachment options. The one meaningful omission is that, absent an output schema, it never tells the agent what is returned (such as the new connector's ID) for subsequent chaining.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns an extra point by explaining what the magnet parameters actually do ('controls where the connector attaches to each node') and where startNodeId/endNodeId values come from. The remaining gap is minor redundancy with the enum already listing AUTO/TOP/BOTTOM/LEFT/RIGHT.

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

Purpose5/5

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

States a specific verb and resource ('Connect two nodes with a connector line in FigJam') plus the domain of use. It is clearly distinguishable from the other figjam_* siblings such as figjam_create_sticky or figjam_auto_arrange, which create nodes rather than edges.

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

Usage Guidelines4/5

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

Names concrete scenarios (flowcharts, diagrams, relationship maps) and states the prerequisite that both nodes must already exist on the board, with IDs sourced from creation results. It does not explicitly point at a sibling (e.g. figjam_get_connections for verification), so it stops short of full when/when-not routing.

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

figjam_create_sectionA

Create a section on a FigJam board. Sections are containers that can hold other elements. Use for grouping related content.

Note: After creating a section, place elements inside it by setting their x/y coordinates within the section's bounds, then use figma_execute to call section.appendChild(node) to parent them.

NameRequiredDescriptionDefault
xNoX position on canvas
yNoY position on canvas
nameNoSection name/title
widthNoSection width in pixels
heightNoSection height in pixels
fillColorNoFill color as hex

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden, and it does disclose the key non-obvious behavior: creating a section does not automatically parent elements; you must set coordinates within its bounds and call section.appendChild(node). It also implies a node is returned. What it omits is where the section lands if x/y are omitted, and whether creation requires edit permissions or is undoable.

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

Conciseness5/5

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

Three tight sentences: purpose first, definition second, workflow note last and visually flagged. Every sentence earns its place, and the operational caveat is separated from the core statement rather than buried.

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

Completeness4/5

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

For a 6-parameter, all-optional creation tool with no annotations and no output schema, the description covers what is created and the subsequent parenting step. The one remaining gap is the return value — the workflow depends on receiving a section node, but the description never states that the created section (or its id) is returned.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter (x, y, name, width, height, fillColor) is already documented with ranges, defaults and hex pattern; the description adds nothing parameter-specific. The coordinate discussion in the note refers to child elements, not to this tool's own x/y semantics, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Create a section on a FigJam board') and immediately defines what a section is ('containers that can hold other elements'), which disambiguates it from siblings like figjam_create_shape_with_text or figjam_create_sticky. An agent can tell exactly what this produces without opening the schema.

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

Usage Guidelines4/5

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

'Use for grouping related content' gives a clear usage condition, and the note explains the required follow-up workflow (position children, then appendChild via figma_execute). However, no alternative or exclusion is named — e.g. nothing says whether to prefer figjam_auto_arrange or a shape-with-text container instead — so it stops short of full routing guidance.

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

figjam_create_shape_with_textA

Create a labeled shape on a FigJam board with optional size, colors, and font control. Use for flowchart nodes, process diagrams, and visual organization.

Shape types: ROUNDED_RECTANGLE (default), DIAMOND, ELLIPSE, TRIANGLE_UP, TRIANGLE_DOWN, PARALLELOGRAM_RIGHT, PARALLELOGRAM_LEFT, ENG_DATABASE, ENG_QUEUE, ENG_FILE, ENG_FOLDER

NameRequiredDescriptionDefault
xNoX position on canvas
yNoY position on canvas
textNoText label for the shape
widthNoWidth in pixels
heightNoHeight in pixels
fontSizeNoText font size in pixels
fillColorNoFill color as hex (e.g., '#E1F5EE')
shapeTypeNoShape type
strokeColorNoStroke/border color as hex
strokeDashPatternNoDash pattern as comma-separated numbers (e.g., '10,5' for dashed)

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden for a write operation, yet it discloses only that shapeType defaults to ROUNDED_RECTANGLE. It says nothing about where a shape lands when x/y are omitted (all 10 params are optional), what the call returns, whether a board must be open/focused, or permission requirements.

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 purpose and usage context are front-loaded in one tight sentence, which is good structure. The second paragraph re-lists all 11 enum values verbatim from the schema, which is largely redundant and pads the definition.

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?

There is no output schema and no annotations, and all parameters are optional, so an agent still lacks critical calling context: default placement when x/y are absent and what identifier is returned for later connector/shape operations. The purpose is well covered, but the operational picture is not.

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 every parameter is already documented with units, ranges, and hex patterns; the baseline is therefore 3. The description adds only the shapeType default and a loose grouping of 'size, colors, font', which is marginal value over the schema.

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

Purpose5/5

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

States a specific verb and resource ('Create a labeled shape on a FigJam board') plus the controllable attributes (size, colors, font). The explicit shape-type enumeration and the example use cases (flowchart nodes, process diagrams) make it unmistakable against siblings like figjam_create_sticky, figjam_create_section, and figjam_create_table.

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

Usage Guidelines4/5

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

'Use for flowchart nodes, process diagrams, and visual organization' gives concrete contexts where this tool is the right pick. It stops short of naming alternatives or exclusions (e.g., use figjam_create_sticky for notes, figjam_create_connector to link shapes), so there is no explicit routing rule.

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

figjam_create_stickiesA

Batch create multiple sticky notes on a FigJam board (max 200). Use this to populate boards from structured data (meeting notes, brainstorm ideas, etc.).

Colors: YELLOW, BLUE, GREEN, PINK, ORANGE, PURPLE, RED, LIGHT_GRAY, GRAY

NameRequiredDescriptionDefault
stickiesYesArray of sticky note specifications (max 200)

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It usefully discloses the 200-item ceiling and the allowed color set, but says nothing about the failure mode (partial creation? atomic?), whether positions are optional/who assigns layout, or what identifiers come back for the created notes.

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

Conciseness4/5

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

Two short blocks, front-loaded with the core action and the cap. The bolded color list is largely redundant with the enum already present in the schema, but it is compact and does not obscure the main statement.

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

Completeness4/5

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

For a single-array-parameter tool with full schema documentation and no output schema, the definition covers purpose, scale, and an example use case. The remaining gap is only the result/failure behavior of a batch mutation, which is modest given the schema does the structural work.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description only restates facts already encoded in the schema (maxItems: 200 and the color enum), adding no meaning such as default coordinate behavior or text length limits.

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?

States a specific verb and resource ('Batch create multiple sticky notes on a FigJam board') plus a hard cap of 200, which implicitly separates it from the singular figjam_create_sticky sibling. It never names that sibling or any other FigJam creation tool explicitly, so the differentiation is inferred rather than stated.

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?

'Use this to populate boards from structured data (meeting notes, brainstorm ideas, etc.)' gives a genuine when-to-use. However, with a singular figjam_create_sticky sibling, the obvious batch-vs-single decision is exactly the one an agent must make, and no alternative or when-not guidance is provided.

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

figjam_create_stickyB

Create a sticky note on a FigJam board. Only works in FigJam files.

Colors: YELLOW, BLUE, GREEN, PINK, ORANGE, PURPLE, RED, LIGHT_GRAY, GRAY (default: YELLOW)

NameRequiredDescriptionDefault
xNoX position on canvas
yNoY position on canvas
textYesText content for the sticky note
colorNoSticky color

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 disclosure burden, and it discloses only the file-type restriction. It says nothing about what happens when x/y are omitted (auto-placement?), whether the sticky lands on the current page or viewport, what permissions are needed, or whether it is trivially reversible. For a mutation tool with zero annotation coverage, 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.

Conciseness4/5

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

The core statement is front-loaded in the first sentence and the FigJam restriction follows immediately, with no filler. The color enumeration partly repeats the schema's enum list, a minor redundancy against an otherwise tight block.

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?

There is no output schema, so the description needn't explain return values, and the tool is simple with four flat parameters. Still, it leaves the default behavior of the optional x/y coordinates and the effect of the call on the board unaddressed, which is the main thing an agent would wonder about before invoking.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, and the description earns extra credit by surfacing the YELLOW default for `color`, which the enum in the schema does not express. It adds little else about `text` or the x/y positioning semantics, so it stops short of a 5.

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?

States a specific verb and resource ("Create a sticky note") and adds a real scope constraint ("Only works in FigJam files"), which lets an agent immediately rule it out for Figma design files. It does not, however, distinguish itself from the sibling `figjam_create_stickies`, so the singular-vs-batch distinction is left for the agent to infer from the names alone.

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 FigJam-only restriction is genuinely useful gating information, but there is no guidance on when to prefer this over `figjam_create_stickies` (bulk) or `figjam_create_shape_with_text`, nor any prerequisite such as requiring an open FigJam file. Usage is implied by the environment constraint rather than stated as a routing rule.

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

figjam_create_tableB

Create a table on a FigJam board with optional cell data. Use for structured data display, comparison matrices, and organized information.

Data format: 2D array of strings, e.g. [["Header1", "Header2"], ["Row1Col1", "Row1Col2"]]

NameRequiredDescriptionDefault
xNoX position on canvas
yNoY position on canvas
dataNo2D array of cell text content (row-major order)
rowsYesNumber of rows (1-100)
columnsYesNumber of columns (1-50)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, yet it discloses nothing about prerequisites (active FigJam file), what happens when `data` dimensions disagree with `rows`/`columns`, default placement when x/y are omitted, or cell-count limits. Only the data shape is explained, which is formatting, not 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?

Two short blocks, purpose first, format second; nothing is padded. The format example partly duplicates the schema's own row-major description, which is the only minor redundancy.

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

Completeness3/5

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

A 5-parameter creation tool with no annotations and no output schema needs the description to cover prerequisites and edge-case behavior, and it only covers the data format. An agent still cannot tell what happens on dimension mismatch or where the table lands if x/y are omitted, and nothing is said about the return value.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all five parameters; baseline 3 applies. The description restates the 2D row-major array format with an example, adding mild clarification but not resolving the real ambiguity—how `data` length relates to the required `rows` and `columns`.

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?

States a specific verb and resource—create a table on a FigJam board—and adds what the tool is for (structured data display, comparison matrices). It is clearly distinguishable from figjam_create_sticky or figjam_create_shape_with_text by the resource named, though it never explicitly contrasts with those siblings.

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?

"Use for structured data display, comparison matrices, and organized information" gives use-case context but reads as generic motivation rather than routing guidance. There is no statement of when to prefer this over stickies/shapes/code blocks, nor any prerequisite such as needing an open FigJam board.

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

figjam_get_board_contentsA

Read all content from a FigJam board. Returns stickies, shapes, connectors, tables, code blocks, and sections with their text content and positions.

Use this to understand what's on a board before modifying it, or to extract structured data from collaborative sessions.

Filters: Pass nodeTypes to limit results (e.g., ["STICKY"] for only stickies). Omit for everything.

NameRequiredDescriptionDefault
maxNodesNoMaximum nodes to return (1-1000, default: 500)
nodeTypesNoFilter by node types. Omit for all.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does disclose the shape of the returned data and the filter-to-empty-set behavior, which is genuine value. It omits the operational traits that matter for a read tool: the 500-node default cap and truncation behavior (only in schema), permission/auth requirements, and whether it fails on non-FigJam files.

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?

Front-loads purpose in the first sentence, then use cases, then filtering. Three tight blocks with zero filler and no repetition.

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

Completeness4/5

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

With only two optional parameters and no output schema, the description usefully compensates by describing the return payload. It is nearly complete, missing only permission/error context that the absent annotations would otherwise have covered.

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 both parameters are already documented, and the description largely restates them ("Omit for everything"). The one addition is a concrete example value (["STICKY"]), which is mildly helpful but marginal over the enum in the schema.

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

Purpose4/5

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

Specific verb+resource ("Read all content from a FigJam board") followed by an enumeration of what comes back (stickies, shapes, connectors, tables, code blocks, sections with text and positions). That clearly separates it from the figjam_create_* siblings, though it never distinguishes itself from figjam_get_connections, which covers overlapping connector/relationship data.

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

Usage Guidelines4/5

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

Gives two concrete use cases (understand a board before modifying it; extract structured data from collaborative sessions) and explains when to pass nodeTypes versus omitting it. It stops short of naming an alternative tool or stating exclusions, so an agent must still infer that figjam_get_connections is the right pick for relationship-only reads.

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

figjam_get_connectionsA

Read the connection graph from a FigJam board. Returns all connectors with their start/end node references and labels.

Use this to understand relationships, flowcharts, and diagrams. Returns edges as {startNodeId, endNodeId, label} plus a summary of connected nodes.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden; 'Read' plus 'Returns' establishes a safe read operation, and the return shape plus a 'summary of connected nodes' is disclosed. It omits which board is targeted (no params), whether large boards are truncated, and any permission prerequisites.

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?

Three short sentences, front-loaded with the action and the return shape. The second and third sentences partially repeat the 'returns connectors/edges' point, which is minor waste but not bloat.

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?

With no output schema and no annotations, the description does supply the edge shape, but it never says how the target FigJam board is determined (active file vs. selection) or how large graphs are handled. An agent could call it but may be unsure of scope.

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 takes zero parameters, so the baseline is 4. The description correctly leaves parameter discussion out rather than inventing any.

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?

States a specific verb and resource ('Read the connection graph from a FigJam board') and even the shape of what comes back (connectors with start/end node refs and labels). It is unambiguous about what it does, though it never contrasts itself with the overlapping figjam_get_board_contents sibling.

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?

One sentence gives implied context ('understand relationships, flowcharts, and diagrams'), which is genuine usage guidance but not explicit when/when-not rules. An agent is left to infer that this is the connector-only view versus the broader board contents tool.

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

figma_add_component_propertyA

Add a new component property to a component or component set. Properties enable dynamic content and behavior in component instances. Supported types: BOOLEAN (toggle), TEXT (string), INSTANCE_SWAP (component swap), VARIANT (variant selection), SLOT (freeform slot — prefer figma_create_slot for new slots).

NameRequiredDescriptionDefault
typeYesProperty type: BOOLEAN for toggles, TEXT for strings, INSTANCE_SWAP for component swaps, VARIANT for variant selection, SLOT for freeform slot areas
nodeIdYesThe component or component set node ID
descriptionNoProperty description (SLOT properties only)
defaultValueNoDefault value. Required for TEXT (string), INSTANCE_SWAP (component id), and VARIANT (a non-empty variant option name — Figma rejects empty). Optional for BOOLEAN (defaults false). Omit for SLOT.
propertyNameYesName for the new property (e.g., 'Show Icon', 'Button Label', 'Content')
preferredValuesNoPreferred components (INSTANCE_SWAP and SLOT only)

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full disclosure burden. It explains what properties are for (dynamic content in instances) and gives type semantics, but says nothing about whether adding a property mutates existing instances, whether the operation is reversible, what identifier comes back, or what error conditions are typical. That is a meaningful gap for an unannotated 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?

Three short sentences, purpose first, type catalogue second, the one caveat last. Nothing is padded and every clause carries information.

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

Completeness4/5

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

For a 6-parameter tool with full schema coverage and no output schema, the description covers purpose, type selection, and the main alternative. It stops short of stating the return value (e.g. the new property key) and the effect on existing instances, which an agent would still want.

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%, including per-parameter notes like defaultValue requirements per type, so the schema already does the heavy lifting. The description's type list largely duplicates the `type` enum description verbatim, adding little beyond it. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource ('Add a new component property to a component or component set') and then enumerates the supported property types with a plain-language gloss for each. An agent can tell this apart from figma_edit_component_property / figma_delete_component_property and is pointed at figma_create_slot for the slot case.

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?

It gives one explicit routing rule ('prefer figma_create_slot for new slots'), which is genuinely useful, but it never mentions figma_add_slot_property (a close sibling that also targets slots) or says when to use this tool versus edit/delete. Prerequisites — that nodeId must be an existing component or component set, that property names should be unique — are left implicit.

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

figma_add_modeA

Add a new mode to an existing Figma variable collection. Modes allow variables to have different values for different contexts (e.g., Light/Dark themes, device sizes). Requires the Desktop Bridge plugin to be running.

NameRequiredDescriptionDefault
modeNameYesThe name for the new mode (e.g., 'Dark', 'Mobile', 'High Contrast').
collectionIdYesThe collection ID to add the mode to (e.g., 'VariableCollectionId:123:456'). Get this from figma_get_variables.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full load: it discloses the Desktop Bridge prerequisite and implies a mutation. It does not say whether existing variables receive default values in the new mode, whether duplicate mode names are rejected, or what happens on failure — notable gaps for a state-changing 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?

Three short sentences, front-loaded with the action, followed by the minimum conceptual context and the hard prerequisite. Nothing is redundant.

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

Completeness3/5

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

For a simple two-parameter mutation with no output schema and no annotations, the description covers purpose and prerequisite but leaves the post-condition of the new mode (default values for existing variables) and return/error behavior unstated.

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

Parameters3/5

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

Schema coverage is 100% and both parameters already include examples and a pointer to figma_get_variables for the collectionId. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The first sentence states a specific verb and resource: adding a mode to an existing variable collection. It is clearly distinguishable from figma_rename_mode and figma_create_variable_collection, though it never names those siblings explicitly.

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?

It supplies a real precondition (Desktop Bridge plugin must be running) and explains conceptually what modes are for, but gives no guidance on when to add a mode versus rename one, or how this relates to figma_rename_mode / figma_create_variable_collection.

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

figma_add_shape_to_slideC

Add a rectangle or ellipse shape to a specific slide with optional fill color.

NameRequiredDescriptionDefault
xYesX position
yYesY position
widthYesWidth in pixels
heightYesHeight in pixels
slideIdYesThe node ID of the slide
fillColorNoHex color e.g. '#FF5733'#CCCCCC
shapeTypeYesShape type

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 disclosure burden and largely drops it. It does not say what is returned (presumably a new shape node), what happens with an invalid slideId, whether the shape is layered on top of existing content, or how x/y are anchored (top-left origin?), even though the label 'position' is ambiguous.

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

Conciseness4/5

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

A single well-formed sentence with the verb and resource front-loaded and the optional parameter acknowledged at the end. It is efficient, though it leaves out information an agent arguably needs.

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?

There is no output schema and no annotations, so the description should at minimum say what a successful call yields (e.g., the created shape's node ID) and confirm the coordinate origin for placement. With 7 parameters and 6 required, the schema covers inputs well, but the return behavior and positional semantics remain undocumented.

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 units (pixels), ranges, an enum for shapeType and a hex pattern/default for fillColor already documented in the schema. The description only restates that fill color is optional and that shapes are rectangle/ellipse, adding no syntax or anchoring semantics beyond the schema — baseline 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?

States a specific verb (add) and resource (shape on a specific slide) and enumerates the allowed shape kinds (rectangle, ellipse). The 'to a specific slide' phrasing implicitly separates it from figjam_create_shape_with_text and figma_add_text_to_slide, but no sibling is named or contrasted.

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 only implies when to use it via the verb 'Add'; there is no explicit when-to-use statement, no prerequisites (e.g., a valid slide must exist), and no routing away from alternatives like figma_add_text_to_slide or figjam_create_shape_with_text.

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

figma_add_slot_propertyA

Manually add a SLOT component property and bind it to an existing frame (alternative to figma_create_slot). The frame must be a direct child of the component, must not use GRID layout, and must not be nested inside another slot. Supports description and preferredValues.

MULTI-FILE (Local Mode only): Pass fileKey to run this against a specific connected file without switching the active file/target lock (see figma_list_open_files). Does not change the active file or target lock. Cloud Mode pairs with a single plugin instance and rejects fileKey.

NameRequiredDescriptionDefault
nodeIdYesCOMPONENT or COMPONENT_SET node ID
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Does not change the active file or target lock. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
descriptionNoSlot property description (SLOT-only)
frameNodeIdYesFrame node ID to bind as the slot content area
propertyNameYesSlot property name (e.g. 'Content')
preferredValuesNoPreferred components for slot content (SLOT-only)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does substantial work: it discloses structural preconditions that will cause failure, and explains that fileKey changes the target without altering the active file or target lock, plus Cloud Mode rejection. It stops short of saying what happens if a slot property with that name already exists, or what the tool returns.

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?

Front-loaded with the action and the alternative, then the constraints, then a clearly labeled mode-specific block. The multi-file paragraph is somewhat verbose and duplicates the fileKey schema text, but the structure makes skimming easy.

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

Completeness4/5

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

For a 6-parameter mutation tool with no annotations and no output schema, the description supplies preconditions, optional-feature scope, and mode behavior. The remaining gap is error semantics (duplicate property name, invalid frame) and confirmation of what mutation is persisted.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter is already documented in the schema, and the description's mention of 'description and preferredValues' plus the fileKey paragraph largely restates it. The only marginal addition is the SLOT-only scoping of the optional fields. Baseline 3 applies 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.

Purpose5/5

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

Opens with a specific verb+resource ('Manually add a SLOT component property') and immediately scopes it as the manual alternative to figma_create_slot, a real sibling in the list. An agent can distinguish it from figma_add_component_property and figma_create_slot without opening either schema.

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

Usage Guidelines4/5

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

Names the alternative (figma_create_slot) and enumerates hard preconditions: the frame must be a direct child of the component, must not use GRID layout, and must not be nested inside another slot. It does not explicitly state the condition under which the other tool should be preferred, which keeps it short of a 5.

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

figma_add_text_to_slideC

Add a new text element to a specific slide. Supports custom fonts, colors, alignment, and text formatting.

NameRequiredDescriptionDefault
xNoX position
yNoY position
textYesThe text content
colorNoText fill color as hex (e.g., '#FFFFFF')
widthNoText box width for wrapping. When set, enables text wrapping.
slideIdYesThe node ID of the slide
fontSizeNoFont size in pixels
textCaseNoText case transformation
fontStyleNoFont style/weight (e.g., 'Bold', 'SemiBold', 'Medium')Regular
textAlignNoHorizontal text alignment
fontFamilyNoFont family (e.g., 'Manrope', 'IBM Plex Sans')Inter
lineHeightNoLine height in pixels
letterSpacingNoLetter spacing in pixels

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 behavioral burden. It states that formatting options are supported but does not disclose permissions needed, error behavior for invalid slide IDs, whether the operation returns the created node, or any side effects. For a mutation tool with 13 parameters, this leaves significant behavioral gaps.

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

Conciseness4/5

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

The description is two efficient sentences with the core action front-loaded. The second sentence summarizing supported formatting categories is somewhat redundant with the schema but still serves as a quick capability overview. There is no filler.

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

Completeness3/5

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

For a creation tool with 13 parameters and no output schema or annotations, the description covers what the tool does but omits the return value, error conditions, and positioning context. The schema fully covers parameter semantics, so the remaining gap is primarily behavioral rather than parametric, making it minimally adequate.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 13 parameters in detail. The description adds a high-level summary of font, color, alignment, and formatting support but no syntax, defaults, or parameter-specific meaning beyond what is already in the schema. 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 gives a specific verb and resource: "Add a new text element to a specific slide." This clearly distinguishes creation from mutation siblings like figma_set_text, though it does not explicitly name or contrast alternatives. The second sentence adds capability scope, making the purpose easy to grasp.

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?

There is no explicit guidance on when to use this tool versus alternatives such as figma_set_text or figma_add_shape_to_slide. Usage is only implied by the phrase "Add a new text element to a specific slide," with no exclusions or preconditions stated.

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

figma_analyze_component_setA

Analyze a Figma COMPONENT_SET to extract variant state machine and cross-variant diffs for code generation. Returns: (1) variant axes (size, state) with all values, (2) CSS pseudo-class mappings for interaction states (hover→:hover, focus→:focus-visible, disabled→:disabled, error→[aria-invalid]), (3) visual diff from default state per variant (only changed properties — fill/stroke as token or hex, gradient, image and paint opacity, stroke weight, text color, opacity, effects, corner radius, size, child layers, visibility, the variant's own fill/stroke/opacity/radius (variantFill, variantStroke, variantOpacity, variantRadius), auto-layout (layout) and swapped spacing/size tokens (tokens), plus layers: changes to nested layers keyed by layer path such as 'Icons/Radio › Icon' — instance swaps, size, free position, rotation, vector shape, label text and typography), (4) component property definitions mapped to code props (BOOLEAN→boolean, TEXT→string, INSTANCE_SWAP→slot/ReactNode), and (5) slots — Figma SLOT properties (name, preferredValues = the components a slot accepts, and limitViolations) to implement as named slots / children props (React {children} or named ReactNode; Web Components ). Use this on the parent COMPONENT_SET node, not individual variants. Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault
nodeIdYesCOMPONENT_SET node ID (the parent of all variants, e.g., '214:274')

TDQS

A4/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden; it does disclose the environment prerequisite and enumerates in detail what the operation produces, which is the behavior an agent most needs here. It does not explicitly state that the call is read-only/non-mutating or whether it is expensive on large sets, which leaves a small gap for an unannotated tool.

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

Conciseness3/5

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

Purpose and node scoping are front-loaded, but the return-value enumeration becomes a dense run-on with deeply nested parentheses and backticked property names, making it hard to scan. Because there is no output schema the detail is earned, yet it could be restructured into a short list instead of one sprawling sentence.

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

Completeness5/5

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

With no output schema and no annotations, the description supplies exactly what would otherwise be missing: the shape of the response across five numbered categories, the node-type constraint, and the plugin prerequisite. An agent can decide whether to call it and predict the payload without further information.

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

Parameters4/5

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

Schema coverage is 100% with a single required nodeId already documented as a COMPONENT_SET node ID, so the schema does the heavy lifting. The description reinforces the constraint that it must be the parent node rather than a variant, which adds a real usage guard beyond the schema text.

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?

States a specific verb and resource — analyze a Figma COMPONENT_SET to extract a variant state machine, cross-variant diffs, property mappings and slots for code generation — which is a distinctive, non-tautological purpose. The scope is clear enough that an agent knows what comes back, but it never distinguishes itself from plausible siblings doing adjacent work (figma_get_component_details, figma_ds_extract_component, figma_get_component_for_development_deep).

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

Usage Guidelines4/5

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

Gives an explicit when-not: 'Use this on the parent COMPONENT_SET node, not individual variants,' plus a hard prerequisite ('Requires Desktop Bridge plugin'). It does not name any alternative tool to use when the node is not a COMPONENT_SET, so the routing guidance is clear but not complete.

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

figma_append_to_slotA

Add content to a slot on a component instance. Clones sourceNodeId into the slot, or creates a new node (nodeType). SLOT content cannot be set via figma_set_instance_properties — use this tool instead. Widgets, stickies, and raw ComponentNodes cannot be appended to slots.

MULTI-FILE (Local Mode only): Pass fileKey to run this against a specific connected file without switching the active file/target lock (see figma_list_open_files). Does not change the active file or target lock. Cloud Mode pairs with a single plugin instance and rejects fileKey.

NameRequiredDescriptionDefault
cloneNoWhen using sourceNodeId, clone the node (default true). Set false to move.
slotIdNoDirect SlotNode ID (from figma_get_slots)
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Does not change the active file or target lock. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
nodeTypeNoCreate a new node in the slot instead of cloning
slotNameNoSlot layer name on the instance (e.g. 'Content')
instanceIdNoInstance ID — use with slotName when slotId is unknown
propertiesNoProperties for created nodes: name, text, width, height
sourceNodeIdNoNode to clone into the slot (default: clone=true)
clearExistingNoRemove existing slot children before appending

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the important side effects: passing fileKey does not change the active file or target lock, and Cloud Mode rejects fileKey outright. It also flags which node kinds cannot be appended. It stops short of describing what the call returns or what happens to the appended node's position/layout, which matters for a 9-param mutation.

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?

Front-loaded with the core action, then the constraint, then a clearly headed MULTI-FILE paragraph. The fileKey sentence largely duplicates the schema's own description verbatim, which is the only real waste.

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

Completeness5/5

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

For a 9-parameter, zero-required, no-output-schema tool, the description supplies the missing decision logic: two creation modes, the sibling it replaces, exclusions, and the multi-file targeting rule. No return-value documentation is needed since no output schema exists and the tool's effect is the appended content itself.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real semantics by framing sourceNodeId and nodeType as two mutually exclusive modes and calling out that clone defaults to true (false moves rather than copies). It does not state that slotId or the instanceId+slotName pair is the required addressing combination, which is the main unanswered parameter question.

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

Purpose5/5

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

States a specific verb and resource: 'Add content to a slot on a component instance', and immediately explains the two underlying mechanisms (clone sourceNodeId or create via nodeType). It explicitly distinguishes itself from figma_set_instance_properties and cites the negative cases (widgets, stickies, raw ComponentNodes), so an agent can separate it from siblings without opening the schema.

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

Usage Guidelines5/5

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

Gives explicit routing: SLOT content cannot be set via figma_set_instance_properties, use this tool instead, and names figma_list_open_files for fileKey sourcing. It also states exclusions (widgets, stickies, raw ComponentNodes) and cross-references figma_get_slots for slotId, leaving little to inference.

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

figma_apply_animationA

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

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

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

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

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

TDQS

A4.4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

The description is front-loaded with the core action and the mutually exclusive modes, then uses tight bullets for each mode and a final constraint note. Every sentence carries relevant information and there is no boilerplate.

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

Completeness4/5

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

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

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

Parameters4/5

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

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

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

Purpose5/5

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

The description uses a specific verb and resource: 'Animate a node with Figma Motion.' It immediately distinguishes the tool's modes and routes preset discovery to figma_manage_animation_styles, so an agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

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

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

figma_apply_shaderA

Apply a shader to a node's fills, strokes or effects, or change the properties of one already applied. Set properties by name (e.g. {turbulence: 40, cloudColor: '#E8F4FF'}); names, types and defaults come from figma_list_shaders. Colors take hex strings or {r,g,b,a}, and any property can bind a variable with {variableId}. Pass index to change a shader already in that list; without index the shader is added on top (or replaces the list with replace: true). Fill shaders go on fills or strokes; effect shaders go on effects. Unknown property names change nothing and list the valid ones. Requires Desktop Bridge.

NameRequiredDescriptionDefault
indexNoChange the shader at this position in the target list instead of adding one
nodeIdYes
targetNofills
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
opacityNoFills and strokes only
replaceNoReplace everything in the target list with this shader
visibleNo
shaderIdNoShader id from figma_list_shaders. Optional when index points at a shader already applied
blendModeNoFills and strokes only
propertiesNoProperty values by name (or key)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, this description carries the full burden and does well: it discloses that unknown property names change nothing and return the valid names, that replace:true discards the existing list, and that Desktop Bridge is required. It omits what the call returns on success and any limits on shader counts, keeping it just short of full disclosure 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.

Conciseness4/5

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

Front-loaded with the core action, then progressively refined into property syntax, index/replace behavior, target mapping, and failure behavior. Dense with parenthetical clauses, but essentially every sentence adds operative information.

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

Completeness4/5

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

For a 10-parameter, nested-object mutation tool with no annotations and no output schema, the description covers the risky parts: destructive replace, index-based mutation, valid property discovery, variable binding, and the Desktop Bridge prerequisite. Only the success response shape and the interaction with Cloud vs Local Mode (documented only in the fileKey schema) are left unaddressed.

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?

At 70% schema coverage, the description adds real meaning beyond the schema: the properties object is by name with a concrete example ({turbulence: 40, cloudColor: '#E8F4FF'}), colors accept hex strings or {r,g,b,a}, and any property can bind a variable via {variableId}. Index, replace and target semantics are restated compactly, though opacity/blendMode constraints merely echo what the schema already says.

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

Purpose5/5

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

States a specific verb and resource: apply a shader to a node's fills, strokes or effects, or mutate properties of an already-applied shader. The scope is precise enough to distinguish it from siblings like figma_set_fills or figma_list_shaders, which is named as the source of property metadata.

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

Usage Guidelines4/5

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

Gives clear routing rules: pass index to modify an existing shader, omit it to add on top, or use replace:true to swap the whole list; fill shaders go on fills/strokes, effect shaders on effects. It also points at figma_list_shaders for names/types/defaults and notes the Desktop Bridge requirement. It stops short of naming an alternative for non-shader fill/stroke work (e.g. figma_set_fills), so exclusions are implied rather than stated.

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

figma_arrange_component_setA

Organize a component set with Figma's native purple dashed visualization. Use after creating variants, adding states (hover/disabled/pressed), or when component sets need cleanup.

Non-destructive: rearranges the existing variants in place (grid positions on the existing set's children), so the component set keeps its node ID and all placed instances remain intact. Arranges variants in a labeled grid (columns = last property like State, rows = other properties like Type+Size) and wraps the set in a white container with title, row/column labels. Safe to run on component sets with placed instances, and safe to re-run.

NameRequiredDescriptionDefault
optionsNoLayout options
componentSetIdNoNode ID of the component set to arrange. If not provided, will look for a selected component set.
componentSetNameNoName of the component set to find. Used if componentSetId not provided.

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it states the operation is non-destructive, rearranges existing variants in place, preserves the node ID and instances, wraps the set in a labeled container, and is safe to re-run. These details give an agent the key behavioral profile needed before invoking a mutation.

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

Conciseness5/5

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

The description is front-loaded with purpose and usage, then follows with safety and layout behavior. It is appropriately sized and every sentence contributes relevant information.

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

Completeness5/5

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

For a mutating layout tool with no annotations and no output schema, the description covers the important gaps: what it changes, what it preserves, how the grid is organized, and its repeat-run safety. Nothing essential for correct invocation appears missing.

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, so gap, cellPadding, componentSetId, componentSetName, and columnProperty are already well documented. The description adds useful layout semantics about columns and rows, but does not add parameter-level meaning beyond the schema, so the baseline 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 uses a specific verb and resource ('Organize a component set') and explains the purple dashed/grid layout it applies. It is clear what the tool does, but it does not explicitly name or differentiate itself from sibling tools such as figma_create_component_set or figma_analyze_component_set.

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

Usage Guidelines4/5

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

It gives clear timing guidance: use after creating variants, adding states, or when component sets need cleanup. It also notes safety with placed instances and re-runs, though it does not name alternatives or state when not to use it.

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

figma_audit_component_accessibilityA

Deep accessibility audit for a specific component or component set. Produces a scorecard covering: state coverage (default/hover/focus/disabled/error/active/loading), focus indicator quality and contrast, non-color differentiation (WCAG 1.4.1), target size consistency (WCAG 2.5.8), annotation completeness, and color-blind simulation (protanopia/deuteranopia/tritanopia). Returns per-category scores (0-100) and prioritized recommendations. Use after designing a component to validate accessibility before handoff. Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault
nodeIdNoNode ID of a COMPONENT_SET, COMPONENT, or INSTANCE to audit. Falls back to current selection if omitted.
targetSizeNoMinimum touch target size in px (default: 24 per WCAG 2.5.8). Use 44 for iOS or 48 for Android guidelines.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses the audit's output (per-category scores and prioritized recommendations), the scope of checks, and the environmental dependency (Desktop Bridge). It stops short of stating explicitly that the operation is read-only / non-mutating on the document, which is the one behavioral fact left implicit.

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 dense but front-loaded: purpose first, then the enumerated categories, then when-to-use and prerequisite. The long category list earns its place by defining audit scope, though it is the bulkiest portion and could be tightened.

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

Completeness4/5

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

For a read-only audit tool with no output schema, the description supplies what matters: the categories inspected, the shape of results (scores plus prioritized recommendations), the prerequisite, and the timing guidance. Whether it mutates the file is the only unaddressed gap.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters (nodeId with its fallback-to-selection behavior, targetSize with WCAG 2.5.8 default and platform overrides) are already documented in the schema. The description adds no parameter-level detail beyond that, so baseline 3 applies.

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

Purpose5/5

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

The description names a specific verb (audit) and a specific resource (component/component set), then enumerates the exact categories checked and the return shape (per-category 0-100 scores plus prioritized recommendations). This separates it cleanly from siblings like figma_lint_design or figma_scan_code_accessibility, which operate at file or code level.

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

Usage Guidelines4/5

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

It gives a clear usage window ('use after designing a component to validate accessibility before handoff') and a hard prerequisite ('Requires Desktop Bridge plugin'). It does not name an explicit alternative or state when-not to use it, which keeps it below a 5.

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

figma_audit_design_system_reportA

Run the design-system health audit and return the scored report as data (no UI required). Same deterministic engine as the Design System Dashboard app: naming & semantics, token architecture, component metadata, accessibility, consistency, coverage — each 0-100 plus a weighted overall. Start with the default summary, then drill into one category at a time via category (chunked; avoids one giant payload). Results are cached ~5 minutes; pass forceRefresh after editing the file. Every finding includes whether this MCP can fix it (design-side write tools vs. design decision vs. manual).

NameRequiredDescriptionDefault
formatNo'summary' (default) — bounded readable report: overall + category scores + non-pass findings + remediation. 'full' — complete scored JSON (examples/locations clamped); prefer per-category calls over 'full' when working interactively.summary
fileUrlNoFigma file URL. If not provided, uses the currently active file.
categoryNoReturn full findings (including passes, examples, locations) for ONE category — the chunked drill-down path after a summary call.
forceRefreshNoBypass the 5-minute audit cache and re-crawl the file. Only needed after editing the file.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and mostly does: it discloses the ~5 minute audit cache and when to bypass it with forceRefresh, and that payloads are chunked to avoid a giant response. It implies read-only operation (fixes happen via separate design-side write tools) but never states it outright, nor how long a cold audit takes or what happens on an invalid/unreachable file.

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?

Front-loaded with the core action and its result, then descends into categories, drill-down, caching, and the fixability tagging. Dense but every sentence carries information; the em-dash stacking and semi-colon lists make it slightly harder to scan than it needs to be.

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?

There is no output schema, so the description does real work describing the return shape: six 0-100 category scores plus a weighted overall, non-pass findings with remediation, and a per-finding fixability classification. Gaps remain on response size, error/failure modes, and whether the score is comparable across runs.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description goes beyond it by explaining the intent of the `category` parameter as the chunked drill-down path after a summary call, and by tying `forceRefresh` to the editing workflow. It adds workflow meaning rather than merely restating the enum values.

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?

States a specific verb and resource: run a design-system health audit and return a scored report as data, with the six scored categories and weighted overall spelled out. It differentiates from the Design System Dashboard app ("no UI required", "same deterministic engine"), but never names the similarly-scoped siblings such as figma_lint_design, figma_ds_verify, or figma_get_design_system_summary.

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

Usage Guidelines4/5

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

Gives explicit sequencing ("Start with the default summary, then drill into one category at a time via `category`") plus the forceRefresh condition after editing the file, and the schema repeats "prefer per-category calls over 'full'". What's missing is any exclusion or comparison against the adjacent audit/lint tools an agent might otherwise choose.

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

figma_batch_create_variablesA

Create multiple variables in one operation. Use instead of calling figma_create_variable repeatedly — up to 50x faster for bulk operations. Get collection IDs from figma_get_variables first. Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault
variablesYesArray of variables to create (1-100)
collectionIdYesCollection ID to create all variables in (e.g., 'VariableCollectionId:123:456')

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the performance rationale and the Desktop Bridge dependency, but does not say whether partial failures are atomic, what happens on duplicate names, or what the operation returns. For a mutation tool this leaves meaningful behavioral gaps.

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

Conciseness5/5

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

Four short sentences, front-loaded with the core action and followed by the alternative, prerequisite, and dependency. Every sentence adds actionable information with no filler.

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

Completeness3/5

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

The definition covers purpose, prerequisite, and plugin requirement, which is enough to attempt a call. However, with no annotations and no output schema, it should say more about mutation behavior such as partial failure handling, duplicate handling, and what is returned (e.g., created variable IDs).

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 parameters, including per-variable fields, enum semantics, and value formats. The description adds a useful pointer for sourcing collectionId but no additional parameter-level meaning. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Create multiple variables') plus scope ('in one operation') and explicitly distinguishes itself from figma_create_variable by naming it as the repeated-call alternative. An agent can select this over the single-create sibling without inspecting the schema.

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

Usage Guidelines4/5

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

Explicitly says to use this instead of calling figma_create_variable repeatedly and gives a prerequisite: get collection IDs from figma_get_variables first. It also states the Desktop Bridge plugin requirement. It stops short of naming when not to use it (e.g., use figma_batch_update_variables for existing variables) or what to do above the bulk limit.

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

figma_batch_update_variablesA

Update multiple variable values in one operation. Use instead of calling figma_update_variable repeatedly — up to 50x faster for bulk updates. Get variable/mode IDs from figma_get_variables first. Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault
updatesYesArray of updates to apply (1-100)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose two critical operational facts: the Desktop Bridge plugin requirement and that IDs must be sourced beforehand. It stops short of stating atomicity or per-item failure behavior for a batch mutation, which is the kind of context an agent would want before sending 100 updates.

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?

Four short sentences, each front-loaded with a distinct fact: purpose, alternative, prerequisite, environment requirement. Nothing repeats the schema or the name.

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

Completeness4/5

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

For a single-parameter mutation tool with no output schema and no annotations, the description covers purpose, prerequisites, and environment. The remaining gap is outcome behavior (partial failures, confirmation of applied updates), which matters at the 100-item batch scale but is a minor omission.

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

Parameters3/5

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

Schema coverage is 100% and the nested item descriptions already explain value formats per variable type and the ID formats, so the schema does the heavy lifting. The description adds the provenance of the IDs but does not mention the 1-100 array bound that the schema enforces, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (update), resource (variable values), and scope (multiple in one operation), which immediately distinguishes it from the singular figma_update_variable and from figma_batch_create_variables. The title/sibling set leaves no ambiguity about what this does.

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

Usage Guidelines5/5

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

Explicitly names the alternative it replaces ('Use instead of calling figma_update_variable repeatedly') with the reason (bulk speed), and gives a prerequisite step ('Get variable/mode IDs from figma_get_variables first'). That is a complete when-to-use and how-to-prepare instruction.

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

figma_blame_nodeA

Find the version that introduced a specific change to a node — answers 'who/when added this'. Walks version history backward via binary search (~log2(N) API calls instead of N) to localize the introduction point. Returns the version's metadata (label/author/timestamp). Default includes autosaves for finer attribution; system 'Figma' user appears occasionally for scheduled snapshots and is flagged via attribution_certainty='system_attributed'. Specify EXACTLY ONE of target_component_property or target_child_node_id. node_id is optional — if omitted, falls back to the first node in the current Figma selection.

NameRequiredDescriptionDefault
fileUrlNoFigma file URL. Uses current URL if omitted.
node_idNoThe parent node ID to inspect (typically a COMPONENT_SET). If omitted, falls back to the first node in the current Figma selection.
start_versionNoVersion to walk backward from. Default 'current' (HEAD).current
include_autosavesNoInclude auto-saved versions in the search range. Default true (better attribution accuracy; most autosaves carry the real human user).
max_versions_to_walkNoLookback cap. Binary search probes ~log2(N) of these. Default 200, max 500.
target_child_node_idNoA descendant node ID — find when this child was first added under node_id.
target_component_propertyNoA componentPropertyDefinitions key (e.g. 'Disabled#1:2') — find when this property was first added to the node.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations present, the description carries the full burden and does well: it discloses the binary-search cost profile (~log2(N) API calls instead of N), the autosave default and why it improves attribution, and a known quirk (system 'Figma' user flagged via attribution_certainty='system_attributed'). It omits auth/permission requirements and what happens when no introduction point is found within max_versions_to_walk.

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?

Front-loaded with the core purpose, then progressively narrower operational detail; every sentence conveys facts (cost model, return fields, autosave behavior, target constraint, fallback). Dense but slightly overpacked — the autosave and system-attribution points could be tightened without losing information.

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

Completeness5/5

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

Covers what an agent needs for a 7-parameter, zero-required, no-output-schema tool: what it returns (label/author/timestamp metadata), the cost of running it, target-selection rules, selection fallback, and a known attribution edge case. The absence of an output schema is compensated by the explicit return-description sentence.

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

Parameters4/5

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

Schema coverage is already 100%, so baseline would be 3, but the description adds a genuine cross-parameter constraint absent from the schema: mutual exclusivity of target_component_property and target_child_node_id, and the node_id-to-selection fallback. It also explains the rationale for include_autosaves, which the schema only asserts.

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

Purpose5/5

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

Uses a specific verb ('Find the version that introduced a specific change') plus a plain-language gloss ('answers who/when added this') that removes any ambiguity about the tool's output. The resource is precisely scoped to a node's history, which is distinguishable from siblings like figma_get_file_versions or figma_diff_versions by the attribution framing.

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?

Gives clear context ('answers who/when added this') and a hard usage rule ('Specify EXACTLY ONE of target_component_property or target_child_node_id'), plus a fallback when node_id is omitted. However, it never names an alternative tool or says when NOT to use this — an agent choosing between blame, figma_diff_versions, and figma_get_changes_since_version gets no routing help.

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

figma_capture_screenshotA

Capture a screenshot of a node using the plugin's exportAsync API. IMPORTANT: This tool captures the CURRENT state from the plugin runtime (not cloud state like REST API), making it reliable for validating changes immediately after making them. Use this instead of figma_get_component_image when you need to verify that changes were applied correctly. Defaults are AI-optimized: PNG at 1x with automatic downscaling so the longest side stays within the 1568px AI vision processing ceiling. PNG is the default because design tool content (flat colors, text, UI components) compresses significantly better as PNG. Use JPG for photographic or gradient-heavy content. Requires Desktop Bridge connection (Figma Desktop with plugin running).

NameRequiredDescriptionDefault
scaleNoScale factor (default: 1). The plugin automatically caps the effective scale so the exported image does not exceed 1568px on its longest side (the AI vision processing ceiling).
formatNoImage format (default: PNG). Use JPG for photographic or gradient-heavy content.PNG
nodeIdNoID of the node to capture (e.g., '1:234'). If not provided, captures the current page.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description does substantial work: it discloses that captures reflect current plugin-runtime state rather than cloud state, that downscaling is automatically applied to stay under the AI vision ceiling, and that a Desktop Bridge connection is required. It stops short of describing the return payload or failure modes.

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

Conciseness4/5

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

The description is front-loaded with the core action and the important runtime-state caveat. Some sentences, such as the PNG compression rationale and JPG guidance, overlap with schema documentation or could be trimmed, but the overall structure is clear.

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

Completeness4/5

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

For a three-parameter screenshot tool with no annotations and no output schema, it covers the key context: plugin-runtime state, connection prerequisites, default export behavior, and an alternative tool. Return format and error behavior are not described, which keeps it from being fully complete.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters, their defaults, and the format enum are already documented in the schema. The description reinforces the AI-optimized defaults and format-choice rationale, but it largely repeats schema content rather than adding new parameter semantics.

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

Purpose5/5

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

The description states a specific verb and resource: capture a screenshot of a node using the plugin's exportAsync API. It also distinguishes plugin-runtime capture from cloud-state alternatives and explicitly contrasts itself with figma_get_component_image, making the tool's purpose easy to identify.

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

Usage Guidelines5/5

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

It gives explicit usage guidance: use this tool to validate changes immediately after making them, and use it instead of figma_get_component_image when verifying applied changes. It also explains the current-plugin-runtime context and when to choose JPG over PNG.

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

figma_check_design_parityB

Compare a Figma component's design specs against code-side data to find discrepancies. Returns a parity score, categorized discrepancies, and actionable fix items for both design-side (Figma tool calls) and code-side (file edits). Read the component source code first, then pass the data in codeSpec.

NameRequiredDescriptionDefault
enrichNoEnable token coverage and enrichment analysis. Default: true
nodeIdYesComponent node ID (e.g., '695:313')
fileUrlNoFigma file URL. Uses current URL if omitted.
codeSpecYesStructured code-side component data. Read the component source code first, then fill in the relevant sections.
canonicalSourceNoWhich source is the canonical truth. Fixes will target the other side. Default: 'design'design

TDQS

B3.4/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It discloses return structure and that fix items target design-side (Figma calls) or code-side (file edits) depending on canonicalSource, which is meaningful. But it never clarifies whether the tool itself mutates anything or that fix items are advisory only.

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?

Three tight sentences, front-loaded with the purpose before the workflow hint. Alternating between purpose and result contents is efficient with minimal waste.

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

Completeness3/5

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

For a complex nested-input tool with no output schema, the description does sketch the return shape (score, categorized discrepancies, fix items). But it does not explain the discrepancy categories or the parity score semantics, so an agent still has uncertainty about interpreting 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?

Schema description coverage is 100%, so the nested codeSpec structure is already well documented field-by-field. The description adds only the workflow hint about filling codeSpec after reading source, which the schema partly implies. Baseline 3 for high-coverage schemas 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?

States a specific verb+resource+goal: comparing a Figma component's design specs against code-side data to find discrepancies. It also names the return payload (parity score, discrepancies, fix items). It does not differentiate from related siblings like figma_ds_verify or figma_audit_design_system_report, so a 4 rather than 5.

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

Usage Guidelines3/5

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

Provides a concrete prerequisite ordering ('Read the component source code first, then pass the data in codeSpec'), which is genuinely useful usage context. However it gives no when-to-use vs when-not guidance and never routes the agent toward or away from alternatives such as figma_ds_verify.

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

figma_clear_consoleA

Clear the console log buffer. Safely clears the buffer without disrupting the connection. Returns number of logs cleared.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/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 burden and does useful work: it discloses that the operation is safe, that it does not disrupt the plugin connection, and that it returns a count of cleared logs. It stops short of stating whether the discarded logs are recoverable, but for a zero-parameter buffer reset that is a minor 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?

Three short sentences, front-loaded with the action, followed by the safety caveat and the return value. No wasted words.

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

Completeness5/5

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

For a zero-arg, no-output-schema utility, the description covers action, side effects, and return value. There is nothing an agent needs in order to call it correctly that is missing.

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 takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. Nothing in the description conflicts with the empty schema.

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

Purpose4/5

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

Names a specific verb and resource: 'Clear the console log buffer', which is unmistakable and immediately distinguishable from the read-oriented siblings figma_get_console_logs and figma_watch_console in practice. It does not explicitly call out those siblings, so it stops short of 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 never says when to clear versus when to read or stream logs, and names no alternatives. An agent must infer the workflow (e.g., clear before reproducing an issue) entirely from the tool name.

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

figma_clone_nodeB

Duplicate a node. The clone is placed at a slight offset from the original.

NameRequiredDescriptionDefault
nodeIdYesThe node ID to clone

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full disclosure burden. It usefully states that 'the clone is placed at a slight offset from the original,' which is behavior beyond the input schema, but omits permissions, reversibility, whether the original is preserved, and what the tool returns.

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

Conciseness5/5

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

The description is two short sentences with the core action front-loaded and the offset behavior immediately following. Every sentence adds useful information without waste.

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

Completeness3/5

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

For a one-parameter mutation tool with no annotations and no output schema, the description is minimally adequate. However, it does not state where the clone is parented, whether the original remains unchanged, or what the tool returns, leaving some gaps for the agent.

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

Parameters3/5

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

The schema has 100% description coverage for the single nodeId parameter, so the schema already documents the parameter fully. The description does not add further meaning or constraints beyond that baseline.

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 states a specific verb and resource: 'Duplicate a node.' This is clearly distinct from deletion or creation tools, though it does not explicitly differentiate from another duplication-oriented sibling such as figma_duplicate_slide.

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 explicit guidance on when to use this tool versus alternatives like figma_create_child or figma_duplicate_slide. It relies on the user inferring that duplication is the intended operation.

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

figma_create_childA

Create a new child node inside a parent container. Always place inside an existing Section or Frame — never on a bare page. If no suitable parent exists, create a Section first. Clean up any empty or orphaned nodes if the operation fails.

NameRequiredDescriptionDefault
nodeTypeYesType of node to create
parentIdYesThe parent node ID
propertiesNoProperties for the new node

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the parent-container invariant and mentions cleanup of empty or orphaned nodes on failure, but it omits permissions, return behavior, and whether cleanup itself is destructive.

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 four short sentences, front-loads the purpose, and then adds constraints and failure behavior. Every sentence contributes useful guidance with no filler.

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?

It gives enough information to invoke the tool correctly with a valid parent and node type, and the nested properties are fully documented in the schema. Minor gaps remain around the return value and the exact cleanup semantics, but the core call requirements are covered.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful parentId semantics by requiring the parent to be a Section or Frame rather than any node. It does not add further detail for the nested properties, but the schema already documents those.

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 gives a specific verb and resource: create a new child node inside a parent container. It is clear what the tool does, but it does not explicitly distinguish itself from sibling creation or cloning tools such as figma_clone_node or figma_create_component_set.

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

Usage Guidelines4/5

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

It states a strong usage constraint: the parent must be an existing Section or Frame and never a bare page. It also gives a fallback action, creating a Section first, but does not explicitly compare to alternative sibling tools.

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

figma_create_component_setA

Create a component set with variants in one call — replaces hand-written figma.combineAsVariants scripts.

Two modes:

  1. Generate from a base component: pass baseComponentId + properties (variant axes). The base is cloned for every combination of the axes ({ State: ['default','hover','disabled'], Size: ['sm','lg'] } → 6 variants), each named 'Prop=Value' comma-joined (e.g. 'State=hover, Size=sm'), then combined into a set. The base component itself becomes the FIRST variant (same node ID), so existing instances of the base survive as instances of that variant.

  2. Combine existing components: pass componentIds, optionally with variantProperties (aligned 1:1) to rename each component to Prop=Value form before combining.

Figma derives the variant property definitions from the names; they live on the SET (componentPropertyDefinitions), not on individual variants. The result includes each variant's key — instantiate with a VARIANT's key/nodeId via figma_instantiate_component, not the set's key.

Set autoArrange:true to lay the new set out as a labeled grid inside a white container (same layout as figma_arrange_component_set). Requires Desktop Bridge plugin.

SIZE GUIDANCE: hard cap 100 variants. The timeout auto-scales with variant count (~1.2s/variant, 30s floor / 2min cap), but above ~40 variants the single-pass clone+combine gets slow and heavy base components may still push the limit — prefer splitting large matrices into multiple sets (e.g. one set per Size).

NameRequiredDescriptionDefault
nameNoName for the component set (e.g., 'Button'). Defaults to Figma's derived name.
parentIdNoNode ID of the container (frame/section) to create the set in. Defaults to the current page.
positionNoPosition of the set within its parent.
propertiesNoVariant property axes — required with baseComponentId. Example: { State: ['default','hover','disabled'], Size: ['sm','lg'] } creates 6 variants. Max 100 combinations. Names and values must not contain '=' or ','.
autoArrangeNoIf true, arrange the new set in a labeled grid (columns = last property, rows = other properties) inside a white container — same in-place layout as figma_arrange_component_set.
componentIdsNoNode IDs of existing COMPONENT nodes to combine as variants. Mutually exclusive with baseComponentId. Components already inside a component set are rejected.
arrangeOptionsNoGrid layout options, used when autoArrange is true.
baseComponentIdNoNode ID of an existing COMPONENT to use as the base. Cloned per property combination; becomes the set's first variant (keeps its node ID, so placed instances survive). Mutually exclusive with componentIds.
variantPropertiesNoOnly with componentIds: one property map per component, aligned by index — e.g. [{ State: 'default' }, { State: 'hover' }]. Each component is renamed to 'Prop=Value, ...' before combining. Without this, existing names are kept (names lacking '=' become 'Property 1=<name>').

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it discloses the clone-per-combination side effect, that the base keeps its node ID so existing instances survive, that property definitions live on the set rather than variants, that components already in a set are rejected, the 100-variant cap, timeout auto-scaling, and the Desktop Bridge plugin requirement for autoArrange.

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?

Front-loaded with the core action, then cleanly sectioned into Two modes and SIZE GUIDANCE, so an agent can skim to the relevant mode. It is on the long side and the size-guidance paragraph could be tightened, but the detail is load-bearing for a 9-parameter tool with no annotations.

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

Completeness5/5

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

No output schema exists, and the description compensates by stating what the result contains (each variant's key) and the critical follow-up that you must instantiate with a variant's key/nodeId via figma_instantiate_component rather than the set's key. Combined with mode coverage, limits, and prerequisites, an agent has everything needed to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description goes further by explaining the expansion semantics of `properties` (a concrete 2-axis → 6-variant example) and the 1:1 index alignment of variantProperties, plus the naming convention that Figma derives. It does not add much for name/parentId/position, which is acceptable given the schema already documents them.

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

Purpose5/5

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

Opens with a specific verb + resource ("Create a component set with variants in one call") and immediately frames it against the manual alternative (hand-written figma.combineAsVariants scripts). The two numbered modes make it unambiguous which creation path is being invoked, including the destructive side effect that the base component becomes a variant.

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

Usage Guidelines4/5

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

Explicitly routes between the two modes (baseComponentId + properties vs componentIds ± variantProperties) and states the mutual exclusivity, plus a concrete size heuristic (split above ~40 variants, hard cap 100). It stops short of naming a sibling tool it should be chosen over instead, so no exclusion guidance.

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

figma_create_slideB

Create a new blank slide in the Figma Slides presentation. Optionally specify grid position.

NameRequiredDescriptionDefault
colNoColumn index in the slide grid (0-based)
rowNoRow index in the slide grid (0-based)

TDQS

B3.4/5.0
Behavior3/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 does disclose that the slide is blank and grid placement is optional, but it does not state default placement (for example, appended at the end of the deck) or permission requirements. This is a moderate gap rather than a serious omission.

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

Conciseness5/5

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

Two short sentences with no waste, and the core action is front-loaded before the optional parameter detail.

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?

This is a simple creation tool with two optional, fully documented parameters and no output schema, so it does not need much more. The only missing piece an agent might want is default slide placement when row/col are omitted.

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

Parameters3/5

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

Schema description coverage is 100%, and both col and row are already documented as 0-based grid indices. The description adds only that grid position is optional, so the baseline 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 states a specific verb and resource: 'Create a new blank slide in the Figma Slides presentation.' This distinguishes it from siblings such as figma_duplicate_slide and figma_add_text_to_slide, which modify or populate existing slides. It does not explicitly name a sibling, which keeps it below 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 never states when to use this tool versus alternatives (figma_duplicate_slide for copies, figma_add_text_to_slide for content). The clause 'Optionally specify grid position' is a parameter note, not usage guidance.

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

figma_create_slotA

Create a SlotNode inside a component using createSlot(). Automatically creates a linked SLOT component property named after the slot (renaming the slot renames the property). Slots are freeform drop zones for instance content — more flexible than INSTANCE_SWAP. Works on standalone COMPONENTs and variant COMPONENTs inside a COMPONENT_SET (call once per variant). GRID layout is not allowed on slots. Requires Desktop Bridge.

MULTI-FILE (Local Mode only): Pass fileKey to run this against a specific connected file without switching the active file/target lock (see figma_list_open_files). Does not change the active file or target lock. Cloud Mode pairs with a single plugin instance and rejects fileKey.

NameRequiredDescriptionDefault
nameNoSlot layer name (e.g. 'Content', 'Footer')
widthNoInitial slot width in pixels
heightNoInitial slot height in pixels
nodeIdYesThe COMPONENT node ID to add a slot to
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Does not change the active file or target lock. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
layoutModeNoAuto-layout mode for the slot (GRID is not supported)

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it discloses the automatic linked SLOT component property and the rename coupling, the GRID restriction, the Desktop Bridge dependency, and fileKey's Local-Mode-only semantics including that it does not change the active file or target lock and is rejected in Cloud Mode. Nothing an agent needs for safe invocation is omitted.

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?

Front-loaded with the core action and behavior, with the multi-file caveat relegated to a clearly labeled trailing section. It is dense but earns most of its length; the fileKey discussion repeats some schema text rather than trusting it.

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

Completeness4/5

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

For a six-parameter mutation tool with no annotations and no output schema, the description covers creation effects, constraints, environment requirements, and multi-file semantics. It does not mention what is returned (e.g., the new node ID) or how the slot's initial size defaults behave, which is a minor residual gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters, including the fileKey and layoutMode enum, are already documented in the schema. The description adds only marginal semantic value beyond that, notably that the slot name propagates to the component property name. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Create a SlotNode inside a component using createSlot()') and immediately differentiates it from alternatives by contrasting slots with INSTANCE_SWAP as freeform drop zones. An agent knows exactly what this creates without opening the schema.

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

Usage Guidelines4/5

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

Explicitly scopes applicability: standalone COMPONENTs, variant COMPONENTs inside a COMPONENT_SET (once per variant), GRID layout disallowed, and Desktop Bridge required. It also routes multi-file usage to figma_list_open_files. It stops short of explicitly contrasting with nearby siblings like figma_add_slot_property or figma_append_to_slot, so not a full 5.

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

figma_create_variableA

Create a single Figma variable. For multiple variables, use figma_batch_create_variables instead (10-50x faster). Use figma_get_variables first to get collection IDs. Supports COLOR, FLOAT, STRING, BOOLEAN, and motion TIMING/EASING. Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault
nameYesName for the new variable (e.g., 'primary-blue')
descriptionNoOptional description for the variable
collectionIdYesThe collection ID to create the variable in (e.g., 'VariableCollectionId:123:456'). Get this from figma_get_variables.
resolvedTypeYesThe variable type: COLOR, FLOAT, STRING, BOOLEAN, or the motion types TIMING and EASING. TIMING values are seconds (a number like 0.3, or '300ms' / '0.3s'). EASING values are 'cubic-bezier(x1, y1, x2, y2)', a Figma easing name (EASE_IN, EASE_OUT, EASE_IN_AND_OUT, LINEAR, EASE_IN_BACK, EASE_OUT_BACK, EASE_IN_AND_OUT_BACK, GENTLE, QUICK, BOUNCY, SLOW, HOLD) or 'spring(bounce)' with bounce 0–1.
valuesByModeNoOptional initial values by mode ID. Example: { '1:0': '#FF0000', '1:1': '#0000FF' }

TDQS

A4.2/5.0
Behavior3/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 does disclose a real operational prerequisite (Desktop Bridge plugin required) and the cross-tool dependency on figma_get_variables, which is valuable. However, it says nothing about mutation semantics such as duplicate-name behavior, whether the variable is created across all modes, or what happens on failure — gaps that matter for an unannotated write 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?

Four short sentences, each carrying distinct actionable information: what it does, when to use the alternative, the prerequisite lookup, and the type surface. No filler and the single-vs-batch distinction is front-loaded.

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

Completeness4/5

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

There is no output schema, and the description never says what is returned (presumably the new variable's ID), which an agent may need for follow-up calls. Otherwise the prerequisites, id source, and supported types make the definition sufficient for a 5-parameter creation tool.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already documents every parameter, including detailed TIMING/EASING formatting and a valuesByMode example, so the baseline is 3. The description's type list ('COLOR, FLOAT, STRING, BOOLEAN, and motion TIMING/EASING') merely restates the enum and adds no syntax or constraint beyond what the schema provides.

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

Purpose5/5

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

States a specific verb and resource ('Create a single Figma variable') and immediately scopes it to one variable, distinguishing it from figma_batch_create_variables and figma_create_variable_collection. An agent knows exactly what this does without opening the schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative ('use figma_batch_create_variables instead (10-50x faster)'), gives the prerequisite call ('Use figma_get_variables first to get collection IDs'), and states the environmental requirement (Desktop Bridge plugin). All three conditions that gate correct invocation are present.

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

figma_create_variable_collectionA

Create an empty variable collection. To create a collection WITH variables and modes in one step, use figma_setup_design_tokens instead. Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault
nameYesName for the new collection (e.g., 'Brand Colors')
additionalModesNoAdditional mode names to create. Example: ['Dark', 'High Contrast']
initialModeNameNoName for the initial mode (default mode is created automatically). Example: 'Light'

TDQS

A4.2/5.0
Behavior3/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 usefully discloses that the resulting collection is empty and the plugin requirement, but says nothing about duplicate-name handling, whether modes are auto-created, or what identity is returned for the new collection.

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

Conciseness5/5

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

Two tight sentences. The core action and the 'empty' constraint come first, the alternative routing second, and the plugin prerequisite last — every clause earns its place.

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

Completeness4/5

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

For a simple 3-parameter creation tool with full schema coverage and no output schema, the description covers action, scope, alternative, and prerequisite. The remaining gap is mutation behavior (collision handling, confirmation of created mode names), which no structured field covers.

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 three parameters (name, additionalModes, initialModeName) are already documented with examples. The description adds no syntax or constraint detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

Specific verb+resource ('Create an empty variable collection') with a scope qualifier ('empty') that distinguishes it from the batch/setup path. It also names the sibling it is not, so the agent can differentiate without opening schemas.

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

Usage Guidelines5/5

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

Explicitly routes the agent: use figma_setup_design_tokens when variables and modes are needed in one step, otherwise this tool. The runtime prerequisite ('Requires Desktop Bridge plugin') is stated up front so the agent knows the invocation precondition.

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

figma_delete_commentA

Delete a comment from a Figma file by its comment ID. Use figma_get_comments to find comment IDs first.

NameRequiredDescriptionDefault
fileUrlNoFigma file URL. Uses current URL if omitted.
comment_idYesThe ID of the comment to delete. Get IDs from figma_get_comments.

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden, and it discloses almost nothing behavioral: not whether deletion is permanent, not whether replies in a thread are removed, not whether the caller must own the comment or hold edit permission, and not what is returned. 'Delete' implies mutation but the risk profile is left to inference.

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

Conciseness5/5

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

Two sentences, no filler, with the core action stated first and the prerequisite second. Every clause earns its place.

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

Completeness3/5

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

For a destructive single-target mutation with no annotations and no output schema, the description is thin on consequences and permissions even though the parameters themselves are fully covered by the 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% and both fields (fileUrl default behavior, comment_id source) are already documented in the schema. The description adds no syntax, format, or constraint detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

Specific verb (delete) plus resource (comment) plus the identifier used to target it, with the containing file scope. It is immediately distinguishable from figma_get_comments and figma_post_comment in the sibling list.

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

Usage Guidelines4/5

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

Explicitly routes the agent to figma_get_comments as the way to obtain a comment ID before calling. There is no statement of when not to use it (e.g., thread replies, permissions), so it stops short of full guidance.

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

figma_delete_component_propertyA

Delete a component property. Works with BOOLEAN, TEXT, INSTANCE_SWAP, and SLOT properties (not VARIANT). This is a destructive operation.

NameRequiredDescriptionDefault
nodeIdYesThe component or component set node ID
propertyNameYesThe full property name with suffix (e.g., 'Show Icon#123:456')

TDQS

A3.8/5.0
Behavior3/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, and it does disclose that this is destructive and which property types are valid. It stops short of stating irreversibility, what happens to instances bound to the deleted property, or any permission requirements.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the type scope, then the risk warning. No wasted words.

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

Completeness4/5

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

For a simple two-parameter tool with a fully documented schema and no output schema, the description covers purpose, valid property types, and the destructive nature. Only irreversibility/instance-impact detail is missing, which is minor here.

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 both parameters (nodeId, propertyName) are already documented in the schema, including the suffix format example. The description adds no additional per-parameter meaning beyond what the schema provides, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Delete) and resource (component property), and further scopes it with the supported property types (BOOLEAN, TEXT, INSTANCE_SWAP, SLOT) while excluding VARIANT. This clearly distinguishes it from the add/edit component property siblings.

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 type restriction ('not VARIANT') implies when the tool is applicable, and the naming makes the add/edit alternatives apparent. However, there is no explicit statement of when to use this versus figma_edit_component_property or any prerequisite/confirmation guidance.

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

figma_delete_nodeA

Delete a node from the canvas. WARNING: This is a destructive operation (can be undone with Figma's undo).

NameRequiredDescriptionDefault
nodeIdYesThe node ID to delete

TDQS

A4.1/5.0
Behavior5/5

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

Since no annotations are provided, the description carries the full behavioral burden. It explicitly states the operation is 'destructive' and includes the crucial mitigating detail that the action can be undone with Figma's undo feature.

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, front-loading the function description followed immediately by the critical safety warning. Both sentences are necessary and serve a vital communication purpose.

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

Completeness5/5

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

For a simple, single-parameter deletion tool, the definition is fully complete. The necessary contextual warning about destructiveness makes it highly complete for agent invocation and safety checks.

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 provides 100% coverage for the single parameter ('nodeId'). The description does not add any semantic meaning or context to the parameter beyond what the tool's function already implies, aligning with the baseline score 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 identifies the action ('Delete a node') and the target resource ('from the canvas'). While the name is highly specific, the description successfully communicates the tool's core function.

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 usage is implied by the tool's function, but it provides no guidance on when this tool is necessary versus similar manipulation tools like moving or renaming nodes, resulting in only implied usage.

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

figma_delete_slideB

Delete a slide from the presentation. WARNING: This is a destructive operation (can be undone with Figma's undo).

NameRequiredDescriptionDefault
slideIdYesThe node ID of the slide to delete

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the key trait: destructive but undoable via Figma's undo. It omits what else is lost (e.g., slide content, slots, animations referencing it), permission requirements, and whether confirmation is returned.

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

Conciseness4/5

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

Two tight sentences with the destructive warning front and center after the action. No filler, though the parenthetical undo note could be phrased more precisely.

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?

A destructive single-param tool with no annotations and no output schema needs a bit more than a one-line warning – e.g., whether it fails on non-existent IDs or what is returned on success. The undo hint is the main value-add, leaving the definition only minimally complete.

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

Parameters3/5

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

Schema coverage is 100% and the sole parameter slideId is documented as 'The node ID of the slide to delete.' The description adds no format, sourcing (how to obtain the ID), or constraint information beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: 'Delete a slide from the presentation.' It's clearly distinguishable from most siblings, though it doesn't explicitly differentiate itself from the more generic figma_delete_node or the slide-related siblings like figma_duplicate_slide.

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?

There is no guidance on when to use this versus figma_delete_node, figma_duplicate_slide, or other slide tools, and no preconditions or exclusions are named. The agent must infer selection 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.

figma_delete_variableA

Delete a Figma variable. WARNING: This is a destructive operation that cannot be undone (except with Figma's undo). Use figma_get_variables first to get variable IDs. Requires the Desktop Bridge plugin to be running.

NameRequiredDescriptionDefault
variableIdYesThe variable ID to delete (e.g., 'VariableID:123:456'). Get this from figma_get_variables.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it flags destructiveness, irreversibility (with the undo caveat), and the runtime dependency on the Desktop Bridge plugin. It omits what happens to variables referenced by aliases or bound nodes, which is the main remaining risk an agent would want to know.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, the destructive warning immediately after, and prerequisites last. No filler; every sentence carries decision-relevant information.

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

Completeness4/5

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

For a one-parameter mutation with no annotations and no output schema, the description covers purpose, danger, prerequisite, and environment requirement. Only the post-condition (what is returned or what happens to dependent aliases) is left unstated, a minor gap at this 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% and the single parameter already explains the ID format and where to obtain it. The description only repeats the 'get IDs from figma_get_variables' pointer, adding no new semantics, so baseline 3 applies.

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

Purpose4/5

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

The description opens with a specific verb and resource ('Delete a Figma variable'), which an agent can distinguish from the similarly named figma_delete_variable_collection or figma_rename_variable. It does not explicitly call out the sibling boundary, but the naming plus the leading sentence leaves no real ambiguity.

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

Usage Guidelines4/5

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

It gives a concrete precondition ('Use figma_get_variables first to get variable IDs') and an environment prerequisite (Desktop Bridge plugin running). It stops short of stating when not to use it, e.g. whether to prefer figma_update_variable or variable collections, but the practical guidance is clear.

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

figma_delete_variable_collectionA

Delete a Figma variable collection and ALL its variables. WARNING: This is a destructive operation that deletes all variables in the collection and cannot be undone (except with Figma's undo). Requires the Desktop Bridge plugin to be running.

NameRequiredDescriptionDefault
collectionIdYesThe collection ID to delete (e.g., 'VariableCollectionId:123:456'). Get this from figma_get_variables.

TDQS

A4/5.0
Behavior4/5

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

With no annotations present, the description carries the full burden and does a solid job: it warns this is destructive, that it removes every variable in the collection, that it cannot be undone except via Figma's undo, and that the Desktop Bridge plugin must be running. It stops short of describing the response or permission requirements, but the key behavioral risks are disclosed.

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

Conciseness5/5

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

Two sentences, zero waste. The destructive scope is front-loaded in sentence one and the WARNING plus prerequisite follow immediately, so the most critical information is read first.

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

Completeness4/5

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

For a single-parameter destructive tool with no annotations and no output schema, the description covers scope, irreversibility, and the plugin prerequisite. Only the return behavior is unaddressed, which is a minor gap given the simplicity.

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

Parameters3/5

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

Schema coverage is 100% and the sole parameter is fully documented in the schema, including an example ID format and a pointer to figma_get_variables. The description adds nothing beyond the schema here, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Delete a Figma variable collection'), and adds scope ('and ALL its variables') that separates it from sibling figma_delete_variable, which removes a single variable. An agent can tell which deletion tool to reach for without opening the schema.

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

Usage Guidelines3/5

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

The phrase 'and ALL its variables' implies the bulk-delete context versus a single-variable delete, and the schema points to figma_get_variables for obtaining the ID. However, there is no explicit when-to-use/when-not guidance or named alternative, so routing is left to inference.

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

figma_diagnoseA

Designer-readable health check for figma-console-mcp. Use this when something seems wrong — it self-identifies the server, reports plugin connection / file / token status in plain language, and disambiguates errors that may be coming from a different Figma-related MCP server. Recommended as the first step when a user reports a "token expired" or "plugin disconnected" issue.

NameRequiredDescriptionDefault
verboseNoInclude the raw structured state alongside the human-readable report.

TDQS

A3.9/5.0
Behavior4/5

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

No annotations exist, so the description carries the full burden and largely meets it: it discloses that the tool is a read-only-style diagnostic, what categories of state it inspects (plugin connection, file, token), and that output is plain language with optional raw state. It does not state whether the check can mutate anything (e.g., trigger a reconnect) or comment on cost/latency.

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?

Three tight sentences with the identity and purpose front-loaded. There is mild overlap between 'when something seems wrong' and the later 'token expired / plugin disconnected' trigger list, but no sentence is wasted.

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

Completeness4/5

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

For a zero-required-parameter diagnostic with no output schema, the description supplies enough: what it checks, that results are human-readable, and that it can attribute errors to the wrong MCP server. The only missing piece is a hint about the shape of the report or what a failing result implies for next steps.

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

Parameters3/5

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

The single parameter 'verbose' is fully documented in the schema (100% coverage), including its effect on output shape. The description never mentions it, so it adds no meaning beyond structured data. Baseline 3 applies 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?

States a specific verb+resource: a 'Designer-readable health check' that self-identifies the server and reports plugin connection / file / token status. It also carves out a niche by disambiguating errors from other Figma-related MCP servers. It stops short of naming the closest sibling (figma_get_status), so the distinction an agent needs most is only implied.

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

Usage Guidelines4/5

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

Gives explicit trigger conditions: 'Use this when something seems wrong' and 'first step when a user reports a token expired or plugin disconnected issue'. That is strong positive routing. There is no when-not guidance or named alternative (e.g., use figma_get_status for a plain status read), which keeps it from a 5.

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

figma_diff_versionsA

Diff two versions of a Figma file. Always returns a cheap page-structure diff (added/removed/renamed pages, 2 API calls). Pass component_ids to additionally get per-node deep diffs at depth=2 (added/removed children, name/description changes, componentPropertyDefinitions changes for COMPONENT_SETs, boundVariables deltas) — costs 2 API calls per scoped node. Use 'current' for to_version to diff against HEAD. v1.25.0: when the Desktop Bridge plugin is connected, description and Dev Mode annotation changes are ALSO tracked via a session buffer and surfaced under scoped_nodes[].metadata_changes[] and unscoped_metadata_changes[] — Figma REST omits these from version snapshots so they're otherwise invisible. STILL NOT tracked: instances of components on the canvas, raw layout properties (layoutSizingHorizontal/Vertical, unbound paddings/widths), raw visual properties (cornerRadius, unbound fills), variable VALUE changes, style content, and metadata edits made while the plugin was disconnected. See scope_coverage and notes[] for the full coverage map and complementary tools.

NameRequiredDescriptionDefault
modeNoOutput verbosity. summary=counts only, standard=names+counts (default), detailed=full property/binding details.standard
fileUrlNoFigma file URL. Uses current URL if omitted.
to_versionYesThe later version_id to compare to. Use 'current' for HEAD.
from_versionYesThe earlier version_id to compare from. Get from figma_get_file_versions.
component_idsNoOptional. Node IDs (typically COMPONENT_SETs) to diff in detail. If omitted, falls back to the current Figma selection. If neither is available, only the page-structure diff is returned. Use figma_get_design_system_kit or figma_search_components to discover IDs explicitly.

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so thoroughly: it discloses API-call costs, exactly what is returned by default, what additional detail `component_ids` unlocks, and the special Desktop Bridge session-buffer behavior for metadata changes. It also lists what remains untracked, which is strong behavioral disclosure for a diff tool.

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 front-loaded with the core purpose and each clause generally earns its place by covering cost, coverage, or limitations. It is dense and somewhat long for a single paragraph, but the complexity of the tool and the importance of the exclusions justify most of the length.

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

Completeness5/5

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

There is no output schema, so the description must explain return behavior, and it does: default page-structure diff, optional per-node deep diffs, metadata changes via the Desktop Bridge, and explicit coverage gaps. Combined with the cost and limitation details, an agent has enough information to call the tool correctly and interpret the result.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics beyond the schema for `component_ids`: it explains that deep diffs run at depth=2, what kinds of changes are included for COMPONENT_SETs, and that each scoped node costs 2 API calls. It does not add much for `mode`, `fileUrl`, or `from_version` beyond the schema, which keeps it from being a 5.

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

Purpose5/5

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

The description opens with a specific verb and resource: "Diff two versions of a Figma file." It clearly distinguishes the core operation from sibling version tools by explaining the page-structure baseline and the optional per-node deep diff, so an agent can identify what this tool does without opening the schema.

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

Usage Guidelines3/5

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

The description gives clear in-tool usage guidance, such as using `current` for `to_version` and passing `component_ids` for deep diffs, and it enumerates important coverage exclusions. However, it never explicitly names when to use this tool versus close siblings like `figma_get_changes_since_version` or `figma_generate_changelog`; it only points vaguely to complementary tools via `notes[]`.

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

figma_ds_analyzeA

Analyze one or more production app codebases as the first step of design system extraction. Detects framework (React/Next/Angular/Web Components), styling methods (Tailwind v3/v4, CSS Modules, SCSS, Emotion, styled-components), and vendor component layers (shadcn/ui, Radix, MUI, Chakra, etc.); builds a component inventory with per-component classification (vendored / wrapped / pure-vendor / bespoke), prop contracts, real usage counts (porting rank), observed prop values (variant inference), and duplicate detection. Pass multiple targets to find the shared design language across several apps. Writes the full manifest to /.extraction/analysis.json and returns a compressed summary — read slices of the manifest for detail. Run this before figma_ds_extract_tokens and figma_ds_scaffold. Local Mode only.

NameRequiredDescriptionDefault
outDirNoDirectory where the design-system package will be generated (manifests persist under <outDir>/.extraction/). Default: '<first target>/design-system'.
excludeNoSubstring filters on relative paths to skip (node_modules, dist, .next etc. are always skipped).
includeNoSubstring filters on relative paths — when set, only matching files are scanned (e.g. ['src/', 'app/']).
targetsYesApp root directories to analyze. Absolute paths strongly recommended (the MCP server's working directory is not the project). Multiple targets = cross-app extraction: the inventory merges and duplicate components across apps are flagged.
maxFilesNoHard cap on files scanned per target (default 5000).

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and succeeds: it discloses framework/style/vendor detection, component classification, prop contracts, usage counts, duplicate detection, manifest writing to <outDir>/.extraction/analysis.json, and that only a compressed summary is returned.

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?

Front-loads the core purpose, then details the analysis outputs, manifest behavior, sequencing, and execution constraint. The description is dense but every sentence contributes useful selection or invocation information.

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

Completeness5/5

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

Given a complex multi-parameter analysis tool with no output schema and no annotations, the description is complete enough: it covers purpose, outputs, manifest location, summary return behavior, sequencing, and local-mode restriction.

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 five parameters thoroughly. The description adds useful context for targets and outDir but does not materially expand the semantics of include, exclude, or maxFiles beyond the schema.

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

Purpose5/5

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

States a specific verb and resource: analyze production app codebases for design system extraction. It also distinguishes itself from siblings by naming itself the first step before figma_ds_extract_tokens and figma_ds_scaffold.

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

Usage Guidelines5/5

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

Explicitly says to run this before figma_ds_extract_tokens and figma_ds_scaffold, and clarifies that it is Local Mode only. It also explains that passing multiple targets enables cross-app design language extraction.

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

figma_ds_extract_componentA

Deep-extract ONE component from the inventory for porting into the design system: returns its source (capped), local import closure (relative imports to follow), prop contract, observed call-site variants, vendor classification, style touchpoints (classNames, CSS-module imports, custom properties referenced), and a ready-to-adapt CSF3 story scaffold with variant stories inferred from real usage. The agent then ports the component into /src/components// and records progress with figma_ds_status. Local Mode only.

NameRequiredDescriptionDefault
outDirYesThe outDir used in figma_ds_analyze (manifest is read from it).
componentYesComponent name from the inventory (see figma_ds_analyze topByUsage, or the analysis manifest for the full list).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that source is 'capped' (truncation behaviour), that the tool is extraction-oriented with porting performed by the agent afterwards (implying it does not itself write the component files), and that it is restricted to Local Mode. It does not state what happens on an unknown component name or what the failure/empty result looks like, which keeps it off a 5.

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?

Front-loaded with the core action and scope, then the long return-value enumeration, then the workflow and mode constraint. The enumeration is dense but each item is substantive since there is no output schema. Slightly heavy as a single run-on sentence but no filler.

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

Completeness4/5

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

For a 2-parameter extraction tool with no output schema and no annotations, the description fully covers the return payload, the downstream workflow, and the Local Mode prerequisite. Only gaps are failure behaviour for a missing/ambiguous component name and any size expectations beyond 'capped'.

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

Parameters4/5

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

Schema coverage is already 100%, so baseline would be 3; the description adds genuine value by explaining how the two inputs connect to output — outDir is where the component gets ported (<outDir>/src/components/<Name>/) and component must be a name drawn from the inventory. That mapping from input to resulting path is meaning the schema alone does not convey.

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

Purpose5/5

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

States a specific verb and resource — 'deep-extract ONE component from the inventory for porting into the design system' — and then enumerates exactly what it returns (source, import closure, prop contract, call-site variants, vendor classification, style touchpoints, CSF3 scaffold). The 'ONE component' + 'from the inventory' scoping, plus the reference to figma_ds_analyze's manifest, cleanly separates it from broad lookup tools like figma_search_components or figma_get_component_details.

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

Usage Guidelines4/5

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

Gives clear operating context: it is the porting step of a workflow, the agent subsequently writes to <outDir>/src/components/<Name>/ and records progress with figma_ds_status, and it is 'Local Mode only'. What it lacks is an explicit contrast with near-neighbours such as figma_get_component_for_development_deep or figma_ds_scaffold, so an agent must infer when this is the right call versus those.

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

figma_ds_extract_tokensA

Extract design tokens from analyzed codebases into canonical DTCG JSON (plus optional CSS variables / Tailwind / SCSS / TypeScript projections). Mines declared styling intent first — :root and @theme custom properties (light+dark → multi-mode tokens), SCSS variables, tailwind.config theme values, shadcn HSL triples — then promotes recurring raw values (hex colors, spacing/radius/font sizes) above a frequency threshold. Every token carries provenance (source file:line, confidence, frequency) in $extensions. Names are structural as-mined; do a semantic-naming review pass with the user afterwards. The DTCG output is directly importable into Figma variables with figma_import_tokens (top-level groups become collections). Requires figma_ds_analyze to have run for the same outDir. Local Mode only.

NameRequiredDescriptionDefault
writeNoWrite token files to <outDir>/tokens/ (default true). False returns the DTCG document inline instead (dry run).
outDirNoThe outDir used in figma_ds_analyze (reads .extraction/analysis.json from it). Default: '<first target of the analysis run>/design-system' — pass explicitly when in doubt.
formatsNoToken file formats to write under <outDir>/tokens/. 'dtcg' (canonical) is always written. Match the app's styling method — e.g. add 'tailwind-v4' for a Tailwind app, 'scss' for SCSS.
targetsNoOverride: scan these app roots instead of the analysis manifest's targets (rarely needed).
dtcgDialectNoDTCG dialect: 'legacy' hex-string colors (max compatibility) or '2025' DTCG 2025.10 object colors/dimensions.legacy
minFrequencyNoHow often a raw (undeclared) value must recur to be promoted to a token (default 4). Values below the threshold are listed in the report for review.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the mining strategy (declared intent first, then frequency-based promotion), provenance in $extensions, structural naming and the need for semantic review, and the Local Mode restriction. It does not fully describe file-writing side effects or overwrite behavior, but the behavioral context is substantially richer than typical.

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?

Front-loaded with the core purpose, then logical progression through process, output, naming caveat, import path, and constraints. It is dense but every sentence contributes; a minor trim could improve it, but it is well structured and not padded.

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

Completeness4/5

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

For a complex six-parameter tool with no output schema, the description covers the input prerequisite, extraction logic, output formats, provenance, naming limitation, downstream import, and mode restriction. It could state what the report contains or how file writes behave, but overall it is complete enough for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six parameters in detail. The description reinforces the frequency threshold concept and mentions formats and outDir context, but adds little beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource: extract design tokens from analyzed codebases into canonical DTCG JSON, with optional projections. It clearly distinguishes this from sibling tools like figma_export_tokens and figma_get_token_values by emphasizing codebase mining, declared styling intent, and DTCG output.

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

Usage Guidelines4/5

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

Explicitly states the prerequisite that figma_ds_analyze must have run for the same outDir, and notes Local Mode only. It also points to figma_import_tokens as the downstream consumer. However, it does not contrast with alternatives such as figma_export_tokens or figma_setup_design_tokens, so a small gap remains.

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

figma_ds_scaffoldA

Generate the design-system package skeleton at outDir from a completed analysis + token extraction: package.json (app framework as peer deps), src/components layout, token files via the shared formatter engine, a framework-neutral token-showcase MDX docs page (the bird's-eye view), and a README with the workflow. Storybook itself is NOT installed by this tool — after scaffolding, run npm create storybook@latest inside outDir (the CLI auto-detects the framework and installs the current Storybook version). Additive by default: existing files are skipped unless force. Local Mode only.

NameRequiredDescriptionDefault
forceNoOverwrite existing scaffold files (token files always refresh).
outDirYesThe outDir used in figma_ds_analyze / figma_ds_extract_tokens.
formatsNoToken formats to (re)generate under tokens/.
frameworkNoOverride the scaffold framework. Default: the first framework detected by figma_ds_analyze. Note: Storybook has no .astro renderer — 'astro' scaffolds a react-vite workshop whose stories mirror the component markup.
dtcgDialectNoDTCG dialect for dtcg/json outputs.legacy
packageNameNonpm package name for the design system (e.g. '@acme/design-system'). Default: '@extracted/design-system'.

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: additive-by-default with existing files skipped unless force, token files always refreshing, Local Mode restriction, and an explicit non-action (Storybook is not installed, use the CLI afterwards). That is precisely the kind of destructive/overwrite and environmental context annotations would otherwise supply.

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?

Front-loaded with the deliverable list, then constraints and the overwrite rule, then the scope limit—good ordering with almost no wasted text. Minor flab such as '(the bird's-eye view)' and the parenthetical Storybook explanation could be trimmed without losing meaning.

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

Completeness4/5

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

For a multi-file generator with no output schema and no annotations, the description covers what is produced, what is deliberately excluded, overwrite semantics, and the mode restriction. It leaves unaddressed failure conditions (e.g. missing or partial analysis output) and whether it requires a live Figma connection.

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 every parameter including outDir, force, formats, framework, dtcgDialect and packageName is already documented with defaults and enums. The description restates rather than extends: 'existing files are skipped unless force' mirrors the schema's force text, and the astro/Storybook caveat is already in the framework field. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource (generate the design-system package skeleton at outDir) and enumerates exactly what is emitted: package.json with peer deps, src/components layout, token files, an MDX token-showcase page, and a README. It also carves out a boundary against the neighbouring figma_ds_setup_storybook concern by declaring 'Storybook itself is NOT installed by this tool', so an agent can distinguish it from siblings without opening the schema.

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

Usage Guidelines4/5

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

Prerequisites are explicit: it consumes the output of figma_ds_analyze and figma_ds_extract_tokens, and it is 'Local Mode only'. The post-step (run `npm create storybook@latest` inside outDir) is spelled out. It stops short of naming the sibling tools it competes with (e.g. figma_ds_setup_storybook, figma_ds_verify) or stating when not to scaffold.

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

figma_ds_setup_storybookA

Wire a freshly-initialized Storybook workshop to the extracted design system — run AFTER npm create storybook@latest inside outDir. Generates .storybook/preview.css (Tailwind entry importing the extracted tokens plus the SOURCE app's @theme utility mapping, custom @utility definitions, @layer base, and @font-face rules mined from its stylesheets, with a dark variant covering both .dark and [data-theme] conventions), copies self-hosted font files into staticDirs, and patches main.js (tailwind vite plugin + automatic JSX runtime — without it stories throw 'React is not defined') and preview.jsx (preview.css import + a theme toolbar/decorator using the extracted mode names). Idempotent; anything it can't patch safely is returned as a manual step. Local Mode only.

NameRequiredDescriptionDefault
outDirYesThe design-system package dir (same outDir as figma_ds_analyze) containing the freshly-initialized .storybook/.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully carries the burden: it discloses idempotency, that unsafe patches are returned as manual steps, why the JSX runtime is patched ('without it stories throw React is not defined'), dark-variant conventions handled, and Local Mode restriction. That is unusually rich 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.

Conciseness4/5

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

Front-loaded with the action and the ordering precondition, then details. It is dense with nested parentheticals that make it long, but every clause conveys distinct behavioral information rather than filler.

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

Completeness5/5

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

For a 1-param, no-output-schema tool, the description covers what it does, when it applies, what it modifies, and how it handles failures (manual steps). Nothing an agent needs in order to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% so the single param is already documented, but the description adds value by tying outDir to figma_ds_analyze's outDir and requiring the presence of a freshly-initialized .storybook/ directory, clarifying the expected state.

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

Purpose5/5

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

States a specific verb+resource ('Wire a freshly-initialized Storybook workshop to the extracted design system') and enumerates the concrete artifacts it produces (preview.css, font files, main.js/preview.jsx patches). This is clearly distinct from sibling ds_ tools like figma_ds_scaffold or figma_ds_analyze.

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

Usage Guidelines4/5

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

Explicitly states the precondition ('run AFTER `npm create storybook@latest` inside outDir') and scope ('Local Mode only'), which pins down when it applies. It doesn't name the neighboring ds_ tools as alternatives or give exclusion conditions, so a 4 rather than a 5.

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

figma_ds_statusA

Read or update design-system extraction porting progress (persisted in /.extraction/status.json so long engagements survive session boundaries). Call with only outDir to get a progress summary; pass update to record a component's porting status. Local Mode only.

NameRequiredDescriptionDefault
outDirYesThe outDir used in figma_ds_analyze.
updateNoStatus update to record. Omit to just read progress.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does well: it discloses that progress is persisted to <outDir>/.extraction/status.json, that persistence is meant to survive session boundaries, and that the tool is Local Mode only. It still omits concurrency/overwrite behavior and permission requirements, so it is strong but not exhaustive.

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

Conciseness5/5

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

The description is two tight sentences with no wasted text. The core behavior and the read-vs-update calling convention are front-loaded.

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

Completeness4/5

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

For a tool with no annotations and no output schema, it explains persistence, mode constraints, and the read/update split. It could say more about what the progress summary contains, but the essential invocation context is present.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents outDir and the nested update object. The description still adds useful semantics: outDir should match the one used in figma_ds_analyze, and omitting update means read-only progress summary. That is meaningful guidance beyond the schema, though not rich enough for a 5.

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 states a specific verb and resource: read or update design-system extraction porting progress, persisted in status.json. It clearly distinguishes the read-only form (only outDir) from the update form (pass update). It does not explicitly differentiate itself from related siblings such as figma_ds_verify or figma_ds_extract_component, so it stops short of 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 Guidelines4/5

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

It gives explicit invocation guidance: call with only outDir to get a summary, or pass update to record a component's status. It also adds a meaningful exclusion, 'Local Mode only'. It does not describe when to use this instead of adjacent workflow tools, but the when-to-use instruction is clear.

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

figma_ds_verifyA

Run the deterministic fidelity evals on an extracted design system package — the governance gate before handing off or pushing to Figma. Checks: tokens.json parses as DTCG and every alias resolves (import-ready); no quoted CSS functional expressions in generated token files (kills transitions); every var() consumed in component/preview CSS resolves in the workshop; every component directory has a stories file and index barrel; every portable inventory component has a porting status. Each check encodes a failure class found in real extraction runs. Also reports Figma round-trip readiness with the exact figma_import_tokens call for design-led orgs (ask the user code-led vs design-led). Local Mode only.

NameRequiredDescriptionDefault
outDirYesThe design-system package dir (same outDir as figma_ds_analyze).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden well: it discloses that checks are deterministic gates, that each encodes a real failure class, that it reports Figma round-trip readiness, and that it is Local Mode only. It does not describe the return/report shape, which is a minor gap given no output schema.

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?

Front-loaded with the core purpose, then dense specifics (DTCG parsing, alias resolution, var() consumption, stories/barrels). Slightly long due to the enumerated checks, but each clause conveys a concrete failure class rather than filler.

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 no annotations and no output schema, the description is thorough about inputs and checks and flags the Figma round-trip / code-led-vs-design-led decision. Only the report/return format is left unspecified.

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?

Only one parameter at 100% schema coverage, so the schema documents it. The description adds meaning by stating it must be the same outDir used in figma_ds_analyze, tying the parameter to a sibling's output.

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

Purpose5/5

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

States a specific verb ('Run deterministic fidelity evals') on a specific resource ('extracted design system package') and enumerates exactly what the checks verify. Clearly distinguishes it from siblings like figma_ds_analyze (extraction) and figma_ds_status.

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

Usage Guidelines4/5

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

Gives clear context: it is the 'governance gate before handing off or pushing to Figma' and is 'Local Mode only.' It implicitly follows figma_ds_analyze by matching outDir, but does not explicitly name when to prefer figma_ds_status vs this verify step.

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

figma_duplicate_slideB

Duplicate an existing slide. The clone is placed adjacent to the original.

NameRequiredDescriptionDefault
slideIdYesThe node ID of the slide to duplicate

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 does disclose one real behavioral trait — the clone lands adjacent to the original — but says nothing about what is returned (e.g., the new slide's ID), whether the original is modified, or permission requirements for a mutation.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and followed by the one non-obvious outcome (placement). No wasted phrasing, though there is very little content to structure.

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

Completeness3/5

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

For a single-parameter mutation with no annotations and no output schema, the description covers the action and placement but leaves return value and side effects undocumented — an agent cannot know whether it receives the duplicated node's ID to chain further calls.

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

Parameters3/5

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

Schema coverage is 100% and the lone parameter 'slideId' is fully documented as 'The node ID of the slide to duplicate'. The description adds no format, sourcing, or constraint detail beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (duplicate) and resource (slide), which cleanly separates it from figma_create_slide and figma_clone_node by resource scope. It doesn't explicitly name a sibling, but the verb+resource pairing is unambiguous.

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

Usage Guidelines3/5

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

Usage is only implied: 'existing slide' signals the source must already exist, which implicitly routes 'make a new one from scratch' to figma_create_slide. There is no explicit when-to-use, prerequisite, or named alternative.

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

figma_edit_component_propertyB

Edit an existing component property. Can change the name, default value, or preferred values (for INSTANCE_SWAP). Use the full property name including the unique suffix.

NameRequiredDescriptionDefault
nodeIdYesThe component or component set node ID
newValueYesObject with the values to update
propertyNameYesThe full property name with suffix (e.g., 'Show Icon#123:456')

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 behavioral burden, and it discloses almost nothing beyond what the schema already states. It never says whether edits are reversible, what happens if the property name or suffix doesn't match, whether a rename breaks existing instance overrides, or what errors surface — significant gaps 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.

Conciseness4/5

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

Three short sentences, front-loaded with purpose, then capability, then the naming caveat. No wasted framing, though the middle sentence largely duplicates the newValue schema and could have been spent on a genuinely additive detail.

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

Completeness3/5

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

For a 3-parameter mutation with a nested object, no output schema, and no annotations, the description covers purpose and the naming convention but omits failure modes, permission/connection requirements, and the effect of the edit on consuming instances. Adequate to attempt a call, insufficient to anticipate consequences.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already documents nodeId, propertyName (with a worked suffix example), and all newValue sub-fields including the INSTANCE_SWAP restriction. The description's notes on suffix format and INSTANCE_SWAP merely restate the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("Edit an existing component property") and enumerates the editable aspects (name, default value, preferredValues), which maps directly to the nested newValue object. The word "existing" implicitly separates it from figma_add_component_property and figma_delete_component_property, but it never names those siblings explicitly.

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 INSTANCE_SWAP parenthetical and the "full property name including the unique suffix" instruction give operational context for correct invocation, but there is no explicit guidance on when to use this versus adding or deleting a property, nor any stated prerequisites (e.g., plugin connection, node must be a component/component set).

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

figma_executeA

Execute arbitrary JavaScript in Figma's plugin context with full access to the figma API. Use for complex operations not covered by other tools. Requires Desktop Bridge plugin. CAUTION: Can modify your document.

COMPONENT INSTANCES: For instances (node.type === 'INSTANCE'), use figma_set_instance_properties — direct text editing FAILS SILENTLY. Check instance.componentProperties for available props (may have #nodeId suffixes).

RESULT ANALYSIS: Check resultAnalysis.warning for silent failures (empty arrays, null returns).

VALIDATION: After creating/modifying visuals: screenshot with figma_capture_screenshot, check alignment/spacing/proportions, iterate up to 3x.

PLACEMENT: Always create components inside a Section or Frame, never on blank canvas. Use parent.insertChild(0, bg) for z-ordering backgrounds behind content.

HOUSEKEEPING (MANDATORY): Before creating: screenshot the target page to see existing content and find clear space. When creating: place inside a named Section, positioned BELOW or AWAY from existing content. Never overlap. After creating: screenshot to verify clean placement and no overlaps. On failure/retry: DELETE any partial artifacts (empty frames, orphaned layers, blank pages) before retrying. Use node.remove() to clean up. Pages: NEVER create a new page if one with that name already exists — use the existing one. If you created a blank page during a failed attempt, delete it. Layers: If your code creates helper frames, placeholder nodes, or intermediate layers that aren't part of the final result, remove them.

MULTI-FILE (Local Mode only): Pass fileKey to run this in a specific connected file without switching the active file/target lock (see figma_list_open_files). To run the same code across several connected files at once, use figma_execute_across_files instead. Cloud Mode pairs with a single plugin instance and rejects fileKey.

NameRequiredDescriptionDefault
codeYesJavaScript code to execute. Has access to the 'figma' global object. Example: 'const rect = figma.createRectangle(); rect.resize(100, 100); return { id: rect.id };'
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Does not change the active file or target lock. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
timeoutNoExecution timeout in milliseconds (default: 5000, max: 300000)

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does: it warns 'CAUTION: Can modify your document', states the Desktop Bridge plugin prerequisite, discloses silent-failure modes (empty arrays, null returns, text edits on instances), points at resultAnalysis.warning, and mandates cleanup of partial artifacts via node.remove() on retry. These are exactly the non-obvious traits an agent needs before invoking arbitrary code.

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

Conciseness3/5

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

Purpose and the primary alternative are front-loaded correctly, but the body is a long manual with four bolded sections, and the HOUSEBRIDGE/housekeeping block repeats the screenshot-before/after/on-retry instruction three times. Most sentences are actionable, yet the same guidance could be delivered in roughly half the space.

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

Completeness5/5

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

For an arbitrary-code-execution tool with no output schema, the description covers prerequisites, mutation risk, silent-failure detection, validation loop, placement conventions, and cleanup obligations. Nothing an agent needs to call this safely and correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The MULTI-FILE paragraph restates the fileKey semantics already present in the schema (Local Mode only, does not change target lock, rejected in Cloud Mode) and says nothing about timeout beyond what the schema documents, so it adds routing value rather than new parameter meaning.

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

Purpose5/5

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

States a precise verb and resource: execute arbitrary JavaScript in Figma's plugin context with figma API access. It explicitly scopes itself as the fallback for 'complex operations not covered by other tools', which lets an agent distinguish it from the many narrow sibling tools (figma_resize_node, figma_set_text, etc.) without opening a schema.

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?

Names concrete alternatives and the conditions that select them: figma_set_instance_properties for INSTANCE nodes (with the warning that direct text editing fails silently), figma_capture_screenshot for validation, figma_list_open_files for fileKeys, and figma_execute_across_files for multi-file runs. It also states the exclusion that Cloud Mode rejects fileKey.

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

figma_execute_across_filesA

Run the same JavaScript against multiple Figma files connected via the Desktop Bridge plugin, IN PARALLEL, without touching the active file or target lock. Built for cross-file consistency work — e.g. running the same structural check or fix against every file in a multi-file design system and diffing the results — instead of switching the active file and running figma_execute once per file in sequence. Each file's code runs in that file's own plugin context (same 'figma' global as figma_execute). You must say which files to target: pass fileKeys (read them from figma_list_open_files first — strongly preferred for anything that writes), or pass allFiles: true to hit every connected file. Requires Desktop Bridge plugin open in each target file. Local Mode only.

NameRequiredDescriptionDefault
codeYesJavaScript code to execute in each targeted file. Has access to the 'figma' global object, same as figma_execute. Example: 'return { pageCount: figma.root.children.length };'
timeoutNoPer-file execution timeout in milliseconds (default: 10000, max: 30000). Applies independently to each file — one slow/unresponsive file does not delay the others.
allFilesNoRun against EVERY currently connected file. Opt-in on purpose: this executes the code in files the user may be actively working in, including any file pinned by target lock. Prefer naming fileKeys explicitly for anything that writes.
fileKeysNoWhich connected files to target, by fileKey. Get fileKeys from figma_list_open_files. Required unless allFiles is true.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries full burden and does so: it discloses parallel execution, that the active file and target lock are untouched, that each file runs in its own plugin context with the same 'figma' global, the Desktop Bridge plugin requirement per file, and Local Mode only. These are non-obvious behavioral facts an agent needs before calling.

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?

Dense and front-loaded with the key distinction first, then the alternative, then targeting rules. Some sentences restate what the schema already documents (fileKeys/allFiles semantics), which is mild redundancy rather than waste.

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

Completeness4/5

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

For a complex, multi-file mutation tool with no output schema, the description covers execution semantics, targeting, and prerequisites well. The one gap is how per-file results are returned/aggregated with no output schema, leaving the agent to infer the shape.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds routing meaning beyond the schema: fileKeys is strongly preferred for anything that writes, allFiles is opt-in and hits files the user may be actively editing, and timeout applies independently per file. Only minor value-add over an already complete schema.

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

Purpose5/5

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

States a specific verb (run the same JavaScript) across a specific resource (multiple Figma files) and names the scope (parallel, cross-file). It explicitly contrasts itself with figma_execute, so an agent can tell the two apart without opening either schema.

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?

Gives when-to-use (cross-file consistency work, running the same check/fix against every file in a multi-file design system) and the alternative it replaces (switching the active file and calling figma_execute per file in sequence). It also prescribes the prerequisite step: read fileKeys from figma_list_open_files first.

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

figma_export_animationA

Export an animated frame as MP4, GIF or WebM. The node should be the frame that holds the Motion timeline (its top-level frame). The file is written to outputPath (default: the OS temp folder) and the path is returned. An existing file is never replaced unless overwrite is true.

NameRequiredDescriptionDefault
fpsNoMP4/WebM: 12, 24, 30 or 60. GIF: 8, 12, 15, 24 or 30
scaleNo0.5, 0.75, 1, 1.5, 2, 3 or 4. Use scale, width or height, not several
widthNoOutput width in px
formatYes
heightNoOutput height in px
nodeIdNoFrame to export. Defaults to the current selection
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
qualityNoMP4/WebM quality
loopCountNoGIF loops (0 = forever)
overwriteNoReplace a file that already exists at outputPath
outputPathNoWhere to write the file. Default: OS temp folder

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does useful work: it discloses the write destination and its default (OS temp folder), that the resulting path is returned, and an explicit non-destructive guarantee ('never replaced unless overwrite is true'). It omits any mention of plugin/mode prerequisites or failure conditions, which keeps it short of a 5.

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

Conciseness5/5

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

Three short sentences, front-loaded with what is produced, then the input constraint, then the side effects. Every sentence carries information not present in the structured fields; there is no filler.

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

Completeness4/5

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

For an 11-parameter export tool with no output schema, the description adequately covers the return value ('the path is returned') and the destructive-behavior question. Format-specific defaults (fps, quality, loopCount) are left to the schema, which documents them well, so nothing critical is missing.

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

Parameters4/5

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

Schema coverage is 91%, so the baseline is 3, but the description adds real meaning for nodeId (must be the top-level frame that owns the Motion timeline, not an arbitrary child), for outputPath's default, and for overwrite's effect. Those are the higher-risk parameters and the description explains them better than the schema does.

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

Purpose5/5

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

The first sentence gives a specific verb (Export) and resource (an animated frame) plus the exact output formats (MP4, GIF, WebM), which cleanly separates it from the static-capture siblings like figma_take_screenshot and figma_capture_screenshot. The second sentence narrows the input object to the frame holding the Motion timeline.

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?

It states the precondition that the node must be the top-level frame holding the Motion timeline, which is real invocation guidance. However, it never explicitly contrasts itself with the screenshot/capture siblings, so an agent must infer that this is the video-only path rather than being told.

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

figma_export_tokensA

Export Figma variables to design token files in your codebase. Bidirectional with figma_import_tokens — together they replace Style Dictionary and Tokens Studio's export pipeline for the popular styling methods.

FULLY-IMPLEMENTED OUTPUT FORMATS: • dtcg — W3C DTCG JSON. Canonical pivot format. Round-trip safe via $extensions["figma-console-mcp"]. • css-vars — CSS custom properties with mode-aware selectors (:root, .dark, [data-theme=...]). • tailwind-v4 — Tailwind v4 @theme inline block. Token-to-namespace mapping (color/, spacing/, radius/*, etc.) generates Tailwind utility classes. • tailwind-v3 — tailwind.config.js theme.extend object grouped under Tailwind's theme keys (colors, spacing, fontFamily, etc.). • scss — $var: value; declarations. Multi-mode emits a primary variable + a mode-keyed SCSS map for runtime access. • ts-module — export const tokens = { ... } as const with derived Tokens type. Multi-mode tokens emit as { Light: ..., Dark: ... } objects. • json-flat — flat key-value JSON ({"ds-color-primary": "#4085F2"}) for custom build scripts. • json-nested — nested object JSON mirroring the token path tree. • style-dictionary-v3 — SD v3 source format with bare value/type keys (back-compat for existing SD users). • tokens-studio — Tokens Studio multi-file layout ($themes.json + $metadata.json + per-set files). Preserves Figma collection/mode bindings for round-trip with the TS plugin.

ZERO-ARG USAGE: With a tokens.config.json at your project root, just call the tool with no args — it picks up source dir, output formats, modes, prefix, etc. from config. See the response's suggestedScaffold payload when no config is detected — present it to the user, write the scaffold via your file tools, then call again.

WRITE SAFETY: Export REPLACES the contents of each target file with the current Figma state — it does not merge into it. Under the default strategy: "merge" the tool refuses to write (and changes nothing) when overwriting an existing DTCG file would delete tokens it does not manage: tokens added by hand, or tokens from collections outside this export. It also refuses when a requested collectionId is not in the file it read, or when the export is empty — both usually mean a different file is active in Figma than you intended. Variables deleted in Figma are removed from the file as normal. Use dry-run to preview, replace to overwrite unconditionally. Generated files record the Figma file they came from (a Source: Figma file <key> header line; figmaFileKey in DTCG), and the default strategy also refuses to overwrite a file that was generated from a DIFFERENT Figma file. Plain-JSON formats (json-flat, json-nested, style-dictionary-v3, tokens-studio) cannot carry that record — pin figmaFile in tokens.config.json for a hard guarantee. Every response includes source (the Figma file name/key the data was read from) — check it.

DTCG DIALECT (dtcgDialect, applies to dtcg/json-flat/json-nested outputs): legacy (default): hex-string colors, maximum compatibility (Style Dictionary v4, Tokens Studio). 2025: DTCG 2025.10 object colors/dimensions (Style Dictionary v5+). figma_import_tokens accepts BOTH dialects regardless of this setting.

ROUND-TRIP SAFETY: Figma variable IDs are preserved in DTCG $extensions["figma-console-mcp"] so renames on either side don't create duplicates. The same metadata enables non-destructive incremental sync via figma_import_tokens. Variable scopes (when non-default) and per-platform codeSyntax (when set) are stashed there too and round-trip through import.

NameRequiredDescriptionDefault
modesNoModes to include in the output. 'all' (default) exports every mode in every collection. Pass an array like ['Light', 'Dark'] to filter.
scopeNoWhether to export the entire file's variables ('file', default) or just specific collections via collectionIds.
formatNoSpecific output format to emit. When omitted, formats come from tokens.config.json's generated.formats list. Common starting choices: 'dtcg' for the canonical JSON, 'css-vars' for runtime CSS custom properties, 'tailwind-v4' for Tailwind v4 @theme blocks.
prefixNoPrefix prepended to every output token name (e.g. 'ds-', 'al-'). Only affects formatters that emit named tokens — DTCG and JSON outputs use unmodified paths.
remBaseNoBase font size in pixels for px→rem conversion. Default: 16.
sizeUnitNoUnit for dimension tokens. Default: 'rem' for web outputs, 'pt' for iOS, 'dp' for Android.
strategyNoHow to handle existing output files. Export always replaces a target file's contents with the current Figma state — it does not merge token-by-token. 'merge' (default) is the SAFE mode: it refuses to write, leaving the file untouched, if overwriting an existing DTCG file would delete tokens the export does not manage (hand-added tokens, or tokens from collections not included in this export). 'replace' overwrites unconditionally. 'dry-run' reports what would be written without writing.
configPathNoExplicit path to a tokens.config.json file. When omitted, the tool walks up from cwd looking for one — typical case is zero-arg.
outputPathNoWhere to write the output. Treated as a DIRECTORY by default — each generated file (e.g. tokens.tokens.json, tokens.css) is written inside it and the directory is created if missing. Treated as a FILE when it is an existing file or ends in a token-file extension (.json, .css, .scss, .less, .ts, .js): the export must then produce exactly ONE file (one format, no splitByMode/splitByCollection — combine with collectionIds to re-export a single collection into e.g. typography.tokens.json), which is written at exactly that path, overwriting it. A file path combined with a multi-file export is rejected with an explanatory error before anything is written. End the path with '/' to force directory handling. Relative paths resolve against the project root (the directory containing tokens.config.json) or cwd if no config. When omitted, the output is returned inline in the response (suitable for the AI to inspect or write via its own file tools).
colorFormatNoColor value format in the output. Default: 'hex'. Use 'oklch' for modern Tailwind v4 charts.
dtcgDialectNoDTCG dialect for dtcg/json-flat/json-nested outputs. legacy (default): hex-string colors, maximum compatibility (Style Dictionary v4, Tokens Studio). 2025: DTCG 2025.10 object colors/dimensions (Style Dictionary v5+). Other formats (css-vars, scss, tailwind, ts-module) render final code and ignore this option.
splitByModeNoEmit one file per mode (e.g. tokens-light.css, tokens-dark.css). Default false (single file with all modes).
collectionIdsNoSpecific Figma collection IDs to export. Required when scope is 'collection'. Use figma_get_variables to enumerate available collections.
resolveAliasesNoIf true, alias references are resolved to literal values in the output. Default is false for JSON formats (preserves alias semantics) and true for CSS/SCSS/Tailwind/etc. (which can't natively express aliases).
splitByCollectionNoEmit one file per Figma collection. Default false. Useful when collections map to different runtime themes.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it discloses that export REPLACES file contents rather than merging, enumerates the exact refusal conditions (unmanaged tokens, unknown collectionId, empty export, mismatched source Figma file), and notes that Figma-deleted variables are removed. It also explains the source-stamping mechanism and its limitation for plain-JSON formats.

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

Conciseness3/5

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

Purpose and write-safety are front-loaded well, but the ten-bullet format catalog occupies a large share of the text and largely expands values already enumerated in the schema. The ROUND-TRIP SAFETY paragraph repeats ground already covered under DTCG and dialect, so the definition is longer than an agent needs to make the call.

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

Completeness5/5

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

For a 15-parameter, zero-required, config-driven tool with no output schema, the description covers the gaps that matter: zero-arg resolution, the suggestedScaffold response payload, the `source` field in every response, and the full failure/refusal surface. An agent knows what the call returns and what it must check after it.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds beyond the schema: the strategy semantics are elaborated with consequence-level detail, dtcgDialect is scoped to which outputs it affects and which consumer versions it targets, and outputPath directory-vs-file rules are restated with the rejection behavior. The format bullets also explain what each enum value actually emits.

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

Purpose5/5

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

Opens with a specific verb+resource ('Export Figma variables to design token files') and immediately positions itself against siblings: figma_import_tokens is called out as the reverse direction, and figma_get_variables is named for enumeration. An agent can tell this apart from figma_get_token_values or figma_ds_extract_tokens without opening a schema.

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

Usage Guidelines4/5

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

Gives concrete when-to-use guidance: zero-arg mode when tokens.config.json exists, the scaffold flow when no config is detected, dry-run to preview and replace to overwrite unconditionally. It does not explicitly say when to prefer this over figma_get_token_values or figma_ds_extract_tokens, so routing among the read-side siblings is left implicit.

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

figma_focus_slideB

Navigate to and focus a specific slide in single-slide view.

NameRequiredDescriptionDefault
slideIdYesThe node ID of the slide to focus

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 implies a UI state change ('focus') but does not state whether this switches the view mode, whether it requires an existing open file, whether the focus is persistent, or what happens if the slide ID is invalid.

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?

It is a single, front-loaded sentence with no wasted words. It could be slightly more informative but is appropriately sized for a simple navigation tool.

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

Completeness3/5

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

For a one-parameter navigation tool with no output schema, the description covers the core action but leaves out helpful context about side effects, prerequisites, or what the agent should expect after focusing. It is minimally viable rather than complete.

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

Parameters3/5

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

The single parameter has 100% schema description coverage, so the schema already documents slideId. The description does not add any syntax, format, or constraints beyond what the schema provides, which is the expected baseline.

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 names a specific verb ('Navigate to and focus') and resource ('a specific slide'), and adds the scope 'single-slide view.' It is clear, but it does not explicitly distinguish itself from close siblings like figma_get_focused_slide or figma_get_slide_grid.

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?

Usage is only implied: an agent can infer it should call this when it needs to focus a slide. There is no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as figma_set_slides_view_mode or figma_get_slide_grid.

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

figma_generate_changelogA

Generate a human-readable markdown changelog between two versions. Wraps figma_diff_versions and enriches the output with author labels and timestamps via figma_get_file_versions lookback (one extra cheap API call). Returns BOTH a markdown string (paste into release notes / PRs / Storybook MDX) and the structured diff data. Same component_ids and mode semantics as figma_diff_versions. Use 'current' for to_version to changelog against HEAD.

NameRequiredDescriptionDefault
modeNoOutput verbosity. summary=one-liner, standard=sectioned with counts (default), detailed=full per-property/per-binding bullets.standard
fileUrlNoFigma file URL. Uses current URL if omitted.
to_versionYesThe later version_id. Use 'current' for HEAD.
from_versionYesThe earlier version_id. Get from figma_get_file_versions.
component_idsNoOptional. Node IDs to include in the per-component changelog section. If omitted, falls back to the current Figma selection.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations, so the description carries the burden and does well: it discloses the extra API lookback call (a cost trait agents should know), that it delegates to figma_diff_versions and figma_get_file_versions, and that it returns both a markdown string and structured diff data. It doesn't state permissions or anything about large-diff behavior, keeping it below a 5.

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?

Four sentences, zero waste, with purpose leading and the return shape, cost, and cross-tool semantics following in order of importance. Nothing is repeated that structured fields already provide verbatim.

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

Completeness4/5

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

With no output schema, the description correctly fills the gap by naming the two return payloads (markdown string plus structured diff). With no annotations, it implies a read-only generation step and discloses the extra call. Only missing is guidance on failure modes or very large diffs, which is minor for a read tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real cross-tool semantics: 'Same component_ids and mode semantics as figma_diff_versions' tells the agent the parameter meanings are shared and can be reasoned about once. The 'current'/HEAD guidance partially duplicates the schema.

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

Purpose5/5

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

States a specific verb+resource+scope: 'Generate a human-readable markdown changelog between two versions.' It immediately distinguishes itself from figma_diff_versions by disclosing that it wraps that tool and enriches the result, so an agent can tell the two apart without opening schemas.

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

Usage Guidelines4/5

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

Explicitly frames itself as an enrichment layer over figma_diff_versions at the cost of 'one extra cheap API call,' which implicitly tells the agent when to prefer it. It also gives the concrete usage hint "Use 'current' for to_version to changelog against HEAD." It stops short of an explicit 'use X instead when you don't need markdown' exclusion.

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

figma_generate_component_docA

Generate AI-complete component documentation from a Figma component. Produces structured markdown with anatomy, per-variant color tokens, typography, content guidelines (parsed from Figma description), design annotations (animation timings, interaction specs, accessibility notes from Dev Mode), icon mapping, spacing tokens, and design-code parity analysis. Merges Figma design data with optional code-side info (CVA definitions, sub-component APIs, source files). Output works with any docs platform. For richest output, read the component source code first and pass codeInfo. Pass history: { figma: true, git: true } to add an ongoing '## History' section: per-version design changes pulled from Figma version history and scoped to this component, plus recent git commits touching its source files.

NameRequiredDescriptionDefault
enrichNoEnable enrichment for token data
nodeIdYesComponent node ID (e.g., '695:313')
fileUrlNoFigma file URL. Uses current URL if omitted.
historyNoPull an ongoing changelog from Figma version history and/or git. When enabled, replaces the manual '## Changelog' section with a richer '## History' section. Both sources are off by default so existing callers are unaffected.
codeInfoNoCode-side documentation info. Read the component source code first, then fill in relevant sections. Include variantDefinition for CVA/variant code, subComponents for composable sub-parts, sourceFiles for all related files, and baseComponent for attribution.
sectionsNoToggle which sections to include
outputPathNoSuggested output file path
systemNameNoDesign system name for headers
includeFrontmatterNoInclude YAML frontmatter metadata

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden well: it discloses what the output contains, that history replaces the manual '## Changelog' section, and that both history sources are off by default. The notable gap is whether outputPath causes a file write or whether markdown is merely returned, which leaves the mutation profile undefined.

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?

Front-loaded with the purpose in sentence one, then output scope, then usage hints. The long mid-sentence enumeration of sections is dense but arguably earns its place by conveying output completeness; overall it is tight for a tool of this complexity.

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

Completeness4/5

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

No output schema exists, so the description must describe the return value — and it does, listing the markdown sections produced and platform portability. For a 9-parameter tool with nested objects the main missing piece is the write-vs-return behavior of outputPath and any auth/plugin-mode prerequisites.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real param-level semantics: codeInfo should be populated from source read first (variantDefinition, subComponents, sourceFiles, baseComponent) and the exact history payload shape with its intent. It does not explain sections, enrich, or systemName, so it is above baseline but not exhaustive.

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

Purpose5/5

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

States a specific verb+resource ('Generate ... component documentation from a Figma component') and immediately enumerates the artifact's contents, so an agent can distinguish it from figma_generate_changelog, figma_get_component_details, or figma_ds_extract_component without opening any schema.

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

Usage Guidelines4/5

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

Gives concrete operating guidance: 'For richest output, read the component source code first and pass codeInfo' and the exact opt-in shape for history. It does not, however, name when to prefer a sibling (e.g. figma_get_component_details for raw data) or when not to call it, so it stops short of a 5.

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

figma_get_animationsA

Read a node's Motion animations: applied animation styles (Figma presets and custom styles, with their entries), manual keyframe tracks, timelines and the playhead. Easing comes back with a CSS equivalent (cubic-bezier) where one exists, and token bindings come back as EASING/TIMING variable references. Set includeDescendants to also list animated layers inside it. Requires Desktop Bridge and Figma Desktop with the Motion API (beta).

NameRequiredDescriptionDefault
limitNoMax descendants to return
nodeIdNoNode to read. Defaults to the current selection
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
includeDescendantsNoAlso return animated layers inside the node

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose the return contract: easing returns a CSS cubic-bezier equivalent where one exists, and token bindings surface as EASING/TIMING variable references. It also flags an environment prerequisite and beta status, which materially affects whether a call succeeds; it does not say what happens when the Motion API is unavailable or how limit truncation is signalled.

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?

Purpose is front-loaded in the first clause, and the three sentences cover content, parameter behavior, and prerequisites without padding. The opening sentence is heavy with stacked parentheticals, which costs a bit of scannability but every sentence still earns its place.

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

Completeness4/5

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

There is no output schema, so the description must describe returns and it does so concretely (styles with entries, keyframe tracks, timelines, playhead, CSS easing, token refs). Combined with the stated Desktop Bridge/Motion API requirement, an agent has enough to decide and call, with only truncation/pagination behavior left implicit.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all four parameters, and the description mostly restates includeDescendants ("also list animated layers inside it") in nearly the same words as the schema. limit, nodeId and fileKey get no added meaning from the description, so baseline 3 applies.

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

Purpose5/5

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

"Read a node's Motion animations" gives a specific verb and resource, then enumerates exactly what is returned (applied styles, keyframe tracks, timelines, playhead). This cleanly separates it from the write-side siblings figma_apply_animation, figma_remove_animation, figma_export_animation and figma_manage_animation_styles without needing the schema.

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

Usage Guidelines3/5

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

Usage is only implied by the verb "Read"; the description never says when to reach for this versus figma_export_animation or figma_get_slide_transition, and offers no exclusions. It does add a real precondition (Desktop Bridge + Figma Desktop with the Motion API beta), which narrows the callable context but is not routing guidance.

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

figma_get_annotation_categoriesA

List available annotation categories in the current Figma file. Categories group annotations by purpose (e.g., interactions, accessibility, development notes). Use the returned category IDs when creating annotations with figma_set_annotations. Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

Because no annotations are provided, the description must carry the full behavioral burden. It discloses the two most important facts: the tool is scoped to the current file and depends on the Desktop Bridge plugin. However, it does not describe error behavior when the plugin is disconnected, nor the shape of returned items (IDs only, or IDs plus names).

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

Conciseness5/5

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

Three short sentences, each with a distinct job: what it does, what the data means, and how to use the output. Information is front-loaded with no repetition or filler.

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?

There is no output schema, so leaving it to the description was the right call; the description compensates by explaining that category IDs are returned and can be reused. For a zero-parameter listing tool, this is nearly complete; the only minor gap is the exact return structure of each category.

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 takes zero parameters, so there is nothing for the description to document and the baseline is a 4. It neither adds nor omits parameter information.

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

Purpose5/5

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

The description starts with a clear statement of a specific verb and resource: "List available annotation categories in the current Figma file." It also explains what the resource is (categories group annotations by purpose) and clearly distinguishes it from the sibling figma_get_annotations, which returns the annotations themselves.

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

Usage Guidelines4/5

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

It states the downstream workflow explicitly: use the returned category IDs with figma_set_annotations, which tells the agent why and when to call this tool. It also gives a hard prerequisite ("Requires Desktop Bridge plugin"). The only gap is that it never states when not to call it or what happens if categories are unavailable.

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

figma_get_annotationsA

Read annotations from a Figma node. Annotations are designer-authored specs attached to nodes — they can include notes (plain text or markdown), pinned design properties (fills, width, fontSize, etc.), and category labels. Use this to discover animation timings, interaction specs, accessibility requirements, and other implementation details that designers annotate directly on the design. Set include_children=true to get annotations from child nodes too (useful for full component documentation). Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault
depthNoHow many levels deep to traverse when include_children is true (default: 1, max recommended: 5)
nodeIdYesNode ID to read annotations from (e.g., '695:313')
include_childrenNoAlso read annotations from child nodes. Useful for getting all annotations within a component tree.

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries the load — and it does useful work: it discloses the Desktop Bridge plugin prerequisite/availability requirement and describes the return content (notes text/markdown, pinned fills/width/fontSize, categories) in the absence of an output schema. Missing: explicit read-only confirmation and pagination/return-shape notes.

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?

Front-loads the core action, then layers definition, use cases, and the include_children hint. Four sentences, each contributing something; the middle list of annotation contents is dense but earns its place given no output schema.

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

Completeness4/5

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

For a read tool with no output schema and no annotations, the description covers return content, the child-traversal option, and the plugin prerequisite. Depth behavior is left to the schema, which fully documents it, so nothing critical is missing.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters are already documented, setting the baseline at 3. The description adds only marginal meaning for include_children ('useful for full component documentation') and says nothing about the depth parameter's traversal semantics beyond what the schema provides.

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

Purpose5/5

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

States a specific verb+resource ('Read annotations from a Figma node') and then defines what annotations actually are — designer-authored specs including notes, pinned properties, and category labels. This clearly distinguishes it from the sibling figma_set_annotations (write) and figma_get_annotation_categories (categories only).

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

Usage Guidelines4/5

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

Explicitly names the use cases ('discover animation timings, interaction specs, accessibility requirements') and explains when to set include_children=true for full component documentation. It does not name alternative tools or exclusions, so it stops short of the top score.

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

figma_get_changes_since_versionA

Convenience wrapper for figma_diff_versions: compares a given version against the current HEAD. Same output shape as figma_diff_versions, with to_version implicitly 'current'. Useful for 'what's changed since the last code-sync' workflows.

NameRequiredDescriptionDefault
modeNostandard
fileUrlNoFigma file URL. Uses current URL if omitted.
component_idsNoOptional. Node IDs to diff in detail. If omitted, falls back to the current Figma selection. Same semantics as figma_diff_versions otherwise.
since_versionYesThe version_id to compare against the current HEAD.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral load. It usefully discloses the output shape (matching figma_diff_versions) and that to_version defaults implicitly to 'current', but doesn't state that this is a read-only operation, permission/auth needs, or error behavior for an invalid since_version.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the core comparison behavior followed by the practical use case. No wasted text.

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

Completeness4/5

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

For a four-param tool with no annotations and no output schema, the description covers purpose, alternative, and return shape by referencing figma_diff_versions. The only gap is that return value details depend on the agent already knowing diff_versions output.

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

Parameters3/5

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

Schema coverage is 75%, so the schema does most of the parameter work. The description adds real value by explaining that the comparison target is implicitly current HEAD, but adds nothing about mode enum values or component_ids, leaving those to the schema.

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

Purpose5/5

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

States a specific operation — compares a given version against current HEAD — and explicitly frames itself as a convenience wrapper for figma_diff_versions. An agent can immediately distinguish it from the sibling: same shape but with to_version pinned to 'current'.

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

Usage Guidelines4/5

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

Provides a concrete scenario ('what's changed since the last code-sync' workflows) and implies the alternative by calling itself a convenience wrapper over figma_diff_versions, but never states an explicit when-not-to-use rule. Clear context, no hard exclusions.

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

figma_get_code_layersA

Find code layers (Figma's React code layers, node type CODE_INSTANCE) on the current page or across the file, with position, size, page, and any dev resources or related links (e.g. the GitHub source). The Plugin API and REST API expose code layers as rendered layers only: their source and props can't be read or edited, and new code layers can't be created through them. Create or edit code layers in Figma, through a GitHub import, or with Figma's own MCP server (send_code_to_figma). Use figma_capture_screenshot with a code layer's id to see it. Figma only returns links while the file's window is focused; otherwise the result has linksUnavailable: true and omits them. Requires Desktop Bridge.

NameRequiredDescriptionDefault
limitNo
scopeNoSearch the current page (default) or every pagepage
fileKeyNoLocal Mode only. Run against this connected file instead of the active file. Rejected in Cloud Mode.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it discloses that code layers are rendered-only, that a Desktop Bridge is required, and a non-obvious failure mode where links are omitted and 'linksUnavailable: true' appears unless the file window is focused. That conditional-result detail is exactly the kind of thing an agent could not infer elsewhere.

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?

Front-loaded with purpose, then limitations, then alternatives, then the focus caveat and the bridge requirement. Every sentence carries information, though the trailing 'Requires Desktop Bridge.' reads as appended rather than integrated and the block could be split for scanability.

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

Completeness4/5

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

For a 3-parameter, no-output-schema read tool with no annotations, the description covers purpose, limits, prerequisites, and result fields. The remaining gap is pagination/limit semantics and what a result entry looks like beyond the field list, but nothing essential to calling it correctly is missing.

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

Parameters3/5

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

Schema coverage is 67% — scope and fileKey are already documented in the schema, and the description merely restates scope ('on the current page or across the file'). The limit parameter (default 100, max 500) is undocumented in both schema and description, so pagination behavior is left unexplained.

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

Purpose5/5

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

Names a specific verb+resource and defines it precisely ('Figma's React code layers, node type CODE_INSTANCE'), then lists what it returns (position, size, page, dev resources/links) and the scope options. No sibling tool does this, and the description makes that distinction explicit by naming figma_capture_screenshot and send_code_to_figma as the adjacent tools.

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?

Gives the use case, explicit exclusions ('their source and props can't be read or edited, and new code layers can't be created through them'), and concrete alternatives for the excluded case (Figma UI, GitHub import, Figma's own MCP server send_code_to_figma). It also routes the agent onward to figma_capture_screenshot to visually inspect a found layer.

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

figma_get_commentsA

Get comment threads on a Figma file. Returns threads (root comment + replies) sorted by latest activity, in a compact format by default (author handle, message, timestamps, pinned node, reaction counts). Narrow the result with an explicit node_id (includes comments pinned to nested nodes), thread_id or since, and page with limit/offset — files often have hundreds of comments. Use include_resolved to also see resolved threads and format='full' for raw Figma API objects.

NameRequiredDescriptionDefault
as_mdNoReturn comment message bodies as markdown. Default: false
limitNoMaximum threads to return. Default: 30
sinceNoISO date/time: only threads with a comment or reply created at or after it.
formatNo'compact' (default) — trimmed fields; 'full' — raw Figma API comment objects.compact
offsetNoThreads to skip, for paging. Default: 0
fileUrlNoFigma file URL. Uses current URL if omitted. A node-id in the URL does not filter comments; use node_id explicitly.
node_idNoOnly threads pinned to this node (e.g. '695:313' or '695-313') or, with include_nested, to any node inside it. Omit or pass an empty string to return threads across the file.
thread_idNoReturn only the thread containing this comment ID (root or reply), including resolved threads.
include_nestedNoWith node_id: also match threads pinned to descendants of the node (one extra REST call). Default: true
include_resolvedNoInclude resolved (completed) comment threads. Default: false (only active threads unless thread_id is given)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the default sort order, that compact is the default and what fields it trims, that resolved threads are hidden by default, and that include_nested costs an extra REST call. It omits permission/auth requirements and rate-limit behavior, so it is not fully complete.

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?

Front-loaded with the resource and return shape, then narrowing options, then pagination rationale. The second sentence is dense and long, but every clause carries operational information rather than filler.

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

Completeness5/5

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

For a 10-parameter read tool with no output schema, the description is thorough: it describes the return structure (including compact-mode fields like author handle, timestamps, pinned node, reaction counts), default ordering, and its own defaults for resolved threads. Nothing required to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description still adds value by explaining node_id includes comments pinned to nested nodes and that thread_id bypasses the resolved filter. It also surfaces why include_resolved and format='full' matter, rather than just restating the enum.

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

Purpose5/5

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

States a specific verb+resource ('Get comment threads on a Figma file') and immediately describes the returned entity shape (root comment + replies, sorted by latest activity). It is clearly distinct from the write-side siblings figma_post_comment and figma_delete_comment.

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

Usage Guidelines4/5

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

Gives concrete narrowing strategies (node_id, thread_id, since), pagination guidance with a rationale ('files often have hundreds of comments'), and when to use include_resolved and format='full'. It does not name sibling alternatives or state when not to use it, keeping it just below a 5.

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

figma_get_componentA

Get a SINGLE component's metadata or reconstruction specification. Two export formats: (1) 'metadata' (default) - comprehensive documentation with properties, variants, and design tokens for style guides and references, (2) 'reconstruction' - node tree specification compatible with Figma Component Reconstructor plugin for programmatic component creation. IMPORTANT: For local/unpublished components with metadata format, ensure the Figma Desktop Bridge plugin is running (Right-click in Figma → Plugins → Development → Figma Desktop Bridge) to get complete description data. TIP: To get ALL components with visual specs in one call, prefer figma_get_design_system_kit instead.

NameRequiredDescriptionDefault
enrichNoSet to true when user asks for: design token coverage, hardcoded value analysis, or component quality metrics. Adds token coverage analysis and hardcoded value detection. Default: false. Only applicable for metadata format.
formatNoExport format: 'metadata' (default) for comprehensive documentation, 'reconstruction' for node tree specification compatible with Figma Component Reconstructor pluginmetadata
nodeIdYesComponent node ID (e.g., '123:456')
fileUrlNoFigma file URL (e.g., https://figma.com/design/abc123). Auto-detected from WebSocket Desktop Bridge connection. Only required if not connected.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose a real operational prerequisite: the Figma Desktop Bridge plugin must be running for complete data on local/unpublished components. It also notes that enrich only applies to the metadata format. It never states read-only semantics or what happens on failure, but the prerequisite disclosure is genuinely valuable 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?

Content is front-loaded: what it does, then the format split, then prerequisites, then the alternative. The IMPORTANT/TIP sentences are dense but each carries actionable information rather than filler; minor wordiness in restating the formats.

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

Completeness4/5

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

For a read tool with no output schema and no annotations, the description covers both return shapes (rich documentation vs. node-tree spec), the setup prerequisite, and the better sibling for bulk retrieval. Only the safety profile and error behavior are left implicit.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does explain the intent behind the format enum in richer terms than the schema and mentions that fileUrl is auto-detected from the WebSocket bridge, but it doesn't document nodeId format (e.g. '123:456'), which the schema already covers.

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 first sentence names a specific verb and resource with scope ('Get a SINGLE component's metadata or reconstruction specification'), and the two named output formats make the function concrete. It does not, however, differentiate itself from near-siblings like figma_get_component_details or figma_get_component_for_development, which an agent could easily confuse it with.

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

Usage Guidelines4/5

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

It clearly states which format applies to which goal ('metadata' for style guides/references, 'reconstruction' for programmatic creation) and names an alternative (figma_get_design_system_kit) for the all-components case. It stops short of full when-not guidance, e.g. no contrast with get_component_details or guidance on when a component is better fetched for development.

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

figma_get_component_detailsA

Get full details for a specific component including all variants, properties, and keys needed for instantiation. Use the component key or name from figma_search_components.

NameRequiredDescriptionDefault
componentKeyNoThe component key (preferred for exact match)
componentNameNoThe component name (used if key not provided)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. It discloses that this is a retrieval tool and that results include variants, properties, and instantiation keys, but it does not cover permissions, failure behavior, or what happens when neither identifier is supplied.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and followed by a practical input-source instruction. There is no redundant or wasted text.

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

Completeness3/5

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

For a read-only lookup tool with two optional parameters and no output schema, the description gives a useful high-level summary of returned details. It still omits the return structure and does not clarify that at least one of componentKey or componentName must effectively be provided.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3; the schema already explains that componentKey is preferred for exact match and componentName is the fallback. The description reinforces the source of these values from figma_search_components but adds no further format or matching semantics.

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

Purpose4/5

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

The description states a specific verb and resource: "Get full details for a specific component," and enumerates what is included (variants, properties, keys needed for instantiation). It is clear, but it does not explicitly distinguish this from similar siblings such as figma_get_component or figma_get_library_component_by_key.

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?

It gives input-source guidance by telling the agent to use the component key or name from figma_search_components, implying the search-then-details workflow. However, it does not state when to choose this tool over other component-related siblings or when not to use it.

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

figma_get_component_for_developmentA

Get component data optimized for high-fidelity UI implementation. Returns a deep component tree (depth 4) with design tokens (boundVariables), interaction states (reactions), sizing constraints (min/max/layoutSizing), text behavior (autoResize, truncation), Figma slots (named freeform-content regions on a component, with the components each accepts and any min/max limit violations), and design annotations. Automatically includes 2x rendered image. Use when user asks to: 'build this component', 'implement this in React/Vue', 'generate code for', or needs both visual reference and technical specs for production-quality, accessible, token-aware code. For just metadata/descriptions, use figma_get_component. For just image, use figma_get_component_image. For full annotation details, use figma_get_annotations. To resolve variable IDs to names/values, use figma_get_variables.

NameRequiredDescriptionDefault
nodeIdYesComponent node ID to get data for (e.g., '695:313')
fileUrlNoFigma file URL (e.g., https://figma.com/design/abc123). REQUIRED unless figma_navigate was already called.
codebasePathNoPath to target codebase components directory (e.g., '/Users/me/project/src/components'). When provided, scans for existing components and includes a registry in the response to prevent recreating components that already exist. Strongly recommended for design-to-code workflows.
includeImageNoInclude rendered image for visual reference (default: true)

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are supplied, so the description carries the full burden and does real work: it discloses a fixed tree depth of 4, that a 2x rendered image is included automatically, and that slot output surfaces min/max limit violations rather than failing. It does not state permission requirements or how large the response can get for big components, which is the one gap for an annotation-free tool.

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?

Front-loaded with purpose, then payload, then triggers, then routing — a clean information hierarchy. The long parenthetical enumerating slot contents is heavy, but every clause adds discriminating detail. Slightly compressed for its length, though nothing is truly wasted.

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

Completeness5/5

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

With no output schema and no annotations, the description compensates fully: it enumerates the return payload category by category, notes the embedded image, and explains how codebasePath alters the response with a component registry. An agent knows what comes back and when to prefer another tool.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented inline, including the fileUrl/figma_navigate prerequisite and codebasePath's component-registry scan. The description adds no meaning beyond that — 'Automatically includes 2x rendered image' merely restates includeImage's default:true, and codebasePath is never mentioned in the prose. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Get component data') and immediately qualifies the scope with 'optimized for high-fidelity UI implementation.' It then enumerates the exact payload (boundVariables, reactions, sizing constraints, slots, annotations), which lets an agent distinguish it from figma_get_component and figma_get_component_details without opening a schema.

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?

Explicit trigger phrases ('build this component', 'implement this in React/Vue', 'generate code for') plus four named alternatives each with the condition that selects them (figma_get_component for metadata, figma_get_component_image for image-only, figma_get_annotations for full annotation detail, figma_get_variables for ID resolution). This is the full when/when-not/alternative triad.

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

figma_get_component_for_development_deepA

Get a deeply nested component tree with full visual properties, resolved design token names, instance references, prototype interactions, and annotations at every level. Uses the Desktop Bridge Plugin API for unlimited depth traversal — essential for complex components like data tables, nested menus, date pickers, and compound form fields where the standard depth-4 REST API tool misses deeper structure. Returns boundVariables resolved to actual token names (not just IDs), mainComponent references for INSTANCE nodes, and reactions for interaction states. Requires Desktop Bridge plugin. For simpler components (depth ≤ 4), use figma_get_component_for_development instead.

NameRequiredDescriptionDefault
depthNoMaximum tree depth to traverse (default: 10). Pass 0 (or a negative value) for UNLIMITED depth — traverses the entire subtree. Unlimited/large results can be big; target a specific child node if the payload is unwieldy.
nodeIdYesComponent node ID to extract (e.g., '695:313')

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the key operational fact that this requires the Desktop Bridge plugin and traverses via the Plugin API rather than REST. It also explains what is resolved beyond raw data (boundVariables to token names, mainComponent refs, reactions). It stops short of stating error behavior when the plugin is not connected or performance limits at scale (that caveat lives only in the schema param text).

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?

Front-loaded with the core purpose and the fallback rule last, so the decision-critical information comes first. It is dense but every clause adds signal; a couple of the enumerations (component examples, return field list) could be trimmed without loss.

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

Completeness5/5

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

No output schema exists, yet the description names the non-obvious return fields (resolved token names, mainComponent references, reactions) and the plugin prerequisite. An agent has enough to decide between this and the shallow sibling and to anticipate the payload.

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 nodeId format and the depth default/unlimited semantics are already fully documented in the schema. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the work.

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

Purpose5/5

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

States a specific verb and resource ('Get a deeply nested component tree') plus the exact contents returned (visual properties, resolved token names, instance references, interactions, annotations). It explicitly differentiates itself from the sibling figma_get_component_for_development by depth capability, so an agent can choose without opening either schema.

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?

Gives an explicit routing rule: use this for complex components like data tables, nested menus, date pickers, compound fields where depth-4 REST misses structure, and 'For simpler components (depth ≤ 4), use figma_get_component_for_development instead.' Both the when and the when-not are named with the alternative.

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

figma_get_component_imageA

Render a specific component or node as an image (PNG, JPG, SVG, PDF). Returns image URL valid for 30 days. Use when user asks for: component screenshot, visual preview, rendered output, or 'show me'. NOT for component metadata/properties (use figma_get_component). NOT for getting code/layout data (use figma_get_component_for_development). Best for: visual references, design review, documentation.

NameRequiredDescriptionDefault
scaleNoImage scale factor (0.01-4, default: 2 for high quality)
formatNoImage format (default: png)png
nodeIdYesComponent node ID to render as image (e.g., '695:313')
fileUrlNoFigma file URL (e.g., https://figma.com/design/abc123). Auto-detected from WebSocket Desktop Bridge connection. Only required if not connected.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose the key behavioral fact: it returns an image URL valid for 30 days, which matters for caching and reuse decisions. It does not cover connection/auth requirements (the fileUrl auto-detection note lives only in the schema) or failure modes for unsupported node types, so it falls short of complete.

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?

Front-loaded with the core action and return contract, then usage rules. The trailing 'Best for: visual references, design review, documentation' list partially overlaps the earlier 'Use when user asks for' clause, adding a small amount of padding.

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

Completeness4/5

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

Covers purpose, routing, output lifetime, and format options for a 4-parameter tool with no output schema. Minor gap: it doesn't clarify whether arbitrary non-component nodes are supported or what errors occur when disconnected.

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 every parameter (nodeId, fileUrl, format, scale) is already documented with examples and defaults. The description only restates the format enum, adding no new semantics. Baseline 3 is correct.

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

Purpose5/5

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

Specific verb+resource: 'Render a specific component or node as an image' with the output formats enumerated. It explicitly distinguishes itself from figma_get_component (metadata) and figma_get_component_for_development (code/layout), so an agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Contains explicit trigger phrases ('component screenshot', 'visual preview', 'show me') plus two named NOT-for cases with the sibling tool to use instead. This is the when/when-not/alternatives pattern at full strength.

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

figma_get_console_logsA

Retrieve console logs captured by the Desktop Bridge plugin: console output from code run through it (figma_execute and the other write tools) and from the bridge itself. It does NOT capture another plugin's console — Figma runs one plugin at a time in a file, each in its own sandbox, so the bridge cannot see a plugin you are developing. To debug your own plugin's logic, run that code through figma_execute and read the logs here, or use Figma's own developer console for the plugin.

NameRequiredDescriptionDefault
countNoNumber of recent logs to retrieve
levelNoFilter by log levelall
sinceNoOnly logs after this timestamp (Unix ms)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discloses key behavioral traits: logs come only from the bridge, not from other plugins, because Figma isolates plugins in separate sandboxes. It explains the workaround for debugging your own plugin. Minor gaps remain around retention, return format, and whether retrieval is a snapshot, but the critical caveat is covered.

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 purpose is front-loaded and the description stays focused on what matters. It runs four sentences and includes a useful caveat about sandboxing, though the middle sentence about Figma's plugin isolation could be tightened slightly.

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

Completeness4/5

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

For a log-retrieval tool with no output schema, the description provides enough context to select and invoke it correctly: it identifies the log source, clarifies the major limitation, and points to figma_execute for debugging. It does not describe log entry structure or retention, but those are not essential to basic 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 coverage is 100%, so the input parameters (count, level, since) are already documented in the schema. The description adds no additional parameter-level detail beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose5/5

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

The description uses a specific verb (Retrieve) and resource (console logs), and clearly scopes the source: logs captured by the Desktop Bridge plugin from its own execution and bridge activity. It also explicitly states what it does not capture (another plugin's console), which distinguishes it from a general-purpose log reader.

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

Usage Guidelines4/5

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

It provides clear when-to-use guidance: run code through figma_execute and read logs here, or use Figma's developer console. It also states when not to use it (another plugin's console). The only gap is that it does not mention the sibling figma_watch_console as an alternative for live/streaming logs.

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

figma_get_design_changesA

Get recent document changes detected in Figma. Returns buffered change events including which nodes changed, whether styles were modified, and change counts. WebSocket-only — events are captured via Desktop Bridge plugin. Use this to understand what changed since you last checked.

NameRequiredDescriptionDefault
clearNoClear the change buffer after reading. Set to true for polling workflows.
countNoMaximum number of change events to return (chronological order, oldest to newest; returns the last N events)
sinceNoOnly return changes after this Unix timestamp (ms). Useful for incremental polling.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful traits: events are buffered (and can be cleared), and the tool only works over WebSocket via the Desktop Bridge plugin. It does not say what happens when the buffer is empty, whether events expire, or anything about connection failure modes, leaving a modest gap for a stateful 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?

Three sentences, front-loaded with purpose, then return shape, then the transport prerequisite, then usage. Every sentence adds something distinct and nothing is repeated from the schema.

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

Completeness4/5

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

For a 3-parameter, no-output-schema, no-annotation tool, this covers purpose, return shape, transport prerequisite, and buffering behavior. It could go further on buffer lifetime/expiry and empty-result behavior, but an agent has enough to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented in the schema, making 3 the correct baseline. The description adds only contextual framing (that there is a buffer to query or clear) rather than parameter-level detail beyond the schema.

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

Purpose4/5

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

States a specific verb+resource ('Get recent document changes detected in Figma') and immediately characterizes the payload — node changes, style modifications, change counts. It is distinguishable from most siblings, though it never contrasts itself with closely related tools like figma_get_changes_since_version or figma_diff_versions.

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?

'Use this to understand what changed since you last checked' gives a use case, and the WebSocket/Desktop Bridge prerequisite is a real contextual constraint. But there is no when-not guidance and no mention of the version-diff siblings an agent would plausibly confuse this with.

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

figma_get_design_system_kitA

PREFERRED TOOL for design system extraction — replaces separate figma_get_styles, figma_get_variables, and figma_get_component calls. Returns tokens, components, and styles in a single optimized response with adaptive compression for large systems. Includes component visual specs (exact colors, padding, typography, layout), rendered screenshots, token values per mode (light/dark), and resolved style values. Use this instead of calling individual tools to avoid context window overflow. Ideal for AI code generation — use visualSpec for pixel-accurate reproduction. Variant specs are delta-encoded: the base variant carries the full visualSpec, siblings carry visualSpecDelta with only the properties that differ. Tokens/variables are read through the connected Desktop Bridge or cloud relay and work on ANY Figma plan — no Enterprise required. If a tokens fetch ever reports the Variables REST API is plan-limited (403), the bridge/relay is the plan-independent path: ensure it's connected and retry rather than abandoning variables.

NameRequiredDescriptionDefault
formatNo'full' returns complete data with visual specs and resolved values. 'summary' strips variant-level visual specs (medium payload). 'compact' returns only names, types, and property definitions (smallest payload, best for large design systems). Auto-compresses if response exceeds safe size regardless of format setting.full
fileKeyNoFigma file key. If omitted, extracted from the current browser URL.
includeNoWhich sections to include. Defaults to all.
componentIdsNoOptional list of specific component node IDs to include. If omitted, all published components are returned.
includeImagesNoInclude image URLs for components (adds latency). Default false.

TDQS

A4.8/5.0
Behavior5/5

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

No annotations exist, so the description carries the full burden and does so: it discloses adaptive compression triggered by response size regardless of the format setting, delta-encoded variant specs (base carries full visualSpec, siblings carry only diffs), image inclusion as a latency cost, and a non-obvious infrastructure dependency (Desktop Bridge/cloud relay, plan-independent). These are exactly the traits an agent cannot infer from the schema.

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?

Front-loaded with the routing decision, then layered into payload, encoding scheme, infrastructure, and error recovery — a sensible order. It is dense but slightly repetitive on compression ('adaptive compression for large systems' is restated as auto-compression in the schema) and the AI-code-generation sentence is soft value framing rather than operational detail.

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

Completeness5/5

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

With no output schema and five parameters, the description compensates fully: it describes the return shape (tokens/components/styles plus visualSpec and screenshots), the variant delta structure, and the failure mode with recovery steps. An agent has everything needed to call it correctly and interpret the response.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics beyond it — the compression behavior that overrides 'format', and the delta-encoding rule that explains what 'summary' actually strips. Minor gap: it does not clarify fileKey inference behavior or the interaction between componentIds and include, though the schema covers those.

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

Purpose5/5

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

Names a specific verb+resource ('design system extraction') and immediately scopes it against three named siblings (figma_get_styles, figma_get_variables, figma_get_component). The returned payload is enumerated concretely (tokens, components, styles, visualSpec, screenshots), so an agent can distinguish it from the many other Figma read tools without opening the schema.

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

Usage Guidelines5/5

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

Explicitly states when to use it ('PREFERRED TOOL', 'Use this instead of calling individual tools to avoid context window overflow'), names the exact alternatives it replaces, and gives a conditional fallback for the 403 plan-limited case with a concrete remedy (ensure bridge connected and retry). This is the strongest form of routing guidance in the corpus.

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

figma_get_design_system_summaryA

Get a compact overview of the design system. Returns categories, component counts, and token collection names WITHOUT full details. Use this first to understand what's available, then use figma_search_components to find specific components. This tool is optimized for minimal token usage.

NameRequiredDescriptionDefault
forceRefreshNoForce refresh the cached data (use sparingly - extraction can take minutes for large files)

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the burden and does disclose key behavior: it returns summary-only data, omits full details, and is token-optimized. However, it does not describe read-only safety, permission requirements, or caching behavior in the description itself; caching is only implied by the forceRefresh schema.

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 short and front-loaded, leading with what the tool returns before explaining usage. There is minor redundancy between 'compact overview' and 'optimized for minimal token usage,' but no material waste.

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

Completeness4/5

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

For a one-parameter summary tool with no output schema, the description names the main return contents and clarifies the summary-only scope. It is complete enough to call correctly, though it could be slightly richer about the returned shape or caching implications.

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

Parameters3/5

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

Schema coverage is 100% and the single forceRefresh parameter is fully documented in the schema, including its caching and extraction-time tradeoff. The description adds no additional parameter semantics beyond the schema's own documentation, so baseline 3 applies.

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

Purpose5/5

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

The description states a specific verb and resource: getting a compact overview of the design system. It specifies exactly what is returned (categories, component counts, token collection names) and explicitly distinguishes itself from figma_search_components for detailed lookup.

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

Usage Guidelines4/5

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

It gives clear usage ordering: use this first for an overview, then use figma_search_components for specific components. It does not mention when to avoid this tool or route to other design-system siblings such as token value or component detail tools.

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

figma_get_file_at_versionA

Fetch a Figma file (or specific nodes) as it existed at a past version_id. Thin snapshot tool — same shape as figma_get_file_data but bound to a historical version. Use figma_get_file_versions to discover version IDs. Combine with depth and node_ids to keep payloads small. Required scope: file_content:read (already standard).

NameRequiredDescriptionDefault
depthNoHow deep into the document tree to recurse. Lower is cheaper. Default: full depth (no limit).
fileUrlNoFigma file URL. Uses current URL if omitted.
node_idsNoOptional: snapshot only these node IDs instead of the full file. Reduces payload significantly for targeted inspection.
version_idYesThe version ID to snapshot (from figma_get_file_versions).

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does deliver the required auth scope (file_content:read) plus the read-only implication of 'Fetch'/'snapshot'. It also warns about payload cost and how to reduce it. It doesn't describe the response shape or any rate limits, but for a read-only fetch the disclosed scope and payload economics cover the main risks.

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?

Four short sentences, front-loaded with the verb and resource, then differentiation, then the discovery route, then cost guidance. Nothing is padded and the parentheticals are functional rather than noise.

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

Completeness4/5

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

For a read-only snapshot tool with full schema coverage, the definition covers purpose, discovery path, auth scope, and payload control. The only gap is return-value behavior, which is gestured at via 'same shape as figma_get_file_data' but never spelled out despite there being no output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented, making 3 the baseline. The description reinforces the depth/node_ids payload trade-off but adds no syntax, defaults, or format detail beyond what the schema states.

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

Purpose5/5

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

States a specific verb and resource ('Fetch a Figma file (or specific nodes) as it existed at a past version_id') with explicit scope. It also disambiguates from the closest sibling by saying it is 'same shape as figma_get_file_data but bound to a historical version', so an agent can separate the two without opening either schema.

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

Usage Guidelines4/5

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

Gives explicit routing to figma_get_file_versions for obtaining version IDs and practical guidance to combine depth and node_ids to keep payloads small. The implied counterpart (use figma_get_file_data for current state) is clear but never stated as an exclusion, so it falls short of a full when/when-not statement.

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

figma_get_file_dataA

Get full file structure and document tree. WARNING: Can consume large amounts of tokens. NOT recommended for component descriptions (use figma_get_component instead). Best for understanding file structure or finding component nodeIds. Start with verbosity='summary' and depth=1 for initial exploration.

NameRequiredDescriptionDefault
depthNoHow many levels of children to include (default: 1, max: 3). Start with 1 to prevent context exhaustion. Use 0 for full tree only when absolutely necessary.
enrichNoSet to true when user asks for: file statistics, health metrics, design system audit, or quality analysis. Adds statistics, health scores, and audit summaries. Default: false
fileUrlNoFigma file URL (e.g., https://figma.com/design/abc123). Auto-detected from WebSocket Desktop Bridge connection. Only required if not connected.
nodeIdsNoSpecific node IDs to retrieve (optional)
verbosityNoControls payload size: 'summary' (IDs/names/types only, ~90% smaller - RECOMMENDED), 'standard' (essential properties, ~50% smaller), 'full' (everything). Default: summary for token efficiency.summary

TDQS

A4.3/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, and it discloses the key behavioral risk up front: large token consumption. It also gives a mitigation path (start with summary/1). It stops short of describing pagination, output shape, or auth requirements beyond what the schema states about auto-detection, so it's strong but not exhaustive.

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?

Four short sentences, front-loaded with the purpose then the warning, then the alternative, then the recommended starting config. Slight redundancy between the WARNING and the closing recommendation, but every sentence carries actionable information.

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

Completeness4/5

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

For a zero-required-parameter, five-param read tool with no annotations and no output schema, the description covers cost, scope, alternatives, and safe defaults. What's missing is a hint at return shape (node tree fields, ids/names) beyond 'document tree', which an agent might want before committing to a large payload.

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

Parameters3/5

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

Schema coverage is 100% and each parameter already documents its own values, defaults, and tradeoffs (notably depth max 3 and verbosity enum). The description reinforces the recommended values ('start with verbosity=summary and depth=1') but adds little semantic detail beyond the schema, so this is the baseline 3 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.

Purpose5/5

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

States a specific verb and resource ('Get full file structure and document tree') and immediately distinguishes itself from the most likely confusion point, figma_get_component, for component descriptions. An agent can tell what it returns and what it should not be used for without opening the schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ('Best for understanding file structure or finding component nodeIds'), explicit when-not ('NOT recommended for component descriptions'), and it names the alternative to use instead. It even prescribes a safe starting configuration of verbosity='summary' and depth=1 for initial exploration.

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

figma_get_file_for_pluginA

Get file data optimized for plugin development with filtered properties (IDs, structure, plugin data, component relationships). Excludes visual properties (fills, strokes, effects) to reduce payload. Use when user asks for: plugin development, file structure for manipulation, node IDs for plugin API. NOT for component descriptions (use figma_get_component). NOT for visual/styling data (use figma_get_component_for_development). Supports deeper tree traversal (max depth=5) than figma_get_file_data.

NameRequiredDescriptionDefault
depthNoHow many levels of children to include (default: 2, max: 5). Higher depths are safe here due to filtering.
fileUrlNoFigma file URL (e.g., https://figma.com/design/abc123). REQUIRED unless figma_navigate was already called.
nodeIdsNoSpecific node IDs to retrieve (optional)

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does real work: it discloses that visual properties (fills, strokes, effects) are excluded to reduce payload, and that deeper traversal (max depth=5) is supported relative to figma_get_file_data. It does not state the navigation prerequisite (figma_navigate must have been called) or anything about response shape/pagination, leaving some behavioral gaps for a no-annotation 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?

Front-loaded with the verb and scope, then the filtering behavior, then usage conditions, then exclusions — a logical order with zero filler sentences. Every clause (included properties, excluded properties, sibling routing, depth ceiling) carries information an agent needs.

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

Completeness4/5

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

For a read tool with no annotations and no output schema, the description covers purpose, contents of the payload, exclusions, and sibling routing well enough to call correctly. The remaining gap is the implicit navigation prerequisite for fileUrl, which is only documented in the schema rather than surfaced in the description.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3; the description adds comparative meaning by explaining that this tool supports deeper depth (max 5) than figma_get_file_data, which helps an agent reason about the depth parameter's tradeoff. It adds nothing new for fileUrl or nodeIds, which the schema already documents fully.

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

Purpose5/5

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

States a specific verb and resource (get file data) plus the optimization angle (plugin development, filtered properties) and enumerates what is included: IDs, structure, plugin data, component relationships. It explicitly distinguishes itself from figma_get_component and figma_get_component_for_development, so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Provides an explicit 'Use when user asks for:' list (plugin development, file structure for manipulation, node IDs for plugin API) and two explicit 'NOT for' exclusions that each name the correct alternative tool. Both the positive and negative routing conditions are spelled out rather than inferred.

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

figma_get_file_versionsA

List a Figma file's version history with metadata (label, description, author, timestamp). Auto-paginates up to max_versions. By default returns only labeled versions (skips auto-saves). Pass include_autosaves=true to see every saved state. Use the returned pagination.next_cursor to continue paging. Required scope: file_versions:read (OAuth) or 'Versions' Read (PAT).

NameRequiredDescriptionDefault
cursorNoVersion ID returned as pagination.next_cursor on a previous call. Pass to continue from where the last call stopped.
fileUrlNoFigma file URL. Uses current URL if omitted.
max_versionsNoHard cap on returned versions. Default 50, max 200.
include_autosavesNoInclude auto-saved versions (those without a label). Default: false.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses the default filtering rule (labeled only), the auto-pagination cap tied to max_versions, the cursor contract, and the exact auth scopes required. Missing only return-shape/pagination envelope details beyond next_cursor, which keeps it off a 5.

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?

Six short sentences, each adding a distinct fact, with default behavior and the autosave toggle front-loaded. No filler or restatement of the tool name.

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

Completeness5/5

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

No output schema or annotations exist, yet the description covers result metadata fields, the pagination mechanism, the default filter, and required credentials. An agent has everything needed to call it correctly and interpret the response.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters are already documented, making 3 the baseline. The description reinforces include_autosaves semantics and the max_versions cap but adds no syntax or format detail the schema doesn't already carry.

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?

States a specific verb and resource ("List a Figma file's version history") plus the metadata returned, which is far more useful than a tautology. It never names the closely related siblings (figma_get_file_at_version, figma_diff_versions, figma_get_changes_since_version), so the agent must infer which versioning tool to reach for.

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

Usage Guidelines4/5

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

Gives clear operating context: default behavior skips autosaves, include_autosaves=true expands scope, and pagination.next_cursor continues paging. It stops short of explicit when-not-to-use guidance or pointing to alternative version tools.

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

figma_get_focused_slideB

Get the slide currently focused in single-slide view.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/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 behavioral burden. It does not say what happens when no slide is focused or the viewer is not in single-slide view (error? null?), nor what the returned slide representation contains. For a read tool with zero annotation coverage this is a real 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?

One short sentence with no wasted words, and the key scoping qualifier is placed where it is read first. Nothing to trim.

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?

With no parameters and no output schema, the description is the only place to explain the return shape and the empty-focus behavior, and it does neither. It is adequate to identify the tool but not complete enough to predict its result.

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 takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter information is missing.

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?

States a specific verb (get) and a specific resource (the focused slide), with the scope narrowed to single-slide view. That distinguishes it from sibling figma_focus_slide (which sets focus) and from figma_list_slides, though it never names those siblings explicitly.

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 'in single-slide view' qualifier implies the calling context, but there is no explicit when-to-use guidance and no reference to alternatives such as figma_get_slide_content or figma_list_slides. The agent must infer the selection condition itself.

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

figma_get_library_component_by_keyA

Get full property definitions, variants, and visual specs for a SINGLE published library component using only its component key.

USE THIS when you have a component key (the 40-char hex returned by figma_search_components, figma_get_library_components, or search_design_system) and want to inspect what properties/variants it exposes before instantiating it — without first needing the source library file's URL.

RESOLVES: componentKey → file_key + node_id → componentPropertyDefinitions + variants + visualSpec.

WORKFLOW:

  1. Pass the componentKey from search results

  2. Tool tries /v1/component_sets/{key} first (most common case — buttons, inputs with variants)

  3. On 404 falls back to /v1/components/{key} (standalone components)

  4. Fetches the parent COMPONENT_SET at depth=2 to read componentPropertyDefinitions and per-variant visual data

  5. For COMPONENT_SET keys, also fetches the source file's /components list to map each variant's node to its published variant key (needed for figma_instantiate_component)

REQUIRES FIGMA_ACCESS_TOKEN with library_assets:read and files:read scopes.

NameRequiredDescriptionDefault
formatNo'full' returns properties + variants + visual specs. 'summary' returns properties + variant names only (no visualSpec). Auto-downgrades to 'summary' on large responses.full
componentKeyYesThe component key (40-char hex string from search results, e.g., '806826503bbd2ab15d0ff77d076a9406a5a83197'). Works for both COMPONENT_SET and standalone COMPONENT keys.
includeVisualSpecsNoInclude per-variant visual specs (fills, strokes, padding, typography). Default true. Auto-stripped if response exceeds 500KB.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so thoroughly: it documents the componentKey-to-file/node resolution, the /component_sets vs /components fallback on 404, depth=2 fetching, extra variant-key mapping for COMPONENT_SET keys, and required OAuth scopes.

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

Conciseness5/5

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

The description is front-loaded with purpose, followed by clear USE THIS, RESOLVES, WORKFLOW, and REQUIRES sections. Despite its length, every section adds actionable information for invoking the tool correctly.

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

Completeness5/5

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

For a read-only component-inspection tool with no annotations and no output schema, the description is complete enough: it explains the return shape (properties, variants, visualSpec), the resolution path, fallback behavior, auth requirements, and how the result supports instantiation.

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 already defines componentKey, format, and includeVisualSpecs clearly. The description adds useful context about where componentKey comes from and what the resolved output contains, but it does not significantly extend parameter semantics beyond the schema.

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

Purpose5/5

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

The description states a specific verb and resource: retrieving full property definitions, variants, and visual specs for a SINGLE published library component by key. It clearly distinguishes this from search/list tools by emphasizing component-key-only lookup and avoids ambiguity with URL-based lookups.

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

Usage Guidelines4/5

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

It explicitly says to use this tool when you have a component key from search results and want to inspect properties/variants before instantiating, without needing the source library file URL. It names where keys come from but does not explicitly clarify when to use this versus sibling inspection tools such as figma_get_component_details.

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

figma_get_library_componentsA

Discover published components from a shared/team library file.

USE THIS when you need to use components from a published design system library (a different file than the one currently open). This bridges the gap between library discovery and instantiation.

WORKFLOW:

  1. Call this tool with the library file's URL or file key

  2. Browse the returned components — results include COMPONENT_SET (with variants array) and standalone COMPONENT types

  3. Use figma_instantiate_component with a VARIANT key (from the variants array inside a COMPONENT_SET result, NOT the component set key itself)

SEARCH NOTE: The query filter matches both component names AND descriptions. If you get unexpected results (e.g., "Accordion" when searching "Button"), verify the result name matches what you need — it may have matched on a description mention.

MULTI-FILE TIP: If you need to find a specific component and REST API search returns too many results, you can switch to the library file via figma_navigate, use figma_execute to find the exact component and its variant key, then switch back.

NOTE: Requires FIGMA_ACCESS_TOKEN to be set (uses the Figma REST API to read the library file).

NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 25, max: 100)
queryNoSearch query to filter components by name (e.g., 'Button', 'Card'). Leave empty to get all components.
offsetNoOffset for pagination
libraryFileKeyNoThe file key of the library file (e.g., 'abc123'). Either this or libraryFileUrl is required.
libraryFileUrlNoThe URL of the library file (e.g., https://www.figma.com/design/abc123/My-Design-System). Either this or libraryFileKey is required.
includeVariantsNoInclude individual variant components (default: false, only returns component sets)

TDQS

A4.6/5.0
Behavior4/5

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

No annotations exist, so the description carries the burden and does well: it discloses the FIGMA_ACCESS_TOKEN requirement, that reads go through the REST API, that results are COMPONENT_SET (with a variants array) or standalone COMPONENT, and the search matching quirk. It stops short of stating read-only semantics or rate-limit/pagination behavior explicitly.

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?

Front-loaded with the core use case and bolded section headers keep it scannable. It runs long, and the MULTI-FILE TIP is somewhat tangential, but nearly every line conveys actionable guidance.

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

Completeness5/5

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

For a 6-param discovery tool with no output schema, the description supplies the auth prerequisite, the result shape, the variant-key pitfall, and the fallback path — everything an agent needs to call it correctly and act on the results.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond it: it warns that query matches names AND descriptions (the schema only mentions names), and explains that the usable variant key comes from the variants array rather than the component set key — a detail not captured in the schema.

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

Purpose5/5

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

States a specific verb and resource — discovering published components from a shared/team library file — and immediately clarifies it covers a different file than the one open, which distinguishes it from figma_search_components and figma_get_component_details.

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?

Explicit 'USE THIS when...' trigger, a numbered workflow, and named alternatives for edge cases (switch via figma_navigate + figma_execute when REST search is too noisy, then instantiate with figma_instantiate_component). When-to-use and how-to-chain are both covered.

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

figma_get_library_variablesA

List all variables from team libraries the current file has subscribed.

USE THIS when you want to see what design tokens (colors, spacing, typography sizes, booleans, strings) are available from shared libraries — without needing the library file's URL or REST API Enterprise plan.

HOW IT WORKS: Calls figma.teamLibrary.getAvailableLibraryVariableCollectionsAsync() + getVariablesInLibraryCollectionAsync() via the Desktop Bridge. Only libraries the user has explicitly enabled in the current file appear (Figma security model).

WORKFLOW:

  1. Call this tool to inventory available library variables

  2. Find the variable you want (use libraryName + collectionName + variable name to identify)

  3. Pass its key to figma_import_library_variable to bring it into the current file

  4. Once imported, the variable's id can be used with figma_set_fills / figma_update_variable / any standard variable-binding tool

Filters: libraryName/collectionName accept partial case-insensitive matches.

REQUIRES the Desktop Bridge plugin to be running in Figma Desktop.

NameRequiredDescriptionDefault
libraryNameNoOptional: filter by library name (case-insensitive substring match). E.g., 'Northright' or 'Altitude'.
resolvedTypeNoOptional: filter by variable type. Useful when you only need color tokens or only spacing values.
collectionNameNoOptional: filter by collection name within a library (case-insensitive substring match). E.g., 'Colors' or 'Spacing'.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the prerequisite (Desktop Bridge plugin must be running in Figma Desktop), the security-model limitation (only libraries the user explicitly enabled appear), and the underlying Desktop Bridge API calls. It does not describe the shape or volume of returned items, but the 'use libraryName + collectionName + variable name to identify' hint partially covers that.

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?

Front-loaded with the core purpose, then organized under bold headers, so an agent can skim to the section it needs and every section carries operative information. The 'HOW IT WORKS' function-name detail is closer to implementation trivia than agent-facing guidance, which keeps it from a 5.

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

Completeness4/5

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

No output schema and no annotations, so the description must do the work — and it does: purpose, prerequisites, filtering, follow-up action, and the identifiers needed to pick a result. What's left unsaid is the concrete return structure and any error behavior when the bridge isn't connected.

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

Parameters3/5

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

Schema coverage is 100% and each parameter already documents case-insensitive substring matching and the enum. The description's 'Filters: libraryName/collectionName accept partial case-insensitive matches' merely restates the schema, and it says nothing extra about resolvedType beyond what the enum already conveys. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('List all variables from team libraries the current file has subscribed') plus the scope boundary that matters: only libraries the user has explicitly enabled. The opening sentence alone lets an agent distinguish this from figma_get_variables (local file variables) and from REST-based library access.

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

Usage Guidelines4/5

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

The 'USE THIS when you want to see what design tokens are available from shared libraries' clause plus the explicit 'without needing the library file's URL or REST API Enterprise plan' names the conditions and the alternative approach it replaces. The numbered workflow also routes the agent forward to figma_import_library_variable. It stops short of an explicit when-not (e.g. 'for variables already in this file, use figma_get_variables'), which is the only gap.

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

figma_get_selectionA

Get the currently selected nodes in Figma. Returns node IDs, names, types, and dimensions. WebSocket-only — requires Desktop Bridge plugin. Use this to understand what the user is pointing at instead of asking them to describe it.

NameRequiredDescriptionDefault
verboseNoIf true, fetches additional details (fills, strokes, styles) for each selected node via figma_execute

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and delivers the key prerequisite: 'WebSocket-only — requires Desktop Bridge plugin', which an agent must know before calling. It also implies read-only semantics via 'Get' and lists the returned fields. It does not describe what happens when the selection is empty or whether the call fails versus returns an empty array.

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

Conciseness5/5

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

Three short sentences: capability first, return shape second, prerequisite third, usage rationale last. Every sentence carries distinct information with no repetition of the name or schema.

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

Completeness4/5

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

For a one-parameter read tool with no output schema, the description covers purpose, return fields, and the transport requirement — enough to call correctly. The only gap is edge-case behavior on an empty selection, which is a minor omission.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'verbose' parameter already documents its default and its figma_execute side path, so the description adds nothing beyond it. Baseline 3 applies 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.

Purpose5/5

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

States a specific verb and resource ('Get the currently selected nodes in Figma') and immediately describes what comes back (IDs, names, types, dimensions). No sibling tool covers the user's current selection, so it is unambiguously distinguishable from figma_get_file_data or figma_get_focused_slide.

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

Usage Guidelines4/5

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

Explicitly prescribes the scenario: 'Use this to understand what the user is pointing at instead of asking them to describe it' — a clear when-to-use with a decision heuristic. It does not name a when-not case or a fallback alternative (e.g., what to call when nothing is selected), which keeps it from a 5.

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

figma_get_slide_contentB

Get the content tree of a specific slide including all text, shapes, and frames. Returns node hierarchy with properties.

NameRequiredDescriptionDefault
slideIdYesThe node ID of the slide, e.g. '1:23'

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It helpfully says the tool returns a node hierarchy with properties and enumerates included content types (text, shapes, frames), but it does not disclose permissions, pagination/depth limits, or whether hidden layers are included.

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

Conciseness5/5

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

Two short sentences, front-loaded with the core action and followed by the return shape. Every sentence adds relevant information with no filler.

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

Completeness4/5

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

For a single-parameter read tool with no output schema and no annotations, the description gives enough context to call it correctly: what slide content is returned and that the result is a node hierarchy. It leaves some gaps around depth and error behavior, but the schema covers the only parameter.

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

Parameters3/5

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

Schema description coverage is 100%, and the single slideId parameter is documented in the schema with an example format ('1:23'). The description adds no additional parameter semantics beyond what the schema already provides, so baseline 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?

States a specific verb and resource: get the content tree of a specific slide, including text, shapes, and frames. It is clear what the tool does, but it does not explicitly distinguish itself from siblings such as figma_get_slide_grid, figma_get_slide_transition, or figma_get_focused_slide.

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 implies it should be used when slide content is needed, but gives no explicit when-to-use guidance and no alternatives. With many sibling tools related to slides, the absence of routing guidance leaves the agent to infer when this tool is preferred over figma_get_focused_slide or figma_list_slides.

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

figma_get_slide_gridB

Get the 2D slide grid layout showing how slides are organized in rows and columns.

NameRequiredDescriptionDefault

No parameters

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. 'Get' implies a read, but nothing states whether it is side-effect free, what a grid cell contains (slide IDs, positions, empty slots), or how the grid relates to slide order.

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?

One front-loaded sentence with no filler. It is efficient, though it spends words on '2D' and 'rows and columns' without adding concrete detail about the payload.

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

Completeness3/5

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

For a zero-parameter read tool with no output schema, the description is minimally adequate but leaves the return shape opaque — an agent cannot tell what a 'grid layout' entry contains or whether it maps to slide identifiers it can use downstream.

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 takes zero parameters, so the schema and description are trivially complete on that axis. Baseline 4 applies; nothing about parameters needs explaining.

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?

States a specific verb and resource ('Get the 2D slide grid layout') plus the shape of the data (slides organized in rows and columns). An agent can tell this apart from figma_list_slides at a conceptual level, though the sibling is never named explicitly.

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?

Usage is only implied: the description suggests this is the read path for spatial/row-column arrangement, which contrasts with figma_list_slides only by inference. There is no explicit when-to-use, when-not, or named alternative.

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

figma_get_slide_transitionA

Get the current transition settings for a slide (style, duration, easing curve, timing).

NameRequiredDescriptionDefault
slideIdYesThe node ID of the slide

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral burden. It signals a non-destructive read by saying 'Get the current transition settings' and lists the returned fields, but it does not address permissions, error behavior if the slide lacks transitions, or any other 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?

A single, front-loaded sentence with zero waste. It communicates the operation and the returned fields immediately.

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

Completeness4/5

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

For a simple one-parameter read tool with no output schema, the description is largely complete: it names the operation and enumerates what the response contains. The only minor gap is the lack of explicit usage guidance relative to the setter sibling.

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

Parameters3/5

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

Schema coverage is 100%, so the single slideId parameter is already fully documented in the schema. The description adds no syntax or format detail beyond what the schema provides, which is the expected baseline 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?

States a specific verb and resource — 'Get the current transition settings for a slide' — and enumerates the returned values (style, duration, easing curve, timing). It is clearly distinct from figma_set_slide_transition, but does not explicitly name that sibling as the alternative.

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 read-only intent is implied by 'Get the current transition settings', which makes the usage context clear enough. However, it gives no explicit guidance about when to use this versus figma_set_slide_transition or other slide-inspection tools.

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

figma_get_slotsA

List SlotNode children on a component, component set, or instance. Returns slot IDs, names, property keys, dimensions, and current child nodes. Use on instances before figma_append_to_slot to discover slot names/IDs.

MULTI-FILE (Local Mode only): Pass fileKey to run this against a specific connected file without switching the active file/target lock (see figma_list_open_files). Does not change the active file or target lock. Cloud Mode pairs with a single plugin instance and rejects fileKey.

NameRequiredDescriptionDefault
nodeIdYesCOMPONENT, COMPONENT_SET, or INSTANCE node ID
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Does not change the active file or target lock. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations present, the description carries the full burden and does reasonably well: it implies a read-only list, discloses the payload shape, and importantly states that fileKey "does not change the active file or target lock" and that Cloud Mode rejects it. The main gap is that permissions, error behavior (e.g. non-slot node, no slots found), and empty-result semantics are unstated.

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?

Front-loaded with purpose and return contents in sentence one, guidance in sentence two, and multi-file caveat last with a bold lead-in that scans well. Slight redundancy: the fileKey multi-file explanation is repeated almost verbatim between description and schema.

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

Completeness4/5

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

No output schema exists, so the description compensates by naming the returned fields, and it covers the non-obvious local-vs-cloud mode split. For a two-parameter read tool this is nearly sufficient; only error/empty-result handling is missing.

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 both nodeId and fileKey are already fully documented in the schema, giving a baseline of 3. The description largely restates the fileKey/multi-file note rather than adding syntax or value-format detail beyond the schema.

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

Purpose5/5

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

Opens with a specific verb+resource: "List SlotNode children on a component, component set, or instance," and then enumerates exactly what is returned (slot IDs, names, property keys, dimensions, current children). An agent can tell this apart from nearby slot tools like figma_create_slot and figma_append_to_slot without opening a schema.

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

Usage Guidelines4/5

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

Gives an explicit placement in the workflow: "Use on instances before figma_append_to_slot to discover slot names/IDs," naming the sibling it feeds. The node-type restriction (component/component set/instance) is stated. There is no explicit "don't use this when..." exclusion, so it falls just short of the top mark.

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

figma_get_statusA

Check connection status to Figma Desktop. Reports transport status and connection health via the Desktop Bridge plugin (WebSocket transport). Use probe:true for an active roundtrip verification that the plugin is actually responding.

NameRequiredDescriptionDefault
probeNoWhen true, sends a live roundtrip command to the plugin to verify the connection is actually responsive (not just TCP-open). Returns probeResult with success/latency. Recommended for health checks.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the meaningful behaviors: the connection goes through the Desktop Bridge plugin over WebSocket, and probe triggers a live roundtrip command to the plugin. It does not say what happens on a failed check (error vs. status payload) or whether the plugin must be installed/running.

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

Conciseness5/5

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

Three short sentences, front-loaded with the scope and transport, then the one actionable option. No filler and nothing buried.

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

Completeness4/5

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

For a single-optional-boolean status tool with no output schema and no annotations, the description covers what is checked and what the probe returns at a conceptual level. It could add the failure-mode behavior (what a disconnected result looks like) to be fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the probe parameter is already fully documented, including the probeResult/latency return. The description's explanation of probe largely restates the schema rather than adding new syntax or default behavior, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource (check connection status to Figma Desktop) and names the transport layer (Desktop Bridge plugin over WebSocket), which is more specific than the name alone. It doesn't explicitly distinguish itself from the closest siblings figma_reconnect or figma_diagnose, so an agent must infer the boundary.

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

Usage Guidelines4/5

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

Gives a clear conditional: use probe:true for an active roundtrip verification rather than a passive check, and explains what the passive check can miss ('not just TCP-open'). It stops short of saying when to use this versus figma_reconnect/figma_diagnose, and offers no exclusions.

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

figma_get_stylesA

Get all styles (color, text, effects, grids) from a Figma file with optional code exports. Use when user asks for: text styles, color palette, design system styles, typography, or style documentation. Returns organized style definitions with resolved values. NOT for design tokens/variables (use figma_get_variables). Set enrich=true for CSS/Tailwind/Sass code examples. Supports verbosity control to manage payload size. TIP: For full design system extraction (tokens + components + styles combined), prefer figma_get_design_system_kit instead — it returns everything in one optimized call.

NameRequiredDescriptionDefault
enrichNoSet to true when user asks for: CSS/Sass/Tailwind code, export formats, usage information, code examples, or design system exports. Adds resolved values, usage analysis, and export format examples. Default: false for backward compatibility
fileUrlNoFigma file URL (e.g., https://figma.com/design/abc123). Auto-detected from WebSocket Desktop Bridge connection. Only required if not connected.
verbosityNoControls payload size: 'summary' (names/types only, ~85% smaller), 'standard' (essential properties, ~40% smaller), 'full' (everything). Default: standardstandard
include_usageNoInclude component usage information (requires enrich=true)
export_formatsNoWhich code formats to generate examples for. Use when user mentions specific formats like 'CSS', 'Tailwind', 'SCSS', 'TypeScript', etc. Automatically enables enrichment. Default: all formats
include_exportsNoInclude export format examples (requires enrich=true)

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the return shape ('organized style definitions with resolved values') and payload-size behavior via verbosity. It does not mention permissions, file-size caveats, or the file-resolution/connection requirement, so it stops short of fully covering behavior for a read tool with zero annotation backing.

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?

Front-loaded with what/how, then when-to-use, then exclusions, then parameter tips, then a sibling-routing TIP. Every sentence carries distinct decision-relevant information with no filler.

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

Completeness5/5

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

For a 6-param, all-optional, no-output-schema tool with no annotations, the description covers return content, optional enrichment, payload control, and routing to alternatives. Nothing needed to select or call it correctly is missing, and the schema handles the rest.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds value: it tells the agent to set enrich=true for CSS/Tailwind/Sass examples and notes verbosity controls payload size. That maps parameters to intent rather than restating them, though export_formats/include_usage/include_exports are left to the schema.

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

Purpose5/5

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

States a specific verb and resource ('Get all styles') and enumerates the style kinds returned (color, text, effects, grids). It explicitly distinguishes itself from the two neighbors that could be confused with it (variables via figma_get_variables, full extraction via figma_get_design_system_kit).

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?

Gives explicit trigger phrases ('text styles, color palette, design system styles, typography, or style documentation'), an explicit exclusion ('NOT for design tokens/variables'), and a preferred alternative for a broader scenario (figma_get_design_system_kit). The decision tree is complete.

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

figma_get_text_stylesA

Get all local text styles in the current file. Returns style IDs, names, font info, and sizes. Use these IDs when setting textStyleId on text nodes via figma_execute.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose useful traits — local-only scope, current-file scope, and the exact payload fields — and 'Get' signals a read. But it says nothing about what happens when the file has no text styles, whether library styles are excluded by design, or ordering/pagination of results.

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

Conciseness5/5

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

Three short sentences, front-loaded with what is fetched, then what is returned, then how to consume the IDs. Every sentence carries information; nothing is padding.

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

Completeness4/5

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

No output schema exists, so the description must sketch return contents, which it does (IDs, names, font info, sizes). For a parameterless read tool that is nearly complete; only edge cases such as empty files or library-scoped styles are left implicit.

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?

Zero parameters, so there is no parameter semantics to explain; baseline 4 applies. The description correctly does not invent arguments and instead explains the only variable that matters — which file/scope the results come from.

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?

States a specific verb and resource with tight scope: 'all local text styles in the current file', plus a list of what is returned (IDs, names, font info, sizes). It narrows scope to text styles, which implicitly separates it from figma_get_styles, but never names that sibling so the distinction must be inferred.

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

Usage Guidelines4/5

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

Gives an explicit downstream use case: pull these IDs to set textStyleId on text nodes via figma_execute. That anchors when to call it. It stops short of stating exclusions, e.g. what to call for library/published styles or for non-text styles.

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

figma_get_token_valuesA

Get actual values for design tokens (colors, spacing, etc). Use after figma_get_design_system_summary to get specific token values for implementation.

NameRequiredDescriptionDefault
typeNoType of tokens to retrieveall
limitNoMaximum tokens to return (default: 50)
filterNoFilter token names (e.g., 'primary' to get all primary colors)

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the behavioral burden. It implies a safe read and clarifies that values are resolved ('actual values') rather than references, which is genuinely useful. However, it says nothing about truncation behavior of the default 50-item limit, ordering, or what happens when no tokens match the filter.

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

Conciseness5/5

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

Two short sentences with zero filler; the purpose leads and the calling context follows. Nothing could be removed without losing information.

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

Completeness4/5

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

For a simple read-only lookup with three optional, fully documented parameters and no output schema, the description covers what it returns at a conceptual level and when to reach for it. Only the shape of the returned token records and the effect of `limit` truncation are left implicit.

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 three parameters are already documented in structured data, and the enum on `type` is self-explanatory. The description's mention of 'colors, spacing, etc.' loosely mirrors the enum but adds no syntax, default, or interaction details. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Get actual values for design tokens') and enumerates examples (colors, spacing), making the output concept concrete. It implicitly separates itself from figma_get_design_system_summary (summary vs. concrete values), though it does not differentiate from near-neighbors like figma_get_variables or figma_export_tokens.

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

Usage Guidelines4/5

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

Gives an explicit sequencing rule: call this after figma_get_design_system_summary, for the purpose of implementation. That is a clear usage context. It stops short of stating when NOT to use it or naming alternatives such as figma_export_tokens for bulk/file-level token export.

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

figma_get_variablesA

Extract design tokens and variables from a Figma file with code export support (CSS, Tailwind, TypeScript, Sass). Use when user asks for: design system tokens, variables, color/spacing values, theme data, or code exports. Handles multi-mode variables (Light/Dark themes). NOT for component metadata (use figma_get_component). Returns a compact summary by default — pass format='full' for the complete dataset or format='filtered' with collection/namePattern/mode filters for specific variables. Supports verbosity control to prevent token exhaustion. Resolution order: Desktop Bridge plugin (works on any plan) → Variables REST API (Enterprise only) → Styles API as a partial fallback. TIP: For full design system extraction (tokens + components + styles combined), prefer figma_get_design_system_kit instead — it returns everything in one optimized call.

NameRequiredDescriptionDefault
modeNoFilter variables by mode name or ID. Only returns variables that have values for this mode. Only applies when format='filtered'. Example: 'Light' or 'Dark'
pageNoPage number for paginated results (1-based, default 1). Applies to format='filtered' (always paginated, 50 per page by default) and to format='full' when page or pageSize is given. Use when the response is too large.
enrichNoSet to true when user asks for: CSS/Sass/Tailwind exports, code examples, design tokens, usage information, dependencies, or any export format. Adds resolved values, dependency graphs, and usage analysis. Default: false
formatNoResponse format: 'summary' (~2K tokens with overview and names only), 'filtered' (apply collection/name/mode filters), 'full' (complete dataset from cache or fetch). Default: summary (token-efficient). When format is omitted, filter params (collection/namePattern/mode) auto-select 'filtered', and enrichment/export/resolveAliases/returnAsLinks params auto-select 'full'. Full format returns all data but may be auto-summarized if >25K tokens.
fileUrlNoFigma file URL (e.g., https://figma.com/design/abc123). Auto-detected from WebSocket Desktop Bridge connection. Only required if not connected.
pageSizeNoNumber of variables per page (1-100, default 50). Giving page or pageSize with format='full' paginates the full dataset; the response then includes a `pagination` object.
verbosityNoControls payload size: 'inventory' (names/IDs only, ~95% smaller, use with filtered), 'summary' (names/values only, ~80% smaller), 'standard' (essential properties, ~45% smaller), 'full' (everything). Default: standardstandard
collectionNoFilter variables by collection name or ID. Case-insensitive substring match. Only applies when format='filtered'. Example: 'Primitives' or 'VariableCollectionId:123'
namePatternNoFilter variables by name using regex pattern or substring. Case-insensitive. Only applies when format='filtered'. Example: 'color/brand' or '^typography'
refreshCacheNoForce refresh cache by fetching fresh data from Figma. Use when data may have changed since last fetch. Default: false (use cached data if available and fresh)
include_usageNoInclude usage in styles and components (requires enrich=true)
returnAsLinksNoReturn variables as resource_link references instead of full data. Drastically reduces payload size (100+ variables = ~20KB vs >1MB). Recommended for large variable sets — combine with format='filtered' + namePattern/collection/mode to fetch only the variables you need. Default: false
export_formatsNoWhich code formats to generate examples for. Use when user mentions specific formats like 'CSS', 'Tailwind', 'SCSS', 'TypeScript', etc. Automatically enables enrichment.
resolveAliasesNoAutomatically resolve variable aliases to their final values (hex colors, numbers, etc.). When true, each variable will include a 'resolvedValuesByMode' field with the actual values instead of just alias references. Useful for getting color hex values without manual resolution. Default: false.
include_exportsNoInclude export format examples (requires enrich=true)
includePublishedNoInclude published variables from libraries
parseFromConsoleNoDEPRECATED — setting this to true now raises an explicit error. The Puppeteer-based console parser no longer exists. Open the Figma Console MCP Desktop Bridge plugin in Figma Desktop and call figma_get_variables() without parseFromConsole; the plugin returns full variable data through the WebSocket bridge.
useConsoleFallbackNoDEPRECATED — has no effect. The console-snippet workflow was removed in the Phase 3 CDP cleanup; the Desktop Bridge plugin now handles all non-REST variable extraction automatically. Kept for parameter compatibility only — safe to ignore.
include_dependenciesNoInclude variable dependency graph (requires enrich=true)

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses the resolution order (Desktop Bridge → Enterprise-only REST API → Styles API partial fallback), that the default response is a compact summary to avoid token exhaustion, that full output may be auto-summarized above 25K tokens, and that parseFromConsole now raises an error. Remaining gap: no explicit statement about permissions needed beyond plan tier, or what a partial Styles-API fallback actually omits.

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?

Front-loaded with purpose and usage triggers, then falls through to output sizing, resolution order and the sibling tip. Dense and mostly waste-free, but the deprecation/fallback sentences and the resolution-order chain make it longer than a typical selector needs; a short 'see schema for param details' would trim it.

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

Completeness4/5

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

For a 19-parameter, zero-annotation, no-output-schema tool this covers the essentials: what comes back by default, how to get more, how to filter, and which backend serves the request. It stops short of describing the returned object shape or what the Styles-API fallback degrades, which an agent would need to interpret a partial result.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3 and the schema already documents every parameter including the format/verbosity enums. The description still adds decision-level framing ('Returns a compact summary by default — pass format='full' … or format='filtered' with collection/namePattern/mode filters') that tells an agent which knobs matter without reading the schema. It does not add much beyond that, so it stops short of a 5.

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

Purpose5/5

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

States a specific verb+resource ('Extract design tokens and variables from a Figma file') plus the code-export capability. It explicitly names what it is not ('NOT for component metadata (use figma_get_component)') and points to a better sibling for the combined case, so an agent can separate it from figma_get_component, figma_get_token_values and figma_get_design_system_kit without opening schemas.

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?

Gives concrete trigger phrases ('design system tokens, variables, color/spacing values, theme data, or code exports'), an explicit exclusion with the alternative to use instead, and a TIP redirecting to figma_get_design_system_kit for full extraction. When-to-use, when-not-to-use and alternatives are all present.

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

figma_import_library_variableA

Import a single variable from a subscribed team library into the current file.

After import, the variable becomes locally addressable by its returned 'id' and can be passed to any tool that binds variables to nodes (fills, strokes, paddings, etc.). The import is idempotent — calling it twice returns the same local id.

WORKFLOW:

  1. Run figma_get_library_variables to find the variable key

  2. Call this tool with that key

  3. Use the returned 'id' with figma_set_fills (boundVariables), figma_update_variable, or other binding tools

REQUIRES the Desktop Bridge plugin and that the source library is subscribed by the current file (otherwise importVariableByKeyAsync rejects).

NameRequiredDescriptionDefault
variableKeyYesThe variable key from figma_get_library_variables (collections[].variables[].key). Distinct from the variable's local id.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations present, the description carries the full burden and does so: it discloses idempotency ('calling it twice returns the same local id'), the failure mode (importVariableByKeyAsync rejects when the library is not subscribed), the plugin prerequisite, and post-import behavior (variable becomes locally addressable).

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?

Front-loaded one-line purpose, then workflow, then prerequisites in bold-labeled blocks. Every sentence conveys actionable information — idempotency and the reject condition are not filler.

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

Completeness5/5

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

No output schema exists, yet the description explains what is returned (a local 'id') and how to use it downstream with binding tools. Prerequisites, idempotency, and follow-on tools are all covered, leaving nothing an agent needs missing.

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

Parameters3/5

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

Schema coverage is 100% and the schema already explains that variableKey comes from figma_get_library_variables and is distinct from the local id. The description reinforces the workflow but adds no syntax or format detail beyond the schema, so this is the baseline 3.

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

Purpose5/5

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

States a specific verb and resource: importing a single variable from a subscribed team library into the current file. It is clearly distinguished from figma_get_library_variables, which is named as the step that produces the key this tool consumes.

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

Usage Guidelines5/5

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

Provides an explicit three-step workflow with the prerequisite lookup tool named, plus a REQUIRES clause stating the Desktop Bridge plugin and library subscription condition. The agent knows exactly when this tool applies and what must hold before calling it.

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

figma_import_tokensA

Push design tokens from your codebase into Figma as variables. Bidirectional with figma_export_tokens.

ACCEPTS: DTCG JSON (canonical, fully supported including round-trip metadata preservation). Tokens Studio JSON, CSS custom properties, Tailwind v4 @theme, SCSS, and Style Dictionary v3 are scaffolded but return a NotImplementedError — convert to DTCG first via figma_export_tokens or hand-author DTCG. Use format: "auto" to sniff the input.

APPLY PHASE (full bidirectional sync): toCreate entries create missing collections (with the token file's full mode list) and missing variables in one batched plugin round-trip — literal values first, alias values in a second pass so aliases between newly-created variables resolve. toUpdate entries push value updates in a batched round-trip, INCLUDING alias-target updates: when a token's value is a reference, it's written as a Figma variable alias if the reference resolves to an existing or just-created variable (unresolvable references skip with a warning). toDelete entries are STRICTLY gated behind strategy: "replace" — in replace mode, Figma variables absent from the token file are permanently deleted (a loud warning lists the count); merge (default) preserves them and only reports. Deletes only ever touch collections the token files contain: variables in collections the import doesn't include are left alone. An import that parses 0 tokens is refused, and the diff is computed against live Figma state. Motion tokens are written as TIMING (DTCG duration; a bare number is milliseconds) and EASING (DTCG cubicBezier) variables; springs and holds round-trip through $extensions["figma-console-mcp"].spring. Variable scopes and per-platform codeSyntax (from $extensions["figma-console-mcp"].scopes/.codeSyntax) are diffed and applied too — absent fields mean "no opinion" (Figma-side metadata is preserved), an explicit value is authoritative. Partial-success semantics: per-item errors surface in applyResult.errors[] without failing the batch.

DIFF-AWARE: Default strategy: "merge" diffs against current Figma state and applies only deltas. The hacked-color scenario — designer edits one hex value in their CSS — produces exactly one Figma API update, not a full collection rewrite. Match priority: Figma variable ID (in $extensions["figma-console-mcp"].variableId), then exact token path, then value fingerprint.

CONFLICT HANDLING: When BOTH Figma and code changed the same token since the last sync, onConflict: "ask" (default) surfaces the conflict and writes nothing. Use figma-wins / code-wins to auto-resolve, or skip to leave conflicts alone and proceed with the rest.

DRY-RUN: Default first call after detecting changes is dry-run for safety. The response includes the full diff plan; user confirms, then call again with dryRun: false (or strategy other than dry-run) to apply.

NameRequiredDescriptionDefault
filesNoMulti-file import (used for Tokens Studio's split-set format, or for projects with many DTCG source files). Mutually exclusive with `payload` and `configPath`.
dryRunNoShorthand for strategy: 'dry-run'. Computes the diff and returns a preview without applying any changes to Figma.
formatNoFormat of the input payload. 'auto' (default) detects from payload shape or file extension. Pass an explicit format if auto-detection misfires.
prefixNoPrefix to strip from input token names on import. E.g. with prefix 'ds-', a token named '--ds-color-primary' becomes 'color/primary'.
payloadNoSingle-file content to import. Use this for one-shot imports without setting up tokens.config.json. Mutually exclusive with `files` and `configPath`.
strategyNoHow to apply changes. 'merge' (default) diffs against current Figma state and applies only deltas, preserving Figma-only variables. 'replace' wipes the target collections and rewrites. 'dry-run' computes the diff and reports without touching Figma.
configPathNoExplicit path to tokens.config.json. When omitted, the tool autodiscovers and uses the config's source.dir to find files. Mutually exclusive with `payload` and `files`.
onConflictNoHow to resolve true two-sided conflicts (both Figma and code changed the same token since last sync). 'ask' (default) surfaces the conflict and writes nothing. 'figma-wins' / 'code-wins' apply the corresponding side. 'skip' leaves conflicted tokens alone but proceeds with the rest.
modeMappingNoMap input mode names to Figma mode names. Useful when source uses 'light'/'dark' and Figma uses 'Light'/'Dark'. Defaults to 1:1 mapping with case preservation.
collectionMappingNoMap input token set names to Figma collection names. Example: {'primitives': 'Primitive Tokens'}. When omitted, set names map 1:1 to collection names.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so in detail: it discloses destructive replace-mode deletions, merge-mode preservation, batched writes, partial-success errors, dry-run previews, diffing rules, and conflict resolution. Nothing important about the tool's side effects is left implicit.

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 front-loaded and organized under clear headings, with the purpose stated first. It is necessarily long for a complex import tool, but some dry-run and strategy details are repeated, keeping it from being maximally concise.

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

Completeness5/5

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

Given the tool's complexity, lack of annotations, and absence of an output schema, the description is unusually complete. It explains the apply phases, destructive semantics, conflict handling, dry-run response, and partial-failure reporting well enough for an agent to call it safely.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning for key parameters like strategy, dryRun, format, and onConflict. It does not add much for prefix, modeMapping, or collectionMapping, but those are already documented in the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: pushing design tokens from code into Figma as variables. It explicitly distinguishes itself from the sibling figma_export_tokens by calling the pair bidirectional.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states accepted formats, explicitly flags unsupported formats and the workaround of converting via figma_export_tokens, and explains dry-run, merge, replace, and conflict behavior. These are concrete when-to-use and when-not-to-use conditions rather than vague hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_instantiate_componentA

Create an instance of a component from the design system.

CRITICAL: Always pass BOTH componentKey AND nodeId together! Search results return both identifiers. Pass both so the tool can automatically fall back to nodeId if the component isn't published to a library. Most local/unpublished components require nodeId.

IMPORTANT: Always re-search before instantiating! NodeIds are session-specific and may be stale from previous conversations. ALWAYS search for components at the start of each design session to get current, valid identifiers.

VISUAL VALIDATION WORKFLOW: After instantiating components, use figma_take_screenshot to verify the result looks correct. Check placement, sizing, and visual balance.

NameRequiredDescriptionDefault
nodeIdNoThe node ID from search results. ALWAYS pass this alongside componentKey - most local components need it.
variantNoVariant properties to set (e.g., { Type: 'Simple', State: 'Active' })
parentIdNoParent node ID to append the instance to
positionNoPosition on canvas (default: 0, 0)
overridesNoProperty overrides (e.g., { 'Button Label': 'Click Me' })
componentKeyNoThe component key from search results. Pass this WITH nodeId for automatic fallback.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so well: it discloses identifier fallback behavior, session-specific nodeId staleness, the need to re-search, and a post-instantiation validation workflow. These are important operational traits beyond the schema.

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 purpose is front-loaded, followed by clearly labeled critical guidance and validation workflow. It is slightly repetitive and heavily emphasized, but every section provides actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter creation tool with no annotations or output schema, the description covers the essential operational context: valid identifiers, staleness risks, fallback behavior, and verification. It does not describe permissions or return values, but the core invocation guidance is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds meaningful semantics about the componentKey/nodeId relationship and fallback behavior. It does not add much for variant, overrides, parentId, or position beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: "Create an instance of a component from the design system." This clearly distinguishes it from sibling tools like figma_search_components and figma_get_component_details, which retrieve rather than instantiate components.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear workflow context: search first, pass both identifiers, then use figma_take_screenshot for visual validation. It does not explicitly compare against alternatives such as cloning a node, but the intended usage is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_lint_designA

Run comprehensive accessibility (WCAG 2.2) and design quality checks on the current page or a specific node tree. WCAG conformance checks (10 rules): color contrast (AA), non-text contrast (1.4.11), color-only differentiation (1.4.1), focus indicators (2.4.7), touch targets (2.5.8), image alt text (1.1.1), heading hierarchy (1.3.1), reflow/responsive (1.4.10), reading order (1.3.2), and disabled context (4.1.2). Best-practice readability hints (opt-in via rules: ['best-practice'] or ['all']): text sizing, line height, letter spacing, paragraph spacing. Note: line/paragraph spacing below 1.5x/2x is NOT a WCAG 1.4.12 failure — 1.4.12 requires supporting user spacing overrides without breaking (a code concern, see figma_scan_code_accessibility), not specific design values — so these are non-normative hints scoped to multi-line text only. Design system checks (5 rules): hardcoded colors, missing text styles, default names, detached components, and token misuse (a semantic token bound to the wrong property, e.g. a bg/* or surface/* variable used as a text fill). Layout checks: missing auto-layout, empty containers. Default audit runs WCAG + design-system + layout (best-practice hints excluded). Returns categorized findings with severity levels (critical/warning/info) and WCAG conformance level (a/aa/aaa/best-practice) so teams can filter by target level. Use natural language like 'check my design for accessibility issues' or 'lint this page'. Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault
rulesNoRule filter. Default (omitted) = ['wcag','design-system','layout'] — real WCAG conformance plus quality checks, with best-practice hints excluded. Groups: ['wcag'] (10 conformance rules), ['best-practice'] (text-size, line-height, letter-spacing, paragraph-spacing), ['all'] (everything incl. best-practice), ['design-system'], ['layout']. Or specific rule IDs like ['wcag-contrast', 'wcag-focus-indicator', 'wcag-disabled-no-context'].
nodeIdNoNode ID to lint (defaults to current page)
maxDepthNoMaximum tree depth to traverse (default: 10)
maxFindingsNoMaximum findings before stopping (default: 100)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the burden, and it does well: discloses the rule set, the default subset, severity levels (critical/warning/info), conformance level tagging (a/aa/aaa/best-practice), and a prerequisite (requires Desktop Bridge plugin). It doesn't describe performance/execution cost or error behavior, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and default scope are front-loaded, but the body is a dense enumeration of ten WCAG rules plus a long aside on 1.4.12 that reads as much like documentation as a routing signal. It's information-rich but heavier than needed for tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-optional-param audit tool with no output schema and no annotations, the description covers prerequisites (Desktop Bridge), the rule taxonomy, default behavior, and the shape of findings (categorized, severity + conformance level). Enough for an agent to call it correctly; only error/edge behavior is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds real semantic meaning by explaining the rule groups, the default when omitted, allowed group shorthands (['wcag'], ['all'], ['best-practice']), and specific rule-ID examples. It also clarifies the non-normative nature of the best-practice hints, which the schema does not.

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?

States a specific verb+resource: 'Run comprehensive accessibility (WCAG 2.2) and design quality checks' on a page or node tree, and enumerates the rule categories. It's clear what it does, but it doesn't distinguish itself from close siblings like figma_audit_component_accessibility or figma_audit_design_system_report, which also audit design.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the default audit scope (WCAG + design-system + layout, best-practice excluded) and how to opt into best-practice via rules, plus natural-language usage examples. It also names figma_scan_code_accessibility as the alternative for the code-side 1.4.12 concern, though it doesn't route against the other audit siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_list_open_filesA

List all Figma files currently connected via the Desktop Bridge plugin. Shows which files have the plugin open and which one is the active target for tool calls. Use figma_navigate to switch between files. WebSocket multi-client mode — each file with the Desktop Bridge plugin maintains its own connection.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does meaningful work: it discloses the WebSocket multi-client transport, that each file with the plugin maintains its own independent connection, and that only one is the active target. It does not cover failure/empty states (what is returned when nothing is connected) or whether the listing is cached, which keeps it below a 5.

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?

Three sentences, front-loaded with the core purpose before the sibling reference and the transport note. There is mild overlap between "shows which files have the plugin open" and the closing multi-client sentence, but each still adds distinct information, so it is tight without being minimal.

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?

There is no output schema, so the description must convey return semantics, and it does at a conceptual level (open files plus the active target). It omits the concrete shape of entries — file keys/names or connection status fields — which an agent building follow-up calls would benefit from, so it is strong but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain and the baseline is 4. The description correctly makes no attempt to describe inputs, avoiding confusion about whether file identifiers could be passed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List all Figma files") and narrows the scope precisely to files connected via the Desktop Bridge plugin, then explains the discriminating content of the result: which files have the plugin open and which is the active target. This is clearly distinguishable from siblings like figma_get_file_data or figma_get_status, which operate on a single file or plugin health.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: "Use figma_navigate to switch between files," giving an alternative and the condition that selects it. It stops short of covering the other adjacent tools in the connection family (figma_get_status, figma_reconnect, figma_reload_plugin), so it is clear context rather than a full when/when-not matrix.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_list_shadersA

List shaders: the ones applied in this file (fills, strokes and effects), with each property's name, type and default, and the layers using them; plus shaders from the user's libraries (figma.listAvailableShaders). Use the property names with figma_apply_shader. Shaders are created in Figma, not through the Plugin API. Requires Desktop Bridge.

NameRequiredDescriptionDefault
scopeNoSearch the current page (default) or every pagepage
nodeIdNoOnly search this node and its descendants
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that the tool lists applied shaders with property metadata and layer usage, includes library shaders, and requires Desktop Bridge. It also clarifies that shaders cannot be created via the Plugin API, preventing a wrong expectation. It could add error behavior for missing bridge or scope effects on library results, but the core behavior is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core listing behavior and then adds the key usage note, creation limitation, and environment requirement in short sentences. Every sentence earns its place with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with no output schema, the description explains enough about what is returned and what environment is required. It is nearly complete, though it does not clarify how scope or nodeId interact with library shader results, a minor gap given the schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not mention the scope, nodeId, or fileKey parameters or add any filtering semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List shaders' covering both applied shaders in the file and library shaders. It enumerates the useful return details (fills, strokes, effects, property name/type/default, layer usage), making the tool's scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context by linking the listing to figma_apply_shader: 'Use the property names with figma_apply_shader.' It also states prerequisites ('Requires Desktop Bridge') and a limitation ('Shaders are created in Figma, not through the Plugin API'), but it does not explicitly describe when to avoid this tool or name alternatives beyond the apply step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_list_slidesA

List all slides in the current Figma Slides presentation with their IDs, names, grid positions, and skip status. Only works in Slides files.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It discloses the file-type restriction and what fields come back, but says nothing about ordering, pagination, cost, or what happens when the open file is not a Slides file (empty list vs error).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the operation and result shape, followed immediately by the hard constraint. No redundant restating of the tool name.

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?

There is no output schema, yet the description enumerates the returned fields (IDs, names, grid positions, skip status), which is exactly the missing piece an agent needs. The only gap is failure behavior outside Slides files.

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?

Zero parameters, so the baseline applies; the description correctly adds no parameter noise and implies the call is implicitly scoped to the current presentation.

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?

Specific verb+resource ("List all slides in the current Figma Slides presentation") plus an enumeration of returned fields, so the agent knows exactly what it gets. It does not explicitly contrast with nearby siblings like figma_get_focused_slide or figma_get_slide_content, so it stops short of 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Only works in Slides files" is a useful precondition, but there is no explicit when-to-use guidance or naming of alternatives (e.g. use figma_get_slide_content for the active slide's content). Usage is only implied by the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_manage_animation_stylesA

Manage reusable Motion animation styles, the motion layer of a design system.

  • list_presets: Figma's built-in animation styles with each one's props and defaults.

  • list: local custom animation styles and their entries.

  • create: a custom style (name, description) from entries, each a preset with duration, offset, easing and props. Durations and easings can bind to TIMING/EASING variables.

  • update: rename, change the description, or append entries.

  • remove_entry: drop one entry (entryId from list).

  • delete: remove the style. Apply a custom style with figma_apply_animation customStyleId.

NameRequiredDescriptionDefault
nameNoStyle name; use '/' for folders, e.g. 'Motion/Enter'
actionYes
entriesNoEntries to add (create, update)
entryIdNoEntry id to remove (remove_entry)
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
styleIdNoCustom animation style id (update, remove_entry, delete)
descriptionNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose that delete removes the style and remove_entry drops a single entry, and that durations/easings can bind to variables — useful behavioral context. However, it never states whether deletion is reversible, what happens to nodes already using a deleted style, or what the list/create calls return (no output schema exists to fill that 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?

Front-loaded purpose sentence followed by one-line-per-action bullets, then a single line on the sibling tool to use for applying styles. No filler, and structure mirrors the action enum so it is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-action mutation tool with no annotations and no output schema, the description covers what each action does, the entry structure, and how to apply the result. The remaining gap is return-value shape (e.g. what list yields for entryId/styleId), which the agent must infer, but nothing critical to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 71%, so the schema already documents most fields. The description adds real value beyond it: entries are explained as preset+duration+offset+easing+props, variable binding of TIMING/EASING is called out, and 'entryId from list' establishes the dependency between list output and remove_entry input. The mismatch between 'offset' in the description and 'timelineOffset' in the schema is a minor imprecision.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a precise verb+resource (reusable Motion animation styles) and then enumerates every action with a concrete definition of what each does. The closing line routes style application to figma_apply_animation, so an agent can separate this tool from figma_get_animations and figma_apply_animation without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The per-action bullets effectively map intent to action (list_presets for built-in defaults, list for local styles, create/update/remove_entry/delete), and the last line explicitly names the alternative tool for applying a style. It lacks explicit when-not-to-use guidance versus figma_get_styles or figma_get_animations, but the action map gives clear selection context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_move_nodeC

Move a node to a new position within its parent.

NameRequiredDescriptionDefault
xYesNew X position
yYesNew Y position
nodeIdYesThe node ID to move

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 whole burden. It says nothing about coordinate space (absolute vs parent-relative), what happens to nodes inside auto-layout frames, whether the move is reversible, or what is returned — all material 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is arguably too terse for a mutation tool, but there is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description should explain the mutation's effects and constraints. As written it omits coordinate semantics, layout-constraint behavior, and result, leaving an agent under-informed for a write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so nodeId/x/y are already documented. The phrase 'within its parent' adds a small hint that x/y may be parent-relative, but does not resolve the ambiguity or add format/syntax detail.

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?

States a specific verb ('Move') and resource ('a node') plus the scope ('within its parent'), which distinguishes it from siblings like figma_resize_node, figma_clone_node, or figma_set_layout. It does not explicitly name those siblings, so it stops short of 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?

No indication of when to use this instead of figma_resize_node, figma_set_layout, or figma_execute, and no preconditions (selection, parent type) are stated. Usage is only implied by the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_navigateA

Switch the active Figma file target among files that already have the Desktop Bridge plugin running. Local mode is WebSocket-only — this tool does NOT launch a browser or open files. If the requested URL is already the active file, it confirms the connection. If another connected plugin matches the URL, it switches the active target so subsequent tool calls hit that file. If no connected plugin matches, returns guidance for the user to open the Desktop Bridge plugin in the target file. Use figma_list_open_files to see all connected files.

Pass lock: true to PIN this file as the target — new connections, reconnects, and the user's own selection/page changes in other files will no longer move the target. Use this for parallel work (agent edits one file while the user works in another) so commands can't silently route to the wrong file. Switching to another file (or lock: false) releases the pin; it also releases automatically if the pinned file disconnects.

NameRequiredDescriptionDefault
urlYesFigma URL to navigate to (e.g., https://www.figma.com/design/abc123)
lockNoPin this file as the active target so connections, reconnects, and user interaction in other files won't move it. Defaults to false.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full load and does so well: it enumerates the three outcomes (already-active confirmation, switch to matching plugin, no-match guidance) and explains that local mode is WebSocket-only. It stops short of covering malformed-URL handling or what an invalid/non-Figma URL does, which is the remaining gap for a zero-annotation tool.

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?

Behavior is front-loaded in the first paragraph and the pinning semantics are isolated in a second, so an agent scanning for routing logic finds it immediately. The lock paragraph is prose-heavy and could be tightened, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter tool with no annotations and no output schema, the definition covers preconditions, all three return outcomes, and the full lifecycle of the one non-obvious parameter. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3 — but the description genuinely adds meaning to `lock` beyond the schema: the parallel-work rationale (agent edits one file, user works in another) and the release conditions (switching files, lock: false, or the pinned file disconnecting). These lifecycle semantics are not obvious from a boolean field name alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Switch the active Figma file target' — plus the precondition that the Desktop Bridge plugin must already be running. It also names the sibling it is not ('this tool does NOT launch a browser or open files'), so an agent can distinguish it from figma_reconnect or figma_list_open_files without reading schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use figma_list_open_files to enumerate connected files, use this tool to switch among them, and expect remediation guidance when no plugin matches the URL. It also carves out the parallel-work scenario as the reason to pass lock: true, which is a genuine when-to-use rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_post_commentA

Post a comment on a Figma file, optionally pinned to a specific design node. Use after figma_check_design_parity to notify designers of drift when code is the canonical source. Supports replies to existing comment threads. Limitation: @mentions are a Figma UI-only feature — including '@name' in the message renders as plain text, not a clickable mention tag, and does not trigger Figma notifications.

NameRequiredDescriptionDefault
xNoX coordinate for comment placement (absolute canvas position). Used with node_id.
yNoY coordinate for comment placement (absolute canvas position). Used with node_id.
fileUrlNoFigma file URL. Uses current URL if omitted.
messageYesThe comment message text. Supports basic formatting.
node_idNoNode ID to pin the comment to (e.g., '695:313'). Comment appears on that element in Figma.
reply_to_comment_idNoID of an existing comment to reply to. Creates a threaded reply instead of a new top-level comment.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses that @mentions render as plain text and do not trigger Figma notifications, and it explains threaded replies, but it omits permissions/auth requirements, visibility implications, and failure modes for a mutation 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 front-loaded with purpose, then usage scenario, threading support, and a clearly marked limitation. Every sentence earns its place and the @mention caveat is kept separate from the core instruction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with no output schema and no annotations, the description covers purpose, intended workflow, reply behavior, and a key limitation. It could additionally mention permissions or expected post-success behavior, but the essential call context is present.

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 six parameters clearly. The description adds useful context about node pinning and reply threading, but it does not add syntax or format meaning beyond the schema, and coordinates are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Post a comment on a Figma file.' It also distinguishes optional scoping ('pinned to a specific design node') and reply behavior, which cleanly separates it from sibling retrieval and deletion tools like figma_get_comments and figma_delete_comment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete usage scenario: 'Use after figma_check_design_parity to notify designers of drift when code is the canonical source.' This is clear guidance, though it does not explicitly state when not to use the tool or name alternatives for other comment workflows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_reconnectA

Force a complete reconnection to Figma Desktop. Use when connection seems stale or after switching files.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it discloses that the reconnection is 'complete'/'force' and what symptoms justify it, but says nothing about side effects such as dropped in-flight operations, plugin state reset, or downtime during reconnect. That is a meaningful gap for a state-resetting operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, both load-bearing: the first says what it does, the second says when. The purpose is front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, no-output-schema utility tool, the description covers what it does and when to reach for it. Only the behavioral consequences of forcing a reconnect are left unstated.

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 takes zero parameters, so there is nothing for the description to disambiguate; the schema is empty and fully consistent. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Force a complete reconnection to Figma Desktop'), making the action unambiguous. It does not name siblings such as figma_reload_plugin or figma_get_status, so an agent must infer the distinction on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear trigger conditions ('when connection seems stale or after switching files') that an agent can pattern-match against observed symptoms. It stops short of explicit exclusions or pointing at the alternative tools to try first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_reload_pluginA

Reload the current Figma page/plugin to test code changes. Optionally clears console logs before reload. Use when user says: 'reload plugin', 'refresh page', 'restart plugin', 'test my changes'. Returns reload confirmation and current URL. Best for rapid iteration during plugin development.

NameRequiredDescriptionDefault
clearConsoleNoClear console logs before reload

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden: it discloses the side effect (page reload), the optional console-clear behavior, and that it returns a confirmation plus current URL. It omits what is lost on reload (in-memory plugin state, unsaved work) and any failure/permission conditions, which matters for a disruptive action.

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?

Front-loaded with purpose and side effect, then triggers, returns, and a best-fit note; scans quickly. The closing 'Best for rapid iteration' sentence mildly restates the earlier development framing but still adds use-case context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema, no-annotation tool, the description covers purpose, side effects, parameter behavior, return shape, and invocation triggers. Only the destructive consequences of a reload and error conditions are left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single boolean 'clearConsole' that is already documented with a default. The description restates the same meaning ('optionally clears console logs before reload') without adding format or default nuance beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource combination (reload the Figma page/plugin) and frames it as a test-code-changes action, which separates it from mutation siblings like figma_execute or figma_navigate. It does not explicitly distinguish itself from page-navigation or reconnect tools, so it stops short of 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger phrases ('reload plugin', 'refresh page', 'restart plugin', 'test my changes') and names the context (rapid iteration during plugin development), so an agent can decide to invoke it from a user utterance. No when-not guidance or explicit named alternatives are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_remove_animationA

Remove animations from a node: one applied animation style (appliedId, from figma_get_animations), one manual keyframe track, or everything (all: true). Returns what's left.

NameRequiredDescriptionDefault
allNoRemove every animation style and keyframe track
nodeIdYesAnimated node
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
appliedIdNoApplied animation style id (figma_get_animations → animationStyles[].appliedId)
keyframeTrackNoWhich keyframe track: exactly one of property, paint or effect

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the return shape at a high level ("Returns what's left") and the destructive nature is implicit in "Remove," but it says nothing about reversibility, undo, or what happens when the id/track doesn't exist. Useful but incomplete 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?

One sentence plus a short clause, front-loaded with the verb and the mode enumeration, and ending with the return note. Nothing is redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-param tool with a nested keyframeTrack object and no output schema, the definition covers the selection logic and hints at the response. The fileKey local-vs-cloud behavior is left entirely to the schema, which handles it well, so this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns extra by making the mutual exclusivity of appliedId / keyframeTrack / all explicit, which the schema itself does not state. That is real semantic guidance beyond the field docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Remove) and resource (animations from a node) and enumerates the three distinct targeting modes: one applied style, one keyframe track, or all. This distinguishes it from apply/export animation siblings without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The three modes are laid out with the parameter that selects each (appliedId, keyframeTrack, all: true), and it points to figma_get_animations as the source of appliedId. It stops short of naming figma_apply_animation or figma_manage_animation_styles as the inverse/alternative operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_rename_modeB

Rename an existing mode in a Figma variable collection. Requires the Desktop Bridge plugin to be running.

NameRequiredDescriptionDefault
modeIdYesThe mode ID to rename (e.g., '123:0'). Get this from the collection's modes array in figma_get_variables.
newNameYesThe new name for the mode (e.g., 'Dark Theme', 'Tablet').
collectionIdYesThe collection ID containing the mode (e.g., 'VariableCollectionId:123:456'). Get this from figma_get_variables.

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 behavioral burden. It correctly implies a mutation and notes the Desktop Bridge requirement, but does not disclose permissions, side effects, error behavior, or constraints on renaming an existing mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and followed by the prerequisite. There is no redundant or wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose and plugin prerequisite for a simple three-parameter mutation. However, with no annotations and no output schema, it could do more to explain mutation behavior and failure modes; it is minimally adequate rather than fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and all three parameters are documented in the schema. The description adds no parameter-specific meaning beyond what the schema already provides, so 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 states a specific verb and resource: renaming an existing mode in a Figma variable collection. This distinguishes it from sibling tools such as figma_rename_variable and figma_add_mode, but it does not explicitly name alternatives or clarify the boundary.

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 only guidance is the prerequisite that the Desktop Bridge plugin must be running. It does not explain when to choose this tool over figma_add_mode or figma_rename_variable, nor does it describe exclusions or typical usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_rename_nodeC

Rename a node in the layer panel.

NameRequiredDescriptionDefault
nodeIdYesThe node ID to rename
newNameYesThe new name for the node

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 behavioral burden. It does not disclose whether renaming can fail (e.g., on locked nodes, instances, or components), whether changes are reversible, or what happens to layer-panel naming versus component names in this mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the key action and scope front-loaded. There is no padding, though it is arguably too terse to carry the behavioral detail an agent needs.

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 zero annotations and no output schema, the description says too little. It omits return behavior and failure conditions, leaving the agent without enough context to invoke it reliably in edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with nodeId and newName both documented in the schema. The description adds no format details, ID conventions, or naming constraints beyond what the schema already states, so the baseline 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?

States a specific verb (rename) and resource (node) scoped to the layer panel, which cleanly separates it from siblings like figma_rename_variable and figma_rename_mode. It is clear what the tool does, though it doesn't explicitly contrast with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this versus alternatives, no prerequisites (e.g., node must be selected or exist in the current file), and no exclusions. The agent must infer usage entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_rename_variableA

Rename an existing Figma variable. This updates the variable's name while preserving all its values and settings. Requires the Desktop Bridge plugin to be running.

NameRequiredDescriptionDefault
newNameYesThe new name for the variable. Can include slashes for grouping (e.g., 'colors/primary/background').
variableIdYesThe variable ID to rename (e.g., 'VariableID:123:456'). Get this from figma_get_variables.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It does disclose the non-destructive preservation of values/settings and the Desktop Bridge requirement, but says nothing about name collisions, invalid IDs, failure modes, or whether the rename is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose, then behavior, then prerequisite. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter mutation with no output schema, the description covers purpose, preserved state, and the plugin prerequisite. Only gap is collision/error behavior, which is minor at this 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% and both parameters are documented there (including the slashes-for-grouping convention and where to get variableId). The description adds nothing beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Rename an existing Figma variable') and clarifies the effect ('updates the name while preserving all its values and settings'), which implicitly rules out figma_update_variable as the tool for name-only changes. Sibling routing is implied rather than named outright, so not quite 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied (rename only, preserving values) and the prerequisite 'Requires the Desktop Bridge plugin to be running' is a useful gate, but there is no explicit 'use this instead of figma_update_variable' guidance or when-not-to-use condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_reorder_slidesA

Reorder slides by providing a new 2D array of slide IDs. Each inner array represents a row in the grid. WARNING: This is a destructive operation.

NameRequiredDescriptionDefault
gridYes2D array of slide IDs representing the new order, e.g. [['1:2','1:3'],['1:4']]

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does flag 'WARNING: This is a destructive operation', which is genuinely useful. But it leaves the critical semantics unexplained: what happens to slides omitted from the 2D array (deleted, hidden, or preserved), whether existing grids are fully replaced, and whether write permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, with the operation and mechanism front-loaded and the destructive warning at the end where it is most visible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, single-parameter mutation with no annotations and no output schema, the description is minimally adequate: it conveys the shape of the input and that data is at risk, but omits the omission/rollback semantics an agent needs to call it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description adds real meaning by explaining that each inner array is a row in the grid, which the schema only conveys through a single example. It still doesn't say whether the array must contain every slide ID.

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?

Specific verb+resource: 'Reorder slides' with the mechanism ('providing a new 2D array of slide IDs'). An agent can distinguish this from figma_get_slide_grid or figma_list_slides, though it never names a sibling or clarifies how it differs from node-level movement (figma_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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb and by the destructive warning, but there is no guidance on when to prefer this over figma_get_slide_grid + a different approach, and no stated preconditions (e.g. whether the slide grid must be read first, or whether the slide view mode matters).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_reset_slotA

Reset a slot on a component instance to its default (empty) state from the main component. Uses SlotNode.resetSlot().

MULTI-FILE (Local Mode only): Pass fileKey to run this against a specific connected file without switching the active file/target lock (see figma_list_open_files). Does not change the active file or target lock. Cloud Mode pairs with a single plugin instance and rejects fileKey.

NameRequiredDescriptionDefault
slotIdNoDirect SlotNode ID
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Does not change the active file or target lock. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
slotNameNoSlot layer name on the instance
instanceIdNoInstance ID — use with slotName when slotId is unknown

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the reset target state and multi-file execution constraints, but it does not state whether the reset is reversible, what permissions are required, or what happens if the slot does not exist.

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 front-loaded with the core action and then separates the multi-file caveat into a clearly marked second paragraph. It is efficient, though the multi-file note is somewhat verbose relative to the simple reset operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main operation and the non-obvious fileKey behavior, and the schema fully documents all parameters. However, without annotations or an output schema, it leaves gaps around mutation safety, error conditions, and when this tool should be preferred over related slot operations.

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 four parameters are already documented in the input schema. The description reinforces fileKey behavior but does not add meaning beyond the schema for slotId, slotName, or instanceId, making the baseline score appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: reset a slot on a component instance to its default empty state from the main component. This clearly distinguishes the tool from siblings like figma_create_slot or figma_append_to_slot without needing to name them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the tool name and the first sentence. The description explains the fileKey mode condition but does not explicitly say when to choose reset versus append or create slot operations, nor does it list prerequisites or exclusions beyond Cloud Mode fileKey rejection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_resize_nodeB

Resize a node to specific dimensions. By default respects child constraints; use withConstraints=false to ignore them.

NameRequiredDescriptionDefault
widthYesNew width in pixels
heightYesNew height in pixels
nodeIdYesThe node ID to resize
withConstraintsNoWhether to apply child constraints during resize (default: true)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses only the default constraint behavior, which is already in the schema; it says nothing about whether children are resized, what happens to auto-layout frames, permission requirements, or reversibility for this mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, with the core action stated first and the notable default second. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation with fully documented parameters and no output schema, the description is minimally sufficient. However, with no annotations it should say more about side effects on children and constraints, which an agent would want before resizing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters including width/height units and the withConstraints default are already documented. The description repeats the constraint behavior and adds no extra syntax or semantic depth, matching the baseline 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?

States a concrete verb and resource ("Resize a node") with the scope of the change ("to specific dimensions"). Clear enough to distinguish from siblings like figma_move_node or figma_set_layout, though it doesn't explicitly name any sibling.

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?

There is no explicit when-to-use/when-not-to-use guidance and no prerequisites such as the node needing to be resizeable or existing on the current page. The only conditional guidance is about withConstraints, which is parameter behavior rather than tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_scan_code_accessibilityA

Scan HTML code for accessibility violations using axe-core (Deque). Runs structural/semantic checks via JSDOM: ARIA attributes, roles, labels, alt text, form labels, heading order, landmarks, semantic HTML, tabindex, duplicate IDs, lang attribute, and ~50 more rules. Visual checks (color contrast, focus visibility) are disabled in this mode — use figma_lint_design for visual a11y on the design side. Also surfaces a WCAG 1.4.12 (Text Spacing) / 1.4.4 (Resize Text) advisory when typography is locked to fixed px units — the code side is where text-spacing override support is actually verified (a sub-1.5 line height in a design is not itself a failure). Together, these two tools provide full-spectrum accessibility coverage across design and code. Pass component HTML directly or use with figma_check_design_parity for design-to-code a11y comparison. No Figma connection required — this is a standalone code analysis tool.

NameRequiredDescriptionDefault
htmlYesHTML string to scan. Can be a full document or a component fragment (will be wrapped in a valid document).
tagsNoWCAG tag filter. Examples: ['wcag2a'], ['wcag2aa'], ['wcag21aa'], ['wcag22aa'], ['best-practice']. Defaults to all structural rules if omitted.
contextNoCSS selector to scope the scan to a specific element (e.g., '#my-component', '.card'). Scans entire document if omitted.
mapToCodeSpecNoIf true, includes a codeSpec.accessibility object auto-extracted from the HTML + scan results. Pass this directly into figma_check_design_parity's codeSpec.accessibility field for automated design-to-code a11y parity checking.
includePassingRulesNoIf true, includes count of passing and incomplete rules in the response (default: false).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and discharges most of it: discloses the engine (axe-core/JSDOM), that visual rules are disabled in this mode, that a WCAG 1.4.12/1.4.4 advisory is emitted for fixed px typography, and that it is standalone. It stops short of describing error/failure behavior or performance limits on large documents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and purposeful for the first several sentences, but the closing line ('Together, these two tools provide full-spectrum accessibility coverage') and the repeated explanation of why code-side text spacing matters are padding. Roughly two sentences could be cut without losing agent-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a standalone 5-parameter analysis tool with no output schema, the description covers purpose, scope, alternatives, and the shape of results (advisories, passing-rule counts via schema). Only failure modes and output structure detail are missing, which is acceptable given the richness elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds integration meaning beyond the schema — passing component HTML directly and using results with figma_check_design_parity for design-to-code comparison — which contextualizes why the mapToCodeSpec option exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: scan HTML code for accessibility violations via axe-core/JSDOM, and enumerates exactly which rule families are checked (ARIA, roles, labels, alt text, heading order, landmarks, etc.). It also names the sibling it is not (figma_lint_design for visual a11y), so an agent can distinguish it from the design-side audit tools without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly carves out when NOT to use it (visual checks like color contrast and focus visibility are disabled — use figma_lint_design instead) and when to use it (code-side text-spacing verification, pairing with figma_check_design_parity). It also states the prerequisite profile: no Figma connection needed, HTML passed directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_search_componentsA

Search for components by name, category, or description. Returns paginated results with component keys for instantiation. Automatically loads the design system cache if needed.

NEW: Cross-file library search! Pass a libraryFileKey or libraryFileUrl to search for components in a published shared library (different file). This uses the REST API and requires FIGMA_ACCESS_TOKEN.

Without libraryFileKey/libraryFileUrl, searches the currently open file (local components via Plugin API).

NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 10, max: 25)
queryNoSearch query to match component names or descriptions
offsetNoOffset for pagination
categoryNoFilter by category (e.g., 'Button', 'Input', 'Card')
libraryFileKeyNoFile key of a published library to search in (for cross-file library access). Overrides local search.
libraryFileUrlNoURL of a published library file to search in (e.g., https://www.figma.com/design/abc123/...). Alternative to libraryFileKey.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does reasonably well: it discloses pagination, that results include component keys for instantiation, that the design-system cache is auto-loaded, and that the library path uses the REST API with an access-token requirement while the default path uses the Plugin API. It stops short of describing failure modes or rate limits.

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?

Front-loaded with the core verb and return shape, then the mode switch, then the default behavior. The '**NEW:**' marketing formatting and bold emphasis are minor noise that don't earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-param read tool with no output schema and no annotations, the description covers return shape (paginated, component keys), auth requirements, and the mode-dependent backend. Only edge-case/error behavior is absent, which is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains that libraryFileKey and libraryFileUrl switch the entire backend (REST vs Plugin API) and override local search, which is more than the schema's per-field notes convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search for components') plus the match dimensions (name, category, description). It also distinguishes its two operating modes — local Plugin API search vs. cross-file published-library search — which separates it from sibling tools like figma_get_library_components or figma_get_component_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear conditional: pass libraryFileKey/libraryFileUrl to search a published shared library, omit them to search the currently open file. It also flags the FIGMA_ACCESS_TOKEN prerequisite for the library path. It does not explicitly name alternative sibling tools, keeping it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_set_annotationsA

Write or clear annotations on a Figma node. Annotations communicate design specs to developers — use them to document animation timings, easing curves, interaction behaviors, accessibility requirements, and implementation notes. Supports plain text labels, rich markdown labels, pinned design properties, and annotation categories. Pass an empty array to clear all annotations. Use mode='append' to add to existing annotations, or mode='replace' (default) to overwrite. Requires Desktop Bridge plugin. This operation is undoable in Figma (Cmd+Z).

NameRequiredDescriptionDefault
modeNo'replace' (default) overwrites all existing annotations. 'append' adds new annotations while keeping existing ones.replace
nodeIdYesNode ID to write annotations to (e.g., '695:313')
annotationsYesArray of annotations to set. Each annotation can have a label (plain or markdown), pinned properties, and a category. Pass an empty array [] to clear all annotations.

TDQS

A3.9/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 behavioral burden and does so well: it discloses that an empty array clears annotations, that mode='append' preserves existing annotations while 'replace' overwrites, that the Desktop Bridge plugin is required, and that the operation is undoable. It does not cover error cases or permission details, so it is not exhaustive.

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 reasonably front-loaded and nearly every sentence carries useful information. It is slightly long due to enumerating annotation use cases, but remains efficient overall.

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 no annotations, no output schema, and full schema coverage, the description provides enough context about behavior, requirements, and side effects to invoke the tool correctly. Minor gaps around error handling and return behavior are acceptable here.

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 parameters are already fully documented in structured data. The description reinforces the meaning of label, markdown, pinned properties, categories, and mode, but does not add syntax or edge-case semantics beyond what the schema provides, making a 3 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 states a specific verb and resource: 'Write or clear annotations on a Figma node.' It is immediately clear what the tool does, though it does not explicitly name the sibling read tools it complements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context, explaining that annotations document animation timings, easing curves, interaction behaviors, accessibility requirements, and implementation notes. It does not explicitly state when not to use it or name alternatives, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_set_descriptionB

Set the description text on a component, component set, or style. Descriptions appear in Dev Mode and help document design intent. Supports plain text and markdown formatting.

NameRequiredDescriptionDefault
nodeIdYesThe node ID of the component or style to update (e.g., '123:456')
descriptionYesThe plain text description to set
descriptionMarkdownNoOptional rich text description using markdown formatting

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. 'Set' implies mutation, and the mention of Dev Mode visibility adds useful context, but it does not say whether an existing description is overwritten, whether it needs an active plugin/file connection, or whether the change is reversible.

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?

Three short sentences, front-loaded with the action and targets, then supporting context. Efficient with minimal waste; the markdown note earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the definition covers purpose and format support but omits overwrite semantics, permission/connection requirements, and confirmation of effect—gaps an agent would want before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters. The line 'Supports plain text and markdown formatting' loosely maps to the description/descriptionMarkdown pair, but the description does not clarify how the two fields interact (precedence or mutual exclusivity) beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The definition states a specific verb and resource ('Set the description text') and scopes it to three target types (component, component set, style), which lets an agent distinguish it from figma_set_annotations or figma_rename_node. It stops short of explicitly naming the sibling/alternative it is not.

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 second sentence ('Descriptions appear in Dev Mode and help document design intent') gives implied context for why one would call it, but there is no explicit guidance on when to use this versus figma_set_annotations or figma_generate_component_doc, and no prerequisites (e.g., selecting a node) are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_set_fillsA

Set the fill colors on a node. Accepts hex or CSS colors, including oklch() and color(display-p3 …). To bind a fill to a design token / color variable, pass that fill's variableId — the variable drives the color and this works on any Figma plan via the bridge (no raw figma_execute needed).

NameRequiredDescriptionDefault
fillsYesArray of fill objects
nodeIdYesThe node ID to modify

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden and does add useful context: accepted color formats, variable binding, and that it works on any Figma plan via the bridge. It still omits important mutation behavior such as whether existing fills are replaced, permission requirements, or any reversibility/destructive implications.

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 three sentences, front-loaded with the core action, and every sentence adds relevant information: purpose, color format support, and variable binding. There is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations or output schema, the description covers purpose, color formats, and token binding well, relying on the rich schema for parameter details. However, it does not disclose overwrite behavior, what happens to existing fills, or mutation safety context, leaving a notable gap for correct and safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by explaining that passing variableId binds the fill to a design token/color variable and that this works on any plan via the bridge without raw figma_execute, which is practical invocation context not fully captured in the schema description.

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 states a specific verb and resource: 'Set the fill colors on a node.' It clearly distinguishes fill-color setting from related operations like strokes or text, but it does not explicitly mention the sibling tool figma_set_image_fill or state that only SOLID fills are currently supported, leaving minor differentiation to the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some usage context, especially for binding fills to design tokens via variableId and avoiding raw figma_execute. However, it does not explicitly say when to choose this tool over alternatives such as figma_set_image_fill or figma_set_strokes, nor does it state exclusions such as image fills or text nodes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_set_image_fillA

Set an image fill on one or more Figma nodes. The imageData parameter accepts a base64-encoded image string (JPEG/PNG). The image is decoded in the browser bridge and passed as raw bytes to the Figma plugin. Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault
nodeIdsYesArray of node IDs to apply the image fill to
imageDataYesBase64-encoded image data (JPEG/PNG)
scaleModeNoHow the image fills the node (default: FILL)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the data pipeline (base64 decoded in the browser bridge, passed as raw bytes) and the plugin prerequisite, but says nothing about whether existing fills are replaced or appended, size limits, or failure modes 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the parameter detail, then the prerequisite. Very little waste; the only redundancy is restating the base64/JPEG/PNG fact already in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter mutation tool with no annotations and no output schema, the definition covers the plugin requirement and encoding path but omits what happens to pre-existing fills, what the call returns, and any constraints on image size or node type.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description reinforces the imageData encoding and format, which slightly overlaps the schema, but adds the extra meaning that the string is decoded in the bridge and reaches the plugin as raw bytes. scaleMode is not mentioned at all.

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 opens with a specific verb and resource: 'Set an image fill on one or more Figma nodes.' That is clearly distinguishable from a plain fills tool, but it never names the sibling it differs from (e.g. figma_set_fills), so differentiation is left implicit.

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 only usage condition given is 'Requires Desktop Bridge plugin', which is a genuine prerequisite. There is no guidance on when to prefer this over figma_set_fills, figma_set_strokes, or an execute call, and no exclusions or limits are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_set_instance_propertiesA

Update component properties on a component instance. IMPORTANT: Use this tool instead of trying to edit text nodes directly when working with component instances. Components often expose TEXT, BOOLEAN, INSTANCE_SWAP, and VARIANT properties that control their content. SLOT properties CANNOT be set here — use figma_append_to_slot to populate slot content. Direct text node editing may fail silently if the component uses properties. This tool handles the #nodeId suffix pattern automatically. Requires Desktop Bridge connection.

NameRequiredDescriptionDefault
nodeIdYesID of the INSTANCE node to update (e.g., '1:234'). Must be a component instance, not a regular frame.
propertiesYesProperties to set. Keys are property names (e.g., 'Label', 'Show Icon', 'Size'). Values are strings for TEXT/VARIANT properties, booleans for BOOLEAN properties. The tool automatically handles the #nodeId suffix for TEXT/BOOLEAN/INSTANCE_SWAP properties.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that direct text node editing 'may fail silently,' that the #nodeId suffix pattern is handled automatically, and that a Desktop Bridge connection is required. It stops short of describing what the response looks like or how partial/invalid property keys are handled.

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?

Purpose is front-loaded, followed by a clearly flagged IMPORTANT block and the exclusion. Dense but nearly every sentence adds a distinct constraint; the property-type sentence slightly overlaps the schema text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutation tool with no annotations and no output schema, the description covers prerequisites (Desktop Bridge), failure modes, and scope limits. Only the return value and error behavior for invalid property keys are left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds value by enumerating the property kinds (TEXT, BOOLEAN, INSTANCE_SWAP, VARIANT) and their value types, and by clarifying that SLOT properties are out of scope. That meaningfully extends the schema's generic key/value description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Update component properties on a component instance.' It also implicitly distinguishes itself from figma_set_text by warning against direct text node editing, and from figma_append_to_slot by naming the SLOT exclusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use this tool instead of editing text nodes directly when working with component instances, and names the correct alternative (figma_append_to_slot) for SLOT properties. Both the when and the when-not are stated with a named sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_set_layoutA

Set a frame's auto layout or grid layout in one call, and place its children. Auto layout: mode HORIZONTAL or VERTICAL, gap, padding, primaryAlign (MIN, CENTER, MAX, SPACE_BETWEEN, SPACE_EVENLY, SPACE_AROUND), counterAlign, wrap with counterAxisGap and alignContent, and sizing (FIXED, HUG, FILL). Grid: mode GRID with tracks written CSS-style (grid.columns: '240px 1fr 1fr', 'repeat(3, 1fr)', 'auto 1fr', or a count), gaps, autoRows, autoFlow, and per-child row, column, spans and alignment. Only the fields you pass change. Returns the resulting layout, with grid tracks as CSS. Requires Desktop Bridge.

NameRequiredDescriptionDefault
gapNoSpace between items. On a grid, sets both row and column gaps
gridNo
modeNo
wrapNoWrap children onto new lines (HORIZONTAL or VERTICAL)
widthNo
heightNo
nodeIdYesFrame, component or instance to lay out
fileKeyNoLocal Mode only. Run against this specific connected file instead of the active file. Get connected fileKeys from figma_list_open_files. Rejected in Cloud Mode, which pairs with a single plugin instance.
paddingNoOne number for all sides, or {top, right, bottom, left}
childrenNo
alignContentNoHow wrapped lines are spaced
counterAlignNo
primaryAlignNo
reverseZIndexNoStack earlier children on top (canvas stacking)
counterAxisGapNoSpace between wrapped rows or columns (wrap only)
verticalSizingNo
horizontalSizingNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full behavioral burden and does meaningful work: 'Only the fields you pass change' discloses partial-update semantics for a 17-parameter setter, 'Returns the resulting layout, with grid tracks as CSS' discloses the response shape, and 'Requires Desktop Bridge' discloses an environment prerequisite. It stops short of saying what happens to children not listed or whether re-parenting nodes into the frame is destructive, which is the main residual gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded paragraph that begins with purpose and then walks the parameter space in the order an agent would set it. It is dense rather than bloated, though re-listing the enum members (MIN, CENTER, MAX, SPACE_BETWEEN, …) duplicates what the schema already declares and could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter nested-object tool with no output schema and no annotations, the description covers the mode split, the parameter surface, partial-update behavior, return format, and the Desktop Bridge requirement. Missing pieces are secondary: the meaning of width/height, how the children array's ordering interacts with autoFlow, and error/rejection behavior in Cloud Mode.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 47%, so the description must compensate, and it largely does: it names the auto-layout knobs (gap, padding, primaryAlign, counterAlign, wrap/counterAxisGap/alignContent, sizing), spells out the grid track string grammar with concrete examples ('repeat(3, 1fr)', 'auto 1fr', or a count), and covers per-child row, column, spans and alignment. width/height and reverseZIndex are left unexplained in both places, keeping it below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Set a frame's auto layout or grid layout in one call, and place its children.' That scope is distinct from the neighboring node-mutation tools (figma_resize_node, figma_move_node, figma_arrange_component_set), and the two-mode breakdown (auto layout vs grid) makes the capability unambiguous.

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?

Usage context is implied by the field enumerations and by 'Requires Desktop Bridge,' and 'in one call' hints at batching layout plus child placement instead of multiple calls. But it never states when to use this versus figma_resize_node or figma_arrange_component_set, and offers no exclusions or prerequisites beyond the Desktop Bridge note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_set_slide_backgroundB

Set the background color of a slide. Creates or updates a full-slide background rectangle.

NameRequiredDescriptionDefault
colorYesBackground color as hex (e.g., '#181818')
slideIdYesThe node ID of the slide

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it does disclose one useful behavioral fact: it creates OR updates a full-slide rectangle, implying an existing background is replaced rather than stacked. It stops short of stating whether prior background nodes are removed, whether other slide content is affected, what permissions are needed, or what is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the core action front-loaded before the implementation note. Nothing could be removed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutation with full schema coverage and no output schema, the description covers the essential action but leaves open the mutation contract (what happens to an existing background, whether the change is reversible, what the call returns). With no annotations, those gaps matter more than they otherwise would.

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%: the color pattern and the slideId meaning are both documented in the schema. The description adds only the notion that the color applies to a full-slide rectangle, not extra syntax, defaults, or format detail. Baseline 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?

Names a specific verb and resource ("Set the background color of a slide") and the second sentence clarifies the mechanism (full-slide background rectangle), which distinguishes it from a generic fill operation. It does not explicitly name a sibling such as figma_set_fills, so the differentiation is implicit rather than stated.

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 versus alternatives like figma_set_fills, figma_add_shape_to_slide, or figma_set_image_fill, nor any prerequisites (e.g., must the slide be focused or already exist). The agent must infer the selection criteria 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.

figma_set_slides_view_modeA

Toggle the Figma Slides viewport between grid view and single-slide view.

NameRequiredDescriptionDefault
modeYesView mode

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. It usefully says this affects the "viewport," suggesting a local UI state change rather than a document mutation, but it does not disclose persistence, permissions, or whether the focused slide changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It states the operation, scope, and both modes immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, single-parameter, no-output tool with full schema coverage, the description is essentially complete enough to invoke correctly. Minor gaps around preconditions and side effects remain, but they are low risk for a viewport toggle.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single enum parameter is already fully documented with both allowed values. The description restates the modes consistently but adds no parameter semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ("Toggle") and resource ("Figma Slides viewport"), and explicitly names both modes it switches between. This clearly distinguishes it from sibling read/get tools such as figma_get_slide_grid and figma_focus_slide.

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 action implies when it would be used, but there is no explicit when-to-use guidance, no prerequisites, and no comparison to alternatives. It also does not state when an agent should prefer grid view versus single-slide view.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_set_slide_transitionB

Set the transition effect for a slide (style, duration, easing curve). Triggers on click by default.

NameRequiredDescriptionDefault
curveNoEasing curveEASE_IN_AND_OUT
styleYesTransition style
slideIdYesThe node ID of the slide
durationNoDuration in seconds (0.01 to 10)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It does add one genuine behavioral fact (the transition advances on click by default) and implies mutation, but it says nothing about whether this mutates only the targeted slide, whether transitions persist to the file, how to remove one, or whether the call can fail. That is partial coverage for a write tool with zero annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and its configurable dimensions, and the default trigger clause placed last. No filler or repetition of schema detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple four-parameter setter with full schema coverage and no output schema, the basics are covered. But with no annotations and many sibling tools touching slides and animations, the description should have covered mutation scope, how to clear a transition, and its relationship to animation-style 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 all four parameters, their enums, defaults, and the 0.01–10 second duration range are already documented. The description's parenthetical mirrors the schema without adding semantics, and notably omits any mention of slideId or of style=NONE as the removal path.

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?

States a specific verb and resource (set the transition effect for a slide) and enumerates the controllable aspects (style, duration, easing curve). It does not, however, distinguish itself from the direct counterpart figma_get_slide_transition or from figma_manage_animation_styles / figma_apply_animation, which an agent could easily confuse with slide transitions.

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?

There is no when-to-use or when-not-to-use guidance and no routing to alternatives. The only extra clause, 'Triggers on click by default,' describes runtime behavior rather than selection criteria, so the agent gets no help choosing between this tool, figma_manage_animation_styles, and figma_apply_animation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_set_strokesA

Set the stroke (border) on a node. Accepts hex or CSS colors (including oklch() and color(display-p3 …)) and an optional stroke weight. To bind a stroke to a design token / color variable, pass that stroke's variableId — works on any Figma plan via the bridge.

NameRequiredDescriptionDefault
nodeIdYesThe node ID to modify
strokesYesArray of stroke objects
strokeWeightNoStroke thickness in pixels

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description bears the full behavioral burden. It adds real value with the wide-gamut color-format support, the variable-binding path, and the plan-agnostic bridge note, but it omits key mutation semantics: whether the strokes array replaces existing strokes or appends, and what happens on 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?

Three tight sentences with zero filler; the core action is front-loaded and the token-binding tip follows in a logical order. Nothing repeated verbatim from the schema is gratuitous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter mutation tool with a fully documented schema and no output schema, the description covers color input, weight, and variable binding adequately. The only real gap is the undocumented replace-vs-append behavior of the strokes array, which matters for an agent calling it repeatedly.

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 three parameters are already documented in detail, including color formats and variableId sourcing. The description restates the color formats and the optional weight without adding syntax or constraints beyond the schema; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set the stroke (border) on a node') and immediately scopes the accepted inputs. It is unmistakably distinct from the sibling figma_set_fills, which handles a different paint property.

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 gives a clear usage path for the token/variable case (pass variableId) and notes it works on any Figma plan via the bridge. However, it never states when to prefer this over figma_set_fills or figma_execute, nor any precondition such as needing a selected node or edit permission.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_set_textA

Set the text content of a text node. Optionally adjust font size and the font family/style, the text wrap style (BALANCE or PRETTY, like CSS text-wrap), and variable-font axes (fontVariations, e.g. {wght: 550}). Font style names are space-sensitive ('Semi Bold', not 'SemiBold'), but this tool auto-corrects common no-space variants and falls back gracefully — so you don't need raw figma_execute to change typography. text can be left out to change only the styling.

NameRequiredDescriptionDefault
textNoThe new text content. Leave out to change only the styling
nodeIdYesThe text node ID
fontSizeNoOptional font size to set
fontStyleNoOptional font style/weight to apply (e.g., 'Bold', 'Semi Bold'). No-space variants like 'SemiBold' are auto-corrected.
fontFamilyNoOptional font family to apply (e.g., 'Inter')
textWrapStyleNoHow lines break: AUTO (default), BALANCE (even line lengths, for headings) or PRETTY (avoids a lone last word)
fontVariationsNoVariable-font axis values by OpenType tag, e.g. {wght: 550, slnt: -5}. Axes you leave out keep the named style's values

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It adds that this is a mutation ("set"), that style variants are auto-corrected and "fall back gracefully," and that {wght: 550} axes can be set—good detail. But "falls back gracefully" is vague (to what?), and it says nothing about return value, failure modes, or undoability.

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?

Front-loaded with the core action, followed by optional-field notes and the fallback reassurance. The middle sentence about auto-correction is useful; the trailing "text can be left out" is the strongest signal and could be earlier, but the structure is sound overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-param mutation tool with no annotations and no output schema, this explains all functional parameters and the styling behavior sufficiently to call it correctly. The lone gap is behavioral around failure/response, which is minor for a simple text-setter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description reinforces meaning with a conceptual anchor—"BALANCE or PRETTY, like CSS text-wrap"—and gives the concrete fontVariations example {wght: 550}, adding real semantic value over the raw schema for a non-obvious enum.

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?

"Set the text content of a text node" states a specific verb+resource, and the sentence names the alternative (raw figma_execute) explicitly. It stops just short of distinguishing from siblings like figma_add_text_to_slide, but the operation is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"You don't need raw figma_execute to change typography" routes the agent away from the generic escape hatch, and "text can be left out to change only the styling" clarifies the conditional use case. No explicit exclusion of what this tool should NOT be used for, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_setup_design_tokensA

Create a complete design token structure in one operation: collection, modes, and all variables. Ideal for importing CSS custom properties or design tokens into Figma. Values may be literals OR DTCG-style brace references ('{color.blue.600}', or set-qualified '{primitives.color.blue.600}') that resolve to variable ALIASES — first against variables created in this same call, then against existing local variables. Unresolvable references skip that value with a per-item warning (the rest of the batch still applies), so semantic collections referencing primitives no longer need raw figma_execute. Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault
modesYesMode names (first becomes default). Example: ['Light', 'Dark']
tokensYesToken definitions (1-100)
collectionNameYesName for the token collection (e.g., 'Brand Tokens')

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and delivers real behavioral detail: alias resolution order (same-call first, then existing local variables, set-qualified stripping), partial-failure semantics (unresolvable references skip that value with a per-item warning while the batch still applies), and the Desktop Bridge prerequisite. Does not cover collection-name collision behavior or duplicate handling.

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?

Front-loads the primary action and scope, then layers in alias resolution and failure behavior. Dense but each clause (alias references, per-item warnings, plugin requirement) carries actionable information; minor verbosity in the parenthetical examples.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema, 3-required-param bulk tool, the description covers scope, alias semantics, partial-success behavior, and the plugin prerequisite—enough to call it correctly. Missing only edge cases like existing-collection conflicts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema itself documents modes, token fields, and types richly, so baseline is 3. The description adds conceptual value by explaining the DTCG brace-reference/alias resolution mechanism that governs the 'values' object, going beyond a restatement of the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Create a complete design token structure ... collection, modes, and all variables.' This clearly distinguishes it in scope from single-operation siblings, though it never names them (e.g., figma_batch_create_variables, figma_create_variable_collection) to nail the differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete use case ('importing CSS custom properties or design tokens into Figma') and implicitly positions itself against 'raw figma_execute' for semantic collections. Lacks explicit when-not guidance or direct naming of the closest batch/create siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_skip_slideB

Toggle whether a slide is skipped during presentation mode.

NameRequiredDescriptionDefault
skipYesTrue to skip the slide, false to include it
slideIdYesThe node ID of the slide

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 behavioral burden. It identifies the mutation as a toggle, but does not disclose permission requirements, side effects, reversibility guarantees, or return behavior for the operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It states the operation and its context immediately.

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 low complexity of two required parameters, the description is minimally adequate. However, with no annotations and no output schema, it leaves open whether the tool returns the updated slide state or requires any special presentation-mode preconditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and both parameters are fully documented in the schema, including the boolean semantics for skip and the node ID for slideId. The description adds no parameter details beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: toggling whether a slide is skipped during presentation mode. It is specific enough to distinguish from slide retrieval, creation, and transition tools, though it does not explicitly contrast with related siblings like figma_focus_slide.

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 presentation-mode context implies when the tool is useful, but there are no explicit when-to-use/when-not-to-use guidelines or named alternatives among the many slide-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_take_screenshotA

Export an image of the current Figma page or specific node. Uses the Desktop Bridge plugin (exportAsync) when connected — works on any plan, no REST token needed, reflects current runtime state. Falls back to the Figma REST API when the bridge is unavailable or for PDF format. Use for visual validation after design changes — check alignment, spacing, proportions. Pass nodeId to target specific elements. For components, prefer figma_get_component_image.

NameRequiredDescriptionDefault
scaleNoImage scale factor (0.01-4, default: 2 for high quality)
formatNoImage format (default: png)png
nodeIdNoOptional node ID to screenshot (e.g., '123:456'). If omitted, uses the node-id from the Desktop Bridge plugin's reported file URL when present. To screenshot what the user is currently looking at on the canvas, prefer figma_capture_screenshot (uses the plugin's exportAsync and reflects the current state).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the burden and does so well: it discloses the Desktop Bridge exportAsync path, plan compatibility, no REST token needed, runtime-state fidelity, and the REST API fallback including the PDF case. The one gap is that it never says what the tool returns (image payload vs URL vs base64), which matters since there is no output schema.

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?

Front-loads the core purpose, then backend behavior, then usage guidance, then the sibling routing note. Every sentence adds information, and there is no filler or repetition.

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?

It covers backend selection, fallback conditions, and when to use it against the main sibling, which is ample for a three-parameter export tool. The missing piece is the return value, which the description should mention because no output schema exists.

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 three parameters are already documented, and this sets the baseline at 3. The description only adds 'Pass nodeId to target specific elements,' which largely restates the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Export an image of the current Figma page or specific node.' It also distinguishes itself from siblings by naming figma_get_component_image for components, so an agent can tell the tools apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear usage context: 'Use for visual validation after design changes — check alignment, spacing, proportions,' plus a routing rule away from figma_get_component_image for components. It does not mention figma_capture_screenshot, the closest overlapping sibling — that comparison is only in the nodeId schema text, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_update_variableA

Update a single variable's value and/or its description. Pass modeId+value to change the value in a mode; pass description to set the 'How to use this variable' text shown in the Variables panel (and exported as DTCG $description). At least one of {modeId+value} or {description} is required. For many value updates at once, use figma_batch_update_variables (10-50x faster). Use figma_get_variables first for IDs. COLOR: hex '#FF0000', FLOAT: number, STRING: text, BOOLEAN: true/false. Requires Desktop Bridge plugin.

NameRequiredDescriptionDefault
valueNoThe new value (requires modeId). For COLOR: hex string like '#FF0000'. For FLOAT: number. For STRING: text. For BOOLEAN: true/false.
modeIdNoThe mode ID to update the value in (e.g., '1:0'). Required when updating a value. Get this from the variable's collection modes.
variableIdYesThe variable ID to update (e.g., 'VariableID:123:456'). Get this from figma_get_variables.
descriptionNoSet the variable's description (the 'How to use this variable' field; exported as DTCG $description). Pass an empty string to clear it.

TDQS

A4.5/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 and mostly succeeds: it discloses the Desktop Bridge plugin dependency, the mode/value coupling rule (value requires modeId), and that description maps to the DTCG $description field. It omits reversibility and whether unspecified mode values are left untouched, which would complete the mutation contract.

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?

Front-loaded with the core action, then constraints, alternative, prerequisite, and type formats in labeled chunks. Dense but every clause carries operational information; mild run-on density from stacked abbreviations keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation with no annotations and no output schema, the description supplies prerequisites, format rules, plugin requirement, and the batch alternative. It could add what the tool returns or whether omitted fields are preserved, but nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so formatting is already documented, but the description adds semantics the schema does not: the conditional dependency between modeId and value, the at-least-one-of requirement, and a compact per-type value cheat sheet (COLOR/FLOAT/STRING/BOOLEAN) that lets an agent construct the call without cross-referencing the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource ("Update a single variable's value and/or its description") and immediately delineates the two editable aspects. It separates itself from the batch sibling by describing itself as single-variable and pointing to figma_batch_update_variables for bulk work.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative explicitly with a quantified tradeoff ("10-50x faster") and gives the prerequisite that IDs come from figma_get_variables first. The "At least one of {modeId+value} or {description} is required" line defines the valid invocation envelope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_watch_consoleA

Stream console logs captured by the Desktop Bridge plugin in real-time for a specified duration (max 5 minutes). Covers code run through the bridge (figma_execute and the write tools) — not other plugins, which run in their own sandboxes. Returns all logs captured during the watch period with summary statistics. NOT for retrieving past logs (use figma_get_console_logs). Best for: watching long-running figma_execute scripts, debugging race conditions, monitoring async operations.

NameRequiredDescriptionDefault
levelNoFilter by log levelall
durationNoHow long to watch in seconds

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the hard 5-minute cap, the plugin-scope limitation, and that the call returns all captured logs plus summary statistics. It stops short of stating that the call blocks for the full duration (an important behavioral fact for an agent's planning) and says nothing about cancellation or behavior if the plugin is not connected.

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?

Front-loaded with the core action and duration limit, then scope, then return shape, then exclusions — a sensible priority order. It is slightly dense with four distinct ideas packed in, but no sentence is filler and the 'Best for:' tail genuinely helps routing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing what comes back ('all logs captured during the watch period with summary statistics'). Both parameters are documented, the duration cap is stated, and the scope boundary is drawn — nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description earns above baseline by adding the 'max 5 minutes' ceiling that the schema's 'How long to watch in seconds' field does not state. The 'level' enum filter is left entirely to the schema, which is acceptable given full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('stream') and resource ('console logs captured by the Desktop Bridge plugin') plus the temporal scope ('real-time for a specified duration'). It explicitly delimits what is in scope (figma_execute and write tools) versus out of scope (other plugins' sandboxes), which lets an agent distinguish it from figma_get_console_logs without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit negative case — 'NOT for retrieving past logs (use figma_get_console_logs)' — naming the sibling and the condition that selects it. The 'Best for:' clause adds concrete scenarios (long-running scripts, race conditions, async operations) that make the when-to-use decision unambiguous.

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.

  1. 130 tool updatesv1.46.0
    • First observedfigjam_auto_arrange
    • First observedfigjam_create_code_block
    • First observedfigjam_create_connector
    • First observedfigjam_create_section
    • First observedfigjam_create_shape_with_text
    • First observedfigjam_create_stickies
    • First observedfigjam_create_sticky
    • First observedfigjam_create_table
    • First observedfigjam_get_board_contents
    • First observedfigjam_get_connections
    • First observedfigma_add_component_property
    • First observedfigma_add_mode
    • First observedfigma_add_shape_to_slide
    • First observedfigma_add_slot_property
    • First observedfigma_add_text_to_slide
    • First observedfigma_analyze_component_set
    • First observedfigma_append_to_slot
    • First observedfigma_apply_animation
    • First observedfigma_apply_shader
    • First observedfigma_arrange_component_set
    • First observedfigma_audit_component_accessibility
    • First observedfigma_audit_design_system_report
    • First observedfigma_batch_create_variables
    • First observedfigma_batch_update_variables
    • First observedfigma_blame_node
    • First observedfigma_capture_screenshot
    • First observedfigma_check_design_parity
    • First observedfigma_clear_console
    • First observedfigma_clone_node
    • First observedfigma_create_child
    • First observedfigma_create_component_set
    • First observedfigma_create_slide
    • First observedfigma_create_slot
    • First observedfigma_create_variable
    • First observedfigma_create_variable_collection
    • First observedfigma_delete_comment
    • First observedfigma_delete_component_property
    • First observedfigma_delete_node
    • First observedfigma_delete_slide
    • First observedfigma_delete_variable
    • First observedfigma_delete_variable_collection
    • First observedfigma_diagnose
    • First observedfigma_diff_versions
    • First observedfigma_ds_analyze
    • First observedfigma_ds_extract_component
    • First observedfigma_ds_extract_tokens
    • First observedfigma_ds_scaffold
    • First observedfigma_ds_setup_storybook
    • First observedfigma_ds_status
    • First observedfigma_ds_verify
    • First observedfigma_duplicate_slide
    • First observedfigma_edit_component_property
    • First observedfigma_execute
    • First observedfigma_execute_across_files
    • First observedfigma_export_animation
    • First observedfigma_export_tokens
    • First observedfigma_focus_slide
    • First observedfigma_generate_changelog
    • First observedfigma_generate_component_doc
    • First observedfigma_get_animations
    • First observedfigma_get_annotation_categories
    • First observedfigma_get_annotations
    • First observedfigma_get_changes_since_version
    • First observedfigma_get_code_layers
    • First observedfigma_get_comments
    • First observedfigma_get_component
    • First observedfigma_get_component_details
    • First observedfigma_get_component_for_development
    • First observedfigma_get_component_for_development_deep
    • First observedfigma_get_component_image
    • First observedfigma_get_console_logs
    • First observedfigma_get_design_changes
    • First observedfigma_get_design_system_kit
    • First observedfigma_get_design_system_summary
    • First observedfigma_get_file_at_version
    • First observedfigma_get_file_data
    • First observedfigma_get_file_for_plugin
    • First observedfigma_get_file_versions
    • First observedfigma_get_focused_slide
    • First observedfigma_get_library_component_by_key
    • First observedfigma_get_library_components
    • First observedfigma_get_library_variables
    • First observedfigma_get_selection
    • First observedfigma_get_slide_content
    • First observedfigma_get_slide_grid
    • First observedfigma_get_slide_transition
    • First observedfigma_get_slots
    • First observedfigma_get_status
    • First observedfigma_get_styles
    • First observedfigma_get_text_styles
    • First observedfigma_get_token_values
    • First observedfigma_get_variables
    • First observedfigma_import_library_variable
    • First observedfigma_import_tokens
    • First observedfigma_instantiate_component
    • First observedfigma_lint_design
    • First observedfigma_list_open_files
    • First observedfigma_list_shaders
    • First observedfigma_list_slides
    • First observedfigma_manage_animation_styles
    • First observedfigma_move_node
    • First observedfigma_navigate
    • First observedfigma_post_comment
    • First observedfigma_reconnect
    • First observedfigma_reload_plugin
    • First observedfigma_remove_animation
    • First observedfigma_rename_mode
    • First observedfigma_rename_node
    • First observedfigma_rename_variable
    • First observedfigma_reorder_slides
    • First observedfigma_reset_slot
    • First observedfigma_resize_node
    • First observedfigma_scan_code_accessibility
    • First observedfigma_search_components
    • First observedfigma_set_annotations
    • First observedfigma_set_description
    • First observedfigma_set_fills
    • First observedfigma_set_image_fill
    • First observedfigma_set_instance_properties
    • First observedfigma_set_layout
    • First observedfigma_set_slide_background
    • First observedfigma_set_slide_transition
    • First observedfigma_set_slides_view_mode
    • First observedfigma_set_strokes
    • First observedfigma_set_text
    • First observedfigma_setup_design_tokens
    • First observedfigma_skip_slide
    • First observedfigma_take_screenshot
    • First observedfigma_update_variable
    • First observedfigma_watch_console

TDQS

B3.4/5.0

Scored across 130 tools

Disambiguation2/5

Several tools overlap heavily in purpose, especially screenshot/capture tools (figma_take_screenshot, figma_capture_screenshot, figma_get_component_image), component inspection tools (figma_get_component, figma_get_component_for_development, figma_get_component_for_development_deep, figma_analyze_component_set), and variables/token retrieval tools (figma_get_variables, figma_get_library_variables, figma_get_token_values, figma_get_design_system_kit). Descriptions help somewhat, but the boundaries between these retrieval tools are unclear enough that an agent could easily choose the wrong one.

Naming Consistency4/5

Most tools follow a predictable snake_case pattern with a domain prefix and verb-oriented action (figma_get_*, figma_create_*, figma_set_*, figjam_create_*, figma_ds_*). There are minor deviations such as figma_take_screenshot vs. figma_capture_screenshot and some awkward names like figma_get_design_system_kit, but the overall convention is readable and stable.

Tool Count1/5

130 tools is far beyond what is reasonably scoped for a single MCP server, even one covering as broad a domain as Figma design systems, FigJam, and Slides. The surface is sprawling and includes many niche, overlapping, or workflow-specific tools that should likely be consolidated or split into separate servers.

Completeness4/5

The server covers an unusually broad lifecycle: variables/tokens, components, node manipulation, comments, version history, accessibility, FigJam, Slides, animations, and shaders. There are still some gaps, such as limited local style creation/editing and no explicit effect-style management, but these are workaroundable via figma_execute and do not represent severe missing operations.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    A Model Context Protocol server that integrates Figma design files with AI coding tools like Cursor, Windsurf, and Cline, allowing AI tools to access and understand Figma design data for generating more accurate code.
    178 npm
    31
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI agents to programmatically create, modify, and manage Figma documents via a WebSocket bridge and Figma plugin.
    11
    6
    MIT