CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Figma Mcp Go

vkhanhqui/figma-mcp-go
1.1k73 toolsSTDIOregistry active
Summary

This bypasses Figma's REST API rate limits entirely by running a local plugin bridge that exposes 73 read/write operations over stdio. You can create frames, text, and components, bind variables to node properties, set up prototype reactions, manage styles and collections, and even do find-and-replace across text layers. No API token required, which means the free Figma plan works fine. Setup involves adding the server to your MCP config and importing a manifest into Figma Desktop. Best for design automation workflows where you'd otherwise hit the 6 calls per month limit on Starter plans or need programmatic control over layers, auto-layout, and design tokens without dealing with REST quotas.

Install to Claude Code

verified
claude mcp add figma-mcp-go -- npx -y @vkhanhqui/figma-mcp-go

Run in your terminal. Replace YOUR_* placeholders with real values; add --scope user to install for every project.

Review the command, arguments, and environment values before installing — MCP servers run with your local permissions.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

Verified live against the running server on Jun 10, 2026.

verified live73 tools
add_pageAdd a new page to the Figma document.2 params

Add a new page to the Figma document.

Parameters* required
namestring
Name for the new page (default 'Page')
indexnumber
Position index to insert the page (0 = first). Defaults to last position.
add_variable_modeAdd a new mode to an existing variable collection (e.g. Light/Dark, Desktop/Mobile). IMPORTANT — Figma free plan only allows 1 mode per collection; calling this tool on a free-plan account will return the error 'Limited to 1 modes only'. If that error occurs, stop retrying and...2 params

Add a new mode to an existing variable collection (e.g. Light/Dark, Desktop/Mobile). IMPORTANT — Figma free plan only allows 1 mode per collection; calling this tool on a free-plan account will return the error 'Limited to 1 modes only'. If that error occurs, stop retrying and...

Parameters* required
modeName*string
Name for the new mode
collectionId*string
Variable collection ID
apply_style_to_nodeApply an existing local style (paint, text, effect, or grid) to a node, linking the node to that style.3 params

Apply an existing local style (paint, text, effect, or grid) to a node, linking the node to that style.

Parameters* required
nodeId*string
Target node ID in colon format e.g. 4029:12345
targetstring
For paint styles only — apply to 'fill' (default) or 'stroke'
styleId*string
Style ID to apply (from get_styles)
batch_rename_nodesRename multiple nodes using find/replace, regex substitution, or prefix/suffix addition.7 params

Rename multiple nodes using find/replace, regex substitution, or prefix/suffix addition.

Parameters* required
findstring
String (or regex pattern when useRegex=true) to search for in the node name
prefixstring
String to prepend to the node name
suffixstring
String to append to the node name
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
replacestring
Replacement string. Required when find is provided.
useRegexboolean
Treat find as a regular expression (default false)
regexFlagsstring
Regex flags e.g. 'gi' (default 'g'). Only used when useRegex=true.
bind_variable_to_nodeBind a local variable to a node property so the property is driven by the variable's value. COLOR variables: use fillColor or strokeColor. BOOLEAN variables: use visible. FLOAT variables: use opacity, rotation, width, height, cornerRadius, topLeftRadius, topRightRadius, bottom...3 params

Bind a local variable to a node property so the property is driven by the variable's value. COLOR variables: use fillColor or strokeColor. BOOLEAN variables: use visible. FLOAT variables: use opacity, rotation, width, height, cornerRadius, topLeftRadius, topRightRadius, bottom...

Parameters* required
field*string
Property to bind: fillColor | strokeColor | visible | opacity | rotation | width | height | cornerRadius | topLeftRadius | topRightRadius | bottomLeftRadius | bottomRightRadius | strokeWeight | itemSpacing | paddingTop | paddingRight | paddingBottom | paddingLeft
nodeId*string
Target node ID in colon format e.g. 4029:12345
variableId*string
Variable ID to bind (from get_variable_defs)
clone_nodeClone an existing node, optionally repositioning it or placing it in a new parent.4 params

Clone an existing node, optionally repositioning it or placing it in a new parent.

Parameters* required
xnumber
X position of the clone
ynumber
Y position of the clone
nodeId*string
Source node ID in colon format e.g. '4029:12345'
parentIdstring
Parent node ID for the clone. Defaults to same parent as source.
create_componentConvert an existing FRAME node into a reusable COMPONENT. The frame is replaced in place by the new component.2 params

Convert an existing FRAME node into a reusable COMPONENT. The frame is replaced in place by the new component.

Parameters* required
namestring
Optional name for the component. Defaults to the frame's current name.
nodeId*string
FRAME node ID to convert, in colon format e.g. '4029:12345'
create_effect_styleCreate a new local effect style (drop shadow, inner shadow, or blur).9 params

Create a new local effect style (drop shadow, inner shadow, or blur).

Parameters* required
name*string
Style name e.g. 'Shadow/Card'
typestring
Effect type: DROP_SHADOW (default), INNER_SHADOW, LAYER_BLUR, or BACKGROUND_BLUR
colorstring
Shadow color as hex e.g. #000000 (default #000000, shadows only)
radiusnumber
Blur radius in pixels (default 8 for shadows, 4 for blurs)
spreadnumber
Shadow spread in pixels (default 0, shadows only)
offsetXnumber
Shadow X offset in pixels (default 0, shadows only)
offsetYnumber
Shadow Y offset in pixels (default 4, shadows only)
opacitynumber
Shadow color opacity 0–1 (default 0.25, shadows only)
descriptionstring
Optional style description
create_ellipseCreate a new ellipse (circle/oval) on the current page or inside a parent node.7 params

Create a new ellipse (circle/oval) on the current page or inside a parent node.

Parameters* required
xnumber
X position (default 0)
ynumber
Y position (default 0)
namestring
Ellipse name
widthnumber
Width in pixels (default 100)
heightnumber
Height in pixels (default 100)
parentIdstring
Parent node ID in colon format. Defaults to current page.
fillColorstring
Fill color as hex e.g. #3B82F6
create_frameCreate a new frame on the current page or inside a parent node.19 params

Create a new frame on the current page or inside a parent node.

Parameters* required
xnumber
X position (default 0)
ynumber
Y position (default 0)
namestring
Frame name
widthnumber
Width in pixels (default 100)
heightnumber
Height in pixels (default 100)
parentIdstring
Parent node ID in colon format. Defaults to current page.
fillColorstring
Fill color as hex e.g. #FFFFFF
layoutModestring
Auto-layout direction: HORIZONTAL, VERTICAL, or NONE
layoutWrapstring
Wrap behaviour: NO_WRAP or WRAP
paddingTopnumber
Auto-layout top padding
itemSpacingnumber
Auto-layout gap between children
paddingLeftnumber
Auto-layout left padding
paddingRightnumber
Auto-layout right padding
paddingBottomnumber
Auto-layout bottom padding
counterAxisSpacingnumber
Gap between wrapped rows/columns (only when layoutWrap is WRAP)
counterAxisAlignItemsstring
Cross-axis alignment: MIN, CENTER, MAX, or BASELINE
counterAxisSizingModestring
Cross-axis sizing: FIXED or AUTO (hug)
primaryAxisAlignItemsstring
Main-axis alignment: MIN, CENTER, MAX, or SPACE_BETWEEN
primaryAxisSizingModestring
Main-axis sizing: FIXED or AUTO (hug)
create_grid_styleCreate a new local layout grid style.10 params

Create a new local layout grid style.

Parameters* required
name*string
Style name e.g. 'Grid/Desktop'
colorstring
Grid line color as hex e.g. #FF0000 (GRID only, default #FF0000)
countnumber
Number of columns or rows (COLUMNS/ROWS only, default 12)
offsetnumber
Margin/offset in pixels (COLUMNS/ROWS only, default 0)
opacitynumber
Grid line opacity 0–1 (GRID only, default 0.1)
patternstring
Grid pattern: GRID (default), COLUMNS, or ROWS
alignmentstring
Alignment: STRETCH (default), CENTER, MIN, or MAX (COLUMNS/ROWS only)
gutterSizenumber
Gutter size in pixels (COLUMNS/ROWS only, default 16)
descriptionstring
Optional style description
sectionSizenumber
Grid cell size in pixels (GRID only, default 8)
create_paint_styleCreate a new local paint style with a solid fill color.3 params

Create a new local paint style with a solid fill color.

Parameters* required
name*string
Style name e.g. 'Brand/Primary'
color*string
Fill color as hex e.g. #FF5733
descriptionstring
Optional style description
create_rectangleCreate a new rectangle on the current page or inside a parent node.8 params

Create a new rectangle on the current page or inside a parent node.

Parameters* required
xnumber
X position (default 0)
ynumber
Y position (default 0)
namestring
Rectangle name
widthnumber
Width in pixels (default 100)
heightnumber
Height in pixels (default 100)
parentIdstring
Parent node ID in colon format. Defaults to current page.
fillColorstring
Fill color as hex e.g. #FF5733
cornerRadiusnumber
Corner radius in pixels
create_sectionCreate a Figma Section node on the current page. Sections are the modern way to organize frames and groups on a page.5 params

Create a Figma Section node on the current page. Sections are the modern way to organize frames and groups on a page.

Parameters* required
xnumber
X position (default 0)
ynumber
Y position (default 0)
namestring
Section name (default 'Section')
widthnumber
Width in pixels
heightnumber
Height in pixels
create_textCreate a new text node on the current page or inside a parent node. The font is loaded automatically before insertion. Returns the created node ID and bounds. Use set_text to update the content of an existing text node.9 params

Create a new text node on the current page or inside a parent node. The font is loaded automatically before insertion. Returns the created node ID and bounds. Use set_text to update the content of an existing text node.

Parameters* required
xnumber
X position in pixels (default 0)
ynumber
Y position in pixels (default 0)
namestring
Node name shown in the layers panel (defaults to the text content)
text*string
Text content to display
fontSizenumber
Font size in pixels (default 14)
parentIdstring
Parent node ID in colon format. Defaults to current page.
fillColorstring
Text color as hex e.g. #000000 (default black)
fontStylestring
Font style variant e.g. 'Regular', 'Bold', 'Italic', 'Medium', 'SemiBold' (default Regular). Must match an available style for the chosen fontFamily.
fontFamilystring
Font family name e.g. 'Inter', 'Roboto', 'SF Pro Display' (default Inter). Must be a font installed in Figma.
create_text_styleCreate a new local text style (typography preset). Returns the new style's ID. Apply it to nodes with apply_style_to_node. Use get_styles to list existing text styles.10 params

Create a new local text style (typography preset). Returns the new style's ID. Apply it to nodes with apply_style_to_node. Use get_styles to list existing text styles.

Parameters* required
name*string
Style name — use slash notation to organise into groups e.g. 'Heading/H1', 'Body/Regular'
fontSizenumber
Font size in pixels (default 16)
fontStylestring
Font style variant e.g. 'Regular', 'Bold', 'Medium', 'SemiBold' (default Regular)
fontFamilystring
Font family name e.g. 'Inter', 'Roboto' (default Inter). Must be installed in Figma.
descriptionstring
Optional human-readable description shown in the Figma style panel
lineHeightUnitstring
Line height unit: PIXELS (default) or PERCENT
textDecorationstring
Text decoration: NONE (default), UNDERLINE, or STRIKETHROUGH
lineHeightValuenumber
Line height value (unit set by lineHeightUnit)
letterSpacingUnitstring
Letter spacing unit: PIXELS (default) or PERCENT
letterSpacingValuenumber
Letter spacing value (unit set by letterSpacingUnit)
create_variableCreate a new variable (design token) inside an existing collection. Returns the new variable's ID. Use get_variable_defs to find collection IDs, set_variable_value to set values per mode, and bind_variable_to_node to apply the variable to a node property.4 params

Create a new variable (design token) inside an existing collection. Returns the new variable's ID. Use get_variable_defs to find collection IDs, set_variable_value to set values per mode, and bind_variable_to_node to apply the variable to a node property.

Parameters* required
name*string
Variable name — use slash notation to group e.g. 'Color/Primary', 'Spacing/MD'
type*string
Variable type: COLOR (hex color), FLOAT (numeric dimension/spacing), STRING (text), or BOOLEAN (true/false toggle)
valuestring
Initial value for the first mode. COLOR: hex e.g. #FF5733. FLOAT: number e.g. 16. STRING: text. BOOLEAN: true or false.
collectionId*string
ID of the variable collection to add this variable to (from get_variable_defs)
create_variable_collectionCreate a new local variable collection with an optional initial mode name. NOTE — Figma free plan limits each collection to 1 mode. If you need Light/Dark (or any multi-mode) theming and the user is on the free plan, do NOT try to call add_variable_mode; instead use the name-p...2 params

Create a new local variable collection with an optional initial mode name. NOTE — Figma free plan limits each collection to 1 mode. If you need Light/Dark (or any multi-mode) theming and the user is on the free plan, do NOT try to call add_variable_mode; instead use the name-p...

Parameters* required
name*string
Collection name
initialModeNamestring
Name for the initial mode (default 'Mode 1')
delete_nodesDelete one or more nodes. This cannot be undone via MCP — use with care.1 params

Delete one or more nodes. This cannot be undone via MCP — use with care.

Parameters* required
nodeIds*array
Node IDs to delete in colon format e.g. ['4029:12345']
delete_pageDelete a page from the Figma document. Cannot delete the only remaining page.2 params

Delete a page from the Figma document. Cannot delete the only remaining page.

Parameters* required
pageIdstring
Page node ID in colon format e.g. '0:2'
pageNamestring
Exact page name to delete (alternative to pageId)
delete_styleDelete a style (paint, text, effect, or grid) by its ID.1 params

Delete a style (paint, text, effect, or grid) by its ID.

Parameters* required
styleId*string
Style ID to delete
delete_variableDelete a single variable (provide variableId) or an entire collection and all its variables (provide collectionId). Provide exactly one of the two — not both.2 params

Delete a single variable (provide variableId) or an entire collection and all its variables (provide collectionId). Provide exactly one of the two — not both.

Parameters* required
variableIdstring
Variable ID to delete
collectionIdstring
Collection ID to delete (removes all variables in the collection)
detach_instanceDetach one or more component instances, converting them to plain frames. The link to the main component is broken; all visual properties are preserved.1 params

Detach one or more component instances, converting them to plain frames. The link to the main component is broken; all visual properties are preserved.

Parameters* required
nodeIds*array
INSTANCE node IDs in colon format e.g. ['4029:12345']
export_frames_to_pdfExport multiple frames as a single multi-page PDF file. Each frame becomes one page in order. Ideal for pitch decks, proposals, and slide exports.2 params

Export multiple frames as a single multi-page PDF file. Each frame becomes one page in order. Ideal for pitch decks, proposals, and slide exports.

Parameters* required
nodeIds*array
Ordered list of frame node IDs to export as PDF pages, colon format e.g. '4029:12345'
outputPath*string
File path to write the PDF to, must end in .pdf (relative to working directory or absolute)
export_tokensExport all design tokens (variables and paint styles) as JSON or CSS custom properties. Ideal for bridging Figma variables into your codebase.1 params

Export all design tokens (variables and paint styles) as JSON or CSS custom properties. Ideal for bridging Figma variables into your codebase.

Parameters* required
formatstring
Output format: json (default) or css
find_replace_textFind and replace text content across all TEXT nodes in a subtree. Searches the entire current page if no nodeId is given.5 params

Find and replace text content across all TEXT nodes in a subtree. Searches the entire current page if no nodeId is given.

Parameters* required
find*string
Text string (or regex pattern when useRegex=true) to search for
nodeIdstring
Root node ID to scope the search. Defaults to the entire current page.
replace*string
Replacement string (use empty string to delete matches)
useRegexboolean
Treat find as a regular expression (default false)
regexFlagsstring
Regex flags e.g. 'gi' (default 'g'). Only used when useRegex=true.
get_annotationsGet dev-mode annotations in the current document or scoped to a specific node. Returns annotation objects with label text, measurement type, and the ID of the annotated node. Omit nodeId to retrieve all annotations on the current page.1 params

Get dev-mode annotations in the current document or scoped to a specific node. Returns annotation objects with label text, measurement type, and the ID of the annotated node. Omit nodeId to retrieve all annotations on the current page.

Parameters* required
nodeIdstring
Optional — scope results to annotations on this node and its descendants, colon format e.g. '4029:12345'
get_design_contextGet a depth-limited, token-efficient tree of the current selection or page. Use this instead of get_document when exploring large files. Supports detail levels (minimal/compact/full) and dedupe_components for pages heavy with repeated component instances.3 params

Get a depth-limited, token-efficient tree of the current selection or page. Use this instead of get_document when exploring large files. Supports detail levels (minimal/compact/full) and dedupe_components for pages heavy with repeated component instances.

Parameters* required
depthnumber
How many levels deep to traverse (default 2)
detailstring
Property verbosity: minimal (id/name/type/bounds only), compact (+fills/strokes/opacity), full (everything, default)
dedupe_componentsboolean
When true, INSTANCE nodes are serialized compactly (mainComponentId + componentProperties + overrides array of differing text/nested content) and unique component definitions are collected once in a top-level componentDefs map. Highly token-efficient for screens with many repeated component instances.
get_documentGet the full node tree of the current page (not the whole file — only the active page). Returns all nodes recursively and can be very large. Prefer get_design_context for exploration or when token efficiency matters.

Get the full node tree of the current page (not the whole file — only the active page). Returns all nodes recursively and can be very large. Prefer get_design_context for exploration or when token efficiency matters.

No parameters — call it with no arguments.

get_fontsList all fonts used in the current page, sorted by usage frequency. Useful for understanding typography without scanning all text nodes.

List all fonts used in the current page, sorted by usage frequency. Useful for understanding typography without scanning all text nodes.

No parameters — call it with no arguments.

get_local_componentsGet all components defined in the current Figma file.

Get all components defined in the current Figma file.

No parameters — call it with no arguments.

get_metadataGet metadata about the current Figma document: file name, pages, current page

Get metadata about the current Figma document: file name, pages, current page

No parameters — call it with no arguments.

get_nodeGet a single node by ID with full detail. Use get_nodes_info to fetch multiple nodes in one round-trip instead of calling this repeatedly. Node ID must be colon format e.g. '4029:12345', never hyphens.1 params

Get a single node by ID with full detail. Use get_nodes_info to fetch multiple nodes in one round-trip instead of calling this repeatedly. Node ID must be colon format e.g. '4029:12345', never hyphens.

Parameters* required
nodeId*string
Node ID in colon format e.g. '4029:12345'
get_nodes_infoGet full details for multiple nodes by ID in one round-trip. Prefer this over calling get_node repeatedly when you need several nodes.1 params

Get full details for multiple nodes by ID in one round-trip. Prefer this over calling get_node repeatedly when you need several nodes.

Parameters* required
nodeIds*array
List of node IDs in colon format e.g. ['4029:12345', '4029:67890']
get_pagesList all pages in the document with their IDs and names. Lightweight alternative to get_document.

List all pages in the document with their IDs and names. Lightweight alternative to get_document.

No parameters — call it with no arguments.

get_reactionsGet the prototype reactions defined on a node. Returns an array of reaction objects — each has a trigger (e.g. ON_CLICK, ON_HOVER, AFTER_TIMEOUT) and an actions array (navigate to node, open URL, go back, etc.). Use set_reactions to add or replace reactions, remove_reactions t...1 params

Get the prototype reactions defined on a node. Returns an array of reaction objects — each has a trigger (e.g. ON_CLICK, ON_HOVER, AFTER_TIMEOUT) and an actions array (navigate to node, open URL, go back, etc.). Use set_reactions to add or replace reactions, remove_reactions t...

Parameters* required
nodeId*string
Node ID in colon format e.g. '4029:12345'
get_screenshotExport a screenshot of one or more nodes as base64-encoded image data (held in memory). Use save_screenshots instead when you want to write images directly to disk without base64 in the response.3 params

Export a screenshot of one or more nodes as base64-encoded image data (held in memory). Use save_screenshots instead when you want to write images directly to disk without base64 in the response.

Parameters* required
scalenumber
Export scale for raster formats (default 2)
formatstring
Export format: PNG (default), SVG, JPG, or PDF
nodeIdsarray
Optional node IDs to export, colon format. If empty, exports current selection.
get_selectionGet the nodes currently selected in Figma. Returns an empty array if nothing is selected. Use get_design_context or get_node to retrieve deeper detail about a specific node by ID.

Get the nodes currently selected in Figma. Returns an empty array if nothing is selected. Use get_design_context or get_node to retrieve deeper detail about a specific node by ID.

No parameters — call it with no arguments.

get_stylesGet all local styles in the document (paint, text, effect, and grid). Returns each style's ID, name, type, and properties. Use the style ID with apply_style_to_node or update_paint_style. For design tokens (variables), use get_variable_defs instead.

Get all local styles in the document (paint, text, effect, and grid). Returns each style's ID, name, type, and properties. Use the style ID with apply_style_to_node or update_paint_style. For design tokens (variables), use get_variable_defs instead.

No parameters — call it with no arguments.

get_variable_defsGet all local variable definitions: collections, modes, and values. Variables are Figma's design token system.

Get all local variable definitions: collections, modes, and values. Variables are Figma's design token system.

No parameters — call it with no arguments.

get_viewportGet the current Figma viewport: scroll center, zoom level, and visible bounds.

Get the current Figma viewport: scroll center, zoom level, and visible bounds.

No parameters — call it with no arguments.

group_nodesGroup two or more nodes into a GROUP. All nodes must share the same parent.2 params

Group two or more nodes into a GROUP. All nodes must share the same parent.

Parameters* required
namestring
Optional name for the new group
nodeIds*array
Node IDs to group (minimum 2), in colon format e.g. ['4029:12345', '4029:12346']
import_imageImport a base64-encoded image into Figma as a rectangle with an image fill. Use get_screenshot to capture images or provide your own base64 PNG/JPG.8 params

Import a base64-encoded image into Figma as a rectangle with an image fill. Use get_screenshot to capture images or provide your own base64 PNG/JPG.

Parameters* required
xnumber
X position (default 0)
ynumber
Y position (default 0)
namestring
Node name
widthnumber
Width in pixels (default 200)
heightnumber
Height in pixels (default 200)
parentIdstring
Parent node ID in colon format. Defaults to current page.
imageData*string
Base64-encoded image data (PNG or JPG)
scaleModestring
Image scale mode: FILL (default), FIT, CROP, or TILE
lock_nodesLock one or more nodes to prevent accidental edits in Figma.1 params

Lock one or more nodes to prevent accidental edits in Figma.

Parameters* required
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
move_nodesMove one or more nodes to an absolute canvas position. The same x/y is applied to every node independently (not a relative offset from current position).3 params

Move one or more nodes to an absolute canvas position. The same x/y is applied to every node independently (not a relative offset from current position).

Parameters* required
xnumber
Target X position
ynumber
Target Y position
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
navigate_to_pageSwitch the active Figma page. Provide either pageId or pageName.2 params

Switch the active Figma page. Provide either pageId or pageName.

Parameters* required
pageIdstring
Page node ID in colon format e.g. '0:1'
pageNamestring
Exact page name to navigate to
remove_reactionsRemove prototype reactions from a node. Omit indices to remove all reactions. Provide a zero-based indices array to remove specific reactions (use get_reactions first to see current indices).2 params

Remove prototype reactions from a node. Omit indices to remove all reactions. Provide a zero-based indices array to remove specific reactions (use get_reactions first to see current indices).

Parameters* required
nodeId*string
Node ID in colon format e.g. '4029:12345'
indicesarray
Zero-based indices of reactions to remove. Omit or pass [] to remove all.
rename_nodeRename a single node by ID. Returns the updated node with its new name. Use batch_rename_nodes to rename multiple nodes at once or to apply find/replace patterns across many nodes.2 params

Rename a single node by ID. Returns the updated node with its new name. Use batch_rename_nodes to rename multiple nodes at once or to apply find/replace patterns across many nodes.

Parameters* required
name*string
New name for the node. Figma supports slash-separated path notation e.g. 'Icons/Arrow/Left' to organise nodes in component panels.
nodeId*string
Node ID in colon format e.g. '4029:12345'
rename_pageRename an existing page in the Figma document.3 params

Rename an existing page in the Figma document.

Parameters* required
pageIdstring
Page node ID in colon format e.g. '0:2'
newName*string
New name for the page
pageNamestring
Current page name to find (alternative to pageId)
reorder_nodesChange the z-order (layer stack position) of one or more nodes.2 params

Change the z-order (layer stack position) of one or more nodes.

Parameters* required
order*string
Order operation: bringToFront, sendToBack, bringForward, or sendBackward
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
reparent_nodesMove one or more nodes to a different parent frame, group, or section.2 params

Move one or more nodes to a different parent frame, group, or section.

Parameters* required
nodeIds*array
Node IDs to move in colon format e.g. ['4029:12345']
parentId*string
Target parent node ID in colon format e.g. '4029:99'
resize_nodesResize one or more nodes. The same width/height is applied to every node in the list independently. Provide width, height, or both.3 params

Resize one or more nodes. The same width/height is applied to every node in the list independently. Provide width, height, or both.

Parameters* required
widthnumber
New width in pixels
heightnumber
New height in pixels
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
rotate_nodesRotate one or more nodes to an absolute angle in degrees.2 params

Rotate one or more nodes to an absolute angle in degrees.

Parameters* required
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
rotation*number
Rotation angle in degrees (positive = counter-clockwise in Figma)
save_screenshotsExport screenshots for multiple nodes and write them to the local filesystem. Returns file metadata (path, size, dimensions) — no base64 in the response. Use get_screenshot instead when you need the image data in memory.3 params

Export screenshots for multiple nodes and write them to the local filesystem. Returns file metadata (path, size, dimensions) — no base64 in the response. Use get_screenshot instead when you need the image data in memory.

Parameters* required
items*array
List of {nodeId, outputPath, format?, scale?} objects
scalenumber
Default export scale for raster formats (default 2)
formatstring
Default export format: PNG (default), SVG, JPG, or PDF
scan_nodes_by_typesFind all nodes of specific types in a subtree, regardless of name. Use search_nodes instead when you need to filter by name.2 params

Find all nodes of specific types in a subtree, regardless of name. Use search_nodes instead when you need to filter by name.

Parameters* required
types*array
Node types to find e.g. ['FRAME', 'COMPONENT', 'INSTANCE']
nodeId*string
Root node ID to scan from, colon format e.g. '4029:12345'
scan_text_nodesScan all TEXT nodes in a subtree and return their content. Shorthand for scan_nodes_by_types with ['TEXT'] — use when you only need text copy from a component or frame.1 params

Scan all TEXT nodes in a subtree and return their content. Shorthand for scan_nodes_by_types with ['TEXT'] — use when you only need text copy from a component or frame.

Parameters* required
nodeId*string
Root node ID to scan from, colon format e.g. '4029:12345'
search_nodesSearch for nodes by name substring and/or type within a subtree. Use this when you know (part of) the node name. Use scan_nodes_by_types when you want all nodes of a type regardless of name.4 params

Search for nodes by name substring and/or type within a subtree. Use this when you know (part of) the node name. Use scan_nodes_by_types when you want all nodes of a type regardless of name.

Parameters* required
limitnumber
Maximum results to return (default: 50)
query*string
Name substring to match (case-insensitive)
typesarray
Filter by Figma node type e.g. ['TEXT', 'FRAME', 'COMPONENT']
nodeIdstring
Scope search to this subtree (default: current page), colon format e.g. '4029:12345'
set_auto_layoutSet or update auto-layout (flex) properties on an existing frame.13 params

Set or update auto-layout (flex) properties on an existing frame.

Parameters* required
nodeId*string
Frame node ID in colon format e.g. '4029:12345'
layoutModestring
Auto-layout direction: HORIZONTAL, VERTICAL, or NONE
layoutWrapstring
Wrap behaviour: NO_WRAP or WRAP
paddingTopnumber
Top padding
itemSpacingnumber
Gap between children
paddingLeftnumber
Left padding
paddingRightnumber
Right padding
paddingBottomnumber
Bottom padding
counterAxisSpacingnumber
Gap between wrapped rows/columns (only when layoutWrap is WRAP)
counterAxisAlignItemsstring
Cross-axis alignment: MIN, CENTER, MAX, or BASELINE
counterAxisSizingModestring
Cross-axis sizing: FIXED or AUTO (hug)
primaryAxisAlignItemsstring
Main-axis alignment: MIN, CENTER, MAX, or SPACE_BETWEEN
primaryAxisSizingModestring
Main-axis sizing: FIXED or AUTO (hug)
set_blend_modeSet the blend mode of one or more nodes (e.g. MULTIPLY, SCREEN, OVERLAY).2 params

Set the blend mode of one or more nodes (e.g. MULTIPLY, SCREEN, OVERLAY).

Parameters* required
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
blendMode*string
Blend mode: NORMAL, MULTIPLY, SCREEN, OVERLAY, DARKEN, LIGHTEN, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, DIFFERENCE, EXCLUSION, HUE, SATURATION, COLOR, LUMINOSITY, PASS_THROUGH
set_constraintsSet layout constraints (pinning behaviour) on one or more nodes relative to their parent.3 params

Set layout constraints (pinning behaviour) on one or more nodes relative to their parent.

Parameters* required
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
verticalstring
Vertical constraint: MIN (top), MAX (bottom), CENTER, STRETCH, or SCALE
horizontalstring
Horizontal constraint: MIN (left), MAX (right), CENTER, STRETCH, or SCALE
set_corner_radiusSet corner radius on one or more nodes. Provide a uniform cornerRadius or individual per-corner values.6 params

Set corner radius on one or more nodes. Provide a uniform cornerRadius or individual per-corner values.

Parameters* required
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
cornerRadiusnumber
Uniform corner radius applied to all corners
topLeftRadiusnumber
Top-left corner radius
topRightRadiusnumber
Top-right corner radius
bottomLeftRadiusnumber
Bottom-left corner radius
bottomRightRadiusnumber
Bottom-right corner radius
set_effectsApply one or more effects (drop shadow, inner shadow, layer blur, background blur) directly to a node. Replaces all existing effects. Pass an empty array to clear all effects.2 params

Apply one or more effects (drop shadow, inner shadow, layer blur, background blur) directly to a node. Replaces all existing effects. Pass an empty array to clear all effects.

Parameters* required
nodeId*string
Target node ID in colon format e.g. 4029:12345
effects*array
Array of effect objects. Each has: type (DROP_SHADOW | INNER_SHADOW | LAYER_BLUR | BACKGROUND_BLUR), radius, color (hex, shadows only), opacity (0–1, shadows only), offsetX, offsetY (shadows only), spread (shadows only), visible (default true)
set_fillsSet the fill color on a single node (takes one nodeId, not an array). Use mode='append' to stack a new fill on top of existing fills instead of replacing them.4 params

Set the fill color on a single node (takes one nodeId, not an array). Use mode='append' to stack a new fill on top of existing fills instead of replacing them.

Parameters* required
modestring
'replace' (default) overwrites all existing fills; 'append' stacks this fill on top of existing ones
color*string
Fill color as hex: #RRGGBB e.g. #FF5733 or #RRGGBBAA e.g. #FF573380 for 50% alpha
nodeId*string
Node ID in colon format e.g. '4029:12345'
opacitynumber
Fill opacity 0–1 (default 1). Combines multiplicatively with any alpha in the color hex.
set_opacitySet the opacity of one or more nodes (0 = fully transparent, 1 = fully opaque).2 params

Set the opacity of one or more nodes (0 = fully transparent, 1 = fully opaque).

Parameters* required
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
opacity*number
Opacity value between 0 and 1
set_reactionsSet prototype reactions on a node. Use mode "replace" (default) to overwrite all reactions, or "append" to add to existing ones. Supported triggers: ON_CLICK, ON_HOVER, ON_PRESS, ON_DRAG, AFTER_TIMEOUT, MOUSE_ENTER, MOUSE_LEAVE, MOUSE_UP, MOUSE_DOWN Supported action types: NOD...3 params

Set prototype reactions on a node. Use mode "replace" (default) to overwrite all reactions, or "append" to add to existing ones. Supported triggers: ON_CLICK, ON_HOVER, ON_PRESS, ON_DRAG, AFTER_TIMEOUT, MOUSE_ENTER, MOUSE_LEAVE, MOUSE_UP, MOUSE_DOWN Supported action types: NOD...

Parameters* required
modestring
"replace" (default) overwrites all existing reactions; "append" adds to them
nodeId*string
Node ID in colon format e.g. '4029:12345'
reactions*array
Array of reaction objects. Each has a 'trigger' and an 'actions' array (plural) of Action objects.
set_strokesSet the stroke color and weight on a single node (takes one nodeId, not an array). Use mode='append' to stack a new stroke on top of existing strokes instead of replacing them.4 params

Set the stroke color and weight on a single node (takes one nodeId, not an array). Use mode='append' to stack a new stroke on top of existing strokes instead of replacing them.

Parameters* required
modestring
'replace' (default) overwrites all strokes; 'append' stacks on top of existing strokes
color*string
Stroke color as hex e.g. #000000
nodeId*string
Node ID in colon format e.g. '4029:12345'
strokeWeightnumber
Stroke weight in pixels (default 1)
set_textUpdate the text content of an existing TEXT node.2 params

Update the text content of an existing TEXT node.

Parameters* required
text*string
New text content
nodeId*string
TEXT node ID in colon format e.g. '4029:12345'
set_variable_valueSet a variable's value for a specific mode.3 params

Set a variable's value for a specific mode.

Parameters* required
value*string
Value to set. COLOR: hex e.g. #FF5733. FLOAT: number e.g. 16. STRING: text. BOOLEAN: true or false.
modeId*string
Mode ID within the collection
variableId*string
Variable ID
set_visibleShow or hide one or more nodes by setting their visibility.2 params

Show or hide one or more nodes by setting their visibility.

Parameters* required
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
visible*boolean
true to show the node, false to hide it
swap_componentSwap the main component of an existing INSTANCE node, replacing it with a different component while keeping position and size.2 params

Swap the main component of an existing INSTANCE node, replacing it with a different component while keeping position and size.

Parameters* required
nodeId*string
INSTANCE node ID in colon format e.g. 4029:12345
componentId*string
Target COMPONENT node ID in colon format (from get_local_components)
ungroup_nodesUngroup one or more GROUP nodes, moving their children to the parent and removing the group.1 params

Ungroup one or more GROUP nodes, moving their children to the parent and removing the group.

Parameters* required
nodeIds*array
GROUP node IDs in colon format e.g. ['4029:12345']
unlock_nodesUnlock one or more nodes, allowing them to be edited again.1 params

Unlock one or more nodes, allowing them to be edited again.

Parameters* required
nodeIds*array
Node IDs in colon format e.g. ['4029:12345']
update_paint_styleUpdate an existing paint style's name, color, or description. Only paint styles support in-place updates — to modify text, effect, or grid styles, use delete_style and recreate them.4 params

Update an existing paint style's name, color, or description. Only paint styles support in-place updates — to modify text, effect, or grid styles, use delete_style and recreate them.

Parameters* required
namestring
New style name
colorstring
New fill color as hex e.g. #FF5733
styleId*string
Paint style ID
descriptionstring
New style description

figma-mcp-go

Figma MCP — Free, No Rate Limits vkhanhqui/figma-mcp-go server

npm version MCP Registry License: MIT GitHub stars

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:

PlanLimit
Starter / View / Collab6 tool calls/month
Pro / Org (Dev seat)200 tool calls/day
Enterprise600 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.

Watch the video

1. Configure your AI tool

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

  1. In Figma Desktop: Plugins → Development → Import plugin from manifest
  2. Select manifest.json from the plugin.zip
  3. Run the plugin inside any Figma file

Available Tools

Write — Create

ToolDescription
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

ToolDescription
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

ToolDescription
delete_nodesDelete one or more nodes permanently

Write — Prototype

ToolDescription
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

ToolDescription
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

ToolDescription
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

ToolDescription
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

ToolDescription
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

ToolDescription
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

ToolDescription
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

ToolDescription
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

PromptDescription
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

Related Projects

  • magic-spells/figma-mcp-bridge
  • grab/cursor-talk-to-figma-mcp
  • gethopp/figma-mcp-bridge

Contributing

Issues and PRs are welcome.

Star History

Star History Chart
Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Categories
Design & Creative
Registryactive
Package@vkhanhqui/figma-mcp-go
TransportSTDIO
Prompts12
Tools verifiedJun 10, 2026
UpdatedApr 12, 2026
View on GitHub

Related Design & Creative MCP Servers

View all →
HTML to Figma — Design System

miapre/html-to-figma-design-system

Translate HTML prototypes into Figma using your design system's real components and tokens.
3
Illustrator Mcp Server

ie3jp/illustrator-mcp-server

Read, manipulate, and export Adobe Illustrator design data. 26 tools. macOS | Windows.
44
Godot

coding-solo/godot-mcp

MCP server for interfacing with Godot game engine. Provides tools for launching the editor, running projects, and capturing debug output.
3.7k
Unity Mcp

ivanmurzak/unity-mcp

Make 3D games in Unity Engine with AI. MCP Server + Plugin for Unity Editor and Unity games.
3.1k
Excalidraw

yctimlin/mcp_excalidraw

Provides an Excalidraw canvas exposed via MCP for real-time diagramming and element CRUD from AI agents.
1.9k
Figma MCP Server

figma/mcp-server-guide

The Figma MCP server brings Figma design context directly into your AI workflow.
1.6k