Loading...
Loading...
Automate Figma designs with AI using MCP server - no API limits, full read/write via plugin bridge
npx skill4agent add aradotso/design-skills figma-mcp-go-design-automationSkill by ara.so — Design Skills collection
figma-mcp-gonpxclaude mcp add -s project figma-mcp-go -- npx -y @vkhanhqui/figma-mcp-go@latest.vscode/mcp.json{
"servers": {
"figma-mcp-go": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@vkhanhqui/figma-mcp-go"]
}
}
}.mcp.json{
"mcpServers": {
"figma-mcp-go": {
"command": "npx",
"args": ["-y", "@vkhanhqui/figma-mcp-go"]
}
}
}plugin.zipmanifest.jsoncreate_framecreate_rectanglecreate_textcreate_componentset_textset_fillsset_auto_layoutresize_nodesdelete_nodesdelete_pagedelete_styleget_documentget_selectionget_stylesget_variable_defsget_screenshotsave_screenshotsexport_frames_to_pdfexport_tokensset_reactionsremove_reactionscreate_variable_collectionbind_variable_to_nodeget_selectionget_documentsearch_nodesget_design_context// Get current page context
const context = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "get_metadata",
arguments: {}
});
// Create a parent frame
const frame = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "create_frame",
arguments: {
name: "Hero Section",
x: 100,
y: 100,
width: 1200,
height: 600,
fills: [{type: "SOLID", color: {r: 0.95, g: 0.95, b: 0.95}}],
autoLayout: {
mode: "VERTICAL",
primaryAxisAlignItems: "CENTER",
counterAxisAlignItems: "CENTER",
paddingTop: 40,
paddingBottom: 40,
paddingLeft: 60,
paddingRight: 60,
itemSpacing: 24
}
}
});
// Add text inside
const title = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "create_text",
arguments: {
characters: "Welcome to Our Platform",
x: 0,
y: 0,
parentId: frame.nodeId,
fontSize: 48,
fontWeight: "Bold"
}
});// Find all text nodes
const textNodes = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "scan_text_nodes",
arguments: {
rootNodeId: "parentFrameId"
}
});
// Replace placeholder text
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "find_replace_text",
arguments: {
rootNodeId: "parentFrameId",
findText: "{{product_name}}",
replaceWith: "Acme Widget Pro",
useRegex: false,
caseSensitive: false
}
});// Get available styles
const styles = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "get_styles",
arguments: {}
});
// Create a paint style
const primaryColor = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "create_paint_style",
arguments: {
name: "Primary/500",
color: "#3B82F6"
}
});
// Apply to nodes
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "apply_style_to_node",
arguments: {
nodeId: "buttonNodeId",
styleId: primaryColor.styleId,
styleType: "FILL"
}
});// Create a variable collection for theming
const collection = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "create_variable_collection",
arguments: {
name: "Theme",
initialModeName: "Light"
}
});
// Add Dark mode
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "add_variable_mode",
arguments: {
collectionId: collection.collectionId,
modeName: "Dark"
}
});
// Create a color variable
const bgColor = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "create_variable",
arguments: {
collectionId: collection.collectionId,
name: "Background",
resolvedType: "COLOR"
}
});
// Set values for both modes
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "set_variable_value",
arguments: {
variableId: bgColor.variableId,
modeId: "Light",
value: {r: 1, g: 1, b: 1}
}
});
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "set_variable_value",
arguments: {
variableId: bgColor.variableId,
modeId: "Dark",
value: {r: 0.1, g: 0.1, b: 0.1}
}
});
// Bind to a frame
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "bind_variable_to_node",
arguments: {
nodeId: "frameNodeId",
variableId: bgColor.variableId,
field: "fillColor"
}
});// Export a single frame as screenshot
const screenshot = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "get_screenshot",
arguments: {
nodeId: "frameNodeId",
format: "PNG",
scale: 2
}
});
// Returns base64-encoded image
// Save multiple frames to disk
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "save_screenshots",
arguments: {
nodeIds: ["frame1", "frame2", "frame3"],
format: "PNG",
scale: 2,
outputDir: "/path/to/exports"
}
});
// Export frames as PDF
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "export_frames_to_pdf",
arguments: {
frameIds: ["frame1", "frame2"],
outputPath: "/path/to/design.pdf"
}
});
// Export design tokens
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "export_tokens",
arguments: {
format: "JSON",
outputPath: "/path/to/tokens.json"
}
});// Add a click reaction to navigate to another frame
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "set_reactions",
arguments: {
nodeId: "buttonNodeId",
reactions: [{
trigger: {type: "ON_CLICK"},
action: {
type: "NODE",
destinationId: "targetFrameId",
navigation: "NAVIGATE",
transition: {
type: "DISSOLVE",
duration: 0.3,
easing: {type: "EASE_IN_OUT"}
}
}
}],
mode: "replace"
}
});
// Get existing reactions
const reactions = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "get_reactions",
arguments: {
nodeId: "buttonNodeId"
}
});// Convert a frame to a component
const component = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "create_component",
arguments: {
frameNodeId: "frameToConvert"
}
});
// Get all local components
const components = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "get_local_components",
arguments: {}
});
// Swap an instance to use a different component
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "swap_component",
arguments: {
instanceNodeId: "instanceId",
newComponentId: "newComponentId"
}
});
// Detach instance to plain frame
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "detach_instance",
arguments: {
instanceNodeIds: ["instance1", "instance2"]
}
});// Get best practices for reading designs
const readStrategy = await get_prompt({
server_name: "figma-mcp-go",
prompt_name: "read_design_strategy"
});
// Get best practices for creating designs
const designStrategy = await get_prompt({
server_name: "figma-mcp-go",
prompt_name: "design_strategy"
});
// Chunked text replacement strategy
const textStrategy = await get_prompt({
server_name: "figma-mcp-go",
prompt_name: "text_replacement_strategy"
});await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "set_auto_layout",
arguments: {
nodeId: "frameId",
mode: "HORIZONTAL",
primaryAxisAlignItems: "SPACE_BETWEEN",
counterAxisAlignItems: "CENTER",
paddingTop: 16,
paddingBottom: 16,
paddingLeft: 24,
paddingRight: 24,
itemSpacing: 12,
primaryAxisSizingMode: "AUTO",
counterAxisSizingMode: "FIXED"
}
});await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "set_constraints",
arguments: {
nodeIds: ["childNodeId"],
constraints: {
horizontal: "STRETCH",
vertical: "MIN"
}
}
});// Set blend mode
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "set_blend_mode",
arguments: {
nodeIds: ["overlayNodeId"],
blendMode: "MULTIPLY"
}
});
// Add drop shadow
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "set_effects",
arguments: {
nodeId: "cardNodeId",
effects: [{
type: "DROP_SHADOW",
color: {r: 0, g: 0, b: 0, a: 0.1},
offset: {x: 0, y: 4},
radius: 8,
visible: true
}]
}
});// Rename multiple nodes with find/replace
await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "batch_rename_nodes",
arguments: {
nodeIds: ["node1", "node2", "node3"],
operation: "findReplace",
findText: "old",
replaceWith: "new"
}
});
// Clone and reposition
const clones = await use_mcp_tool({
server_name: "figma-mcp-go",
tool_name: "clone_node",
arguments: {
nodeId: "sourceNodeId",
count: 5,
offsetX: 20,
offsetY: 20
}
});get_selectionsearch_nodesnavigate_to_pageget_fontsfontFamily: "Inter""Roboto"save_screenshotsexport_frames_to_pdf/Users/username/exports/~/exports/C:/Users/username/exports/set_auto_layoutmode"HORIZONTAL""VERTICAL"primaryAxisSizingModeget_metadataget_design_contextsearch_nodesget_selectionread_design_strategydesign_strategyset_fillsresize_nodesget_screenshotbind_variable_to_nodeset_fills| Use Case | Recommended Tools |
|---|---|
| Get started | |
| Create layouts | |
| Add content | |
| Modify designs | |
| Design system | |
| Prototyping | |
| Export | |
| Search/navigate | |
| Batch edits | |