figma-vault

io.github.NBhey由 GitHub 账号 NBhey 发布v0.1.5更新于 Oct 25, 2026

Figma designs pulled once into a local vault; AI agents read them offline with no rate limits

发布方自己的服务:Figma MCP Server

概览

AI 生成的概览

本地 MCP 服务器,让助手读取一次性拉取到本地库中的 Figma 设计,离线可用,无需 Figma 令牌,也不受速率限制。

可以做什么
列出本地库中已保存的设计,并读取设计的规范化节点树,可按深度限制或只取某个节点的子树。按名称或文本搜索节点。读取颜色、字体和效果等设计令牌。获取已保存的图片和图标资源。本地库由单独的 CLI 从 Figma 一次性拉取生成;服务器本身只读取本地文件,不访问网络。
适用场景
适合助手在构建界面时反复查看 Figma 设计、而 Figma 的速率限制或令牌要求造成阻碍的场景,也适合团队希望从已提交的代码库中读取设计而无需 Figma 访问权限的情况。
运行要求
需要 Node.js 22 或更高版本以及 npm 包 figma-vault,以 stdio 在本地运行。拉取新设计需要具有只读文件内容权限的 Figma 个人访问令牌,通过 .env 文件或环境变量中的 FIGMA_TOKEN 提供。读取已有本地库不需要令牌。
安装前请注意
拉取设计会消耗 Figma API 请求,可能触发持续数天的速率限制。FIGMA_TOKEN 是凭据,不应提交到仓库;初始化步骤会把 .env 加入 .gitignore。本地库(包括原始 Figma 响应和截图)设计为提交到 git,因此设计内容对所有有仓库访问权限的人可见。组件变体较多的设计可能生成很大的文件。

安装

在 SourceWeft 中

  1. 打开 控制台中的 figma-vault,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

figma-vault

English · Русский

[npm] [CI] [license: MIT] [node]

Pull a Figma frame once. Then Claude Code, Codex or any MCP agent reads it as often as it likes: offline, with no Figma token and no rate limits.

[figma-vault init, demo and check in a terminal: the chain works without a Figma token]

  • Batch Figma requests once, then zero requests however many times the agent looks. Screens from one file share the structure read and image render batches.
  • Icons cost nothing. A real screen had 141 icons, and they took no extra requests.
  • Commit the vault and the team needs no Figma access. No licence, no token.

Try it in 30 seconds. You don't need a Figma token for this:

bash
npm i -g figma-vaultfigma-vault init && figma-vault demo && figma-vault check

How it works: the pull normalizes the frame and writes it to disk. The agent then reads it over MCP.

one developer:      figma-vault add <link>  →  vault  →  git committhe rest of the team:  the agent reads it over MCP, no Figma token needed

The problem

Figma's MCP server and REST API are rate-limited, and on some seats the limit is tiny. While building a UI, an agent goes back to the design all the time to check a margin, a colour or a font size. That can mean dozens of calls in one session. You hit the limit fast and the work stops.

With figma-vault, the number of Figma calls doesn't depend on what the agent does. Each design costs a fixed number of calls, spent once when you pull it.

Figma Dev Mode MCPfigma-vault
who calls Figmathe agent, while it worksthe CLI, once
how many callsgrows with the agent's workfixed per design
does every reader need a tokenyesno
works offlinenoyes

There's a side effect: the design becomes a file in your repository. A developer without access to the Figma file (no licence, no permissions, no token) still gets the whole design.

How it compares

Other projects work on the same problem. The Framelink Exporter plugin exports a design to a zip for offline use, and there are caching forks of Framelink's Figma MCP. figma-vault takes a different approach:

  • The vault is meant to be committed. One person pulls a design and the whole team reads it from git. Nobody else needs Figma access.
  • Icons cost zero requests. Vector paths come with the node tree, and the SVGs are built locally. Rendering them through Figma would eat the image-render limit.
  • The format is fixed and validated. doc.json follows a written contract, and a strict validator checks every file.

Install

Requires Node.js 22+.

bash
npm i -g figma-vault

Option 1. Per project

bash
figma-vault init

This creates .figma-vault/, registers the server in the project's .mcp.json (other entries are left alone), adds .env to .gitignore and installs a /figma slash command for Claude Code.

Use --no-command to skip the /figma command, so the agent gets only the read-only vault_* tools.

Option 2. Nothing in the repository

bash
figma-vault init --global

The vault lives in ~/.figma-vault/ and the server is registered in the agent's user config. The project repository never learns the tool exists. Use this when you can't add config or dependencies to the project.

Usage

bash
figma-vault add "https://figma.com/design/KEY/Project?node-id=127-4532"# Export several selections together; links from the same file share requests:figma-vault add "<frame link 1>" "<frame link 2>"# Keep the node trees if image rendering is unavailable:figma-vault add "<frame link 1>" "<frame link 2>" --no-assets# A SECTION/CANVAS link can expand into its frames (up to 20 by default):figma-vault add "<section link>" --expand --max-screens 20

To get the link, right-click a frame in Figma and choose Copy link to selection.

bash
figma-vault limits "<frame link 1>" "<frame link 2>" # probe access before pullingfigma-vault list              # what has been pulled so farfigma-vault check             # verify the whole chain worksfigma-vault demo              # add a demo design, no token needed

CLI output, errors and the MCP tool descriptions are in English by default; the /figma command it installs is in English too. README.ru.md is a translation of the documentation only.

After init, Claude Code has one command:

/figma <frame link> [more frame links...]

It pulls the design, reads it over MCP and builds the UI following the project's conventions.

What a pull costs in Figma requests

REST API limits depend on the token, plan and seat type. Both node reads and image renders are Tier 1 endpoints. figma-vault limits "<link>" [more links...] spends one shallow node read plus up to ceil(S/40) screen render requests per file. It skips rendering SECTION and CANVAS selections as whole images; their child screens are not probed. A successful probe cannot guarantee the full pull: asset renders can require additional requests.

For a file with S selected screens and R unique raster assets, when each screen has fewer than 40 raster assets, a successful pull typically uses:

requests
selected node trees (/v1/files/:key/nodes)1 per file
screenshots and raster assets (/v1/images, batches of 40 IDs)ceil((S + R) / 40) per file
icons with local geometry0

For example, two screens in one file with three unique raster assets take one node read and one image render if the five IDs fit in a batch. At 40 or more raster assets on one screen, screenshots are rendered separately. --expand first probes containers with depth=1, adding at least one node request per file. SVG fallback renders, failed requests and retries can add calls. On a real 332-node design, 141 icons needed no render calls. After the pull, the agent never calls Figma again.

Check the result against the design

figma-vault verify compares the page the agent built with the design. The package ships no browser: the snapshot is taken with whatever the project already uses (Playwright, DevTools, the agent's browser tool).

  1. Mark the root element of the page with data-figma-node-id="<root node id>", and the main blocks with the ids of their nodes.
  2. figma-vault verify <docId> --snippet prints a script. Run it on the page and save what it returns to a file.
  3. figma-vault verify <docId> --snapshot <file> checks it:
    • texts: every visible text of the design must be on the page;
    • geometry: each marked block must match the design's position and size, within 2 px by default (--tolerance).

The result is PASS (exit code 0), FAIL (1, with a list of what is off) or INCOMPLETE (2, when nothing is marked and geometry can't be checked). The /figma command runs this step itself when the project has a browser.

Try it without a Figma token

You only need a token to pull new designs. Reading works without one, which is the normal setup for everyone except the person who pulls. So you can test the whole install without creating a token:

bash
figma-vault init && figma-vault demo && figma-vault check

check starts the real MCP server as a child process and talks to it over the protocol. It exits with code 1 when something is actually broken, so you can use it in CI.

Token

In Figma, go to Settings → Security → Personal access tokens → Generate new token. The token needs only one scope: File content → Read-only.

Put it in a .env file in the directory you run the CLI from, as a line FIGMA_TOKEN=figd_..., or set it as an environment variable. If both are set, the environment variable wins.

What the agent gets

The MCP server exposes six read-only tools:

toolreturns
vault_listthe designs in the vault
vault_get_doca design's node tree; maxDepth limits the depth
vault_get_nodethe subtree of one node
vault_searchnodes found by name or text
vault_get_tokenscolours, typography, effects
vault_get_assetan image or an icon

The tree is normalized:

  • auto-layout becomes mode: row|column with gap and padding;
  • coordinates are relative to the parent;
  • styles, gradients and text come in one predictable shape, including differently coloured fragments inside one text (text.runs);
  • nodes hidden in Figma are kept with hidden: true. By default the agent doesn't get them, but a parent reports how many it has (hiddenOmitted). Pass includeHidden: true when building a reusable component whose optional slots are switched off on this screen.

The raw Figma response is saved next to it in raw.json for debugging.

On a real design, normalization shrinks the tree about 7 times:

raw.json   1.9 MB   raw Figma responsedoc.json   256 KB   what the agent reads

This saves more than disk space. An agent that reads 256 KB instead of 2 MB rebuilds the UI noticeably more accurately.

Vault layout

<vault>/  index.json                 list of designs  <docId>/    doc.json                 normalized tree, the main artifact    raw.json                 raw Figma response    screenshot.png           render of the whole frame    assets/                  icons and images

The figma-vault/doc@1 schema is described in docs/CONTRACT.md (in Russian). A strict validator checks it. Vaults pulled with 0.1.0 (doc@0) are still read as they are; there is no need to pull them again.

doc.json stands on its own: the MCP server never reads raw.json and never touches the network.

Known limitations

This is an MVP. Here is what it can't do yet.

  • Rate limits. Node reads and image renders are both Tier 1. Either endpoint can return 429, and the block can last for days. Icons no longer depend on rendering, but the frame screenshot and raster images still do. The client retries up to three times, following Retry-After, and never sleeps for more than a minute. If Figma asks it to wait for days, the pull keeps the node tree, records the reason as a warning and doesn't fail. Run figma-vault limits before pulling.
  • Only colour and weight are kept for fragments inside a text. A gradient, a different font or an underline on part of a text is lost.
  • Designs with many component variants make a large doc.json. Hidden slots are kept now. On a 332-node screen that added 3,400 hidden nodes, and the file grew from 444 KB to 5 MB. The agent still gets about 100 KB by default, but the file goes into your git.

How it was tested

The fixture in the repository is synthetic: 29 nodes, enough to install the tool and confirm the chain works without a Figma token.

We checked accuracy separately, on two real designs whose content isn't published here. Results on a product screen with 332 nodes, 15 levels deep:

checkresult
design texts present in the rebuilt markup41 of 41
icons15 of 15, 0 broken links
placeholders needed1 (a raster avatar)
Figma requests in the earlier measured pull3 (before combined rendering)
doc.json against the contractpasses

Not checked: pixel-perfect match. We compare with Figma's reference render by eye, using npm run dev → /compare/<name>. figma-vault verify checks texts and the geometry of marked blocks, but not colours, fonts or pixels.

What it deliberately doesn't do

It isn't a SaaS, a Figma replacement or a real-time sync. There is no auth, billing, teams or users, and no server side. The MCP server runs on the developer's machine as a child process of the agent and talks over stdio. There is nothing to deploy.

More docs (in Russian)

  • docs/INTEGRATION.md: rolling it out to a team, the no-trace mode, checking without a Figma token.
  • docs/ADAPT.md: adapting the tool to a project's design system.

Development

bash
npm installnpm test          # 85 testsnpm run typechecknpm run dev       # local preview of rebuilt markup and comparison with the design

Two AI agents write this project in parallel, following the protocol in AGENTS.md: separate areas of the code, a task board and a shared log. Each commit is tagged with its author.

License

MIT

来源:README.md,提交 7159bc1

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

3
  1. v0.1.5最新Sep 29, 2026
  2. v0.1.4Sep 24, 2026
  3. v0.1.3Sep 23, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Figma 集成