mcpField
F
figma-shaders

figma-shaders

github.com/figma设计与 UI2.1k544 次安装今天更新
代码仓库

关于 figma-shaders

figma-shaders 是一项通过 Figma MCP 服务创建和更新账户库着色器的技能,涵盖类型选择、源码编写、验证及交付流程,面向 Figma 着色器创作者。

主要功能

  1. 01效果与填充着色器流程
  2. 02检查并替换着色器源码
  3. 03处理动画与鼠标元数据
  4. 04着色器构建错误处理
  5. 05生成 Figma Design 试用链接

适用场景

  1. 01根据视觉需求创建着色器
  2. 02更新着色器并保留现有控件
  3. 03排查着色器构建失败

MCP 相关

该技能指导 MCP 客户端使用 Figma MCP 服务的着色器工具,包括 create_shader、get_shader 和 update_shader,并读取着色器源码资源。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/figma/mcp-server-guide --skill figma-shaders

安装后在 Claude Code 中输入/figma-shaders确认已加载。

附带文件references/authoring.md

详细介绍

创建和更新 Figma 着色器

每次调用 create_shader 或 update_shader 之前,都要加载此技能。它涵盖通过 Figma MCP 服务编写账号库中的着色器。读取或应用现有着色器无需此技能。

着色器分为两种:

  • effect 会采样并变换其下方已渲染的图层。适用于模糊、扭曲、发光、色彩分级、像素化、半色调或其他后期处理。
  • fill 无需输入光栅图像即可生成像素。适用于渐变、图案、噪声、纹理和程序化背景。

更新时不要擅自切换类型。传给 update_shader 的 kind 必须与现有着色器一致。

创建工作流

  1. 判断请求属于效果还是填充。只有在无法从视觉意图判断时才询问。
  2. 确定 planKey。如果用户提供了该值,则沿用;否则调用 whoami。如果只有一个符合条件的计划,则自动使用;如果有多个差异显著的计划,则请用户选择。
  3. 只调用一次 create_shader,并传入简洁的名称、描述、所选 kind 和 planKey。此操作会创建起始脚手架,而不是用户要求的最终着色器。
  4. 使用返回的 id 调用 get_shader,然后读取每个源 URI。如果客户端无法读取 MCP 资源,则改为调用 get_shader 并设置 includeSource: true。这一步用于确定运行时导入项和脚手架固定的元数据约定。
  5. 编写完整的 main.ts,以实现所需效果。
  6. 使用返回的 id 调用 update_shader,传入相同的 kind、files: [{ path: "main.ts", content: "..." }],以及具体的 commitMessage。更改名称、描述或动画能力时使用 metadata。如果源代码读取与时间相关的帧输入,则设置 metadata.isAnimated: true;如果读取 frame.mousePosition,则设置 metadata.usesMouse: true。

绝不要在调用 create_shader 后就停止:起始脚手架只是结构上的起点。

更新工作流

  1. 使用 list_shaders 确定着色器,然后调用 get_shader。将其 type(effect 或 fill)用作必需的更新类型。
  2. 编辑前读取 get_shader 返回的每个源 URI。如果客户端无法读取 MCP 资源,则调用时设置 includeSource: true。将这些文件视为当前事实来源。
  3. 除非用户要求更改,否则保留现有控件和行为。
  4. 调用 update_shader 时,在 files 数组中传入完整替换版 main.ts,而非差异或部分代码片段。只有仅更新元数据时,files 数组才可以为空。

编写规则

  • 在编写 main.ts 替换内容之前,请阅读 Shader source authoring。其中包含必需的模块结构、WebGPU 生命周期、受支持的参数架构、效果/填充的 alpha 规则以及 WGSL 故障排查清单。
  • 使动画元数据与源码保持一致。如果 main.ts 读取 frame.time、frame.deltaTime 或 frame.frame,请设置 metadata.isAnimated: true;如果读取 frame.mousePosition,请设置 metadata.usesMouse: true。移除最后一处此类用法时,请将对应值设为 false。即使无法直接替换固定的 features.json 清单,update_shader 也会将这些元数据字段应用到该清单。
  • 动画优先使用 frame.time,这样跳过帧不会改变结果。它是以毫秒为单位的绝对时钟;需要时可使用 Number(frame.time) * 0.001 将其转换为秒。
  • 为用户可能会按图层调整的值提供控件;将实现细节硬编码。
  • 限定数值范围,并设置视觉效果实用的默认值。
  • 对于效果,请有意采样输入栅格。对于填充,不要假设存在输入栅格。
  • 将非错误的 update_shader 结果视为成功。如果返回了版本,请记录该版本;成功响应可能不包含版本。
  • 遇到构建错误时,请使用返回的编译器输出进行最小幅度的源码修正,然后重试一次。如果仍然失败,请报告错误,不要反复重写 Shader。
  • 如果工具报告动画或鼠标输入不可用,请将其视为不可绕过的能力限制:不要重试,也不要尝试绕过。可以提出编写静态 Shader,并在 Motion 模式下为其公开属性设置关键帧。

完成

报告 Shader 的名称、类型和 ID,以及返回的版本(如果有)。简要说明新增的控件或行为。构造并附上一个可点击的 URL,用于打开新的 Design 文件,其中包含已准备好供用户试用的未发布 Shader;使用确切的 Shader ID 作为 try-tool-resource-content-id。根据 Shader 类型设置 try-tool-resource-type:效果使用 gen_effect,填充使用 gen_fill。

https://www.figma.com/file/new?try-tool-resource-content-id=<id>&try-tool-resource-type=<gen_effect|gen_fill>&type=design&mode=design

提供新文件链接后,询问用户是否想在现有的 Figma Design 文件中打开该 Shader。如果想,请重用用户已提供的文件 URL,或向用户索取;然后将相同的 try-tool-resource-content-id 和已确定的 try-tool-resource-type 查询参数添加到该 URL。切勿猜测文件 URL。

将类型占位符替换为且仅替换为一个值;返回的 URL 中不得包含尖括号或竖线。

评论

支持 Markdown