Skip to main content
MCP server CX Codex

Figma MCP — Claude Code MCP server: frames to PNG and JSON

A Figma REST API server with two tools: list a file's top-level frames, or pull one frame down as PNG plus node JSON. Useful when the agent needs the actual design file.

Install into Claude Code · Platform CLI All methods and platforms ↓
claude mcp add --env FIGMA_TOKEN=<FIGMA_TOKEN> --env FIGMA_API_BASE_URL=<FIGMA_API_BASE_URL> --env FIGMA_REQUEST_TIMEOUT_MS=<FIGMA_REQUEST_TIMEOUT_MS> --env FIGMA_MAX_JSON_BYTES=<FIGMA_MAX_JSON_BYTES> --env FIGMA_MAX_FRAME_BYTES=<FIGMA_MAX_FRAME_BYTES> --transport stdio figma-mcp -- npx -y @scalably-io/figma-mcp
Open on GitHub

What Figma MCP does

The server exposes list_frames and fetch_frame. The first walks the top-level FRAME nodes of a Figma file and returns page, name, node-id, dimensions and file metadata. The second grabs a single frame and writes three files into a subdirectory of FIGMA_OUTPUT_ROOT (default ./figma-output, created on first use): frame.png, node.json, and fills.json holding a normalized map of image fills.

Only fetch_frame touches the disk, which is why it carries no read-only marking. Start the server without FIGMA_TOKEN and it still launches and lists its tools, yet every call answers FIGMA_NOT_CONFIGURED.

You need a personal access token from your Figma account settings, scoped to file_content:read. The file key is the segment after /design/ or /file/ in a Figma URL. Frames get rendered through Figma's image API, so a very large frame or a high scale value can hit the byte caps for JSON and PNG. Lower the scale or split the frame. URLs inside fills.json do not last.

What it helps with

  • list every frame in a Figma file with exact node ids
  • export one frame to PNG without opening the editor
  • hand the agent node JSON and the image-fill map
  • pull the file key out of a Figma link
  • cap Figma API response sizes via environment variables

Example prompts for the agent

  • List the top-level frames in file AbC123xyz using list_frames
  • Fetch frame 12:34 from file AbC123xyz with fetch_frame into ./figma-output
  • Show me which image fills are in the fills.json for that frame

How to install Figma MCP

Platform CLI

claude mcp add --env FIGMA_TOKEN=<FIGMA_TOKEN> --env FIGMA_API_BASE_URL=<FIGMA_API_BASE_URL> --env FIGMA_REQUEST_TIMEOUT_MS=<FIGMA_REQUEST_TIMEOUT_MS> --env FIGMA_MAX_JSON_BYTES=<FIGMA_MAX_JSON_BYTES> --env FIGMA_MAX_FRAME_BYTES=<FIGMA_MAX_FRAME_BYTES> --transport stdio figma-mcp -- npx -y @scalably-io/figma-mcp

Replace <…> with your own values. 2 more environment variables are in the server README

Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more

Questions about Figma MCP

How do I install Figma MCP in Claude Code?

Run claude mcp add figma-mcp -e FIGMA_TOKEN=<FIGMA_TOKEN> -- npx -y @scalably-io/figma-mcp, substituting a token with the file_content:read scope.

What does Figma MCP do?

It lists the top-level FRAME nodes in a Figma file and downloads one frame as PNG alongside its node JSON and image-fill map.

What happens if the Figma token is missing?

The server still starts and exposes its tools. Every call fails with FIGMA_NOT_CONFIGURED until FIGMA_TOKEN is set.

Similar MCP servers

All MCP servers for Design →

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor