关于 plumb-mcp
Plumb 是以单一 MCP 服务形式提供的设计工程平台,可将 Figma 文件或在线网页统一转换为语义设计图,并用于代码生成与验证。也可根据一句提示词生成并审阅 Figma 页面,适合编码 Agent 使用。
主要功能
- 01读取 Figma 或网页并生成统一语义图
- 02输出压缩后的设计规格以节省 token
- 03对比已实现代码与设计源并给出修复建议
- 04从语义图生成 React/JSX 代码
- 05根据提示词研究参考、提取品牌并生成页面
适用场景
- 01将 Figma 界面实现为代码并进行像素级校验
- 02将现有网页转为可复用的设计规格和 React 代码
- 03根据简短需求生成并迭代 Figma 设计稿
MCP 相关
作为 MCP 服务,它向 Claude Code、Cursor 等 MCP 客户端提供设计读取、代码校验、网页导入和 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 为你节省了 token,或帮你设计了页面,请在 GitHub 上为它点星,让更多人发现它。
Plumb 是一个 AI 原生设计工程平台,以单个 MCP 服务的形式交付。 将它指向 Figma 文件 或 正在运行的网站,它就会把两者规范化为同一张语义设计图——其中包含去重后的设计 token、经 flexbox 解析的布局,以及保守的角色标签(nav / hero / card …)——供编码 Agent 据此构建,并由验证循环进行评估。也可以只给它一行提示词,它就会变身为一位 AI 设计总监:调研一流参考案例、提取品牌风格,并在你的画布上生成完整且符合品牌风格的 Figma 文件,然后反复评审自己的渲染结果,直到达标。
设计 → 代码(Figma 或实时网页,经过验证,而非凭感觉) • 提示词 → 设计(调研 → 品牌 → 生成 → 评审) • 两者底层共用一张语义设计图。 原生支持 MCP,可与 Claude Code、Cursor、Windsurf 或任何支持 Model Context Protocol 的 Agent 配合使用。
📖 完整文档:https://tathagat22.github.io/plumb-mcp/ · 📦 npm:plumb-mcp · 🇨🇳 简体中文 · 🇯🇵 日本語 · 🇰🇷 한국어
专为编码 Agent 打造,适用于 Claude Code、Cursor、Windsurf 以及任何兼容 MCP 的工具。Agent 原生的设计工程:无需仪表板,无需另行看管的应用,也无需人工在 Figma 和编辑器之间搬运像素。它通过桌面应用插件读取 Figma(没有 REST 速率限制,所有套餐均可使用,包括 Free),通过无头 Chrome 读取任何正在运行的网站,通过同一插件将新设计写入 Figma,并返回精简的规范化规格,而不是 Figma API 输出的数十万 token JSON。
为什么称为“设计工程平台”,而不是“Figma 转换器”
大多数 Figma MCP 服务,以及一般的 Figma 转代码工具,都是单向转换:输入 Figma JSON,输出某个框架的代码,就此结束。Plumb 的架构是一个枢纽,而不是一根管道:
- 两个独立来源汇入同一张图。
plumb_node会规范化 Figma 屏幕;plumb_import_web会规范化实时网页的 DOM。无论像素来自哪里,两者最终都会形成同一个与平台无关的语义图,其中包含包含关系、重复组和角色边。 - 每个使用方都能不经修改地处理任一来源。 无论图来自 Figma 还是 URL,
plumb_emit_react生成的 React/JSX 都同样确定。plumb_diff、plumb_audit和plumb_query的角色筛选器在两种来源上也都能以相同方式工作。这就是它是一个平台,而不是在转换器上另行拼接第二个输入源的有力证明。 - 验证会在输出端闭环,而不仅仅是在输入端。
plumb_verify/plumb_fit会将已交付的代码与真实来源进行差异比较,并返回按优先级排序的修复建议——让“看起来没问题”变成可衡量的事实。 - 生成则反向运行这一闭环。
plumb_studio会根据简报创作全新的 Figma 文件,而plumb_review会像plumb_verify评审代码那样评审渲染结果。
一个语义模型。多个输入来源(Figma、Web),多个输出目标(React 代码、Figma 文件),两端都经过验证。这就是这个平台。
两个方向,一个服务
← Figma 或 Web → 代码(读取方向)
你的 Agent 会将屏幕——或通过 plumb_import_web 导入的任意实时 URL——提取为精简的Plumb 设计规范(PDS),并以同一语义图为基础:自动布局已预先解析为 flexbox,设计令牌已去重,角色已标注。它会构建 UI,然后调用 plumb_verify / plumb_fit,将渲染结果与来源进行差异比较,并自行修正至像素级精确。这是唯一一个能让代码闭环的 Figma MCP;也是唯一一个无需 Figma 文件,就能针对普通网页运行完全相同闭环的工具。
→ 提示词 → 设计(写入方向——设计总监)
给 Plumb 一句简短的设计简报——“高端金融科技仪表盘”——它就会像一位资深设计师那样,在你的 Figma 中实时工作:
- 调研参考案例——为你的简报寻找一流网站(Linear、Stripe、Mercury 等),并将它们的实时截图放到 References 页面。
- 提取品牌风格——读取这些网站计算后的 CSS,提炼出协调一致的调色板和字体比例,并整理到 Brand 画板上。
- 生成设计——通过高级设计 DSL 创作完整、符合品牌风格的页面(导航栏、主视觉区、功能、图库、行动号召、页脚),并将其构建为真实的 Figma 节点。
- 评审自己的渲染结果——调用方 Agent(Claude Code / 任何具备视觉能力的 MCP 客户端——作为 MCP 工具运行时无需额外 API 密钥;独立的
plumb-mcp fitCLI 是唯一例外,详见下文的 独立 CLI)会对截图进行评分;Plumb 会将评分与确定性的设计标准及结构差异相结合,然后返回按优先级排序的修复列表,并持续迭代直至达到标准。
这就是通过提示词生成 Figma 设计,并配备自我改进的总监闭环——而不是一次性的模型图。
Plumb 的不同之处
你可能了解的其他 Figma MCP 服务:
- Figma 官方 Dev Mode MCP — 支持双向操作,但受套餐限制且按量计费。
- Framelink — 简单的 REST 封装。只有两个工具。没有验证,还受速率限制。
- cursor-talk-to-figma — 为在 Figma 中工作的设计师提供双向自动化。
而在 MCP 领域之外,更广泛的设计转代码/AI UI 生成器类别——例如 html.to.design、Anima、Locofy,或 v0 和 Builder.io's Visual Copilot 这类以提示词为先的生成器——通常只能单向操作(输入设计,输出代码;或输入提示词,输出代码),没有贯穿两端的共享模型,也没有内置步骤在生成后对照源内容检查输出。
Plumb 是唯一一个既能闭合代码反馈环,又能引导新设计生成的工具,所有这些都基于同一个语义图,不受源内容来自 Figma 还是 URL 的影响。plumb_verify 会告诉你已交付的代码是否确实符合设计(或参考页面);plumb_fit 则将其转变为自我修复循环。plumb_import_web + plumb_emit_react 证明了语义图可以跨来源流转:同一个角色分类器和同一个代码生成器可以直接处理实时网站,全程无需 Figma。至于写入端,plumb_studio / plumb_brand / plumb_design / plumb_review 可以将提示词转化为经过设计和评审的 Figma 文件——无需设计技能、无需单独的设计工具,也无需额外的模型密钥(作为 MCP 工具;需要模型密钥的命令,请参阅 独立 CLI)。
你遇到的是以下问题之一吗?
如果你的 Agent 遇到错误后来到这里,Plumb 很可能可以解决。
| 你看到的错误 | Plumb 的解决方式 |
|---|---|
Figma Dev Mode MCP exceeded the 25k token cap · 351,378 tokens observed | PDS 会对设计令牌去重($c1、$t1……),并将自动布局预先解析为 flexbox。一个包含 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(而非解析后的文本),并提供 plumb_verify 和 plumb-mcp verify CLI,可将渲染后的 DOM 与设计进行对比。 |
| “如何根据提示词生成 Figma 设计?” · “能在 Figma 中设计 UI 的 AI” | plumb_studio — 需求简报 → 调研参考资料 → 提取品牌 → 完整构建 Figma 页面,再进行评审和优化。 |
| “有没有 AI 原生的设计工程平台?” · “AI 设计工程师 Agent” | Plumb — 一个 MCP 服务、一个语义设计图,以 Figma 和 Web 为来源,以代码和 Figma 为目标,并在两端进行验证。 |
| “将网站转换为 Figma” · “将网站抓取为设计系统” · “用 AI 将 HTML 转为 React” | plumb_import_web 可将任何实时 URL 读入与 Figma 屏幕相同的语义图——无需浏览器扩展,也无需手动重绘;plumb_emit_react 则可直接据此生成 React/JSX。 |
安装:npm install -g plumb-mcp → plumb-mcp init — 或者让你的 AI Agent 为你完成设置。
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 会输出结果供脚本使用,如果引擎漏掉任何问题,则以非零状态码退出。
让你的 AI Agent 为你完成设置
在你想使用 Plumb 的项目中,将以下内容粘贴到 Claude Code、Cursor、Windsurf 或任何带有 Shell 的编码 Agent 中。Agent 会负责安装和配置。它会暂停操作,引导你完成仅能由你完成的两个步骤:重启编辑器,并在 Figma 中点击 Pair。
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.
然后,在你的 Agent 中:
# 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(你通过侧载安装的插件主线程)。如果在全新检出代码后有任何步骤失败,那就是一个缺陷——提交问题。
二十八种工具,一个语义图
以下每种工具都会读取或写入上文所述的同一个语义设计图——这使得添加新的来源(Web)或新的目标(React)只需增量扩展,而无需重写。
读取 — Figma 或网页 → 代码
| 工具 | 功能 |
|---|---|
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 | 比较两个 PDS 快照的语义差异,例如“主视觉从 (0, 0) 移到了 (0, 120)”,而非 JSON 差异。 |
plumb_audit | 启发式无障碍检查:文本对比度、按钮触控目标尺寸。 |
plumb_import_web | 导入实时网页的结构和语义,无需连接 Figma。使用与 Figma 设计相同的角色分类器。 |
plumb_emit_react | 根据 PDS 或 plumb_import_web 的结果确定性地生成 React/JSX,两个来源使用同一个生成器。 |
plumb_scan_references | 扫描 N 个实时参考网址,并提取各角色的样式摘要(典型主视觉高度、卡片网格密度、导航样式),以便手动纳入 plumb_design DSL 或 plumb_studio 需求说明;此工具本身不会组合任何内容。 |
编写 — 提示词 → 设计(设计总监)
| 工具 | 功能 |
|---|---|
plumb_studio | 设计总监。 一份需求说明 → 调研参考 → 提取品牌 → 在 Figma 中完成整页设计。返回节点 id 和创作规格,供你评审和完善。 |
plumb_studio_start / plumb_studio_kit / plumb_studio_page | 相同的设计总监流程,拆分为三个可查看的步骤(品牌 + 参考 → 组件套件 → 产品页面),每步之间都可以进行评审;每步位于单独命名的 Figma 页面中,而不是一次不透明的调用。 |
plumb_brand | 需求说明 → 提供最佳实践参考网站的实时截图 + 画布上合成的品牌调色板和字体展示板。 |
plumb_design | 使用 Plumb 的高级设计 DSL 编写设计,并将其构建到 Figma 中(全面控制:页面、区块、组件、动效)。 |
plumb_review | 评审循环:将结构差异、确定性的设计评估标准和调用该工具的 Agent 自身的视觉判断结合为一个分数和排序后的修复建议。无需 API 密钥——驱动 MCP 服务的 Agent 就是创意总监。 |
plumb_source | 为设计查找符合需求的资源(图标、照片、插画、图案)。 |
为什么在令牌效率和质量方面表现出色
- 规格精简。 一个包含 178 个节点、Figma REST JSON 达 351k 令牌的对话,转换为 PDS 后约为 2.6k 令牌——令牌去重、通过 flexbox 解析布局、句柄的深度保持稳定。
- 经过验证,而非凭感觉。
plumb_verify/plumb_fit会将渲染结果与设计进行对比(ΔE2000 感知色彩、阴影、旋转、flex 子项、填充堆栈)——不做像素差异对比,可在 CI 中运行。 - 精心设计,而非默认设置。 写入方向融入了真正的设计工艺:根据尺寸调整字间距、宽裕的区块节奏、从真实参考中提取的品牌调色板、渐变文字、通栏和非对称布局,以及一个基于视觉的导演,它会评估渲染结果并持续优化。
- 理解结构,而不只是几何——也不只理解 Figma。 Plumb 会在原始树的基础上谨慎标记导航栏/主视觉/页脚/侧边栏/卡片(
node.pattern——信号不一致时宁可不标,也不猜),并以此构建功能:plumb_diff按角色描述变更,plumb_audit标记对比度和触控目标问题,plumb_query的select: "role"和plumb_node的collapseRoles会按相同标签筛选并压缩。相同的底层模型也能读取实时网页——plumb_import_web可从任意 URL 提取结构和角色,无需涉及 Figma——而plumb_emit_react则可从任一来源生成确定性的 React/JSX。
两条数据路径
| 插件(主要) | REST(次要,无头模式) | |
|---|---|---|
| 受速率限制 | 否。 读取内存中的文档。 | 是。免费版/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 的别名,在后者之后检查 | — |
PLUMB_FILE_KEY | npm run prove;CLI 的默认文件 | 必须改为作为参数传入 |
PLUMB_NODE_ID | npm run prove | 131:6950 |
PLUMB_BRIDGE_PORT | 将桥接服务固定到一个端口(容器、超过 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 | 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 的别名,在后者之后检查 | — |
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 会发布一个固定端口(容器只能发布已知端口,因此 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 chart、纯清单文件 和 Terraform 模块——三者都会生成相同的加固部署,并且都在 CI 中经过验证(helm lint、针对两个 Kubernetes 版本的真实 API 架构运行 kubeconform -strict、terraform validate、Trivy 和 Checkov 策略扫描,以及重新生成并比较差异,确保纯清单文件不会偏离 chart)。
将 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"
设计回归不再是三周后才有人在评审中注意到的问题,而会成为一个带时间戳和差异列表的失败任务。
该桥接服务本身不提供身份验证——其安全模型依赖回环连接和明确的配对点击。因此,默认配置不会暴露任何内容:ClusterIP、默认拒绝所有流量的 NetworkPolicy、不配置入口,并通过
kubectl port-forward访问。deploy/README.md明确说明了哪些功能可在集群中使用、哪些不可用(Figma 插件会扫描127.0.0.1,因此需要端口转发),以及每个开关具体会暴露什么。
独立 CLI
有两个命令可在任何 MCP 客户端之外直接从终端运行——适用于 CI,或在没有 Agent 参与的情况下驱动 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 构建(没有 Agent 替它完成这项工作),因此除 FIGMA_TOKEN 外还需要 ANTHROPIC_API_KEY。包括 plumb_fit 和 plumb_review 在内的所有 MCP 工具都无需密钥,因为调用工具的 Agent 会负责生成内容或作出判断。
网络出站连接
| 调用位置 | 通信对象 | 时机 |
|---|---|---|
| Figma 插件桥接服务 | 仅 localhost(WebSocket) | 插件配对后随时可能发生 |
Figma REST(FIGMA_TOKEN 路径) | api.figma.com | 仅在插件未配对或用于无头/CI 场景时 |
plumb_import_web / plumb_scan_references / 无头 CLI | 通过无头 Chrome(CDP)访问你传入的目标 URL | 仅在你调用这些工具时 |
plumb_studio / plumb_brand 参考资料研究 | Plumb 为你的需求选择的参考网站 | 仅用于从提示词到设计的写入方向 |
| Google Fonts | fonts.googleapis.com / fonts.gstatic.com | 仅当捕获的设计/导入内容引用了 Google 字体时 |
UNSPLASH_ACCESS_KEY / PEXELS_API_KEY / PIXABAY_API_KEY 提供商 | 相应的图片 API | 仅在写入方向且已设置密钥时 |
plumb-mcp fit CLI | api.anthropic.com | 仅用于这条独立 CLI 命令(参见独立 CLI) |
上述连接都不会自动触发——每次网络调用都由你执行的工具或 CLI 命令直接触发。没有后台轮询、遥测或向外发送数据。
安全性
- 仅限回环连接的 WebSocket 桥接服务;每次只能配对一个插件(需主动点击一次)。
- 零遥测。使用插件路径无需个人访问令牌。
- 写入方向绝不会调用外部模型——负责驱动 MCP 服务的 AI Agent 会作出设计判断(独立
plumb-mcp fitCLI 是唯一例外;参见独立 CLI)。
贡献
欢迎贡献——无论是修正拼写错误、添加新的验证检查,还是升级设计总监。请参阅 CONTRIBUTING.md。初来乍到?浏览 good first issue 标签。
许可证
MIT © Tathagat Maitray。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
