关于 forms-builder
forms-builder 是用于创建、编辑和发布 monday.com WorkForms 的技能,面向需要通过表单收集并整理提交内容的用户。它将每次提交映射为关联看板上的新项目,并说明表单配置与平台限制。
主要功能
- 01创建表单及关联看板
- 02添加多种类型的问题
- 03配置标题、外观和提交规则
- 04编辑问题、选项与顺序
- 05设置激活状态、密码和提交限制
适用场景
- 01收集错误报告或功能请求
- 02登记潜在客户或活动报名
- 03创建内部请求表单
- 04调整现有表单的问题和设置
MCP 相关
该技能通过 monday.com MCP 工具操作 WorkForms 和关联看板,包括创建、读取及更新表单。文档也指出表单布局目前无法通过 MCP 修改。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mondaycom/ skills --skill forms-builder安装后在 Claude Code 中输入/forms-builder确认已加载。
详细介绍
表单构建器
创建、编辑和发布 monday.com WorkForms。每个 WorkForm 都配有一个后端看板:每次提交表单都会在该看板上创建一个新项目,表单中的问题会映射到看板的列。表单是入口,看板是提交结果的去向。
核心限制——请先阅读
WorkForms 只能创建新项目,不能更新现有项目。 这是平台的硬性限制,并非技能限制。如果用户要求创建一个“让人们更新其工单”或“编辑现有条目”的表单,请引导他们改用其他方式:可以通过关联看板问题将新提交关联到现有项目,但提交表单始终会在该表单的看板上创建新行。对于状态更新类流程,建议采用其他方案(项目级更新字段、单独的更新跟踪看板,或根据引用信息查找并更新项目的自动化)。
计划层级说明
所有 monday 计划(包括 Free 和 Basic)都提供表单。WorkForms 默认显示品牌标识(“Powered by monday.com”),只有 Pro 及以上计划才能移除。 如果用户要求移除品牌标识,请先确认计划,或提醒他们:此操作需要使用 updateAppearance 和 hideBranding: true,并且在 Free / Basic / Standard 计划上会静默失败。
工作流:创建表单
步骤 1:确认目标工作区
表单必须位于某个工作区中。如果用户未指定,请询问,或使用用户的主工作区。需要选择时,请调用 list_workspaces。工作区 ID 是调用 create_form 时唯一必需的参数。
步骤 2:确定表单用途,然后调用 create_form
表单用途决定了问题集。常见类型包括:
- Bug 报告: 标题、严重程度、环境、复现步骤、截图上传、报告者邮箱。
- 功能请求: 标题、描述、使用场景、业务影响、客户数量、链接。
- 潜在客户收集: 姓名、工作邮箱、公司、职位、如何得知我们。
- 活动报名: 姓名、邮箱、饮食需求、场次偏好。
- 内部请求: 请求者、请求类型(单选)、背景信息、截止日期、优先级。
调用 create_form 时传入:
destination_workspace_id(必需)destination_name(看板名称;省略时默认为表单标题)- 如果用户希望将看板放在特定文件夹中,则传入
destination_folder_id或destination_folder_name board_kind默认为public;如果表单回复包含敏感信息,则使用private
保存返回的 formToken——后续每次编辑都需要用到它。
create_form 不接受表单标题参数。 无论 destination_name 是什么,表单标题栏默认都是“New Form”(destination_name 仅用于命名后端看板)。在向用户展示 URL 之前,务必在调用 create_form 后接着调用 update_form,并使用 action: "updateFormHeader" 设置有意义的标题(以及可选的副标题/描述)。如果跳过这一步,WorkForms 界面中的每个表单都会显示为“New Form”,这会让终端用户和浏览表单列表的表单所有者感到困惑。
第 3 步:构建问题集
对每个问题使用 form_questions_editor,并设置 action: "create"。根据字段的用途确定问题类型:
| 用途 | 类型 |
|---|---|
| 单行自由文本 | ShortText |
| 多行自由文本 | LongText |
| 是/否 | Boolean |
| 多选一 | SingleSelect(长列表设置 display: "Dropdown",短列表设置 Vertical) |
| 多选多 | MultiSelect |
| 数值 | Number |
| 金额 / 数量 / 分数 | Number |
| 日期 | Date |
| 日期范围 | DateRange |
| 电子邮件 | Email |
| 电话 | Phone |
| Web URL | Link |
| 国家/地区 | Country |
| 地址 / 地图点 | Location |
| 文件上传 | File |
| 评分(1-5) | Rating |
| 人员 / 负责人 | People |
| 静态说明 | DISPLAY_TEXT |
| 分区标题 | PAGE_BLOCK |
| 已关联的现有项目 | ConnectedBoards |
| 提交者姓名 | Name |
| 评论 / 更新字段 | Updates |
| 电子签名 | Signature |
仅对确实会阻止提交的字段设置 required: true。必填项过多会降低回复率。
对于 SingleSelect 和 MultiSelect,必须设置 options。每个选项都需要一个 label 和一个稳定的 value。平台可能会在创建时将字符串 value 规范化为数字字符串("0"、"1"、"2"……),因此你发送的 value 仅供参考——创建后务必调用 get_form 读取规范化后的选项值,再进行任何后续编辑。表单收到实际提交后,不得更改规范化后的值;更改会破坏历史回复的数据完整性。
第 4 步:发布前向用户展示问题集
创建所有问题后,用 Markdown 表格或指向底层看板的 show-table 小组件对问题进行汇总。包含问题文本、类型和是否必填。激活表单前,请用户确认或编辑。
第 5 步:确认公开访问权限并分享
表单默认创建为已激活状态。create_form 返回后,表单 URL 即可使用。如果用户需要草稿状态(仍在调整问题),请立即调用 update_form 并设置 action: "deactivate",完成问题后再调用 activate。否则,直接分享 URL。表单 URL 格式如下:
https://forms.monday.com/forms/{formToken}?r=use1
回复中同时包含表单 URL 和底层看板 URL。用户两者都需要——表单用于分享,看板用于监控提交情况。
第 6 步:建议后续操作
最后提供 2-3 个后续操作建议:
- “要我将布局从 OneByOne 切换为 Classic 吗?”——新表单默认使用 OneByOne(每个屏幕显示一个问题,通过“下一步”导航)。Classic(所有问题显示在同一可滚动页面上)更适合大多数运营和内部表单。每次都要提示用户选择。今天无法通过 MCP 更改布局(见下文);此建议是引导用户前往 monday UI 中的 Form Settings -> Layout。
- “要我缩短表单 URL 吗?”
- “要为表单设置密码吗?”
- “要我将此链接发送到 Slack 频道吗?”
- “要设置提交次数限制或关闭日期吗?”
- “要移除 WorkForms 品牌标识吗?(仅限 Pro+。)”
已知 MCP 缺陷:无法通过 API 更改表单布局。 update_form 设置 action: "updateAppearance" 时,接受 layout.format 且不会报错,但该值会被静默忽略——表单仍保持 OneByOne。已通过多种参数组合确认。不要尝试调用 API 后声称操作成功;更改不会生效。请引导用户前往表单编辑器中的 Form Settings -> Layout,并用通俗易懂的语言指导操作。请与 monday MCP 团队跟进此问题。
工作流:编辑现有表单
步骤 1:解析 formToken
如果用户粘贴了表单 URL,请提取令牌:https://forms.monday.com/forms/{TOKEN}?r=use1 -> {TOKEN} 是 /forms/ 和 ? 之间的字母数字字符串。
如果用户说出了表单名称,请使用 search 工具并设置 searchType: "BOARD" 来查找关联的看板,然后针对任一候选令牌调用 get_form。(MCP 目前没有直接搜索表单的工具;表单可通过其关联的看板访问。如果这会阻碍用户操作,请将其标记为已知缺口。)
步骤 2:获取当前状态
使用 formToken 调用 get_form。它会返回问题、结构、外观和功能标志。写入前务必先读取——补丁采用合并式更新,缺少上下文会导致更新出错。
步骤 3:应用更改
选择合适的工具:
- 添加 / 更新 / 删除单个问题:
form_questions_editor。 - **重新排序问题:**使用
action: "updateQuestionOrder"和完整的问题 ID 排序数组调用update_form。 - **标题和说明:**使用
action: "updateFormHeader"调用update_form。 - **品牌标识、布局、颜色、徽标:**使用
action: "updateAppearance"调用update_form。 - **提交规则(匿名、回复上限、关闭日期、需要登录、验证码):**使用
action: "updateFeatures"调用update_form。 - **激活 / 停用 / 缩短 URL / 设置密码:**使用对应操作。
步骤 4:确认
用通俗语言总结:更改了什么、保留了什么,以及表单 URL。不要叙述 API 调用过程。
常见编辑
**在末尾添加问题:**使用 action: "create" 调用 form_questions_editor,不要设置 insert_after_question_id。问题会追加到末尾。
**在两个现有问题之间插入问题:**调用 get_form 获取前一个问题的 ID,然后使用 insert_after_question_id: "<predecessor_id>" 创建问题。
**将字段设为必填:**使用 action: "update"、该问题的 id、现有 type 和 required: true 调用 form_questions_editor。更新时必须始终发送 type 字段。
**更新选择题选项,同时保留过去的回复:**先调用 get_form,将每个现有选项的 value 复制到更新中,然后只添加或修改标签。省略已有选项会将其删除。
**有条件地显示 / 隐藏问题:**在问题上使用 show_if_rules。规则支持 AND/OR 组合,条件可引用其他问题 ID 和答案值。
**重新排序问题:**使用 action: "updateQuestionOrder" 和完整的排序列表调用 update_form——必须包含每个现有问题 ID,即使顺序未变也要包含。完成重新排序后,调用 get_form 重新同步问题 ID——平台会在重新排序时重新分配任何 PAGE_BLOCK(分区标题)的 ID(例如,page_block__classic_default 会变为 page_block77dy0px4)。如果跳过重新同步,缓存的 PAGE_BLOCK ID 会在下次编辑时返回 404。
**使问题标题与列名称同步:**使用 action: "updateFeatures" 和 monday.syncQuestionAndColumnsTitles: true 调用 update_form。适用于用户编辑关联看板并希望表单同步更新的情况。
**移除 WorkForms 品牌标识(Pro+):**使用 action: "updateAppearance" 和 appearance.hideBranding: true 调用 update_form。
**关闭表单,不再接受新回复:**使用 action: "deactivate" 调用 update_form。使用 action: "activate" 重新激活。若要在指定日期关闭,请使用 updateFeatures,并设置 closeDate.enabled: true 和 closeDate.date: "<ISO timestamp>"。
**为表单设置密码保护:**使用 action: "setFormPassword" 和 formPassword: "<password>" 调用 update_form。请另行告知密码——它不会显示在表单 URL 中。
智能默认值
当用户未指定所有值时:
- **表单名称和看板名称:**如果用户为表单指定了名称,则默认将其关联看板的名称设为相同名称。在回复中说明此默认值。
- **工作区:**如果用户未提供工作区,只询问一次。不要猜测。
- **必填标记:**默认为 false,但明显的主要标识符除外(潜在客户表单中的电子邮件、错误报告中的标题)。
- **问题顺序:**按用户列出的顺序,从上到下排列。
- **创建后表单是否处于启用状态:**是 -
create_form会返回一个已启用且可公开访问的表单。如果用户希望先预览,暂不接收回复,请立即调用deactivate,并在准备就绪后重新启用。 - 表单标题:
create_form默认将标题设为 "New Form"。创建后,务必通过update_formaction: "updateFormHeader"显式设置标题——使用用户指定的表单名称(如果未提供,则使用表单用途,例如 "Bug Intake")。在确认信息中说明标题。 - **布局:**平台默认布局为
OneByOne(每个问题单独显示在一张卡片上)。对于大多数运营类和内部表单,Classic(单页滚动)是更合适的默认选项——在第 6 步的后续跟进中说明,不要默默沿用OneByOne。目前无法通过 MCP 设置此选项;请引导用户前往表单编辑器中的 Form Settings -> Layout。 - **品牌标识:**默认保留 WorkForms 品牌标识;后续可告知用户,Pro+ 方案支持移除,不要自动切换设置。
错误预防和修复
- **WorkForms 无法更新已有项目。**如果用户提出此类要求,请引导其改用内部项目更新字段、链接到已有项目的关联看板问题,或单独的更新跟踪工作流。不要承诺平台不支持的功能。
- **表单 URL 显示 "form is not available":**表单可能已停用、已达到回复数量上限,或已超过关闭日期。检查
get_form中的功能状态。调用update_formaction: "activate"重新启用、提高回复数量上限,或延长关闭日期。 - **
updateQuestionOrder拒绝调用:**问题数组必须包含所有已有问题 ID。先调用get_form并列出所有 ID,然后发送完整的排序列表。 - **
updateQuestionOrder后 PAGE_BLOCK 问题 ID 会变化。**平台每次重新排序时都会为PAGE_BLOCK分节标题问题重新分配 ID(例如,page_block__classic_default会变为page_block77dy0px4)。调用updateQuestionOrder后,务必立即调用get_form,并在下一次编辑前刷新所有缓存的 PAGE_BLOCK ID;否则,后续form_questions_editor调用引用旧 ID 时会返回 404。 - **删除下拉选项会造成数据丢失:**更新
SingleSelect或MultiSelect时,如果省略已有选项,该选项就会被删除,导致使用该选项的历史回复受到影响。编辑时务必发送所有选项。 - **
hideBranding: true未生效:**该账户使用的方案低于 Pro。告知用户此限制;不要重试。 - **创建后无法更改问题类型:**要“转换”问题类型,必须先删除再重新创建。原问题的历史回复会丢失。删除前请先征得用户确认。
- **
existing_column_id:**仅当用户明确要求该问题指向特定看板列时才设置。否则,让表单自动创建列,以保持配置简洁。
何时使用 MCP UI 小组件
选择性使用 show-table,不要默认使用:
- **发布前:**当问题数量超过 5 个时,使用
show-table显示关联看板,让用户能在一个视图中查看问题与列的对应关系。问题数量较少时,纯文本摘要更清晰。 - **发布后:**如果用户询问“本周收到了哪些回复”,使用带日期筛选条件的
show-table查看关联看板是合适的做法。启用、停用和单个问题编辑时,用纯文本确认。
不要使用 show-table 来确认单项编辑——提供表单 URL 和一句简短确认即可。
对破坏性操作保持谨慎
执行以下操作前,务必确认:
- 删除已有提交的问题(数据会丢失)。
- 删除已被使用的选择选项(该选项的历史回答会变成孤立数据)。
- 停用面向公众的表单(现有链接会失效)。
- 删除后备看板(也会删除表单)。
创建单个问题和非破坏性编辑无需额外确认——用户已经提出了请求。
使用的工具
list_workspaces- 未提供目标工作区时,查找目标工作区create_form- 创建表单及其后备看板(返回formToken)get_form- 通过 formToken 读取当前表单状态(编辑前务必调用)update_form- 包含 11 项操作,涵盖标题、外观、无障碍功能、功能、问题顺序、标签、激活状态、密码和 URL 缩短form_questions_editor- 创建、更新或删除单个问题search- 仅知道表单用途时,按名称查找后备看板get_user_context- 未指定工作区时,回退到用户的主工作区show-table(按需使用)- 显示后备看板,以供审查问题集或浏览回答
补充说明
formToken是表单 URL 中的字母数字字符串:https://forms.monday.com/forms/{TOKEN}?r=use1。将其视为表单的主键。- 后备看板中的项目代表提交记录。编辑看板列不会编辑表单问题——表单端请使用
form_questions_editor。monday.syncQuestionAndColumnsTitles功能标志有助于保持两者同步。 - 要求登录的表单(
features.requireLogin.enabled: true)会将提交权限限制为同一账户中的 monday.com 用户。 - 对于多语言表单,通过
update_form的action: "updateAccessibility"设置accessibility.language。结合features.ai_translate.enabled: true可生成 AI 翻译。