Penpot-MCP:基于MCP协议实现AI智能体与设计工具的深度集成
模型上下文协议(MCP)作为一种标准化接口协议,为AI模型提供了统一访问外部工具和数据源的能力,其核心原理是通过定义服务器与客户端的通信规范,实现AI能力的模块化扩展。在工程实践中,MCP协议通过解耦AI模型与具体工具,大幅提升了AI应用的灵活性和可集成性,为自动化工作流构建提供了基础架构支持。在UI/UX设计领域,结合Penpot等开源设计平台,MCP协议能够将设计资产转化为结构化数据,使AI助
1. 项目概述:当设计工具遇上AI智能体
最近在折腾AI智能体(Agent)的生态,发现一个挺有意思的项目: montevive/penpot-mcp 。简单来说,这是一个桥接器,它把开源的UI/UX设计平台Penpot,和当下火热的模型上下文协议(Model Context Protocol, MCP)连接了起来。这意味着,你可以让像Claude、Cursor这类搭载了MCP客户端的AI助手,直接“看见”并操作你的Penpot设计文件了。
这解决了什么痛点?作为设计师或者前端开发者,我们经常在设计和开发之间反复横跳。设计师在Penpot里画好了高保真原型,标注了间距、颜色、字体,但开发者要手动把这些样式一点点敲成CSS代码。或者,产品经理想基于现有设计稿快速生成一份用户旅程说明文档,又得截图、标注、复制文字,流程繁琐且容易出错。 penpot-mcp 的出现,就是让AI成为这个过程中的“超级助手”。AI不再只是基于你的文字描述去凭空生成一些可能不靠谱的设计建议,而是能基于你真实的、正在进行的项目文件,进行精准的读取、分析甚至执行修改操作。
这个项目适合谁?首先是 设计师 ,尤其是那些对设计系统、组件化开发有追求的团队设计师,可以通过AI快速检查设计稿的一致性,或者批量修改样式。其次是 前端工程师 ,可以极大地加速从设计稿到代码的转换过程,甚至自动生成组件代码框架。最后是 产品经理和全栈开发者 ,能够利用AI基于设计稿自动生成产品需求文档(PRD)、用户故事,或者进行设计走查和评审。本质上,它是为所有工作流中涉及“设计资产”与“文本化指令”互转的从业者,提供了一个智能化的提效接口。
2. 核心架构与MCP协议解析
2.1 MCP:AI的“标准化外设接口”
要理解 penpot-mcp ,必须先搞懂MCP是什么。你可以把它想象成电脑的USB协议。在没有USB之前,鼠标、键盘、打印机各有各的接口,配置起来非常麻烦。MCP之于AI模型,就如同USB之于电脑主机,它定义了一套标准化的协议,让不同的AI模型(主机)能够以一种统一的方式去发现、连接和使用各种各样的工具、数据源(外设)。
MCP的核心是 服务器(Server) 和 客户端(Client) 模型。 penpot-mcp 在这里扮演的就是一个 MCP服务器 的角色。它对外暴露了一系列标准的“能力”,比如“读取文件列表”、“获取某个画板(Artboard)的详细信息”、“修改某个图层的颜色”等。而像Claude Desktop、Cursor这类应用,则内置了 MCP客户端 。当你配置好 penpot-mcp 服务器后,客户端就能自动发现它,并将它的能力“注入”到AI模型的上下文中。于是,当你在聊天框里对AI说:“帮我看一下首页画板里所有按钮的间距是否一致”,AI就能通过MCP协议调用 penpot-mcp 服务器提供的方法,去你的Penpot文件里获取真实数据,然后进行分析并回答你。
这个设计的精妙之处在于 解耦 。Penpot不需要为了适配每一个AI助手去开发插件;AI助手也不需要专门学习Penpot复杂的内部API。大家只要共同遵守MCP协议,就能实现互联互通。 penpot-mcp 就是这个协议在Penpot领域的实现。
2.2 Penpot-mcp的组件与工作流
这个项目本身结构清晰,主要包含以下几个核心部分:
-
资源(Resources) :这是MCP的核心概念之一,代表AI可以访问的“数据实体”。
penpot-mcp将Penpot中的关键元素映射为资源,例如:penpot://file/{file-id}: 代表一个Penpot设计文件。penpot://page/{page-id}: 代表文件中的一个页面。penpot://board/{board-id}: 代表一个画板(Artboard)。penpot://component/{component-id}: 代表一个组件(Symbol)。 当MCP客户端连接后,AI就能像浏览文件夹一样,“看到”你当前可访问的这些设计资源列表。
-
工具(Tools) :这是AI可以执行的“动作”。
penpot-mcp提供了一系列工具函数,例如:list_files: 列出工作空间中的文件。get_board_details: 获取指定画板的详细JSON数据,包括所有图层、样式、文本内容。calculate_colors: 分析设计稿中使用的颜色并生成调色板。generate_code: 根据选定图层或画板,生成对应的React/Vue/HTML+CSS代码片段。update_layer_color: 修改某个图层的填充色或描边色。 这些工具是AI“手”的延伸,让它不仅能看,还能动手修改。
-
连接器与认证 :
penpot-mcp需要通过Penpot的API与你的实际设计文件进行交互。因此,它需要一个 访问令牌(Access Token) 来获得授权。这通常需要在Penpot的设置中生成一个具有相应权限(如读取文件、修改文件)的令牌。服务器启动时,会要求你配置这个令牌以及Penpot实例的地址(如果你用的是自托管版)。
典型工作流 如下:你启动 penpot-mcp 服务器 -> 在Claude Desktop的设置中配置该服务器的地址 -> 重启Claude。之后,你在Claude的聊天界面中,就可以直接说:“打开我的‘电商APP项目’设计文件,把首页画板导出一张PNG图给我。” Claude会通过MCP调用 list_files 找到文件,再调用 get_board_details 获取首页画板数据,最后可能通过其他工具(或结合自身能力)指导你完成导出操作。
注意 :目前
penpot-mcp提供的工具主要集中在“读取”和“分析”,部分“写入”操作(如修改颜色)可能还在完善或实验阶段。在实际使用中,对于关键的生产文件,建议先使用副本进行AI辅助操作测试,避免误操作。
3. 环境部署与配置实操详解
要让 penpot-mcp 跑起来,你需要完成服务器部署和客户端配置两步。下面以最常见的本地开发环境为例,进行详细拆解。
3.1 服务器端:从源码运行
项目是开源的,托管在GitHub上。最直接的运行方式是克隆代码并使用Node.js运行。
# 1. 克隆仓库
git clone https://github.com/montevive/penpot-mcp.git
cd penpot-mcp
# 2. 安装依赖
npm install
# 3. 准备环境变量配置文件
cp .env.example .env
接下来,编辑新创建的 .env 文件,这是配置的核心:
# .env 文件内容示例
PENPOT_ACCESS_TOKEN=your_personal_access_token_here
PENPOT_BASE_URL=https://design.penpot.app # 或你的自托管地址,如 http://localhost:9001
# 可选:服务器监听配置
PORT=3000
HOST=localhost
关键配置项解析:
PENPOT_ACCESS_TOKEN:这是重中之重。你需要登录你的Penpot实例(云端或自托管),进入“设置” -> “API令牌”部分,生成一个新的令牌。务必根据你希望AI拥有的权限来勾选,例如“读取文件”、“写入文件”。 请像保护密码一样保护这个令牌,不要泄露。PENPOT_BASE_URL:默认是Penpot官方云服务地址https://design.penpot.app。如果你在本地或自己的服务器上部署了Penpot,则需改为对应的地址,如http://localhost:9001。PORT和HOST:定义了penpot-mcp服务器本身监听的地址。默认localhost:3000即可,因为MCP客户端通常也在本地运行。
配置完成后,启动服务器:
npm start
# 或使用开发模式,监听文件变化
npm run dev
如果看到类似“Server running on http://localhost:3000”的日志,说明服务器已成功启动。
3.2 客户端配置:以Claude Desktop为例
目前,Anthropic的Claude Desktop是对MCP支持最友好、最稳定的客户端之一。配置过程直观。
- 打开Claude Desktop应用,点击左上角菜单,进入 Settings -> Developer 设置页。
- 找到 MCP Servers 部分,点击 Add Server 。
- 在弹出的配置窗口中,选择 Connection Type 为
stdio(这是penpot-mcp默认的通信方式)。 - 在 Command 字段中,你需要填写启动
penpot-mcp服务器的命令。由于我们已经在本地运行了服务器,这里需要指向我们项目的启动脚本。假设你的项目克隆在/Users/yourname/Projects/penpot-mcp,那么命令可能是:
更可靠的做法是使用node /Users/yourname/Projects/penpot-mcp/src/index.jsnpm start,但需要指定工作目录。Claude Desktop的配置可能不支持直接调用npm,因此更推荐使用node直接运行入口文件。你需要根据项目的实际结构找到入口文件(通常是src/index.js或dist/index.js)。 - (可选)在 Arguments 或环境变量设置中,理论上可以传入配置,但更建议使用我们前面创建的
.env文件,因为其中包含了敏感的访问令牌。 - 点击 Save 保存配置。
重启Claude Desktop 。重启后,当你新建一个对话时,如果配置正确,Claude的回复中可能会提示你它已经连接了新的工具。你也可以直接询问:“你现在可以访问Penpot吗?”或者“列出我的Penpot文件看看。”来测试连接是否成功。
3.3 容器化部署与生产考量
对于团队共享或更稳定的使用场景,将 penpot-mcp 容器化部署是一个更优的选择。项目通常提供了 Dockerfile 。
# 构建Docker镜像
docker build -t penpot-mcp .
# 运行容器,通过环境变量传递配置
docker run -d \
--name penpot-mcp \
-p 3000:3000 \
-e PENPOT_ACCESS_TOKEN=your_token \
-e PENPOT_BASE_URL=https://design.penpot.app \
penpot-mcp
在生产环境中,你需要考虑:
- 安全性 :访问令牌必须通过安全的秘钥管理服务(如Vault)注入,而非硬编码在命令行或镜像中。
- 网络 :确保Docker容器所在的网络能够访问你的Penpot实例(无论是公网还是内网)。
- 客户端配置 :团队每个成员的Claude Desktop都需要配置连接到这个统一的
penpot-mcp服务器地址(例如http://your-server-ip:3000),此时Connection Type应选择http或https,并在对应字段填入URL。
4. 核心功能场景与实战指令手册
配置成功后,才是发挥其威力的开始。下面通过几个具体场景,展示如何与AI协作,将 penpot-mcp 的能力用到实处。
4.1 场景一:设计稿审查与样式审计
指令示例 :“分析文件‘项目仪表盘’中,所有画板内使用的字体种类、大小和行高,并检查是否存在不一致的情况。”
AI背后的操作 :AI会调用 list_files 找到文件,然后遍历每个画板调用 get_board_details ,解析返回的JSON数据,提取所有文本图层的字体属性,最后进行比对分析。
输出可能包括 :
- 一份字体使用清单:主标题使用 Inter Bold 24px,正文使用 Inter Regular 14px/20px等。
- 不一致项提示:“‘数据概览’画板中的次级标题使用了15px行高,而其他画板均为16px。”
- 一致性建议:“建议将行高统一为字体大小的1.25倍,以建立统一的垂直节奏。”
实操心得 :这类审查指令要尽量具体。与其说“检查样式”,不如说“检查所有按钮的圆角半径、填充色和内部间距”。AI通过MCP获取的是原始数据,明确的指令能帮助它进行更精准的分析。第一次运行时,可能会因为文件较大而等待时间稍长,这是正常现象。
4.2 场景二:从设计稿到前端代码
指令示例 :“获取‘登录模态框’画板的详细结构,并为我生成一个使用Tailwind CSS的React组件代码,要求包含所有交互状态(默认、悬停、聚焦)。”
AI背后的操作 :AI获取画板数据后,需要理解图层层级关系(哪些是背景、哪些是输入框、哪些是按钮),识别样式属性(颜色、间距、边框),并将其映射为对应的Tailwind CSS类名和React组件结构。
输出可能包括 :
// LoginModal.jsx
import React from 'react';
const LoginModal = ({ onClose }) => {
const [email, setEmail] = React.useState('');
const [password, setPassword] = React.useState('');
return (
<div className="fixed inset-0 bg-gray-500 bg-opacity-75 flex items-center justify-center p-4">
<div className="bg-white rounded-2xl shadow-xl w-full max-w-md p-6">
{/* 标题和关闭按钮 */}
<div className="flex justify-between items-center mb-6">
<h2 className="text-2xl font-bold text-gray-900">登录</h2>
<button onClick={onClose} className="text-gray-400 hover:text-gray-600">✕</button>
</div>
{/* 表单 */}
<form>
<div className="mb-4">
<label htmlFor="email" className="block text-sm font-medium text-gray-700 mb-1">邮箱地址</label>
<input
id="email"
type="email"
className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
</div>
{/* ... 更多代码 */}
</form>
</div>
</div>
);
};
注意事项 :自动生成的代码是极佳的起点,但绝非最终成品。AI可能无法完美处理复杂的自适应布局(如Flexbox/Grid的微妙设置)、特殊的图标字体或复杂的矢量路径。生成后,开发者必须进行仔细的视觉比对和代码优化,尤其是交互状态和动画细节。
4.3 场景三:设计资产管理与文档生成
指令示例 :“基于‘品牌指南’文件,提取所有颜色变量(HEX和RGB值)、字体样式,并生成一份可供开发直接使用的CSS自定义属性(CSS Custom Properties)代码片段和一份简单的Markdown设计令牌(Design Tokens)文档。”
AI背后的操作 :这需要AI调用颜色计算、文本样式提取等工具,然后按照特定格式组织信息。
输出可能包括 :
/* design-tokens.css */
:root {
/* 颜色 */
--color-primary-500: #3b82f6;
--color-primary-600: #2563eb;
--color-surface-background: #ffffff;
--color-text-primary: #1f2937;
/* 字体 */
--font-family-sans: 'Inter', system-ui, sans-serif;
--text-heading-lg: 700 2rem/2.5rem var(--font-family-sans);
}
# 设计令牌文档
## 色彩
- `primary-500`: 用于主要按钮、重要链接 (#3b82f6)
- `surface-background`: 默认背景色 (#ffffff)
## 排版
- **标题大 (Heading Large)**: `font-weight: 700; font-size: 2rem; line-height: 2.5rem;`
实操心得 :这个场景对设计系统的维护者价值巨大。你可以定期运行此指令,快速同步更新后的设计令牌,确保设计与代码的同步。可以尝试让AI将输出格式化为JSON,便于直接导入到像Style Dictionary这样的设计令牌管理工具中。
5. 高级技巧与自定义扩展
5.1 优化AI指令(Prompt)的精准度
MCP提供了能力,但AI如何使用这些能力,极大程度上依赖于你的指令。低效的指令会导致AI调用不必要的工具或理解偏差。
- 坏指令 :“看看我的设计稿。” (过于模糊,AI不知道要看什么,怎么看)
- 好指令 :“使用Penpot工具,打开名为‘用户中心V2’的最新文件,读取‘个人资料页’这个画板,列出其中所有按钮组件的名称和其使用的背景色值。”
- 进阶指令 :“分析当前文件中的所有画板,找出使用‘警告’或‘错误’语义的红色系颜色,将它们整理成一个表格,包含画板名、图层名、颜色HEX值和建议的统一替换色(例如#dc2626)。”
技巧 :在指令中明确指定使用“Penpot工具”,有时能帮助AI更准确地选择MCP提供的功能,而不是尝试用其内部知识去猜测。指令结构可以遵循“目标-上下文-约束”的模式:先说明要做什么,再提供必要的背景信息,最后给出格式或范围限制。
5.2 探索项目源码与自定义工具
penpot-mcp 是开源的,这意味着你可以根据团队的特殊需求进行定制。例如,你的团队可能有一套内部的设计评审规范,要求每个画板必须有版本备注。
- 定位工具定义 :在项目源码的
src/tools/目录下,你可以看到所有已定义的工具函数,如getBoardDetails.ts、calculateColors.ts。 - 理解数据模型 :在
src/types/或类似目录下,查看Penpot API返回的数据结构定义。理解ShapeLayer、TextLayer、GroupLayer的区别和属性。 - 添加新工具 :你可以模仿现有工具,创建一个新的工具文件,例如
addBoardComment.ts。这个工具需要:- 调用Penpot API中对应的端点(如果存在)。
- 定义好MCP工具所需的输入参数(如
boardId,commentText)。 - 在服务器的主索引文件中注册这个新工具。
- 重新构建与部署 :修改后,重新构建项目并部署你的自定义版本。
注意事项 :自定义开发需要对TypeScript/Node.js和Penpot的REST API有一定了解。务必先查阅Penpot的官方API文档,了解其能力和限制。自定义工具同样需要用户在Penpot中拥有相应的API权限。
5.3 与其他MCP服务器组合使用
MCP的威力在于组合。除了 penpot-mcp ,社区还有 filesystem-mcp (访问本地文件)、 sqlite-mcp (查询数据库)、 github-mcp (操作GitHub)等众多服务器。
你可以想象这样一个工作流:AI通过 penpot-mcp 读取最新的设计稿 -> 通过 filesystem-mcp 找到对应的前端项目代码目录 -> 通过 github-mcp 创建一个新的功能分支并提交生成的组件代码。这一切,都可以在一个连贯的对话中完成。
配置多个MCP服务器后,AI就像一个配备了多种专业工具的瑞士军刀,可以根据你的指令,自动选择最合适的工具链来完成任务。这要求你在给AI指令时,要有一定的“工作流思维”,清晰地规划出步骤。
6. 常见问题排查与性能调优
在实际使用中,你可能会遇到一些问题。以下是一些常见情况的排查思路。
6.1 连接与认证失败
| 问题现象 | 可能原因 | 排查步骤 |
|---|---|---|
| Claude提示“无法连接工具”或列表里没有Penpot工具。 | 1. penpot-mcp 服务器未启动。 2. Claude Desktop配置错误(命令路径、工作目录)。 3. 防火墙/网络阻止了通信。 |
1. 检查服务器终端是否有错误日志。用 curl http://localhost:3000/health (如果暴露了健康检查端点)测试。 2. 仔细核对Claude中MCP Server的Command配置,确保是绝对路径且可执行。尝试在终端手动运行该命令看是否报错。 3. 确认Claude和服务器都运行在localhost,或网络互通。 |
| AI可以列出工具,但执行时提示“认证错误”或“无法访问文件”。 | 1. Penpot访问令牌无效或已过期。 2. 令牌权限不足(例如只有读权限却尝试写操作)。 3. PENPOT_BASE_URL 配置错误。 |
1. 登录Penpot,重新生成令牌并更新到 .env 文件,重启服务器。 2. 在Penpot的令牌设置中,勾选所有你需要的权限(读、写)。 3. 确认 PENPOT_BASE_URL 指向正确的Penpot实例地址,末尾不要有斜杠。 |
6.2 操作执行错误或超时
| 问题现象 | 可能原因 | 排查步骤 |
|---|---|---|
| AI执行“获取画板详情”时卡住很久,然后报超时错误。 | 1. 设计文件过大,包含过多图层或复杂矢量。 2. 网络延迟高(尤其是连接云端Penpot)。 3. 服务器资源(内存)不足。 |
1. 尝试让AI先操作一个较小的、简单的画板进行测试。 2. 对于大文件,可以尝试让AI分页获取或只获取特定页面的数据(如果工具支持)。 3. 检查服务器运行时的内存占用,考虑升级配置或优化代码(如流式处理响应)。 |
| AI生成的代码或分析结果不准确,遗漏了某些元素。 | 1. Penpot的API返回的数据结构可能在某些复杂情况下(如蒙版、布尔运算、嵌套组件)解析不完整。 2. AI在将设计数据转换为代码/分析时出现理解偏差。 |
1. 这是一个已知限制。可以手动在Penpot中简化过于复杂的图层结构,或将其转换为平面化图像后再让AI分析。 2. 提供更精确的指令。例如,明确指定“忽略背景图层”或“只分析Frame类型的图层”。 3. 将任务拆解:先让AI导出画板中所有图层的名称和类型列表给你确认,再针对特定图层进行深入操作。 |
6.3 性能优化建议
- 按需操作 :避免让AI一次性分析整个包含数十个画板的巨型文件。通过指令引导其聚焦于当前需要处理的特定页面或画板。
- 缓存策略 :对于团队使用的共享服务器,可以考虑在
penpot-mcp中实现简单的缓存层,对频繁请求的、不变的文件元信息进行缓存,减少对Penpot API的直接调用。 - 使用自托管Penpot :如果团队对设计数据的读取速度要求极高,且文件量大,将Penpot部署在内网,可以显著降低
penpot-mcp与Penpot服务之间的网络延迟。 - 升级硬件 :如果作为共享服务,确保运行
penpot-mcp的服务器有足够的内存(建议至少2GB)以处理大型设计文件的JSON数据。
7. 未来展望与生态融合思考
penpot-mcp 项目目前处于活跃开发阶段,它展示的是一种范式转变:设计工具不再是一个信息孤岛,而是可以通过标准化协议融入更广阔的智能工作流。从我个人的使用体验来看,它最大的价值不在于替代设计师或开发者,而在于消除那些重复、低效的“信息搬运”工作。
可以预见,未来的迭代可能会在以下几个方向深化:
- 更丰富的工具集 :支持更复杂的设计操作,如批量创建画板、应用组件实例、修改文本内容等。
- 双向同步 :不仅是从设计到代码,也可能实现从代码到设计的反向同步,当开发者在代码库中更新了设计令牌时,能自动反馈到Penpot的设计系统中。
- 更智能的分析 :集成更专业的分析模型,用于检查无障碍设计(WCAG对比度)、移动端适配性、甚至设计美学评分。
- 工作流自动化 :与GitHub Actions、Jenkins等CI/CD工具结合,实现设计稿合并请求(PR)的自动审查、设计系统变更的自动通知等。
对于团队而言,引入这样的工具需要一定的学习成本和流程调整。建议从小范围、特定场景(如设计令牌导出、代码片段生成)开始试点,让团队成员亲身体验其提效效果,再逐步推广到更复杂的工作流中。同时,务必建立好数据安全和操作权限的规范,明确哪些AI操作是允许的,哪些关键文件需要保护,避免自动化工具带来意外的风险。
更多推荐




所有评论(0)