Connects Claude to the Figma API and transforms design files into LLM-friendly JSON with CSS-aligned property names. Four tools: get_figma_design pulls node hierarchies with 99.5% size reduction by stripping Figma metadata, get_image_fills extracts asset URLs, render_node_images exports PNGs, and read_vector_svg grabs SVG data. Properties come back as backgroundColor and flexDirection instead of Figma's internal format, inline with each node rather than separate dictionaries. Resolves variables to actual values if you're on Enterprise. Reach for this when you want Claude to generate UI code directly from Figma links without wrestling with raw API responses. Requires a personal access token with file_content:read scope.
Figma To Code MCP specializes in extracting only the information LLMs need to build UIs while removing Figma-specific metadata that isn't relevant for code generation. The result:
Give Cursor and other AI-powered coding tools access to your Figma files with this Model Context Protocol server.
| Tool | Description |
|---|---|
get_figma_design | Fetches CSS-aligned, LLM-optimized design data. Supports SVG export to custom dir. |
get_image_fills | Retrieves image fill URLs from a Figma file |
render_node_images | Renders Figma nodes as PNG images |
read_vector_svg | Reads vector node data as SVG |
Create a Figma personal access token with these scopes:
| Scope | Purpose |
|---|---|
file_content:read | Read file nodes, layout, styles |
library_content:read | Read published components/styles |
file_variables:read | Read variables (Enterprise only, optional) |
Note: Variable resolution requires Enterprise plan. Set
resolveVariables: falseif not on Enterprise.
This MCP server transforms Figma API data into an LLM-friendly format:
backgroundColor, flexDirection, fontSize) instead of Figma internalsSee V2_CSS_PROPERTY_MAPPING.md for complete property mapping details.
Many code editors and other AI clients use a configuration file to manage MCP servers.
The tmegit-figma-to-code-mcp server can be configured by adding the following to your configuration file.
{
"mcpServers": {
"Figma To Code MCP": {
"command": "npx",
"args": ["-y", "@tmegit/figma-to-code-mcp", "--figma-api-key=YOUR-KEY", "--stdio"]
}
}
}
{
"mcpServers": {
"Figma To Code MCP": {
"command": "cmd",
"args": [
"/c",
"npx",
"-y",
"@tmegit/figma-to-code-mcp",
"--figma-api-key=YOUR-KEY",
"--stdio"
]
}
}
}
Or you can set FIGMA_API_KEY and PORT in the env field.
The server reads configuration from CLI flags and environment variables. If both are set, the CLI flag wins.
| Option | CLI | Env | Default |
|---|---|---|---|
| Figma API key | --figma-api-key | FIGMA_API_KEY | required |
| Figma OAuth token | --figma-oauth-token | FIGMA_OAUTH_TOKEN | unset |
| Port | --port | FIGMA_TO_CODE_MCP_PORT or PORT | 3333 |
| Host | --host | FIGMA_TO_CODE_MCP_HOST | 127.0.0.1 |
| Output format | --json | OUTPUT_FORMAT | yaml |
| Skip image tools | --skip-image-downloads | SKIP_IMAGE_DOWNLOADS=true | false |
| SVG output dir | --svg-output-dir | FIGMA_SVG_OUTPUT_DIR | temp dir |
| Prefetch library variables | --library-file-keys | FIGMA_LIBRARY_VARIABLE_PREFETCH_FILE_KEYS | unset |
| Cache path | --library-cache-path | FIGMA_MCP_CACHE_PATH | temp cache file |
| Cache TTL | n/a | FIGMA_MCP_CACHE_TTL_MS | 7 days |
| Force cache refresh | n/a | FIGMA_MCP_REFRESH_CACHE | off |
Notes:
--library-file-keys and FIGMA_LIBRARY_VARIABLE_PREFETCH_FILE_KEYS are comma-separated Figma library file keys.FIGMA_MCP_CACHE_PATH may point to either a file or a directory. If it is a directory, the cache file is stored as figma-mcp-library-cache.json inside it.FIGMA_MCP_REFRESH_CACHE forces a re-fetch on startup even if a cache file exists.Example .env:
FIGMA_API_KEY=your_figma_pat
# prefetch variables (tokens etc) from specific library files on startup to avoid T2 calls during design fetch
FIGMA_LIBRARY_VARIABLE_PREFETCH_FILE_KEYS=abc123,def456
FIGMA_MCP_CACHE_PATH=./cache
FIGMA_MCP_CACHE_TTL_MS=604800000
# Uncomment to force cache refresh on next startup
# FIGMA_MCP_REFRESH_CACHE=1
One execution of get_figma_design makes the following API calls:
| Call | Endpoint | Tier | Description |
|---|---|---|---|
| 1 | GET /v1/files/{fileKey}/nodes | T1 | Fetch requested nodes (geometry=paths) |
| 2 | GET /v1/files/{fileKey}/styles | T3 | Fetch all styles |
| 3 | GET /v1/files/{fileKey}/variables/local | T2 | Fetch local variables (if resolveVariables=true) |
| 4 | GET /v1/components/{key} | T3 | Resolve component key → library file (up to 3 tries) |
| 5 | GET /v1/files/{libFileKey}/components | T3 | Fetch all components from library |
| 6+ | GET /v1/files/{libFileKey}/nodes | T1 | Fetch component definitions from each library |
Amount of T1 calls: 1 + N (N=number of unique library files) Amount of T2 calls: 1 (if resolveVariables=true) Amount of T3 calls: 2 + N (styles + component key resolution + N library components)
For Professional plan with Dev/Full seat: 10 req/min (Tier 1), 25 req/min (Tier 2), 50 req/min (Tier 3).
This project was initially inspired by the ideas explored in the original Figma Context MCP by GLips: https://github.com/glips/figma-context-mcp
While the original project provides a Model Context Protocol (MCP) server that simplifies Figma data for use with AI coding agents, this implementation has been substantially redesigned with a different data model, API, and processing approach, and should be considered an independent system.
FIGMA_API_KEY*secretYour Figma Personal Access Token, learn more here: https://www.figma.com/developers/api#access-tokens
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent