Labsco
MCP SERVER

Cursor Talk to Figma MCP

by sonnylazuardi

Read a Figma document and change it — copy, layout, component instances, annotations — from the editor you are writing code in.

Image Analysis, OCR & VisionOfficial source
Summary
Design edits stop being a request you file with someone else.

Scanning the text nodes and then rewriting them in bulk changes a whole screen's copy in one pass, and extracting one instance's overrides carries them to the rest. The channel is the catch worth knowing first: nothing works until `join_channel` has run.

What it is

A two-way channel into an open Figma document, carried over a WebSocket to a Figma plugin. Forty tools cover reads across the document, selection, nodes, styles, components and annotations, and writes across creation, layout, text, component instances, connectors and what is selected on screen. Six prompts encode the multi-step strategies.

What you get
  • The document, the current selection, and any node or set of nodes returned in full (`get_document_info`, `get_selection`, `read_my_design`, `get_node_info`, `get_nodes_info`)
  • Rectangles, frames, sections and text created, and existing nodes moved, resized, renamed, cloned, reparented, deleted singly or in bulk, and exported as PNG, JPG, SVG or PDF (`create_frame`, `create_section`, `set_parent`, `clone_node`, `delete_multiple_nodes`, `export_node_as_image`)
  • Auto-layout set properly: layout mode and wrap, padding, axis alignment, sizing modes and item spacing (`set_layout_mode`, `set_padding`, `set_axis_align`, `set_layout_sizing`, `set_item_spacing`)
  • Fill and stroke colours, corner radius with per-corner control, and an image fill from a file path, a URL or base64 in fill, fit, crop or tile mode (`set_fill_color`, `set_stroke_color`, `set_corner_radius`, `set_image_fill`)
  • Every text node in a subtree scanned with chunking for large designs, then rewritten in bulk in a single call (`scan_text_nodes`, `set_text_content`, `set_multiple_text_contents`)
  • Local components and styles listed, instances created, and one instance's overrides extracted and applied to others (`get_local_components`, `get_styles`, `create_component_instance`, `get_instance_overrides`, `set_instance_overrides`)
  • Annotations read and written, singly or in bulk, with nodes findable by type; and prototype reactions turned into FigJam connector lines (`get_annotations`, `set_multiple_annotations`, `scan_nodes_by_types`, `get_reactions`, `set_default_connector`, `create_connections`)
  • Focus and selection driven, so the viewport shows the node under discussion (`set_focus`, `set_selections`)
  • Prompts that carry the sequences worth not improvising — `text_replacement_strategy`, `swap_overrides_instances`, `reaction_to_connector_strategy`, `annotation_conversion_strategy`
Requirements

Npx on your PATH, the Figma plugin installed and running on the document, and a WebSocket server between them. Call `join_channel` first — every other call travels over that channel and nothing works until it has run. Creating connector lines has its own order: `set_default_connector` has to be given a copied FigJam connector before `create_connections` will draw anything.

Setup effort

One command — npx -y cursor-talk-to-figma-mcp