figma-mcp-but-free
v0.4.1
Published
Figma MCP server — free, no rate limits, full read/write via plugin bridge
Maintainers
Readme
Figma MCP Server
A Model Context Protocol (MCP) server that bridges Claude to Figma via WebSocket. Read and modify Figma designs programmatically through natural language.
Architecture
- MCP Server (
src/index.ts) — Registers tools and prompts, communicates via WebSocket bridge - Bridge (
src/bridge.ts) — WebSocket connection manager with request tracking and timeout handling - Tools (
src/tools/) — 40+ MCP tools organized into read, write-create, write-modify, write-other, export, and meta modules - Figma Plugin (
plugin/) — Runs inside Figma, executes operations on the canvas, sends results back
Setup
Install dependencies:
bun installBuild the server:
bun run buildRegister the MCP server in your client.
A ready-to-use workspace config is included at
.vscode/mcp.json.Use one of these launch modes:
- Local build:
node /absolute/path/to/dist/index.js - NPX package:
npx -y figma-mcp-but-free
VS Code (
.vscode/mcp.jsonor user MCP config):{ "servers": { "figma-mcp-but-free": { "type": "stdio", "command": "npx", "args": ["-y", "figma-mcp-but-free"] } } }Claude Desktop (
~/Library/Application Support/Claude/claude_desktop_config.json):{ "mcpServers": { "figma-mcp-but-free": { "command": "npx", "args": ["-y", "figma-mcp-but-free"] } } }If you are running from a local checkout instead of an npm package, keep using
nodewith the absolutedist/index.jspath.Optional: set
FIGMA_BRIDGE_PORTif you need a non-default port.- Local build:
Install the Figma plugin:
- Open Figma → Plugins → Development → Import plugin from manifest
- Select
plugin/manifest.json
Start the MCP server:
bun run startRun the Figma plugin and connect it to the WebSocket bridge (default:
ws://127.0.0.1:1994)
Tools
Read Tools
get_document— Get the full Figma document treeget_metadata— Get file name, pages, and current page infoget_pages— List all pages in the Figma fileget_selection— Get currently selected nodesget_node— Get a single node by IDget_nodes_info— Get multiple nodes by IDsget_design_context— Get node context with configurable depthsearch_nodes— Search nodes by name and typescan_text_nodes— Find all text nodes in a subtreescan_nodes_by_types— Find nodes matching specific typesget_viewport— Get current viewport stateget_styles— Get local paint, text, effect, and grid stylesget_variable_defs— Get variable definitionsget_local_components— Get local componentsget_annotations— Get node annotationsget_fonts— Get font usage statisticsget_reactions— Get prototype reactionsget_screenshot— Take a screenshot as base64export_tokens— Export design tokens as JSON or CSS
Write Tools
create_frame,create_rectangle,create_ellipse,create_text,create_component_instance,create_sectionset_text,set_fills,set_strokes,set_opacity,set_visibility,set_dimensions,set_rotation,set_auto_layout,set_corner_radius,set_effectscreate_paint_style,create_text_style,create_effect_style,create_grid_style,apply_stylecreate_variable,set_variable_valueadd_reaction,set_navigation,set_overlaycreate_page,navigate_to_pagegroup_nodes,ungroup_node,swap_component,detach_instancedelete_node,move_node
Export Tools
save_screenshots— Save screenshots of multiple nodesexport_frames_to_pdf— Export frames as PDF
Meta Tools
get_connection_status— Check WebSocket connection statusbatch— Execute multiple tool calls in one request
License
MIT
