Figma Console MCP
Read and edit Figma designs, variables and components, and sync design tokens with code
Two-way Figma bridge: read selections for codegen and build or edit designs on the canvas
By Roya (individual) JavaScript Local · stdio DesignDeveloper tools
62 popularity score ★ 1.3k ↓ 1.7k/wk
Opens the app, which asks before it adds the server.
claude mcp add figwright -- npx -y @figwright/mcp@latest{
"mcpServers": {
"figwright": {
"command": "npx",
"args": [
"-y",
"@figwright/mcp@latest"
]
}
}
}{
"mcpServers": {
"figwright": {
"command": "npx",
"args": [
"-y",
"@figwright/mcp@latest"
]
}
}
}{
"servers": {
"figwright": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@figwright/mcp@latest"
]
}
}
}[mcp_servers.figwright]
command = "npx"
args = ["-y", "@figwright/mcp@latest"]gemini mcp add --scope user figwright npx -- -y @figwright/mcp@latestFIGWRIGHT_ALLOW_ANY_ORIGIN |
Optional: Set to 1 to lift the relay's Origin check if Figma's plugin host is refused. The Host check stays. Meant as a stopgap to report, not to leave set. |
|---|
Figwright links an MCP client to a Figma plugin you import yourself. The npm package @figwright/mcp is the server: your client starts it over stdio, and it passes tool calls over a WebSocket on 127.0.0.1:3055 to the plugin running inside Figma. Because the plugin goes through Figma's public Plugin API, you need neither a Dev Mode seat nor a Figma API token.
Calls go both ways. Read tools inspect the selection and any node, along with styles, variables, components, fonts, prototype reactions and Motion state. They also render screenshots. Export tools save screenshots, image fills, PDFs and videos (MP4, GIF, WebM) to disk. The grounding tools scan your local codebase and match Figma data against what your code already defines, and design_diff compares a design with a saved baseline so only the affected code needs to change. On the write side you can build and edit almost anything on the canvas, from frames and auto-layout to variables, components, prototype flows and Motion keyframes. Version 0.7.0 added Figma Draw (vector paths, repeat groups, text on a path, brush strokes, pattern fills and more), plus importing team library variables and styles by key, switching a frame's variable mode, and putting an image into an existing layer's fill. A batch tool applies a group of writes together or rolls them all back.
When several clients run at once, their server processes elect a leader that holds the plugin connection and the rest forward calls to it. list_files and use_file let each agent claim its own open file. Without a claim, calls go to whichever file you touched last.
At the v0.7.0 tag the tool registry holds 135 tools, the same count the README now gives. It wraps every tool's input in a strict schema, so an argument a tool does not declare is refused rather than silently dropped. The server also serves two prompts, figma_to_code and code_to_figma, for clients that lack the project's skills.
| Runtime | Node.js 20.19+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Figma | FreeFree plan is enough. The desktop app is needed once to import the plugin. |
| Also |
|
Node.js 20.19+ or 22.12+ (package engines: ^20.19.0 || >=22.12.0). Node 18, 21 and 22.0 to 22.11 are not supported. The plugin is not on the Figma Community: download the zip from the latest GitHub release and import its manifest.json in the Figma desktop app (Plugins > Development > Import plugin from manifest). Open the plugin in each session so it can connect. To update, restart the server and copy the new release's manifest.json and dist over the old plugin folder.
Suits developers on a free Figma plan who want an assistant to turn frames into code that reuses their own components and tokens, or to build and edit screens in Figma from a spec. Everything runs on your machine, and you need the desktop app once to import the plugin. It is a one-person, non-official project, and it has to keep a plugin window open in Figma. If you would rather not import a plugin by hand or keep a plugin window open, choose a server that reads Figma through its REST API instead.
25 only read, 34 change things, 1 can delete or overwrite.
pingget_selectionget_documentget_nodeget_nodes_infoget_metadataget_pagessearch_nodesget_stylesget_variable_defsget_local_componentsget_component_apiget_fontsget_reactionsget_node_motionlist_filesuse_fileget_design_contextget_screenshotsave_screenshots changessave_image_fills changesexport_pdf changesexport_video changesanalyze_projectscan_componentscomponent_maptoken_mapicon_mapdesign_diffcreate_frame changescreate_text changesset_text changesset_fills changesset_strokes changescreate_shape changesboolean_nodes changescreate_vector changesset_vector changesrepeat_nodes changescreate_text_path changesset_complex_stroke changesset_auto_layout changesalign_nodes changesset_effects changescreate_paint_style changesapply_style_to_node changesimport_style changescreate_variable changesset_variable_value changesbind_variable_to_node changesimport_variable changesset_node_variable_mode changescreate_component changescreate_instance changesset_reactions changesimport_image changesset_image_fill changesapply_animation_style changesdelete_nodes deletesbatch changesfigma_to_codecode_to_figma