Claude Talk to FigmaSAFE
A Model Context Protocol (MCP) that allows Claude Desktop and other AI tools (Claude Code, Cursor, Antigravity, etc.) to read, analyze, and modify Figma designs
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Enable your AI agents to read, analyze, and modify Figma designs.
Works with your favorite agentic tools:
👩🏽💻 Who it's for
UX/UI Teams
Automate repetitive design tasks and maintain brand consistency without manual effort:
- Automated accessibility audits - Detect and fix contrast issues in seconds
- Bulk style updates - Change colors, typography, or spacing across the entire document with a single command
- Visual hierarchy analysis - Get instant feedback on your design structure
Developers
Generate production-ready code directly from designs:
- React/Vue/SwiftUI components - From design to code in one step
- Code with design tokens - Keep design and development in sync
- Reduce handoff friction - Fewer back-and-forth iterations with the design team
Key advantage: Unlike Figma's official MCP which requires a Dev Mode license, this MCP works with any Figma account (even free ones).
💡 Real-world use cases
Accessibility:
"Find all text with contrast ratio <4.5:1 and suggest colors that meet WCAG AA"
Rebranding:
"Change #FF6B6B to #E63946 in all primary buttons throughout the document"
Design analysis:
"Analyze the visual hierarchy of this screen and suggest improvements based on design principles"
Developer handoff:
"Generate the React c
ff1986280e32OBSERVED · 2026-09-28Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add talk-to-figma-mcp -- npx -y [email protected]
{
"mcpServers": {
"talk-to-figma-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
]
}
}
}Exposed tools (94)
34 read · 58 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
ClaudeTalkToFigmaMCP | read | Claude MCP Plugin for Figma |
apply_image_transform | write | Adjust image position, scale, and rotation within node. Rotates the IMAGE inside the node, not the node itself. |
apply_variable_to_node | write | Bind a variable to a node property in Figma. Call once per field — for multiple fields, call multiple times. |
boolean_operation | read | Perform a boolean operation (union, subtract, intersect, exclude) on two or more nodes. All nodes must share the same parent. |
clone_node | read | Clone an existing node in Figma |
convert_to_frame | read | Convert a group or shape node into a frame in Figma. Preserves position, size, visual properties, and children. Useful for converting groups into auto-layout-capable frames. |
create_component_from_node | write | Convert an existing node (frame, group, etc.) into a reusable component in Figma |
create_component_instance | write | Create an instance of a component in Figma |
create_component_set | write | Create a component set (variants) from multiple component nodes in Figma |
create_connector | write | Create a connector (arrow or line) in FigJam. Connectors can link two existing nodes by ID, or connect arbitrary canvas positions. Use this to draw flow arrows between stickies, shapes, etc. |
create_effect_style | write | Create a reusable effect style (shadows, blurs) in Figma |
create_ellipse | write | Create a new ellipse in Figma |
create_frame | write | Create a new frame in Figma |
create_page | write | Create a new page in the current Figma document |
create_paint_style | write | Create a reusable color/paint style (SOLID) in Figma |
create_polygon | write | Create a new polygon in Figma |
create_rectangle | write | Create a new rectangle in Figma |
create_section | write | Create a FigJam section. Sections are used to group and organise content on the FigJam board. They appear as labelled coloured regions. |
create_shape_with_text | write | Create a FigJam shape with text inside. Useful for flowcharts, diagrams, and process maps. Supported shapes: SQUARE, ELLIPSE, ROUNDED_RECTANGLE, DIAMOND, TRIANGLE_UP, TRIANGLE_DOWN, PARALLELOGRAM_RIGHT, PARALLELOGRAM_LEFT. |
create_star | write | Create a new star in Figma |
create_sticky | write | Create a sticky note in a FigJam board. Sticky notes are the primary way to add text content in FigJam. |
create_text | write | Create a new text element in Figma |
create_text_style | write | Create a reusable text style (typography) in Figma |
delete_node | destructive | Delete a node from Figma |
delete_page | destructive | Delete a page from the current Figma document |
detach_instance | read | Detach a component instance, converting it into a regular frame. This breaks the link with the main component. |
duplicate_page | read | Duplicate an existing page in the Figma document, creating a complete copy of all its contents |
export_node_as_image | read | Export a node as an image from Figma |
flatten_node | read | Flatten a node in Figma (e.g., for boolean operations or converting to path) |
get_annotation | read | Read annotations from a node in Figma. Uses the proposed Annotations API. |
get_document_info | read | Get detailed information about the current Figma document |
get_figjam_elements | read | Get all FigJam-specific elements (stickies, connectors, shapes with text, sections, stamps) on the current page. Use this to read the contents of a FigJam board. |
get_grid | read | Read layout grids from a frame node in Figma |
get_guide | read | Read guides from a page in Figma |
get_image_bytes | write | Download image from Figma and save to local file |
get_image_from_node | read | Extract image metadata from a node |
get_local_components | read | Get all local components from the Figma document |
get_node_info | read | Get detailed information about a specific node in Figma |
get_nodes_info | read | Get detailed information about multiple nodes in Figma |
get_pages | read | Get all pages in the current Figma document |
get_reactions | read | Read all prototype interactions (reactions) from a node in Figma. Useful for debugging and inspecting existing interactions. |
get_remote_components | read | Get available components from team libraries in Figma |
get_selection | read | Get information about the current selection in Figma |
get_styled_text_segments | read | Get text segments with specific styling in a text node |
get_styles | read | Get all styles from the current Figma document |
get_svg | read | Export a single node as an SVG string from Figma. Returns the SVG markup including all nested children. |
get_variables | read | List all variable collections and their variables in the current Figma file. Returns collections with their modes and variables. |
group_nodes | read | Group nodes in Figma |
insert_child | write | Insert a child node inside a parent node in Figma |
join_channel | read | Join a specific channel to communicate with Figma |
load_font_async | read | Load a font asynchronously in Figma |
move_node | write | Move a node to a new position in Figma |
rename_node | write | Rename a node (frame, component, group, etc.) in Figma |
rename_page | write | Rename an existing page in the Figma document |
reorder_node | write | Change the z-order (layer order) of a node within its parent. Distinct from insert_child which re-parents a node — reorder_node changes position within the same parent. |
replace_image_fill | read | Replace existing image on node with new image while preserving transform |
resize_node | read | Resize a node in Figma |
rotate_node | read | Rotate a node in Figma by a specified angle in degrees (clockwise). Use relative=true to add to the current rotation instead of setting an absolute value. Note: locked nodes can still be rotated — the Plugin API bypasses the UI lock by design. |
scan_text_nodes | read | Scan all text nodes in the selected Figma node |
set_annotation | write | Add an annotation label to a node in Figma. Uses the proposed Annotations API — requires Figma Desktop with enableProposedApi. |
set_auto_layout | write | Configure auto layout properties for a node in Figma |
set_corner_radius | write | Set the corner radius of a node in Figma |
set_current_page | write | DEPRECATED — this stateful command is blocked by the relay server. Instead, pass the target page |
set_effect_style_id | write | Apply an effect style to a node in Figma |
set_effects | write | Set the visual effects of a node in Figma |
set_fill_color | write | Set the fill color of a node in Figma. Alpha component defaults to 1 (fully opaque) if not specified. Use alpha 0 for fully transparent. |
set_font_name | write | Set the font name and style of a text node in Figma |
set_font_size | write | Set the font size of a text node in Figma |
set_font_weight | write | Set the font weight of a text node in Figma |
set_gradient | write | Set a gradient fill on a node in Figma. Supports linear, radial, angular, and diamond gradients. Replaces all existing fills (same behavior as set_fill_color). |
set_grid | write | Apply layout grids to a frame node in Figma. Supports columns, rows, and grid patterns. |
set_guide | write | Set guides on a page in Figma. Replaces all existing guides on the page. |
set_image | write | Set an image fill on a node from base64-encoded image data. Supports PNG, JPEG, GIF, WebP. Max ~5MB after decode. |
set_image_fill | write | Apply image to node from URL or base64 data |
set_image_filters | write | Apply color and light adjustments to image fills |
set_instance_variant | write | Change the variant properties of a component instance without recreating it. This preserves instance overrides and is more efficient than delete + create workflow. |
set_letter_spacing | write | Set the letter spacing of a text node in Figma |
set_line_height | write | Set the line height of a text node in Figma |
set_multiple_text_contents | write | Set multiple text contents parallelly in a node |
set_node_properties | write | Set visibility, lock state, and/or opacity of a node in Figma. Only provided properties are changed; omitted properties remain unchanged. |
set_paragraph_spacing | write | Set the paragraph spacing of a text node in Figma |
set_reactions | write | Set prototype interactions (reactions) on a node in Figma. Use this to add hover effects, click interactions, etc. For component variants, set on the default variant to add |
set_selection_colors | write | Recursively change all stroke and fill colors of a node and all its descendants. Works like Figma |
set_sticky_text | write | Update the text content of an existing FigJam sticky note. |
set_stroke_color | write | Set the stroke color of a node in Figma (defaults: opacity 1, weight 1) |
set_svg | write | Import an SVG string as a vector node in Figma. The SVG is sanitized (scripts and external resources are stripped) before import. Max 500KB. |
set_text_align | write | Set the text alignment of a text node in Figma. Use textAlignHorizontal RIGHT for RTL/Arabic text. |
set_text_case | write | Set the text case of a text node in Figma |
set_text_content | write | Set the text content of an existing text node in Figma |
set_text_decoration | write | Set the text decoration of a text node in Figma |
set_text_style_id | write | Apply a text style to a text node in Figma |
set_variable | write | Create or update a variable in a Figma variable collection. Creates the collection if collectionName is provided and it doesn |
switch_variable_mode | read | Switch the variable mode on a node for a specific collection. This changes which mode |
ungroup_nodes | read | Ungroup nodes in Figma |
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (5 observation(s))
- Shell
- declared (5 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (9)
delete_node, delete_page
.dxtignore
import { Color, ColorWithDefaults } from '../../src/talk_to_figma_mcp/types/color';import { registerFigJamTools } from "../../src/talk_to_figma_mcp/tools/figjam-tools";jest.mock("../../src/talk_to_figma_mcp/utils/websocket", () => ({const mockSendCommand: jest.Mock = require("../../src/talk_to_figma_mcp/utils/websocket").sendCommandToFigma;import { registerModificationTools } from '../../src/talk_to_figma_mcp/tools/modification-tools';@modelcontextprotocol/sdk, uuid, ws, zod, @anthropic-ai/dxt, @types/bun, @types/jest, bun-types
@modelcontextprotocol/sdk, uuid, ws, zod, @types/node, @types/uuid, @types/ws, ts-node
Gates applied: no_behavioural_pass.
ff1986280e32full audit observations/trust-audit/mcp-server/arinspunk__claude-talk-to-figma.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-09-28 | ff1986280e32 | SAFE | B | 89 | first audit |
Questions
What is the Claude Talk to Figma MCP server?
A Model Context Protocol (MCP) that allows Claude Desktop and other AI tools (Claude Code, Cursor, Antigravity, etc.) to read, analyze, and modify Figma designs
What tools does Claude Talk to Figma expose?
94 in total: 34 read-only, 58 that write, and 2 that can delete or overwrite (delete_node, delete_page). Every one is listed on this page with its risk.
Is Claude Talk to Figma safe to connect to an agent?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Claude Talk to Figma need?
No credential environment variables were found in its source, so it appears to need none.
How does Claude Talk to Figma run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as talk-to-figma-mcp at 0.5.1.
How current is this page?
The grade is for one exact copy of the source (ff1986280e32), read on 2026-09-28. The repository is watched and re-audited when it changes.