Read and edit Figma documents from an agent, through a Figma plugin.
- Started in our test
- ★ 7.1K GitHub stars
- 692 downloads a week
- Last commit 26 Jul 2026
At a glance
Where Framelink only reads designs, Talk to Figma can change them: create frames and text, set fills and auto-layout, rename layers and read selections. It works through a Figma plugin that connects to a small WebSocket relay on your machine.
That means three parts to run, so expect a few minutes of setup the first time.
- Made by
- Sonny Lazuardi and contributors
- Latest version
- 0.3.5 (7 Mar 2026)
- npm package
- cursor-talk-to-figma-mcp
- GitHub stars
- 7.1K
- Downloads
- 692 a week
- Last commit
- 26 Jul 2026
- Tools
- 40
- Runs on
- Your computer
Our check: We ran this exact config on 26 Oct 2026: it started and answered with 40 tools.
What's in the pod: its tools
We found 40 tools when we started it on 26 Oct 2026. 10 only read. The rest can change things, so keep your app's "ask before each tool call" setting on for them.
Changes things30 tools · Can create, edit, send or delete.
| Tool | What it is for |
|---|---|
clone_node | Duplicates a layer to a new position. |
create_component_instance | Places an instance of a local or library component. |
create_connections | Draws connector lines between layers in the default connector style. |
create_frame | Adds a frame, with auto layout, padding and colours if you want them. |
create_rectangle | Adds a rectangle. |
create_text | Adds a text layer with font size, weight and colour. |
delete_multiple_nodes | Removes several layers at once. |
delete_node | Removes one layer. |
export_node_as_image | Exports a layer as PNG, JPG, SVG or PDF. |
join_channel | Connects to the plugin's channel. The assistant must do this first. |
move_node | Moves a layer to new coordinates. |
resize_node | Changes a layer's width and height. |
scan_nodes_by_types | Finds child layers of given types inside a layer. |
scan_text_nodes | Finds every text layer inside a layer. |
set_annotation | Adds or edits one annotation, with Markdown. |
set_axis_align | Sets alignment on both axes of an auto layout frame. |
set_corner_radius | Rounds a layer's corners, all or some. |
set_default_connector | Chooses which connector style new connections use. |
set_fill_color | Changes a layer's fill colour. |
set_focus | Selects a layer and scrolls the canvas to it. |
set_instance_overrides | Pastes copied overrides onto other instances. |
set_item_spacing | Sets the gap between items in an auto layout frame. |
set_layout_mode | Turns auto layout on or off and sets direction and wrapping. |
set_layout_sizing | Sets hug, fill or fixed sizing in auto layout. |
set_multiple_annotations | Adds many annotations in one call. |
set_multiple_text_contents | Rewrites many text layers in one call, for bulk copy changes. |
set_padding | Sets padding on an auto layout frame. |
set_selections | Selects several layers and scrolls to show them. |
set_stroke_color | Changes a layer's border colour and weight. |
set_text_content | Rewrites the text of one text layer. |
Only reads10 tools · Looks things up and changes nothing.
| Tool | What it is for |
|---|---|
get_annotations | Reads the annotations in the file or on one layer. |
get_document_info | Describes the open document and its pages. |
get_instance_overrides | Copies the overrides from one component instance. |
get_local_components | Lists the components defined in this file. |
get_node_info | Reads everything about one layer. |
get_nodes_info | Reads several layers at once. |
get_reactions | Reads prototype interactions so they can be turned into connector lines. |
get_selection | Describes what you have selected right now. |
get_styles | Lists the colour, text and effect styles in the file. |
read_my_design | Reads your current selection in full detail. |
Grouped and described by us. The README on GitHub lists the inputs each tool takes.
Set it up
- Start the relay: bunx cursor-talk-to-figma-socket
- Install the Cursor Talk to Figma plugin in Figma and run it; note the channel it shows.
- Add the config below to your client, then ask the assistant to join that channel.
Pick your app for the exact snippet and where it goes.
Where it goes: claude_desktop_config.json (Settings → Developer → Edit Config)
{
"mcpServers": {
"talk-to-figma": {
"command": "npx",
"args": [
"-y",
"cursor-talk-to-figma-mcp@latest"
]
}
}
}Where it goes: Your terminal, in the project folder
claude mcp add-json talk-to-figma '{"command":"npx","args":["-y","cursor-talk-to-figma-mcp@latest"]}'Where it goes: ~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
"mcpServers": {
"talk-to-figma": {
"command": "npx",
"args": [
"-y",
"cursor-talk-to-figma-mcp@latest"
]
}
}
}Where it goes: .vscode/mcp.json in your project
{
"servers": {
"talk-to-figma": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"cursor-talk-to-figma-mcp@latest"
]
}
}
}Where it goes: ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"talk-to-figma": {
"command": "npx",
"args": [
"-y",
"cursor-talk-to-figma-mcp@latest"
]
}
}
}Where it goes: Not supported
ChatGPT only connects to remote servers by URL. This one runs on your computer, so use Claude, Cursor or VS Code.
New to this? See the setup guides for Claude Code, Cursor, Claude Desktop and ChatGPT.
Settings
Names are exactly as the project spells them. Required ones are marked.
| Setting | What it does |
|---|---|
bunx cursor-talk-to-figma-mcpConfig · required | The MCP server itself, started by your app. Needs Bun installed."command": "bunx", "args": ["cursor-talk-to-figma-mcp@latest"] |
bun socketConfig · required | The local WebSocket relay between the server and the Figma plugin. Leave it running in a terminal.bun socket |
Figma pluginConfig · required | The Cursor MCP Plugin inside Figma. Open it in your file and note the channel name it shows.Plugins → Development → Cursor MCP Plugin |
hostname 0.0.0.0Config | Only for Windows with WSL: uncomment this line in src/socket.ts so Figma on Windows can reach the relay.hostname: "0.0.0.0" |
What it can touch
It can read
- The Figma file open in the plugin: layers, styles, components and annotations
It can change
- Creates, edits, moves and deletes layers in that file
- Rewrites text in bulk
Safer setup: Work on a duplicate of the file, or rely on Figma's version history to roll back. Edits happen only while the plugin is open and connected.
Before you start
- The Figma desktop app
- Bun (for the relay)
- Node.js 18 or newer
If it does not work
- The assistant says it is not connected to Figma
- Start bun socket, open the plugin in Figma, then ask the assistant to call join_channel with the channel name the plugin shows.
- bunx: command not found
- Install Bun first (curl -fsSL https://bun.sh/install | bash) and restart your app so it picks up the new PATH.
- Figma on Windows cannot reach the relay running in WSL
- Uncomment hostname 0.0.0.0 in src/socket.ts and restart bun socket.
Peas in a pod: similar servers
How Talk to Figma lines up against other design, 3d and games servers on the shelf.
| Server | Tools | Runs on | Licence | Stars |
|---|---|---|---|---|
| Talk to Figma | 40 | Your computer | – | 7.1K |
| Godot MCP | 14 | Your computer | MIT | 6.4K |
| KiCad MCP | 244 | Your computer | – | 3K |
| MiniMax | 8 | Your computer | MIT | 1.6K |
| Blender MCP | 9 | Your computer | MIT | 32.4K |
Questions
Does Talk to Figma need a Figma API token?
No. It works through a plugin inside the Figma app, so it acts with your own session on the file you have open.
Can it build a whole screen from a prompt?
It can create frames, text and shapes and set auto layout, so simple screens work. Results are best when it reuses your existing components.
Does it only work with Cursor?
The name says Cursor, but it is a standard MCP server, so Claude Desktop, Claude Code and VS Code can use it too.
Something wrong on this page? Tell us.