Figma Context MCP
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
作者による説明(英語の原文)
The Figma file you have open, as MCP tools. Extract, edit, and keep a saved set.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
FIGSNAP_MCP_URL, FIGSNAP_MCP_TOKEN「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"figsnap": {
"command": "npx",
"args": [
"-y",
"figsnap-mcp"
],
"env": {
"FIGSNAP_MCP_URL": "your-value",
"FIGSNAP_MCP_TOKEN": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add figsnap --env FIGSNAP_MCP_URL=your-value --env FIGSNAP_MCP_TOKEN=your-value -- npx -y figsnap-mcp動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"figsnap": {
"command": "npx",
"args": [
"-y",
"figsnap-mcp"
],
"env": {
"FIGSNAP_MCP_URL": "your-value",
"FIGSNAP_MCP_TOKEN": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"figsnap": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"figsnap-mcp"
],
"env": {
"FIGSNAP_MCP_URL": "your-value",
"FIGSNAP_MCP_TOKEN": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
FIGSNAP_MCP_URL envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント arimunandar で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:FIGSNAP_MCP_TOKEN
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.2.0)がレジストリに届いたのは2 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Figma Context MCP, Claude Real Video, Figma MCP Server
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
Let any LLM watch a video locally — and search everything it has ever watched.
The Figma MCP server brings Figma design context directly into your AI workflow.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
The Figma file you have open, as MCP tools — and nothing else.
claude mcp add figsnap-mcp -s user -- npx -y figsnap-mcp
Those install the MCP server. It answers nothing until the daemon is running and the Figma plugin is open — see Getting it running, which is five steps and takes about two minutes.
A Figma plugin, a local daemon, and an MCP server. Your coding agent reads the design, extracts a node as PNG, React, HTML or CSS, edits the canvas when you allow it, and shares a saved set of components with you. No relay, no account, no network beyond loopback.
MCP client figsnap-mcp daemon the plugin
(Claude Code) stdio (stateless HTTP :3058 ws (open in Figma) ─────────────────► proxy) ──────────► /panel ──────────► figma.* 127.0.0.1 only
Three processes and one rule: figma.* exists only while the plugin is open, so the plugin holds the connection and everything else asks questions down it.
This repo is a derivative of Figsnap, cut down to one job. Figsnap ships four products from one package.json — the plugin, a Cloudflare Worker relay with accounts, an ACP chat client, and this MCP server. If all you want is MCP tools and a saved set, you had to clone all of it, build a 4,200-line panel you would never open, and load a plugin whose manifest whitelists a Worker you would never sign in to.
So: no ACP client, no harness discovery, no session store, no relay, no accounts, no chat, no API browser, no code-export UI. What is left is the extraction engine, the 41 tools, and a panel with three panes.
Figsnap is not modified by any of this, and the two can run side by side — this daemon is on port 3058 with its token in ~/.figsnap-mcp/agent-token, where Figsnap's is on 3056 with its token in ~/.figsnap/agent-token.
One caution on that manifest: Figma validates allowedDomains and refuses an IP literal — Invalid value for allowedDomains. 'ws://127.0.0.1:3058' must be a valid URL — and a manifest it refuses is a manifest it does not load, so the plugin quietly keeps running the last good one. Name localhost, and check the console after any change here, because nothing else reports it.
They are kept apart in Figma too. clientStorage is keyed by plugin id, so the manifest carries an id of its own rather than Figsnap's REPLACE_ON_PUBLISH, and every key this plugin writes is prefixed figsnap-mcp: on top of that. Sharing either one means sharing the stored daemon address, and a panel that inherits ws://localhost:3056 is then blocked by its own manifest's CSP — with a console error the designer never sees. The panel also refuses any stored or typed address outside the port its manifest allows, and drops the token that came with it.
npm install -g figsnap-mcp
Two commands come with it:
figsnap-mcp-daemon | the bridge; leave it running while you work |
figsnap-mcp | the MCP server, spawned by your client — not run by hand |
You can skip the install and let npx fetch it, which is what an MCP client config usually does. The Figma plugin ships in the package too: after a global install its manifest is at
npm root -g # …/lib/node_modules — the manifest is figsnap-mcp/manifest.json
Or clone the repository and npm install && npm run build, which is the same thing with the sources beside it.
Five steps, once.
1. Build it.
npm install -g figsnap-mcp
From a clone instead: npm install && npm run build.
2. Start the daemon. Leave it running; it is the only thing that talks to Figma.
figsnap-mcp-daemon # --allow-edits opens the writing tools at boot
From a clone: npm run daemon. figsnap-mcp-daemon --help lists the rest.
It prints its address and its token:
figsnap-mcp-daemon 0.1.0
panel socket ws://127.0.0.1:3058/panel http http://127.0.0.1:3058 token 8fT2qN4vRk1pXwLzYc7BhJ0mAeUdSg9T edits off — turn them on in the plugin, or start with --allow-edits
3. Load the plugin. In Figma desktop: Plugins → Development → Import plugin from manifest, pick the package's manifest.json (npm root -g finds it, or it is in the repository root), then run Figsnap MCP.
4. Pair the panel. Copy the token line from step 2 into the panel's Connect pane and press Connect. The dot turns green and the Address reads ws://localhost:3058/panel.
This is the only place a token is ever typed. It is stored in Figma's own per-user storage, so the panel reconnects itself every time from now on.
5. Register the MCP server.
claude mcp add figsnap-mcp -s user -- npx -y figsnap-mcp
Restart the client, then claude mcp list shows figsnap-mcp · ✔ Connected. From a clone, name the file instead: -- node /path/to/FigsnapMCP/agent/mcp-stdio.mjs.
Check the whole chain:
curl -s http://127.0.0.1:3058/health
panelConnected: true is the line that matters — it means Figma is on the other end.
An MCP client never needs it. This is the part that surprises people: claude mcp add takes no token, no environment variable, no config. The MCP server reads the daemon's own file on the way past.
Only two things use the token, and only one of them is you:
| Who | How it gets it |
|---|---|
| The Figma panel | You paste it, once, in Connect |
agent/mcp-stdio.mjs | Reads ~/.figsnap-mcp/agent-token by itself |
Where it comes from. The first time the daemon starts it makes one — 24 random bytes, base64url — and writes it to ~/.figsnap-mcp/agent-token with mode 600. Every later start reads that same file back, so the token is stable and the panel is not re-paired every morning.
How to see it again without restarting anything:
cat ~/.figsnap-mcp/agent-token
Why there is one at all. The daemon listens on a loopback port, and any web page you happen to visit can open a socket to localhost. Two things stop it: the Origin header, checked on upgrade, which a browser cannot forge; and this token, because a browser WebSocket cannot set headers. Only GET /health is reachable without it — so the panel can tell you the daemon is running before it has been paired.
If it leaks, rotate it:
npm run daemon -- --new-token
That writes a fresh one and invalidates the old. Re-paste it in Connect; MCP clients pick the new one up on their own, because they read the file.
To use one of your own — a fixed token in a script, say — set FIGSNAP_MCP_TOKEN and the daemon uses it instead of the file. Set the same variable for the MCP client if it cannot read your home directory. FIGSNAP_MCP_URL moves the address the client dials.
claude mcp add figsnap-mcp -s user -- npx -y figsnap-mcp
For a client that takes JSON:
{ "mcpServers": { "figsnap-mcp": { "command": "npx", "args": ["-y", "figsnap-mcp"] } } }
figsnap-mcp-daemon --mcp prints both, with paths already filled in.
Then claude mcp list should show figsnap-mcp · ✔ Connected, and in a session figma_get_selection answers about whatever is selected on the canvas.
Three things can be wrong, and each says so differently:
| What the tool says | What to do |
|---|---|
No figsnap-mcp daemon at http://127.0.0.1:3058 | npm run daemon |
The Figsnap MCP plugin is not open in Figma | Open the file and run the plugin |
The figsnap-mcp daemon rejected the token | cat ~/.figsnap-mcp/agent-token, or set FIGSNAP_MCP_TOKEN |
Editing the file is switched off | Turn on Allow edits in the plugin's Tools pane |
Three things a question about a Figma file almost always needs are addressable rather than called for, so a client can @-mention them:
| URI | What it is |
|---|---|
figma://selection | Everything selected, extracted |
figma://page | The layer tree, three levels deep |
figma://library | Components, styles and variables, with ids |
figma://node/{nodeId} | One layer — figma://node/21:10314 |
Four panes, and the one it opens on is Selection.
Selection is a preview of whatever you have picked on the canvas — the picture, its name, type, size, child count and node id — with a folder picker and a Save button beside it. Saving from here is the short way round: no switching panes, no hunting for the layer again in a list.
The preview costs one PNG export. The panel used to run a full extraction on every selection change — HTML, TSX, two stylesheets and a 2× image — for a picture nobody was looking at; the code outputs are what MCP asks for, on request, not what a click costs. A small layer is magnified at most 4×, so an icon and a screen do not both fill the stage.
Minimise (the ▼ at the top right) drops the window to a 44px strip and the preview under it, so the canvas is clear while the plugin keeps running — the daemon needs the panel open, but you do not need to look at it. The strip still names what is selected and still has Save, because those are the two things worth having while you work. ▲ puts it back to whatever size you had dragged it to.
Connect and Tools are pairing and the tool list; Saved is the folder manager. Both are described below.
41 of them: 14 read Figma, 26 write to it, and one is answered in the daemon. The Tools pane lists them all with the writing ones marked; GET /tools is the same list as JSON.
Reading is always allowed. Writing is not, until you say so — every mutating tool is refused until *Allow edits* is on, which is a switch the designer holds rather than a prompt the agent can talk past. A harness running with permission prompts disabled still cannot get past it. --allow-edits opens the same gate from the terminal, for when the work is happening there.
Two tools fold thirteen plugin commands into one argument each, because 41 tool descriptions already cost real context on every request:
figma_extract takes nodeId, or nodeIds, urls, selection: true, saved: true for a batch.figma_saved takes an action: list, folders, save, unsave, clear, move, newFolder, renameFolder, deleteFolder.A picture comes back as a real image block, never as base64 in a text field — that is what figma_export_png is for, one node at a time.
figma_ios_spec answers with the properties Figma actually holds rather than with CSS, in points: per-axis sizing, auto layout and its padding, stroke weight and alignment, corner smoothing, effects, the text block — and every fill and stroke marked painted or not. Reach for it when the answer becomes code. `fig
冒頭だけを表示しています。続きはリポジトリで読めます