figma-unified-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TOOL_PROFILE | No | Tool profile: minimal, standard, or full | full |
| FIGMA_WS_PORT | No | WebSocket port for the Figma plugin bridge | 18211 |
| FIGMA_ACCESS_TOKEN | Yes | Your Figma Personal Access Token from https://www.figma.com/developers/api#access-tokens |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| figma_statusA | Check server, bridge, and REST API status. |
| figma_connect_pluginC | Connect to Figma plugin via WebSocket. |
| figma_send_commandC | Send a raw command to the plugin. |
| figma_get_fileA | Get file document tree. Defaults to depth=2 (pages + top-level frames). Set higher depth for deeper traversal, or use figma_get_node for a specific subtree. |
| figma_get_nodeC | Get a node with properties, styles, and children. |
| figma_get_nodesB | Get multiple nodes in one request. Batch alternative to get_node. |
| figma_get_stylesA | Get styles. fileKey→REST file styles, omit→plugin local styles. |
| figma_get_componentsA | Get components. source: file (REST — published components with importable keys), local (plugin — current page), library (plugin — discovered from instances on canvas). |
| figma_get_variablesA | Get local variables and collections (design tokens). Filter by type or name to reduce token usage. |
| figma_get_commentsC | Get comments on a file. |
| figma_post_commentC | Post a comment on a file or node. |
| figma_searchC | Search for nodes by name or type in a file. |
| figma_get_selectionA | Get currently selected nodes. |
| figma_get_team_componentsB | Get published components from a team. Requires Organization or Enterprise plan. |
| figma_get_team_stylesB | Get published styles from a team. |
| figma_get_componentC | Get a published component by key. |
| figma_get_styleB | Get a published style by key. |
| figma_get_library_items_usedC | Find external library components/styles used in a file. |
| figma_get_file_versionsC | Get version history of a file. |
| figma_get_team_projectsB | List all projects in a team. |
| figma_get_project_filesB | List all files in a project. |
| figma_scan_text_nodesC | Scan text nodes with chunking for large pages. |
| figma_scan_nodes_by_typesC | Find nodes by type (FRAME, TEXT, COMPONENT, etc.). |
| figma_set_focusB | Select and scroll viewport to a node. |
| figma_set_selectionsB | Select multiple nodes and scroll to show them. |
| figma_get_library_collectionsA | Get enabled library variable collections. |
| figma_get_library_variablesA | Get variables from a library collection by key. Filter by type or name to reduce token usage. |
| figma_get_viewportA | Get viewport position, zoom, and visible bounds. |
| figma_import_component_by_keyA | Import a published component by its library key and create an instance. Get keys from figma_get_components with source='file'. IMPORTANT: This only works for components published within the same Figma team library. For external/linked design system libraries, use figma_clone_node to clone an existing instance from the canvas instead. Run figma_get_components with source='library' first to check what's available. |
| figma_import_style_by_keyA | Import library styles by key so they become available locally. Use figma_get_styles to find keys. Supports batch import via styleKeys array. After import, styles can be applied with figma_apply_style by name. |
| figma_get_code_connect_mapC | Map Figma components to source code locations. |
| figma_get_design_system_rulesB | Extract design system rules: colors, typography, spacing, etc. |
| figma_export_pngC | Export a node as PNG/SVG/PDF with base64 data. |
| figma_create_pageB | Create a new page. Optionally switch to it. |
| figma_switch_pageB | Switch to a page by name, ID, or index. |
| figma_boolean_operationC | Boolean op (union/subtract/intersect/exclude) on 2+ nodes. |
| figma_check_accessibilityA | Comprehensive WCAG 2.1 accessibility audit. Works via REST API (no plugin needed) when fileKey is provided, or via plugin bridge for the live canvas. Checks: text contrast (1.4.3/1.4.6), non-text contrast (1.4.11), touch targets (2.5.5/2.5.8), alt text (1.1.1), typography & text spacing (1.4.4/1.4.12), heading hierarchy (1.3.1), focus indicators (2.4.7), interactive spacing (2.5.8), color-blind safety (1.4.1). Each issue includes WCAG criterion, severity (error/warning), and actionable fix. |
| figma_validate_layoutC | Check overlaps, bounds, padding, alignment issues. |
| figma_cacheA | Manage library/component/style cache. action: 'stats' (view cached keys), 'clear' (clear all), 'invalidate' (clear by prefix, e.g., 'get_components'). Cache auto-expires after 5 minutes. Cached tools: get_components, get_styles, get_library_collections, get_library_variables, get_team_components, get_team_styles, get_component, get_design_system_rules. |
| figma_get_imagesC | Export nodes as images. Returns download URLs. |
| figma_screenshotA | Screenshot one or more nodes as base64 images. Use nodeId for a single node, or nodeIds for multiple nodes in one call. If plugin is connected, fileKey is optional. |
| figma_export_svgC | Export a node as raw SVG markup. |
| figma_generate_handoff_specA | Generate a visual design handoff spec annotation in Figma. This returns step-by-step instructions — follow them using the available Figma tools. Available sections: spacing, anatomy, colors, typography, grid, assets. Requires plugin connection for creating annotation nodes. |
| figma_export_to_fileA | Export a Figma node as an image file saved to a local path. Supports PNG, JPG, SVG, and PDF formats. Uses plugin bridge for export (no fileKey needed if plugin is connected). Falls back to REST API if fileKey is provided. Examples: { nodeId: "1:23", filePath: "~/Desktop/thumbnail.png" } { nodeId: "1:23", filePath: "/Users/me/exports/logo.svg", format: "svg", scale: 3 } |
| figma_create_frameC | Create a frame with full auto-layout, stroke, and nested children support. |
| figma_create_rectangleD | Create a rectangle. |
| figma_create_ellipseC | Create an ellipse/circle. |
| figma_create_textB | Create a text node. Accepts 'text' or 'content' for the string value. |
| figma_create_componentC | Create a reusable component with full auto-layout, stroke, and nested children support. |
| figma_create_instanceC | Create an instance of a component. |
| figma_create_lineC | Create a line. |
| figma_create_pathA | Create a vector path from points. Much simpler than create_from_svg for charts, curves, and shapes. Supports straight lines and smooth (Catmull-Rom) curves. Examples:
|
| figma_create_from_svgA | Create a vector node from raw SVG markup. Use this for charts, icons, curves, and any complex shapes that can't be made with rectangles/ellipses/lines. Supports , , , gradients, and all SVG elements. |
| figma_batchA | Batch multiple create, modify, and variable operations in one round-trip. Max 200 ops. ALWAYS prefer this over calling individual tools in a loop. Use "$ref:N" to reference node ID from operation N. create_frame/create_component support nested "children" and inline auto-layout params. Commands: create_frame, create_rectangle, create_ellipse, create_text, create_component, create_instance, create_line, create_path, create_from_svg, move_node, resize_node, set_fill, set_stroke, set_opacity, set_visible, set_corner_radius, set_text_content, set_text_style, set_auto_layout, set_effects, rename_node, delete_node, clone_node, group_nodes, reparent_node, set_constraints, bind_variable, create_variable, set_variable_value, create_style, apply_style, apply_style_by_name, delete_style, rename_style, set_annotation, import_component_by_key, import_style_by_key. Param names in batch must match the plugin function signatures exactly:
IMPORTANT: Only FRAME, GROUP, COMPONENT, and PAGE nodes can be parents. Use create_frame (not create_rectangle) when you need children inside a shape (e.g. a pill/badge with a label). |
| figma_move_nodeC | Move a node to a new position. |
| figma_resize_nodeD | Resize a node. |
| figma_set_fillA | Set fill of a node. Supports solid colors, gradients, and images. Simple solid: { nodeId, color: {r,g,b} } Gradient: { nodeId, fills: [{ type:"GRADIENT_LINEAR", gradientStops:[{color:{r,g,b,a},position:0},{color:{r,g,b,a},position:1}] }] } Image: { nodeId, fills: [{ type:"IMAGE", imageUrl:"https://..." }] } Multiple fills: pass multiple items in the fills array. |
| figma_set_strokeC | Set stroke (border) of a node. |
| figma_set_opacityC | Set node opacity. |
| figma_set_visibleC | Show or hide a node. |
| figma_set_corner_radiusC | Set corner radius of a node. |
| figma_set_text_contentB | Update text content. Supports batch via updates array. Accepts 'text' or 'content' for the string value. |
| figma_set_text_styleB | Set text style with presets or custom values. Any explicit property overrides the preset. Presets: display, heading-xl, heading-lg, heading-md, heading-sm, heading-xs, body-xl, body-lg, body-md, body-sm, body-xs, label-lg, label-md, label-sm, caption, overline Examples: { nodeId, preset: "heading-xl" } { nodeId, preset: "body-md", fontWeight: 700 } { nodeId, fontSize: 48, fontWeight: 800 } |
| figma_rename_nodeC | Rename a node. |
| figma_delete_nodeB | Delete one or more nodes. |
| figma_set_auto_layoutC | Configure auto-layout (flexbox) on a frame. |
| figma_set_effectsC | Apply effects (shadows, blurs) to a node. |
| figma_group_nodesC | Group nodes together. |
| figma_set_constraintsC | Set resize constraints for a node. |
| figma_reparent_nodeC | Move a node to a different parent. |
| figma_clone_nodeC | Clone a node with optional offset. |
| figma_get_annotationsB | Get annotations on a node or the whole document. |
| figma_set_annotationC | Set annotation(s) on node(s). |
| figma_get_instance_overridesB | Get override properties from a component instance. |
| figma_set_instance_overridesC | Apply overrides to component instances. |
| figma_create_variable_collectionB | Create a variable collection for design tokens. Uses REST API — no plugin required. |
| figma_create_variableC | Create a variable (COLOR, FLOAT, STRING, BOOLEAN). Uses REST API — no plugin required. |
| figma_set_variable_valueA | Set variable value for a mode. Uses REST API — no plugin required. Use mode ID (get from figma_get_variables). |
| figma_update_variableB | Update variable properties (name, description, scopes). Uses REST API — no plugin required. |
| figma_delete_variableB | Delete a variable. Uses REST API — no plugin required. |
| figma_delete_variable_collectionB | Delete a variable collection. Uses REST API — no plugin required. |
| figma_bind_variableA | Bind a variable to a node property. Requires plugin connection (no REST endpoint for this). |
| figma_create_styleC | Create a reusable style (paint, text, effect). Requires plugin connection. |
| figma_apply_styleB | Apply a style to a node by ID or by name. Provide styleId to apply by ID, or styleName to apply by name. Requires plugin connection. |
| figma_create_interactionC | Add a prototype interaction to a node. |
| figma_remove_interactionsB | Remove all interactions from a node. |
| figma_create_flowC | Create a prototype flow starting point on a frame. |
| figma_remove_flowB | Remove a flow starting point from a frame. |
| figma_get_flowsA | Get all prototype flows in the current page. |
| figma_set_default_transitionC | Set default transition for this frame. |
| figma_setup_overlayC | Configure a frame as an overlay in prototypes. |
| figma_set_scroll_behaviorB | Configure scrolling for a frame in prototypes. |
| figma_get_interactionsC | Get all interactions on a node. |
| figma_present_prototypeC | Open prototype presentation view. |
| figma_generate_cssB | Generate CSS from a node's styles. |
| figma_generate_reactC | Generate React component from a node. |
| figma_generate_swiftuiC | Generate SwiftUI code from a node. |
| figma_generate_htmlC | Generate semantic HTML from a node. |
| figma_generate_tailwind_configB | Generate Tailwind config from Figma design tokens. |
| figma_generate_tokensC | Export design tokens (CSS vars, JSON, SCSS). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| audit_design_system | Analyze a Figma file for design system consistency issues |
| design_screen | Design a single app screen with deep UX patterns — login, dashboard, settings, profile, onboarding, checkout, search, messaging, etc. |
| document_components | Auto-generate documentation for components in a file |
| migrate_to_variables | Convert hardcoded values to design tokens/variables |
| create_component_library | Guide through creating a reusable component with variants |
| review_accessibility | Comprehensive WCAG 2.1 accessibility audit — contrast, touch targets, alt text, typography, focus, color-blind safety, heading hierarchy |
| auto_style_guide | Scan your existing design and auto-generate a style guide page with color swatches, type samples, spacing reference, and component inventory |
| rename_layers | Scan a frame and rename all layers based on their type, content, and role — no more 'Frame 847' or 'Rectangle 293' |
| spacing_doctor | Audit spacing in a frame — find all values that don't follow your grid and tell you exactly what to fix |
| generate_variants | Design ONE state of a component → the agent creates all variants: states (hover, pressed, disabled), sizes (S/M/L), and with/without icon |
| dark_mode_mirror | Duplicate a page and intelligently swap colors to create a dark mode version |
| responsive_reflow | Take a desktop frame (1440px) and create tablet (768px) and mobile (375px) versions with intelligent layout reflow |
| build_page | Describe a page in plain English → the agent builds a complete wireframe with proper hierarchy, spacing, and content |
| handoff_annotation | Add developer handoff annotations — side-by-side layout with numbered badges on the design and spec cards in a sidebar |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 106 tools
Multiple tools have overlapping responsibilities, especially around exporting: figma_export_png, figma_export_svg, figma_export_to_file, figma_get_images, and figma_screenshot all serve similar purposes. Retrieval also overlaps between figma_get_file, figma_get_node, figma_get_nodes, figma_search, and figma_scan_nodes_by_types, making misselection likely without reading descriptions carefully.
The vast majority of tools follow the figma_verb_noun snake_case pattern, with predictable verbs like get, create, set, and delete. A few names break the pattern—figma_status, figma_cache, figma_boolean_operation, and figma_codegen_bundle—but these are exceptions rather than systemic inconsistencies.
106 tools is an extreme count, far exceeding what an agent can efficiently evaluate in context. Even for a 'unified' Figma server, this surface area is unwieldy and would be better split into focused sub-servers; the tool prompt alone would consume enormous context.
Coverage is genuinely extensive: node CRUD, variables, styles, components, interactions, comments, exports, accessibility, codegen, and dev resources are all represented. Minor lifecycle gaps exist—such as updating or deleting comments and managing files/projects—but core design and development workflows do not hit dead ends.