Atlas / MCP servers / arinspunk / Claude Talk to Figma

Claude Talk to FigmaSAFE

mcp/arinspunk/claude-talk-to-figma

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

Verdict
SAFE
Grade
B
Trust score
89 /100
Exposed tools
94 34r · 58w · 2d
Transport
stdio
License
MIT
Stars
665
01

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
Read from source at commit ff1986280e32OBSERVED · 2026-09-28
02

Connect

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-code
claude mcp add talk-to-figma-mcp -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "talk-to-figma-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ]
    }
  }
}
03

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.

ToolRiskDescription
ClaudeTalkToFigmaMCPreadClaude MCP Plugin for Figma
apply_image_transformwriteAdjust image position, scale, and rotation within node. Rotates the IMAGE inside the node, not the node itself.
apply_variable_to_nodewriteBind a variable to a node property in Figma. Call once per field — for multiple fields, call multiple times.
boolean_operationreadPerform a boolean operation (union, subtract, intersect, exclude) on two or more nodes. All nodes must share the same parent.
clone_nodereadClone an existing node in Figma
convert_to_framereadConvert 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_nodewriteConvert an existing node (frame, group, etc.) into a reusable component in Figma
create_component_instancewriteCreate an instance of a component in Figma
create_component_setwriteCreate a component set (variants) from multiple component nodes in Figma
create_connectorwriteCreate 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_stylewriteCreate a reusable effect style (shadows, blurs) in Figma
create_ellipsewriteCreate a new ellipse in Figma
create_framewriteCreate a new frame in Figma
create_pagewriteCreate a new page in the current Figma document
create_paint_stylewriteCreate a reusable color/paint style (SOLID) in Figma
create_polygonwriteCreate a new polygon in Figma
create_rectanglewriteCreate a new rectangle in Figma
create_sectionwriteCreate a FigJam section. Sections are used to group and organise content on the FigJam board. They appear as labelled coloured regions.
create_shape_with_textwriteCreate 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_starwriteCreate a new star in Figma
create_stickywriteCreate a sticky note in a FigJam board. Sticky notes are the primary way to add text content in FigJam.
create_textwriteCreate a new text element in Figma
create_text_stylewriteCreate a reusable text style (typography) in Figma
delete_nodedestructiveDelete a node from Figma
delete_pagedestructiveDelete a page from the current Figma document
detach_instancereadDetach a component instance, converting it into a regular frame. This breaks the link with the main component.
duplicate_pagereadDuplicate an existing page in the Figma document, creating a complete copy of all its contents
export_node_as_imagereadExport a node as an image from Figma
flatten_nodereadFlatten a node in Figma (e.g., for boolean operations or converting to path)
get_annotationreadRead annotations from a node in Figma. Uses the proposed Annotations API.
get_document_inforeadGet detailed information about the current Figma document
get_figjam_elementsreadGet 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_gridreadRead layout grids from a frame node in Figma
get_guidereadRead guides from a page in Figma
get_image_byteswriteDownload image from Figma and save to local file
get_image_from_nodereadExtract image metadata from a node
get_local_componentsreadGet all local components from the Figma document
get_node_inforeadGet detailed information about a specific node in Figma
get_nodes_inforeadGet detailed information about multiple nodes in Figma
get_pagesreadGet all pages in the current Figma document
get_reactionsreadRead all prototype interactions (reactions) from a node in Figma. Useful for debugging and inspecting existing interactions.
get_remote_componentsreadGet available components from team libraries in Figma
get_selectionreadGet information about the current selection in Figma
get_styled_text_segmentsreadGet text segments with specific styling in a text node
get_stylesreadGet all styles from the current Figma document
get_svgreadExport a single node as an SVG string from Figma. Returns the SVG markup including all nested children.
get_variablesreadList all variable collections and their variables in the current Figma file. Returns collections with their modes and variables.
group_nodesreadGroup nodes in Figma
insert_childwriteInsert a child node inside a parent node in Figma
join_channelreadJoin a specific channel to communicate with Figma
load_font_asyncreadLoad a font asynchronously in Figma
move_nodewriteMove a node to a new position in Figma
rename_nodewriteRename a node (frame, component, group, etc.) in Figma
rename_pagewriteRename an existing page in the Figma document
reorder_nodewriteChange 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_fillreadReplace existing image on node with new image while preserving transform
resize_nodereadResize a node in Figma
rotate_nodereadRotate 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_nodesreadScan all text nodes in the selected Figma node
set_annotationwriteAdd an annotation label to a node in Figma. Uses the proposed Annotations API — requires Figma Desktop with enableProposedApi.
set_auto_layoutwriteConfigure auto layout properties for a node in Figma
set_corner_radiuswriteSet the corner radius of a node in Figma
set_current_pagewriteDEPRECATED — this stateful command is blocked by the relay server. Instead, pass the target page
set_effect_style_idwriteApply an effect style to a node in Figma
set_effectswriteSet the visual effects of a node in Figma
set_fill_colorwriteSet 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_namewriteSet the font name and style of a text node in Figma
set_font_sizewriteSet the font size of a text node in Figma
set_font_weightwriteSet the font weight of a text node in Figma
set_gradientwriteSet 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_gridwriteApply layout grids to a frame node in Figma. Supports columns, rows, and grid patterns.
set_guidewriteSet guides on a page in Figma. Replaces all existing guides on the page.
set_imagewriteSet an image fill on a node from base64-encoded image data. Supports PNG, JPEG, GIF, WebP. Max ~5MB after decode.
set_image_fillwriteApply image to node from URL or base64 data
set_image_filterswriteApply color and light adjustments to image fills
set_instance_variantwriteChange the variant properties of a component instance without recreating it. This preserves instance overrides and is more efficient than delete + create workflow.
set_letter_spacingwriteSet the letter spacing of a text node in Figma
set_line_heightwriteSet the line height of a text node in Figma
set_multiple_text_contentswriteSet multiple text contents parallelly in a node
set_node_propertieswriteSet visibility, lock state, and/or opacity of a node in Figma. Only provided properties are changed; omitted properties remain unchanged.
set_paragraph_spacingwriteSet the paragraph spacing of a text node in Figma
set_reactionswriteSet 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_colorswriteRecursively change all stroke and fill colors of a node and all its descendants. Works like Figma
set_sticky_textwriteUpdate the text content of an existing FigJam sticky note.
set_stroke_colorwriteSet the stroke color of a node in Figma (defaults: opacity 1, weight 1)
set_svgwriteImport 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_alignwriteSet the text alignment of a text node in Figma. Use textAlignHorizontal RIGHT for RTL/Arabic text.
set_text_casewriteSet the text case of a text node in Figma
set_text_contentwriteSet the text content of an existing text node in Figma
set_text_decorationwriteSet the text decoration of a text node in Figma
set_text_style_idwriteApply a text style to a text node in Figma
set_variablewriteCreate or update a variable in a Figma variable collection. Creates the collection if collectionName is provided and it doesn
switch_variable_modereadSwitch the variable mode on a node for a specific collection. This changes which mode
ungroup_nodesreadUngroup nodes in Figma
04

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.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (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)

MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete_node, delete_page
Why it matters. 2 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.dxtignore
.dxtignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/fixtures/test-data.ts:1
import { Color, ColorWithDefaults } from '../../src/talk_to_figma_mcp/types/color';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/integration/figjam-tools.test.ts:3
import { registerFigJamTools } from "../../src/talk_to_figma_mcp/tools/figjam-tools";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/integration/figjam-tools.test.ts:5
jest.mock("../../src/talk_to_figma_mcp/utils/websocket", () => ({
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/integration/figjam-tools.test.ts:36
const mockSendCommand: jest.Mock = require("../../src/talk_to_figma_mcp/utils/websocket").sendCommandToFigma;
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/integration/set-fill-color.test.ts:3
import { registerModificationTools } from '../../src/talk_to_figma_mcp/tools/modification-tools';
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, uuid, ws, zod, @anthropic-ai/dxt, @types/bun, @types/jest, bun-types
Why it matters. 12 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
src/talk_to_figma_mcp/package.json
@modelcontextprotocol/sdk, uuid, ws, zod, @types/node, @types/uuid, @types/ws, ts-node
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-09-28 · audit v0.4.1 · source sha ff1986280e32full audit observations/trust-audit/mcp-server/arinspunk__claude-talk-to-figma.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-09-28ff1986280e32SAFEB89first audit
06

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.

Advertisement