@echobt/figma-mcp
@echobt/figma-mcp
Complete fork of bilalba/fig-mcp — local MCP server for reading and rendering .fig files offline (no Figma API, no PAT, no rate limits).
Maintained at echobt/figma-mcp.
Why this fork
Upstream is a solid fig-kiwi parser + experimental SVG renderer. This fork hardens it for agent design-to-code workflows on large local archives (hundreds of MB, 100k+ nodes):
Area | Improvement |
File reading | Lazy ZIP |
Screenshots |
|
Agent assets |
|
Images |
|
INSTANCE | Expand symbol children even when overrides are empty (was incorrectly skipped) |
Typography | Letter-spacing units ( |
Tests | node:test suite + TAOSCAN smoke harness |
Verified against a large real file (TAOSCAN - Mockups.fig, ~391MB, 23 pages, ~229k nodes, 1219 images).
Install
npm install -g @echobt/figma-mcp
# or
npx @echobt/figma-mcp --helpBinaries (identical): figma-mcp, fig-mcp.
Quick start (Claude / Cursor / OpenCode)
# Claude Code
claude mcp add figma-mcp -- npx @echobt/figma-mcp
# Or pin a local path
claude mcp add figma-mcp -- node /path/to/figma-mcp/dist/index.jsExample prompts:
Parse
/path/to/design.fig, list pages, then export a design spec for the Home frame and take a pixelPerfect screenshot to/tmp/home.png.
CLI
Command | Description |
| Start MCP server (stdio) + optional image HTTP sidecar |
| Web viewer (default port 3000) |
|
|
| Help / version |
MCP tools
Document structure
Tool | Description |
| Simplified document tree |
| Paginated text tree |
| Hierarchical drill-down |
| All canvases |
| Contents of one page |
Nodes
Tool | Description |
| By type or name |
| By path |
| By GUID |
| Inferred flex-like layout |
Content
Tool | Description |
| Extract text |
| Unique solid colors |
| Nodes with fills |
Images & rendering
Tool | Description |
| Image inventory (lazy metadata) |
| MCP image content + JSON meta; optional |
| Document thumbnail as MCP image |
| PNG of node; default |
| Export real geometry SVG/PDF/PNG — prefer |
Agent copy (fork)
Tool | Description |
| Read first. Full rules + UCs ( |
| Primary implement tool. Writes |
| CSS + layout + tokens + tree + text for a node (JSON, optional |
| Write real images + true-geometry SVG + PNG for one node to a directory |
Debug
Tool | Description |
| Kiwi schema meta |
| Raw decoded message (truncated) |
| ZIP entries |
| Drop parsed cache + inflated image LRU |
Agent guide (required reading)
Canonical rules + use cases: MCP_GUIDE.md, or call get_mcp_guide / read resource figma-mcp://guide.
Server initialize also sends short instructions pointing agents at that guide.
Agent workflow (recommended)
Golden rule: never invent SVG d paths or re-draw icons. Always use exported files.
get_mcp_guide— hard rules + UC catalog (once per session)list_pages/get_tree_summary— map the filefind_nodesorget_node_by_id— pick a frame (session:local)export_asset_packwithoutputDir— dumps real assets +AGENTS.mdpolicyRead
MANIFEST.jsonand opennodes/*/node.svg,vectors/*.svg,images/*export_design_specfor exact text/CSS tokensImplement with HTML/CSS + file references (img/src or copied SVG files)
Optional
render_screenwithtrueGeometry: true(default) +outputPathfor visual QA
get_vector also exports real baked geometry — prefer outputPath and open the file.
Node IDs look like 3779:22748 (from the web viewer or any tool that returns id / nodeId).
How it works
.figfiles are ZIP archives (canvas.figfig-kiwi binary,meta.json,thumbnail.png,images/).Schema embedded in each file is decoded with kiwi.
Flat
nodeChangesare rebuilt into a tree.Images stay in the archive until requested (
ImageStore).Subtrees render to SVG → PNG via
@resvg/resvg-js.
Develop
npm install
npm run build
npm test
FIG_MCP_TAOSCAN="/path/to/file.fig" npm run smoke:taoscanSmoke writes evidence under /tmp/opencode/fig-mcp-work/qa-out/ when available.
Requirements
Node.js 18+
Limitations
.figformat is undocumented and may changeLocal files only (use official Figma MCP for cloud files)
Vector export uses Figma baked
fillGeometry/strokeGeometry(true path data from the file). Screenshots use that SVG via resvg — not hand-approximated icons. Complex blend modes / full BOOLEAN merge may still be incomplete.Agents must use
export_asset_packfiles, not recreated path strings.Very large files still keep the ZIP buffer in memory (images are lazy; canvas decode can still be multi‑GB on enormous docs)
License
MIT — see LICENSE.
Upstream credit: bilalba/fig-mcp by bilal; kiwi by Evan Wallace; MCP TypeScript SDK.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/echobt/figma-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server