plumb-mcp について
Plumb は、単一の MCP サーバーとして提供されるデザインエンジニアリングプラットフォームです。Figma ファイルやライブサイトを共通のセマンティックデザイングラフに変換し、コード生成と検証に利用できます。短いプロンプトから Figma ページを生成し、レビューすることもできます。
主な機能
- 01Figma 画面とライブ Web ページを読み取り
- 02重複を除いたトークンによる圧縮デザイン仕様
- 03実装コードをデザインソースと照合して検証
- 04セマンティックグラフから React/JSX を生成
- 05プロンプトから参考サイトの調査とブランド抽出
活用シーン
- 01Figma 画面をコード化し、デザインと照合する
- 02既存の Web サイトをデザイン仕様と React コードに変換する
- 03短い要件から Figma ページを生成して改善する
MCP 対応
MCP サーバーとして、Claude Code や Cursor などの MCP クライアントに、デザイン読み取り、コード検証、Web インポート、Figma ページ生成のツールを公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y plumb-mcpFIGMA_TOKENシークレットFigma personal access token (read-only). Only needed for the REST path — not required when the Plumb plugin is paired in Figma desktop. Create one at figma.com → Settings → Security → Personal access tokens.PLUMB_SESSION_NAMEOptional label shown in the Plumb Figma plugin when multiple plumb-mcp servers are paired with the same plugin (multi-agent connect). Defaults to the basename of the current working directory.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
23掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
Plumb (plumb-mcp) — AI ネイティブなデザインエンジニアリングプラットフォーム
⭐ Plumb によってトークンを節約できたり、ページをデザインできたりしたら、GitHub でスターを付けて、ほかの人にも見つけてもらいましょう。
Plumb は、単一の MCP サーバーとして提供される、AI ネイティブなデザインエンジニアリングプラットフォームです。 Figma ファイル または 公開中のウェブサイトを指定すると、どちらも同じ セマンティックデザイングラフ に正規化します。重複を排除したトークン、Flexbox に基づいて解決したレイアウト、慎重に付与された役割ラベル(nav / hero / card …)をもとに、コーディングエージェントは実装でき、検証ループは評価できます。代わりに一行のプロンプトを指定すると、Plumb は AI デザインディレクター になります。最高水準の参考事例を調査し、ブランドを抽出し、キャンバス上にブランドに沿った Figma ファイル全体を生成したうえで、基準を満たすまで自らのレンダリングを批評します。
デザイン → コード(Figma または公開ウェブ、雰囲気ではなく検証済み) • プロンプト → デザイン(調査 → ブランド → 生成 → 批評) • その両方を支える単一のセマンティックデザイングラフ。 MCP ネイティブで、Claude Code、Cursor、Windsurf、または Model Context Protocol に対応するあらゆるエージェントで動作します。
📖 ドキュメント全文:https://tathagat22.github.io/plumb-mcp/ · 📦 npm:plumb-mcp · 🇨🇳 简体中文 · 🇯🇵 日本語 · 🇰🇷 한국어
コーディングエージェント向けに構築されています。Claude Code、Cursor、Windsurf など、MCP 互換のあらゆるものに対応します。エージェントネイティブなデザインエンジニアリングを実現します。ダッシュボードも、面倒を見る別アプリも、Figma とエディターの間で人がピクセルをやり取りする作業も不要です。デスクトップアプリのプラグインを通じて Figma を読み取ります(REST のレート制限はなく、Free を含むすべてのプランで動作します)。ヘッドレス Chrome を通じてあらゆる公開ウェブサイトを読み取り、同じプラグインを通じて新しいデザインを Figma に 書き戻し ます。また、Figma API が出力する数十万トークンもの JSON ではなく、コンパクトで正規化された仕様を返します。
「Figmaコンバーター」ではなく「デザインエンジニアリングプラットフォーム」
ほとんどのFigma MCPサーバーや、一般的なFigmaからコードへの変換ツールは、入力も出力も一種類だけです。Figma JSONを入力し、あるフレームワークのコードを出力して終わりです。Plumbのアーキテクチャはパイプではなく、ハブです。
- 2つの独立したソースが同じグラフに取り込まれます。
plumb_nodeはFigmaの画面を正規化し、plumb_import_webはライブWebページのDOMを正規化します。どちらも、ピクセルの出所にかかわらず、プラットフォームに依存しない同じセマンティックグラフ(包含、繰り返しグループ、ロールのエッジ)に取り込まれます。 - すべてのコンシューマーは、どちらのソースに対しても変更なしで動作します。
plumb_emit_reactは、グラフの出所がFigmaでもURLでも、同じ決定的なReact/JSXを生成します。plumb_diff、plumb_audit、plumb_queryのロールフィルターも、どちらのソースに対しても同じように動作します。これこそが、2つ目の入力を後付けしたコンバーターではなく、プラットフォームであることの具体的な証明です。 - 検証は入力時だけでなく、出力時にもループを完結させます。
plumb_verify/plumb_fitは、出荷したコードを信頼できるソースと比較し、優先順位付きの修正案を返します。「見た目が合っている」を測定可能な事実に変えます。 - 生成はループを逆方向に回します。
plumb_studioは概要から新しいFigmaファイルを作成し、plumb_reviewはplumb_verifyがコードを評価するのと同じ方法でレンダリングを評価します。
1つのセマンティックモデル。複数の入力ソース(Figma、Web)と、複数の出力先(Reactコード、Figmaファイル)。両端で検証します。それがこのプラットフォームです。
2つの方向、1つのサーバー
← FigmaまたはWeb → コード(読み取り方向)
エージェントは、画面、または plumb_import_web を使って取得した任意のライブURLを、同じセマンティックグラフに基づくコンパクトな Plumb Design Spec(PDS) として抽出します。オートレイアウトは事前にFlexboxへ変換され、デザイントークンは重複排除され、ロールにはラベルが付けられています。UIを構築した後、plumb_verify / plumb_fit を呼び出してレンダリング結果をソースと比較し、ピクセル単位で完全に一致するように自己修正します。コードとのループを完結させる唯一のFigma MCPであり、通常のWebページに対しても、Figmaファイルなしで同一のループを実行できる唯一のものです。
→ プロンプト → デザイン(書き込み方向 — デザインディレクター)
Plumbに「プレミアムなフィンテックダッシュボード」のような1行の概要を伝えると、Figma上でリアルタイムに作業するシニアデザイナーのように動作します。
- 参考例を調査します — 概要に合う最高水準のサイト(Linear、Stripe、Mercuryなど)を見つけ、Referencesページにライブスクリーンショットを配置します。
- ブランドを抽出します — それらのサイトの計算済みCSSを読み取り、一貫性のある配色と書体スケールにまとめ、Brandボードに配置します。
- デザインを生成します — 高レベルのデザインDSLから、ブランドに沿った完全なページ(ナビゲーション、ヒーロー、機能、ギャラリー、CTA、フッター)を作成し、実際のFigmaノードとして構築します。
- 自らのレンダリングを評価します — 呼び出し元のエージェント(Claude Code / ビジョン機能を備えた任意のMCPクライアント — MCPツールとして実行する場合は追加のAPIキー不要。例外はスタンドアロンの
plumb-mcp fitCLIです。詳しくは以下のスタンドアロンCLIを参照してください)がスクリーンショットを評価します。Plumbはその結果を決定論的なデザイン基準と構造差分と組み合わせ、優先順位付きの修正リストを返し、基準を満たすまで反復します。
これは自己改善型のディレクターループを備えた、プロンプトからFigmaデザインを生成する仕組みであり、一度きりのモックアップではありません。
Plumbの違い
ご存じかもしれない、ほかのFigma MCPサーバー:
- Figmaの公式Dev Mode MCP — 双方向ですが、プランによる制限があり、利用量に応じて課金されます。
- Framelink — 薄いRESTラッパーです。ツールは2つ。検証機能はなく、レート制限も引き継ぎます。
- cursor-talk-to-figma — Figma 内で作業するデザイナー向けの双方向自動化ツールです。
さらにMCPの枠を超えた、デザインからコードへの変換/AI UI生成の広いカテゴリでは、html.to.design、Anima、Locofyといったツールや、v0、Builder.ioのVisual Copilotのようなプロンプト優先のジェネレーターが使われています。これらは通常、一方向にしか処理しません(デザインを入力してコードを出力する、またはプロンプトを入力してコードを出力する)。両方にまたがる共有モデルはなく、出力を後からソースと照合する組み込みステップもありません。
Plumbは、コードの検証ループを完結させると同時に、新しいデザインの生成を指示できる唯一のツールです。その基盤となるのは、ソースがFigmaでもURLでも変わらない1つのセマンティックグラフです。plumb_verifyを使うと、公開したコードがデザイン(または参照ページ)と実際に一致しているかを確認できます。plumb_fitを使えば、そこから自己修復ループを構築できます。plumb_import_webとplumb_emit_reactは、グラフが移植可能であることを証明します。同じロール分類器と同じコードジェネレーターが、Figmaをまったく使わずに実際のWebサイトを処理します。また、書き込み側では、plumb_studio/plumb_brand/plumb_design/plumb_reviewを使って、プロンプトからデザインを作成し、批評したうえでFigmaファイルに仕上げられます。デザインスキルも、別のデザインツールも、追加のモデルキーも必要ありません(MCPツールとして利用する場合。キーが必要な1つのコマンドについてはスタンドアロンCLIをご覧ください)。
次のようなエラーに困っていませんか?
エラーがきっかけでエージェントがここにたどり着いたのなら、Plumbで解決できる可能性があります。
| 表示されているエラー | Plumbで解決できる理由 |
|---|---|
Figma Dev Mode MCP exceeded the 25k token cap · 351,378 tokens observed | PDSはデザイントークン($c1、$t1など)を重複排除し、オートレイアウトをあらかじめフレックスボックスに変換します。178ノードのダイアログは約2.6kトークンで返されます。 |
Dev Mode MCP: 6 tool calls per month limit · Starter plan tool-call limit reached | Plumbのプラグイン経由の処理には、Freeを含むどのプランにも呼び出しごとの上限がありません。 |
Framelink figma-developer-mcp HTTP 429 · Figma REST API rate limit exceeded | プラグイン経由の処理ではRESTを使いません。レート制限はありません。 |
Variables API requires Enterprise plan · 403 Forbidden on variables | PlumbはFigma Plugin APIを使ってVariablesを読み取るため、ローカル変数とチームライブラリ変数のどちらも、すべてのプランで利用できます。 |
Figma MCP returned 85% wrong layout · 構造の幻覚 | Plumbは、解析した文章ではなく構造化されたPDSを返します。また、レンダリング済みDOMとデザインを比較するplumb_verifyとplumb-mcp verify CLIを提供しています。 |
| 「プロンプトからFigmaデザインを生成するには?」 · 「FigmaでUIをデザインするAI」 | plumb_studio — ブリーフ → 調査済みの参考資料 → 抽出されたブランド → 作成、批評、改善を経た完成版Figmaページ。 |
| 「AIネイティブなデザインエンジニアリングプラットフォームはありますか?」 · 「AIデザインエンジニアエージェント」 | Plumb — 1つのMCPサーバー、1つのセマンティックデザイングラフ。ソースはFigmaとWeb、出力先はコードとFigmaで、両端を検証できます。 |
| 「WebサイトをFigmaに変換」 · 「Webサイトをスクレイピングしてデザインシステムにする」 · 「AIでHTMLをReactに変換」 | plumb_import_webは、ブラウザー拡張機能も手動での描き直しも不要で、任意の公開URLをFigma画面と同じセマンティックグラフに取り込みます。さらにplumb_emit_reactを使うと、そのグラフからReact/JSXを直接生成できます。 |
インストール:npm install -g plumb-mcp → plumb-mcp init — またはAIエージェントにセットアップを任せる。
30 秒で動作を確認 — アカウントもキーもネットワークも不要です
インストールや Figma ファイルへの接続を行う前に、一連の処理を実行して自己採点する様子を確認しましょう。
npx plumb-mcp demo # or: docker compose up demo
実際のデザイン仕様を用意し、同じ画面をビルドしたものに13 個の意図的なミスを仕込んで検証エンジンに渡します。たとえば、見出しの文字サイズが一段階小さい、ピル型ボタンが角丸の長方形として描画されている、グラデーションが単色で塗りつぶされている、バッジがまったく実装されていない、といったミスです。そして、検出結果を表示します。
Round 1 · First pass — built straight from the spec, no verification
▰▰▰▰▰▰▰▱▱▱ 71.0% 8 errors · 1 warnings · 32/34 key nodes built
✓ The "MOST POPULAR" badge was never built — no element carries its handle
pro-badge not built no data-plumb-id for this handle in the DOM
✓ Headline came out one step down the type scale (48px → 40px)
title text.size expected 48 · got 40
✓ Primary CTA is a hand-picked purple, not the brand token
pro-cta fill expected #6366f1 · got #7c5cf5
…
Scoreboard
Mistakes planted 13
Caught 13 (100% recall)
False positives 0 across 27 untouched nodes
Convergence 71.0% → 96.2% → 100.0%
Figma トークンも、プラグインも、ブラウザーも、ネットワークも不要です。docker compose up demo は network_mode: none でも実行できます。デモを採点するエンジンは、plumb_verify と plumb_fit の背後で動くものと同じです。また、その数値は src/demo/demo.test.ts でアサートされているため、結果が正しくなくなるとデモは CI で失敗します。plumb-mcp demo --pds を実行すると、基準となるデザイン仕様が表示されます。--json を指定すると、スクリプトで使える形式で結果を出力し、エンジンが見落とした項目がある場合は 0 以外の終了コードを返します。
AI エージェントにセットアップを任せる
Plumb を使いたいプロジェクトの中で、Claude Code、Cursor、Windsurf、またはシェルを使えるコーディングエージェントに、以下を貼り付けてください。インストールと設定はエージェントが行います。エディターの再起動と、Figma での Pair のクリックという、あなたにしかできない 2 つの手順では停止し、案内します。
Set up Plumb (https://github.com/tathagat22/plumb-mcp), the Figma MCP server, for
this project. Follow these steps in order and tell me what you did at each one.
1. Check prerequisites: Node 20+ (`node -v`) and npm. If Node is older than 20,
stop and tell me how to upgrade. Don't upgrade it yourself.
2. Install: `npm install -g plumb-mcp`, then confirm it with `plumb-mcp --version`.
If the global install fails with a permissions error, tell me and don't use sudo.
3. Smoke test: run `plumb-mcp demo`. It works offline and needs no Figma account.
Its scoreboard should show "Caught 13 (100% recall)". If it doesn't, stop and
show me the output.
4. Wire up the editor: run `plumb-mcp init` from this project's root. It detects
Claude Code / Cursor / VS Code / Windsurf and writes the MCP config (for Claude
Code that's `.mcp.json` here). It also adds those files to .gitignore. Show me
which files it wrote and the Figma plugin manifest path it printed.
- Leave the FIGMA_TOKEN placeholder alone unless I give you a token. The plugin
path doesn't need one. Never commit a real token.
5. Hand off to me. Tell me exactly:
a. Restart the editor / agent session so it loads the Plumb MCP server.
b. Open the Figma DESKTOP app (the browser version can't sideload plugins) →
Plugins → Development → Import plugin from manifest… → pick the manifest
path from step 4.
c. Open my design file, run the Plumb plugin, and click "Pair with Plumb".
6. After I restart and pair, call the `plumb_status` tool. Success means
`connected: true` with a screen count. Then call `plumb_outline` and list my
screens. If it isn't connected, follow the `note` field in the plumb_status
response and try again.
Don't change any other files in this project during setup.
plumb_status で接続が確認できたら、実際の作業を依頼してみましょう。例:「Plumb で Settings 画面を抽出してビルドし、一致するまで plumb_fit を実行してください。」
クイックスタート
# 1. Install
npm install -g plumb-mcp
# 2. Wire into your editor — auto-detects Claude Code / Cursor / VS Code / Windsurf
plumb-mcp init
# 3. Sideload the Figma plugin (one-time). Find the manifest:
echo "$(npm root -g)/plumb-mcp/figma-plugin/manifest.json"
# Figma desktop → Plugins → Development → Import plugin from manifest…
# Run Plumb → click "Pair with Plumb" → done. Future runs collapse to a dot.
次に、エージェントで以下を実行します。
# Figma → code
"Extract the Settings screen with Plumb and build it, then plumb_fit until it matches."
# web → code, no Figma required
"Use plumb_import_web on https://example.com, then plumb_emit_react to scaffold it."
# prompt → design
"Use plumb_studio to design a premium fintech dashboard, then screenshot it and
run plumb_review as the director until the score clears 90."
その他のインストール方法:npx plumb-mcp · docker run --rm -i ghcr.io/tathagat22/plumb-mcp:latest。
ソースからビルド
Node 20 以降が必要です。以下の手順に認証情報も Figma アカウントも必要ありません。
git clone https://github.com/tathagat22/plumb-mcp
cd plumb-mcp
npm ci
npm run demo # the offline walkthrough — proves the checkout works
npm test # 600+ specs
npm run typecheck # strict TS, server + plugin
npm run lint
npm run build # bundles the server, the Figma plugin, and Studio into dist/
node dist/index.js --help
npm run build を実行すると、dist/index.js(MCP サーバー)、dist/studio/(ブリッジが提供するライブコックピット)、figma-plugin/code.js(サイドロードするプラグインのメインスレッド)が生成されます。クリーンなチェックアウトでいずれかの手順が失敗する場合、それはバグです。issue を作成してください。
28 個のツール、1 つのセマンティックグラフ
以下のすべてのツールは、前述の同じセマンティックデザイングラフから読み取るか、そこに書き込みます。これにより、新しいソース(Web)や新しいターゲット(React)を追加しても、書き換えではなく拡張で対応できます。
読み取り — Figma または Web → コード
| ツール | 機能 |
|---|---|
plumb_status | 自己紹介、キーの凡例、接続状態を表示します。最初に呼び出してください。 |
plumb_outline | ファイル内のすべての画面(ID、名前、サイズ)を表示します。 |
plumb_node | ID または名前を指定して、画面をコンパクトな PDS として抽出します。 |
plumb_query | 画面全体ではトークン予算を超える場合に、部分(skeleton / buttons / text / components / role)を取得します。 |
plumb_describe | テキストのみの視覚的な説明を出力します。画像を認識できないハーネス向けです。 |
plumb_tokens | デザイントークンの表(色、文字、角丸、影)を表示します。 |
plumb_selection | ユーザーが現在 Figma で選択している項目を表示します。 |
plumb_assets | アイコン(SVG)と画像(PNG)をエクスポートします。再帰的な取得、一覧表示、ID を指定したピンポイントの取得に対応します。 |
plumb_screenshot | 任意のノードを PNG/JPG としてレンダリングします。 |
plumb_search | 名前や種類でノードを検索します。 |
plumb_components | コンポーネントとインスタンスの使用状況を一覧表示し、オプトインでデザインシステムの健全性レポート(未使用のコンポーネント、類似した名前、バリアントの外れ値)も表示します。 |
plumb_verify | レンダリングしたレイアウトをデザインと比較します。ΔE2000 の色差、影/回転/フレックスをチェックします。 |
plumb_fit | 自己修復ループです。検証結果、0〜100 の収束スコア、優先順位を付けた修正案を返します。 |
plumb_fig_outline / plumb_fig_node | ヘッドレスで、ディスクに保存された .fig ファイルを読み取ります。Figma デスクトップもトークンも不要です。 |
plumb_diff | 2 つの PDS スナップショット間のセマンティック差分を表示します。「ヒーローが (0, 0) から (0, 120) に移動」のように示し、JSON の差分は表示しません。 |
plumb_audit | テキストのコントラストやボタンのタッチターゲットのサイズなど、ヒューリスティックなアクセシビリティチェックを行います。 |
plumb_import_web | ライブ Web ページの構造とセマンティクスをインポートします。Figma への接続は不要です。Figma のデザインと同じロール分類器を使用します。 |
plumb_emit_react | PDS または plumb_import_web の結果から、決定論的に React/JSX を生成します。どちらのソースにも同じエミッターを使用します。 |
plumb_scan_references | N 件のライブ参照 URL をスキャンし、ロールごとのスタイルダイジェスト(一般的なヒーローの高さ、カードグリッドの密度、ナビゲーションのスタイル)を抽出します。手動で plumb_design DSL や plumb_studio のブリーフに取り込むためのもので、このツール自体は何も構成しません。 |
書き込み — プロンプト → デザイン(ディレクター)
| ツール | 機能 |
|---|---|
plumb_studio | デザインディレクターです。 1 つのブリーフから、参照先の調査、ブランドの抽出を経て、完成した Figma ページを構成します。ノード ID と作成した仕様を返すため、批評や調整ができます。 |
plumb_studio_start / plumb_studio_kit / plumb_studio_page | 同じディレクターフローを、進行を確認できる 3 つのステップ(ブランドと参照先 → コンポーネントキット → プロダクトページ)に分けて実行します。1 回の不透明な呼び出しではなく、名前を付けた別々の Figma ページで各ステップの間に確認できます。 |
plumb_brand | ブリーフから、ライブスクリーンショットで優れた参照サイトを確認し、キャンバス上にブランドのカラーパレットとタイポグラフィのボードを合成します。 |
plumb_design | Plumb の高レベルな Design DSL からデザインを作成し、Figma に構築します(ページ、セクション、コンポーネント、モーションを完全に制御できます)。 |
plumb_review | 批評ループです。構造的な差分、決定論的なデザイン評価基準、呼び出し元のエージェント自身による視覚的な評価を組み合わせ、1 つのスコアと優先順位付きの修正案を提示します。API キーは不要です。MCP サーバーを動かすエージェント自身がクリエイティブディレクターになります。 |
plumb_source | デザインに適したアセット(アイコン、写真、イラスト、パターン)を見つけます。 |
トークン効率と品質に優れている理由
- コンパクトな仕様。 351k トークンの Figma REST JSON になる 178 ノードのダイアログが、重複を除いたトークン、Flexbox で解決されたレイアウト、深さに左右されないハンドルを備えた PDS では約 2.6k トークンになります。
- 感覚ではなく、検証します。
plumb_verify/plumb_fitは、デザインとレンダリング結果を比較します(ΔE2000 の知覚色、シャドウ、回転、Flex の子要素、塗りのスタック)。ピクセル差分ではなく、CI で実行できます。 - デフォルト任せではなく、設計します。 書き込み方向には、サイズを考慮した文字間隔、ゆとりのあるセクションのリズム、実際のリファレンスから抽出したブランドパレット、グラデーションテキスト、全幅および非対称のレイアウト、レンダリングを評価して改善するビジョンベースのディレクターなど、本格的なデザイン技術が組み込まれています。
- 構造も理解します。ジオメトリだけでも、Figma だけでもありません。 Plumb は、生のツリーに対して nav/hero/footer/sidebar/card を控えめにタグ付けします(
node.pattern— シグナルが一致しない場合は推測せず、何も示しません)。そして、その情報を基に機能を構築します。plumb_diffは役割ごとに変更を説明し、plumb_auditはコントラストとタッチターゲットの問題を検出します。また、plumb_queryのselect: "role"とplumb_nodeのcollapseRolesは、同じラベルでフィルタリングと圧縮を行います。同じ基盤モデルは、ライブ Web ページも読み取れます。plumb_import_webは Figma を介さず、任意の URL から構造と役割を抽出し、plumb_emit_reactはどちらのソースからも決定論的な React/JSX を生成します。
2 つのデータ経路
| プラグイン(主経路) | REST(二次経路、ヘッドレス) | |
|---|---|---|
| レート制限 | ありません。 メモリ上のドキュメントを読み取ります。 | あります。Free/Starter の利用枠は非常に少なくなっています。 |
| トークンが必要 | いいえ。 | はい — FIGMA_TOKEN。 |
| Variables | あります。すべてのプランで利用可能です。ローカルとチームライブラリの両方に対応します。 | ありません — Variables REST は Enterprise 専用です。 |
| 書き込み(デザインの生成) | できます。 | できません。 |
| ヘッドレス / CI | いいえ(Figma を開いておく必要があります)。 | はい。 |
ツールは経路を自動選択します。プラグインを連携している場合は、fileKey を省略し、id または name を渡してください。
設定
Plumb を試すために設定は不要です。npm run demo は設定なしで実行でき、プラグイン経路(plumb_outline、plumb_node、plumb_selection、…)に必要なのは Figma プラグインとの連携だけです。
ローカルで使用する場合は、.env.example を .env(gitignore 対象)にコピーしてください。Plumb は起動時に作業ディレクトリとパッケージのルートから読み込みます。ただし、MCP クライアントはサーバーを新しいプロセスとして起動するため、キーを設定する場所として最も確実なのは、クライアントのサーバー env ブロックです。
環境変数
| 変数 | 必要な機能 | 未設定時のデフォルト |
|---|---|---|
FIGMA_TOKEN | Figma REST パス(plumb_fig_outline、plumb_fig_node)およびスタンドアロン CLI | REST ツールは指示形式のエラーを返します。プラグイン経由のパスには影響しません |
FIGMA_ACCESS_TOKEN | FIGMA_TOKEN のエイリアス。2番目に確認されます | — |
PLUMB_FILE_KEY | npm run prove、CLI のデフォルトファイル | 代わりに引数として渡す必要があります |
PLUMB_NODE_ID | npm run prove | 131:6950 |
PLUMB_BRIDGE_PORT | ブリッジを1つのポートに固定する場合(コンテナー、同時セッション数が10を超える場合) | 31337~31346 のプールをスキャンします |
PLUMB_BRIDGE_PORTS | 試行するポートの順序付きプール。カンマ区切りで指定し、0 は空きポートを意味します | 組み込みの同じプール |
PLUMB_BRIDGE_HOST | コンテナー内部からブリッジを公開する場合 | 127.0.0.1 — ループバックのみ |
PLUMB_SESSION_NAME | プラグインパネルに表示されるこのセッションのラベル | 現在のディレクトリ名 |
PLUMB_LOG_LEVEL | debug | info | warn | error — ログは常に stderr に出力され、stdout には出力されません | info |
PLUMB_LOG_FORMAT | ログシッパー向けに、1行ごとに1つの JSON オブジェクトを出力する場合は json | 人間が読みやすい行形式 |
NO_COLOR / TERM | 設定はされませんが、plumb-mcp demo で ANSI カラーを無効にする標準的な規約に従います | stdout が TTY の場合はカラー表示 |
PLUMB_ASSETS_DIR | plumb_assets がエクスポートを書き込む場所 | ./plumb-assets/ |
PLUMB_SCREENSHOTS_DIR | plumb_screenshot が PNG を書き込む場所 | ./plumb-screenshots/ |
PLUMB_CACHE_DIR | レスポンスキャッシュのルート | ~/.cache/plumb/ |
PLUMB_CACHE_TTL_MS | キャッシュエントリーの有効期間 | 300000(5分) |
PLUMB_CHROME | plumb_verify / plumb_fit / plumb_import_web 用の Chrome バイナリ | 標準のインストールパスから自動検出されます |
CHROME_PATH | PLUMB_CHROME のエイリアス。2番目に確認されます | — |
ANTHROPIC_API_KEY | スタンドアロンの plumb-mcp fit CLI のみ — すべての MCP ツールでキーは不要です | plumb-mcp fit はセットアップメッセージを表示して終了します |
PLUMB_FIT_MODEL | この CLI のモデルを上書きします | 組み込みのデフォルト |
UNSPLASH_ACCESS_KEY | 書き込み方向で要件に沿った写真を使用します(無料枠) | ランダムな Lorem Picsum のプレースホルダーにフォールバックします |
PEXELS_API_KEY | 同上。代替プロバイダー(無料枠) | 同じフォールバック |
PIXABAY_API_KEY | 同上。代替プロバイダー(無料枠) | 同じフォールバック |
GOOGLE_FONTS_API_KEY | Google Fonts の全カタログを検索します | 人気フォントに絞った検索は引き続き利用できます |
コンテナーで実行する
docker compose up demo # the offline walkthrough, network disabled — start here
docker compose up bridge # bridge + Plumb Studio on http://127.0.0.1:31337
docker compose run --rm mcp # the stdio MCP server, for an editor to attach to
ブリッジは GET /healthz(/health のエイリアス)を提供します。これは稼働状態と、プラグインが実際にペアリングされているかどうかを示し、Compose のヘルスチェックが確認します。また、Prometheus のテキスト形式で GET /metrics も提供します。
bridge は固定ポートを1つ公開します(コンテナーでは公開するポートを事前に指定する必要があるため、ポートのスキャンは行わず、PLUMB_BRIDGE_PORT を使用します)。そのポートはホストのループバックのみにマッピングされるため、ネイティブで実行する場合よりもアクセス範囲が広がることはありません。エクスポートしたアセット、スクリーンショット、キャッシュは plumb-data ボリュームに保存されます。
devcontainer も用意されています。VS Code または Codespaces でリポジトリを開くと、両方のワークスペースがインストールされ、アタッチ時にデモが実行されます。
Kubernetes で実行 — 定期的にデザインの乖離を検出
helm install plumb ./deploy/helm/plumb --namespace plumb --create-namespace
helm test plumb --namespace plumb
kubectl -n plumb port-forward svc/plumb 31337:31337 # Studio + plugin pairing
Helm チャート、プレーンマニフェスト、Terraform モジュールのいずれを使っても、同じ制限付きデプロイを実現できます。すべて CI で検証されます(helm lint、2 つの Kubernetes バージョンの実際の API スキーマに対する kubeconform -strict、terraform validate、Trivy と Checkov によるポリシースキャン、さらにプレーンマニフェストがチャートから乖離しないよう再生成して差分を確認します)。
Plumb をノートパソコンだけでなくクラスターで実行する理由は、継続的なデザイン検証です。CronJob がすでに配信している URL をレンダリングし、すべての [data-plumb-id] 要素を、その要素の作成元である Figma ノードと比較して差分を確認し、乖離があれば失敗します。
verify:
enabled: true
schedule: "0 * * * *"
targets:
- name: dashboard
url: http://app.default.svc.cluster.local/dashboard
node: "190:109884"
デザインのリグレッションは、3 週間後のレビューで誰かが気づくものではなく、タイムスタンプと差分一覧を伴う失敗ジョブになります。
ブリッジには独自の認証機能がありません。セキュリティモデルはループバック接続と、意図的なペアリング操作で成り立っています。そのため、デフォルトでは何も公開しません。ClusterIP、すべてを拒否する NetworkPolicy、Ingress なし、接続方法は
kubectl port-forwardです。deploy/README.mdには、クラスターでできること、できないこと(Figma プラグインは127.0.0.1をスキャンするため、ポートフォワードが必要です)、各スイッチで実際に何が公開されるかが明記されています。
スタンドアロン CLI
2 つのコマンドは、MCP クライアントを介さず、ターミナルから直接実行できます。CI や、エージェントを介さずに Plumb を操作する場合に便利です。
plumb-mcp verify <dev-url> --node <figma-node-id> # diff a running page against the design
plumb-mcp fit <figma-url> # generate + self-correct an HTML build until it matches
plumb-mcp verify に必要なのは FIGMA_TOKEN だけです(ペアリング済みの場合はプラグインを利用できます)。差分を確認するだけで生成はしないため、モデルのキーは不要です。plumb-mcp fit は、このプロジェクト全体で外部モデルを直接呼び出す唯一のコマンドです。HTML ビルド自体を生成する(その作業を行うエージェントがいない)ため、FIGMA_TOKEN に加えて ANTHROPIC_API_KEY が必要です。plumb_fit や plumb_review を含むすべての MCP ツールは、呼び出し元のエージェントが生成や判断を行うため、キーは不要です。
ネットワークの送信先
| 呼び出し元 | 接続先 | 接続するタイミング |
|---|---|---|
| Figma プラグインブリッジ | localhost のみ(WebSocket) | プラグインがペアリングされている間 |
Figma REST(FIGMA_TOKEN の経路) | api.figma.com | プラグインがペアリングされていない場合、またはヘッドレス/CI での利用時のみ |
plumb_import_web / plumb_scan_references / ヘッドレス CLI | 指定したターゲット URL(複数可)。ヘッドレス Chrome(CDP)経由 | これらを呼び出したときのみ |
plumb_studio / plumb_brand によるリファレンス調査 | Plumb がブリーフに応じて選ぶリファレンスサイト | プロンプトからデザインへの書き込み方向のみ |
| Google Fonts | fonts.googleapis.com / fonts.gstatic.com | キャプチャしたデザイン/インポートが Google Font を参照している場合のみ |
UNSPLASH_ACCESS_KEY / PEXELS_API_KEY / PIXABAY_API_KEY の各プロバイダー | それぞれの写真 API | 書き込み方向で、キーが設定されている場合のみ |
plumb-mcp fit CLI | api.anthropic.com | このスタンドアロン CLI コマンドのみ(スタンドアロン CLIを参照) |
上記の通信が勝手に発生することはありません。すべてのネットワーク呼び出しは、実行したツールまたは CLI コマンドに直接起因します。バックグラウンドでのポーリング、テレメトリ、外部への自動通信はありません。
セキュリティ
- ループバック専用の WebSocket ブリッジ。ペアリングできるプラグインは同時に 1 つのみです(意図的なクリックが 1 回必要です)。
- テレメトリはありません。プラグイン経由の場合、個人用アクセストークンは不要です。
- 書き込み方向では外部モデルを呼び出しません。すでに MCP サーバーを操作している AI エージェントがデザインの判断を行います(例外はスタンドアロンの
plumb-mcp fitCLI のみです。スタンドアロン CLIを参照)。
貢献
誤字の修正から、新しい検証チェックの追加、デザインディレクターのアップグレードまで、あらゆる貢献を歓迎します。詳しくはCONTRIBUTING.mdをご覧ください。初めての方は、good first issueラベルをご覧ください。
ライセンス
MIT © Tathagat Maitray。詳細はLICENSEをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
