这是一个模型上下文协议(MCP)服务器,提供了Penpot(开源设计工具)的完全操作能力。该服务器使AI助手能够通过编程方式创建、修改和管理Penpot设计,类似于Figma插件的功能。
🐳 支持多架构Docker镜像: linux/amd64, linux/arm64

通过与使用此MCP服务器的AI助手进行自然对话完全创建的聊天界面示例。请参阅示例7:聊天界面,了解生成此设计的完整对话。
上图展示了如何用自然语言描述一个设计,AI助手将使用MCP服务器的能力在Penpot中创建它——自动处理布局、样式、组件和交互。
list_teams - 列出所有可访问的团队list_projects - 列出所有可访问的项目list_files - 列出项目中的文件get_file - 获取文件数据和结构create_file - 创建新的设计文件rename_file - 重命名现有文件delete_file - 永久删除文件list_pages - 列出文件中的所有页面add_page - 向文件中添加新页面get_page_shapes - 获取特定页面上的所有形状(基本信息)query_shapes - 根据条件查询和过滤形状(如grep)。按类型、区域、颜色、字体、文本内容筛选。选择要返回的字段。适用于批量操作get_shape_properties - 获取特定形状的详细属性(颜色、文本、字体、效果等)rename_page - 重命名页面delete_page - 从文件中删除页面move_shapes - 将形状移动到不同的父级/框架或重新排序create_rectangle - 创建矩形形状create_circle - 创建圆形/椭圆形状create_frame - 创建框架容器create_text - 创建具有对齐方式(左、中、右、两端对齐)、字体和样式的文本元素create_svg - 创建SVG元素create_path - 创建自定义路径(计划中)update_shape - 修改形状属性(位置、大小、样式等)delete_shape - 从设计中移除形状duplicate_shapes - 复制形状(计划中)group_shapes - 组合多个形状(计划中)align_shapes - 对齐多个形状(左、中、右、顶、中、底)distribute_shapes - 均匀分布形状,间距相等(水平、垂直)create_component - 从形状创建可重用组件update_component - 更新组件名称/路径delete_component - 从库中删除组件list_components - 列出文件中的所有组件instantiate_component - 创建组件实例(计划中)create_team - 创建新团队update_team - 更新团队设置delete_team - 删除团队list_team_members - 列出团队的所有成员invite_team_member - 邀请用户加入团队remove_team_member - 从团队中移除成员update_team_member_role - 更新成员权限create_project - 在团队中创建新项目update_project - 更新项目设置delete_project - 删除项目create_share_link - 为文件创建可分享链接list_share_links - 列出文件的所有分享链接delete_share_link - 删除分享链接list_comment_threads - 列出文件中的评论线程get_comments - 获取线程中的所有评论create_comment_thread - 创建新的评论线程add_comment - 向现有线程添加评论update_comment - 更新现有评论delete_comment - 删除评论delete_comment_thread - 删除整个线程update_comment_thread_status - 标记线程为已解决/未解决export_shape - 将形状/框架导出为图像(PNG、JPG、SVG、PDF)list_file_media - 列出文件中使用的所有媒体upload_file_media - 上传图像文件(PNG、JPG、SVG、GIF、WEBP)upload_file_media_from_url - 从URL上传图像delete_file_media - 删除媒体对象clone_media - 从另一个文件克隆媒体upload_font - 上传自定义字体(TTF、OTF、WOFF、WOFF2)list_team_fonts - 列出团队中的所有字体get_font_variants - 获取字体家族的所有变体update_font_variant - 更新字体元数据delete_font_variant - 删除字体变体create_webhook - 为事件通知创建webhooklist_webhooks - 列出团队中的所有webhookupdate_webhook - 更新webhook设置delete_webhook - 删除webhookget_webhook_events - 获取关于webhook事件类型的详细信息search_files - 按名称搜索文件search_projects - 按名称搜索项目search_shapes - 在文件内搜索形状search_components - 按名称搜索组件advanced_search - 跨多种资源类型搜索get_profile - 获取当前用户配置文件update_profile - 更新用户配置文件设置list_recent_files - 列出最近访问的文件get_file_permissions - 获取文件权限get_team_stats - 获取团队统计数据全局安装:
# 全局安装
npm install -g @zcubekr/penpot-mcp-server
# 运行服务器
penpot-mcp-server
# 或者以HTTP模式运行
TRANSPORT=http penpot-mcp-server
或者作为项目依赖安装:
# 作为依赖安装
npm install @zcubekr/penpot-mcp-server
# 使用npx运行
npx penpot-mcp-server
从GitHub容器注册表拉取预构建的多架构镜像:
# 拉取最新版本
docker pull ghcr.io/zcube/penpot-mcp-server:latest
# 或拉取特定版本
docker pull ghcr.io/zcube/penpot-mcp-server:v1.0.0
# 或拉取开发版本
docker pull ghcr
cr.io/zcube/penpot-mcp-server:main-dev
支持的架构:
linux/amd64 (x86_64)linux/arm64 (ARM64/Apple Silicon)git clone https://github.com/zcube/penpot-mcp-server.git
cd penpot-mcp-server
npm install
npm run build
设置您的Penpot凭据作为环境变量:
export PENPOT_API_URL="https://design.penpot.app"
export PENPOT_ACCESS_TOKEN="your-access-token-here"
或者创建一个.env文件(不建议用于生产环境):
PENPOT_API_URL=https://design.penpot.app
PENPOT_ACCESS_TOKEN=your-access-token-here
如果您正在运行自托管的Penpot实例,则需要启用访问令牌支持:
重要提示: 由于公共Penpot实例上的Cloudflare安全限制,您可能需要使用自托管服务器来访问API。
在您的Penpot服务器配置中添加enable-access-tokens:
# docker-compose.yml 或 penpot-config.env
environment:
- PENPOT_FLAGS=...enable-access-tokens
如果有其他标志,请将其追加到列表中:
# 示例:多个标志
environment:
- PENPOT_FLAGS=enable-registration enable-login enable-access-tokens
启用此标志后,重启您的Penpot服务器,并可以从设置 → 访问令牌生成访问令牌。
此服务器支持两种传输模式:
添加到您的Claude Desktop配置(macOS上的~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"penpot": {
"command": "node",
"args": ["/path/to/penpot-mcp-server/dist/index.js"],
"env": {
"PENPOT_API_URL": "https://design.penpot.app",
"PENPOT_ACCESS_TOKEN": "your-access-token"
}
}
}
}
node dist/index.js
为了外部访问,您可以使用HTTP模式和Server-Sent Events运行服务器:
# 使用Docker运行
docker run -d \
--name penpot-mcp-server \
-p 3000:3000 \
-e TRANSPORT=http \
-e PENPOT_API_URL=https://design.penpot.app \
-e PENPOT_ACCESS_TOKEN=your-access-token \
ghcr.io/zcube/penpot-mcp-server:latest
# 使用自定义端口和自托管Penpot
docker run -d \
--name penpot-mcp-server \
-p 8080:8080 \
-e TRANSPORT=http \
-e HTTP_PORT=8080 \
-e PENPOT_API_URL=https://penpot.mycompany.com \
-e PENPOT_ACCESS_TOKEN=
your-access-token \
ghcr.io/zcube/penpot-mcp-server:latest
# 查看日志
docker logs -f penpot-mcp-server
# 停止服务器
docker stop penpot-mcp-server
docker rm penpot-mcp-server
# 使用npm脚本
npm run dev:http
# 或使用环境变量
TRANSPORT=http node dist/index.js
# 使用自定义端口
TRANSPORT=http HTTP_PORT=8080 node dist/index.js
# 必需
export PENPOT_ACCESS_TOKEN="your-access-token"
# 可选
export PENPOT_API_URL="https://design.penpot.app" # 默认值
export HTTP_PORT="3000" # 默认值
export HTTP_HOST="0.0.0.0" # 默认值
# 安全选项
export ALLOWED_ORIGINS="https://example.com,https://app.example.com"
export ALLOWED_HOSTS="localhost,example.com"
export ENABLE_DNS_REBINDING_PROTECTION="true"
一旦运行,服务器将暴露:
MCP端点:http://localhost:3000/mcp
健康检查:http://localhost:3000/health
// 初始化连接(GET请求)
const eventSource = new EventSource('http://localhost:3000/mcp');
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('收到:', data);
};
// 发送消息(POST请求)
fetch('http://localhost:3000/mcp', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'mcp-session-id': sessionId, // 从SSE端点响应获取
},
body: JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'tools/list',
}),
});
# 使用docker-compose
docker compose up -d
# 或使用docker run
docker run -d \
-e TRANSPORT=http \
-e HTTP_PORT=3000 \
-e PENPOT_ACCESS_TOKEN=your-token \
-p 3000:3000 \
penpot-mcp-server:latest
当以HTTP模式运行时:
ALLOWED_ORIGINS限制访问ENABLE_DNS_REBINDING_PROTECTION=true一旦连接,您可以要求您的AI助手:
此服务器使用Penpot的RPC API,其结构如下:
https://design.penpot.app/api/rpc/command/<method-name>Authorization: Token <token>传递Bearer令牌application/json或application/transit+json每次推送和拉取请求都会自动运行所有测试!
GitHub Actions工作流程:
工作流程:.github/workflows/docker.yml → integration-test任务
您还可以针对真实的Penpot实例进行测试:
export PENPOT_API_URL="https://design.penpot.app"
export PENPOT_ACCESS_TOKEN="your-token-here"
# 运行完整的测试套件
npm test
# 或使用npx运行
npx tsx test-tools.ts
测试套件将:
详见TESTING.md中的详细测试指南。
# 创建.env文件
echo "PENPOT_API_URL=https://design.penpot.app" > .env
echo "PENPOT_ACCESS_TOKEN=your-token" >> .env
# 使用Docker Compose运行
docker compose up -d
# 查看日志
docker compose logs -f
# 运行测试
docker compose --profile test up penpot-mcp-test