关于 figma-shaders
figma-shaders 是一项通过 Figma MCP 服务创建和更新账户库着色器的技能,涵盖类型选择、源码编写、验证及交付流程,面向 Figma 着色器创作者。
主要功能
- 01效果与填充着色器流程
- 02检查并替换着色器源码
- 03处理动画与鼠标元数据
- 04着色器构建错误处理
- 05生成 Figma Design 试用链接
适用场景
- 01根据视觉需求创建着色器
- 02更新着色器并保留现有控件
- 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 必须与现有着色器一致。
创建工作流
- 判断请求属于效果还是填充。只有在无法从视觉意图判断时才询问。
- 确定
planKey。如果用户提供了该值,则沿用;否则调用whoami。如果只有一个符合条件的计划,则自动使用;如果有多个差异显著的计划,则请用户选择。 - 只调用一次
create_shader,并传入简洁的名称、描述、所选kind和planKey。此操作会创建起始脚手架,而不是用户要求的最终着色器。 - 使用返回的
id调用get_shader,然后读取每个源 URI。如果客户端无法读取 MCP 资源,则改为调用get_shader并设置includeSource: true。这一步用于确定运行时导入项和脚手架固定的元数据约定。 - 编写完整的
main.ts,以实现所需效果。 - 使用返回的
id调用update_shader,传入相同的kind、files: [{ path: "main.ts", content: "..." }],以及具体的commitMessage。更改名称、描述或动画能力时使用metadata。如果源代码读取与时间相关的帧输入,则设置metadata.isAnimated: true;如果读取frame.mousePosition,则设置metadata.usesMouse: true。
绝不要在调用 create_shader 后就停止:起始脚手架只是结构上的起点。
更新工作流
- 使用
list_shaders确定着色器,然后调用get_shader。将其type(effect或fill)用作必需的更新类型。 - 编辑前读取
get_shader返回的每个源 URI。如果客户端无法读取 MCP 资源,则调用时设置includeSource: true。将这些文件视为当前事实来源。 - 除非用户要求更改,否则保留现有控件和行为。
- 调用
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 中不得包含尖括号或竖线。