figma-mcp-go
Figma MCP — Free, No Rate Limits vkhanhqui/figma-mcp-go server
Open-source Figma MCP server with full read/write access via plugin — no REST API, no rate limits. Turn text into designs and designs into real code. Works with Cursor, Claude, GitHub Copilot, and any MCP-compatible AI tool.
Highlights
No Figma API token required
No rate limits — free plan friendly
Read and Write live Figma data via plugin bridge — 73 tools total
Full design automation — styles, variables, components, prototypes, and content
Design strategies included — read_design_strategy, design_strategy, and more prompts built in
Styles, Variables, Components, Prototypes, and Content
https://github.com/user-attachments/assets/eae41471-fc72-4574-8261-4f42c38b8c99
Text to Design, Design to Code
https://github.com/user-attachments/assets/17bda971-0e83-4f18-8758-8ac2b8dcba62
Why this exists
Most Figma MCP servers rely on the Figma REST API .
That sounds fine… until you hit this:
Plan Limit Starter / View / Collab 6 tool calls/month Pro / Org (Dev seat) 200 tool calls/day Enterprise 600 tool calls/day
If you're experimenting with AI tools, you'll burn through that in minutes.
I didn't have enough money to pay for higher limits.
So I built something that doesn't use the API at all .
Installation & Setup
Install via npx — no build step required. Watch the setup video or follow the steps below.
Claude Code CLI
claude mcp add -s project figma-mcp-go -- npx -y @vkhanhqui/figma-mcp-go@latest
Codex CLI
codex mcp add figma-mcp-go -- npx -y @vkhanhqui/figma-mcp-go@latest
.mcp.json (Claude and other MCP-compatible tools)
{
"mcpServers" : {
"figma-mcp-go" : {
"command" : "npx" ,
"args" : [ "-y" , "@vkhanhqui/figma-mcp-go" ]
}
}
}
.vscode/mcp.json (Cursor / VS Code / GitHub Copilot)
{
"servers" : {
"figma-mcp-go" : {
"type" : "stdio" ,
"command" : "npx" ,
"args" : [
"-y" ,
"@vkhanhqui/figma-mcp-go"
]
}
}
}
2. Install the Figma plugin
In Figma Desktop: Plugins → Development → Import plugin from manifest
Select manifest.json from the plugin.zip
Run the plugin inside any Figma file
Write — Create
Tool Description create_frameCreate a frame with optional auto-layout, fill, and parent create_rectangleCreate a rectangle with optional fill and corner radius create_ellipseCreate an ellipse or circle create_textCreate a text node (font loaded automatically) import_imageDecode base64 image and place it as a rectangle fill create_componentConvert an existing FRAME node into a reusable component create_sectionCreate a Figma Section node to organise frames on a page
Write — Modify
Tool Description set_textUpdate text content of an existing TEXT node set_fillsSet solid fill color (hex) on a node set_strokesSet solid stroke color and weight on a node set_opacitySet opacity of one or more nodes (0 = transparent, 1 = opaque) set_corner_radiusSet corner radius — uniform or per-corner set_auto_layoutSet or update auto-layout (flex) properties on a frame set_visibleShow or hide one or more nodes lock_nodesLock one or more nodes to prevent accidental edits unlock_nodesUnlock one or more nodes rotate_nodesSet absolute rotation in degrees on one or more nodes reorder_nodesChange z-order: bringToFront, sendToBack, bringForward, sendBackward set_blend_modeSet blend mode (MULTIPLY, SCREEN, OVERLAY, …) on one or more nodes set_constraintsSet responsive constraints { horizontal, vertical } on one or more nodes move_nodesMove nodes to an absolute x/y position resize_nodesResize nodes by width and/or height rename_nodeRename a node clone_nodeClone a node, optionally repositioning or reparenting reparent_nodesMove nodes to a different parent frame, group, or section batch_rename_nodesBulk rename nodes via find/replace, regex, or prefix/suffix find_replace_textFind and replace text across all TEXT nodes in a subtree or page; supports regex
Write — Delete
Tool Description delete_nodesDelete one or more nodes permanently
Write — Prototype
Tool Description set_reactionsSet prototype reactions (triggers + actions) on a node; mode replace or append remove_reactionsRemove all or specific reactions by zero-based index from a node
Write — Styles
Tool Description set_effectsApply drop shadow / blur effects directly on a node (no style required) create_paint_styleCreate a named paint style with a solid color create_text_styleCreate a named text style with font, size, and spacing create_effect_styleCreate a named effect style (drop shadow, inner shadow, blur) create_grid_styleCreate a named layout grid style (columns, rows, or grid) update_paint_styleRename or recolor an existing paint style apply_style_to_nodeApply an existing local style to a node, linking it to that style delete_styleDelete any style (paint, text, effect, or grid) by ID
Write — Variables
Tool Description create_variable_collectionCreate a new local variable collection with an optional initial mode add_variable_modeAdd a new mode to an existing collection (e.g. Light/Dark) create_variableCreate a variable (COLOR/FLOAT/STRING/BOOLEAN) in a collection set_variable_valueSet a variable's value for a specific mode bind_variable_to_nodeBind a variable to a node property — supports fillColor, strokeColor, visible, opacity, rotation, width, height, corner radii, spacing, and more delete_variableDelete a variable or an entire collection
Write — Pages
Tool Description add_pageAdd a new page to the document (optional name and index) delete_pageDelete a page by ID or name (cannot delete the only page) rename_pageRename a page by ID or current name
Write — Components & Navigation
Tool Description navigate_to_pageSwitch the active Figma page by ID or name group_nodesGroup two or more nodes into a GROUP ungroup_nodesUngroup GROUP nodes, moving children to the parent swap_componentSwap the main component of an INSTANCE node detach_instanceDetach component instances, converting them to plain frames
Read — Document & Selection
Tool Description get_documentFull current page tree get_metadataFile name, pages, current page get_pagesAll pages (IDs + names) — lightweight, no tree loading get_selectionCurrently selected nodes get_nodeSingle node by ID get_nodes_infoMultiple nodes by ID get_design_contextDepth-limited tree with detail level (minimal/compact/full) search_nodesFind nodes by name substring and/or type within a subtree scan_text_nodesAll text nodes in a subtree scan_nodes_by_typesNodes matching given type list get_viewportCurrent viewport center, zoom, and visible bounds
Read — Styles & Variables
Tool Description get_stylesPaint, text, effect, and grid styles get_variable_defsVariable collections and values get_local_componentsAll components + component sets with variant properties get_annotationsDev-mode annotations get_fontsAll fonts used on the current page, sorted by frequency get_reactionsPrototype/interaction reactions on a node
Export
Tool Description get_screenshotBase64 image export of any node save_screenshotsExport images to disk (server-side, no API call) export_frames_to_pdfExport multiple frames as a single multi-page PDF file saved to disk export_tokensExport design tokens (variables + paint styles) as JSON or CSS
MCP Prompts
Prompt Description read_design_strategyBest practices for reading Figma designs design_strategyBest practices for creating and modifying designs text_replacement_strategyChunked approach for replacing text across a design annotation_conversion_strategyConvert manual annotations to native Figma annotations swap_overrides_instancesTransfer overrides between component instances reaction_to_connector_strategyMap prototype reactions into interaction flow diagrams
Contributing
Issues and PRs are welcome.
Star History
Star History Chart