Cursor Talk to Figma
SAFEgrade B · trust 89/100TalkToFigma: MCP integration between AI Agent (Cursor, Claude Code, Codex) and Figma, allowing Agentic AI to communicate with Figma for reading designs and modifying them programmatically.
agentagenticagentic aiaiai agentsautomationclaude codecodexOverview
From the repository's own README, as read at the audited commit.
# Talk to Figma MCPThis project implements a Model Context Protocol (MCP) integration between AI agent (Cursor, Claude Code) and Figma, allowing AI agent to communicate with Figma for reading designs and modifying them programmatically.https://github.com/user-attachments/assets/129a14d2-ed73-470f-9a4c-2240b2a4885c## Project Structure- `src/talk_to_figma_mcp/` - TypeScript MCP server for Figma integration- `src/cursor_mcp_plugin/` - Figma plugin for communicating with Cursor- `src/socket.ts` - WebSocket server that facilitates communication between the MCP server and Figma plugin## How to use1. Install Bun if you haven't already:```bashcurl -fsSL https://bun.sh/install | bash```2. Run setup, this will also install MCP in your Cursor's active project```bashbun setup```3. Start the Websocket server```bashbun socket```4. **NEW** Install Figma plugin from [Figma community page](https://www.figma.com/community/plugin/1485687494525374295/cursor-talk-to-figma-mcp-plugin) or [install locally](#figma-plugin)## Quick Video Tutorial[Video Link](https://www.linkedin.com/posts/sonnylazuardi_just-wanted-to-share-my-latest-experiment-activity-7307821553654657024-yrh8)## Design Automation Example**Bulk text content replacement**Thanks to [@dusskapark](https://github.com/dusskapark) for contributing the bulk text replacement feature. Here is the [demo video](https://www.youtube.com/watch?v=j05gGT3xfCs).**Instance Override Propagation**Another contribution from [@dusskapark](https://github.com/dusskapark)Propagate component instance overrides from a source instance to multiple target instances with a single command. This feature dramatically reduces repetitive design work when working with component instances that need similar customizations. Check out our [demo video](https://youtu.be/uvuT8LByroI).## Manual Setup and Installation### MCP Server: Integration with CursorAdd the server to your Cursor MCP configuration in `~/.cursor/mcp.json`:```json{ "mcpServers": { "TalkToFigma": { 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 mcp add talk-to-figma-mcp -- npx -y [email protected]
{
"mcpServers": {
"talk-to-figma-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
]
}
}
}Exposed tools (44) 16 read · 26 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 |
|---|---|---|
clone_node | read | Clone an existing node in Figma |
create_component_instance | write | Create an instance of a component in Figma. For LOCAL components (from get_local_components), use componentId with the id field. For published LIBRARY components, use componentKey with the publishedKey field. |
create_connections | write | Create connections between nodes using the default connector style |
create_frame | write | Create a new frame in Figma |
create_rectangle | write | Create a new rectangle in Figma |
create_section | write | Create a section in Figma to group related content on the canvas |
create_text | write | Create a new text element in Figma |
delete_multiple_nodes | destructive | Delete multiple nodes from Figma at once |
delete_node | destructive | Delete a node from Figma |
export_node_as_image | read | Export a node as an image from Figma |
get_annotations | read | Get all annotations in the current document or specific node |
get_document_info | read | Get detailed information about the current Figma document |
get_instance_overrides | read | Get all override properties from a selected component instance. These overrides can be applied to other instances, which will swap them to match the source component. |
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_reactions | read | Get Figma Prototyping Reactions from multiple nodes. CRITICAL: The output MUST be processed using the |
get_selection | read | Get information about the current selection in Figma |
get_styles | read | Get all styles from the current Figma document |
join_channel | read | Join a specific channel to communicate with Figma |
move_node | write | Move a node to a new position in Figma |
read_my_design | read | Get detailed information about the current selection in Figma, including all node details |
rename_node | write | Rename a node in Figma |
resize_node | read | Resize a node in Figma |
scan_nodes_by_types | read | Scan for child nodes with specific types in the selected Figma node |
scan_text_nodes | read | Scan all text nodes in the selected Figma node |
set_annotation | write | Create or update an annotation |
set_axis_align | write | Set primary and counter axis alignment for an auto-layout frame in Figma |
set_corner_radius | write | Set the corner radius of a node in Figma |
set_default_connector | write | Set a copied connector node as the default connector |
set_fill_color | write | Set the fill color of a node in Figma can be TextNode or FrameNode |
set_focus | write | Set focus on a specific node in Figma by selecting it and scrolling viewport to it |
set_image_fill | write | Fill a node in Figma with an image from a local file path, a URL, or base64 data (replaces the node |
set_instance_overrides | write | Apply previously copied overrides to selected component instances. Target instances will be swapped to the source component and all copied override properties will be applied. |
set_item_spacing | write | Set distance between children in an auto-layout frame |
set_layout_mode | write | Set the layout mode and wrap behavior of a frame in Figma |
set_layout_sizing | write | Set horizontal and vertical sizing modes for an auto-layout frame in Figma |
set_multiple_annotations | write | Set multiple annotations parallelly in a node |
set_multiple_text_contents | write | Set multiple text contents parallelly in a node |
set_padding | write | Set padding values for an auto-layout frame in Figma |
set_parent | write | Move a node into a new parent node (e.g. a section, frame or group). Preserves the node |
set_selections | write | Set selection to multiple nodes in Figma and scroll viewport to show them |
set_stroke_color | write | Set the stroke color of a node in Figma |
set_text_content | write | Set the text content of an existing text node in Figma |
Details
- Source
- grab/cursor-talk-to-figma-mcp
- npm
talk-to-figma-mcp@1.0.0- Transports
- stdio
- License
- MIT
- Stars
- 7,009 · pushed 49d ago
Trust audit
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
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (7)
delete_multiple_nodes, delete_node
uuid, ws, @types/bun, bun-types, tsup, typescript
uuid, ws, @types/node, @types/uuid, @types/ws, ts-node, typescript
curl -fsSL https://bun.sh/install | bash
curl -fsSL https://bun.sh/install | bash
[ "$SUDO_AVAILABLE" = "YES" ] && cd ~/Desktop && git clone https://github.com/sonnylazuardi/cursor-talk-to-figma-mcp.git && cd cursor-talk-to-figma-mcp && curl -fsSL https://bun.sh/install | bash && s
curl -fsSL https://bun.sh/install | bash
Gates applied: no_behavioural_pass.
Audited 2026-09-13 · audit v0.4.0 · source sha 3b14afdfa9c1 · full audit: observations/trust-audit/mcp-server/grab__cursor-talk-to-figma-4.json · Report an issue or request a re-scan
Audit history
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-09-13 | 3b14afdfa9c1 | SAFE | B | 89 | first audit |
Alternatives
Other servers in the same categories, safer ones first.
Questions
What is the Cursor Talk to Figma MCP server?
TalkToFigma: MCP integration between AI Agent (Cursor, Claude Code, Codex) and Figma, allowing Agentic AI to communicate with Figma for reading designs and modifying them programmatically.
What tools does Cursor Talk to Figma expose?
44 in total: 16 read-only, 26 that write, and 2 that can delete or overwrite (delete_multiple_nodes, delete_node). Every one is listed on this page with its risk.
Is Cursor 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 Cursor Talk to Figma need?
No credential environment variables were found in its source, so it appears to need none.
How does Cursor 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 1.0.0.
How current is this page?
The grade is for one exact copy of the source (3b14afdfa9c1), read on 2026-09-13. The repository is watched and re-audited when it changes.
Provenance: OBSERVED · read 2026-09-13 · job trust-audit-2026-09-13