关于 webflow-mcp:review-comments
用于审查和分流 Webflow 站点未解决评论串的技能。它会分类并生成报告;启用回复模式时,还可对指定的非开放类评论发布回复。
主要功能
- 01审查未解决的评论串
- 02分类噪声、过时、待处理和页面级评论
- 03检查已有 Agent 回复
- 04仅报告或发布回复
- 05生成 Markdown 分流报告
适用场景
- 01分流特定站点的评论
- 02跨站点检查未解决评论
- 03找出可执行的设计反馈
- 04为过时评论发布解决建议
MCP 相关
使用 Webflow MCP 工具查找站点、获取评论串及回复;启用回复模式时,也会发布评论回复。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ webflow/ webflow-skills --skill webflow-mcp:review-comments安装后在 Claude Code 中输入/webflow-mcp:review-comments确认已加载。
详细介绍
审查 Webflow 网站上的未关闭评论线程,并对每个线程进行分类。
输入: $ARGUMENTS — 网站名称(例如 "Workhaus")、网站 ID(例如 6808fd4eff835ee3af009d6f),或上述任一项加上 -reply 标志(例如 Workhaus -reply)。
标志:
-reply— 除了撰写报告外,还会对每个非开放线程发布机器人回复。不带此标志时,此技能仅生成报告(只读)。
在开始时解析 $ARGUMENTS:从输入中去掉 -reply 以获取网站标识符;如果存在 -reply,则设置 replyMode = true,否则设置为 false。
第 1 步 — 确定网站
如果网站标识符为空或仅含空白字符 — 跨网站评论调查
- 调用
data_sites_tool > list_sites获取所有网站。翻页,直到全部收集完毕。 - 对每个网站,调用
data_comments_tool > list_comment_threads,参数为isResolved: false和limit: 100。翻页,直到收集完所有未解决的线程。如果 API 不支持isResolved筛选,则获取所有线程,并在客户端筛选出isResolved === false的线程。每批处理 20 个网站(在一次工具调用中批量执行多个操作)。每批完成后,记录一行进度:Batch {N}/{total} done (sites {start}–{end}): {summary of findings, e.g. "all 0 threads" or "SiteName has X threads, rest 0"}. - 对每个网站,计算:
unresolvedCount= 未解决线程总数newestDate= 该网站所有未解决线程中最大的lastUpdated值(将 ISO 格式转换为易读日期,例如 "Apr 3, 2026")。如果没有线程,则显示—。oldestDate= 该网站所有未解决线程中最小的lastUpdated值(将 ISO 格式转换为易读日期)。如果没有线程,则显示—。
- 按
unresolvedCount降序排列网站。取前 10 个。 - 在表格上方显示标题行:
### 已检查 {totalSiteCount} 个网站 — {sitesWithUnresolved} 个网站有未解决评论。 - 按以下格式显示表格(仅将网站名称链接到
https://webflow.com/design/{siteId}):
| Site | Unresolved Comments | Newest / Oldest |
|------|---------------------|-----------------|
| [Site Name](https://webflow.com/design/{siteId}) ({siteId}) | {N} | {newestDate} / {oldestDate} |
- 表格后告知用户:"运行
/webflow-mcp:review-comments <site name or ID>以审查特定网站。" - 将调查结果写入文件:
- 确保
comment-reviews/存在(如果不存在,则使用mkdir comment-reviews创建)。 - 文件名:
comment-reviews/triage-report-{YYYY-MM-DD-HH-MM}.md,使用当前本地时间(数字补零)。 - 文件内容:加粗的 H1 标题
# **Webflow 评论审查**,然后空一行,再写 H3 行### 报告创建时间:{人类可读的日期、时间和时区,例如 "April 16, 2026 at 10:39 AM PDT"},然后空一行,再写第 5 步中的 H3 标题行,以及第 5–6 步中的完整表格(Markdown 格式)。 - 写入后记录文件路径,例如:
Report written to comment-reviews/triage-report-2026-04-16-14-30.md。
- 确保
- 停止 — 不要继续执行第 2 步。
如果网站标识符看起来像 Webflow 网站 ID(24 位十六进制),则直接使用它。
否则,调用 data_sites_tool > list_sites,查找 displayName 与标识符匹配的网站(忽略大小写)。如果没有匹配项,告知用户并停止。
第 2 步 — 获取所有开放线程
此处始终进行新的 API 调用 — 不要重复使用对话中较早获取的线程数据。用户可能在上次运行后添加或解决了评论。
调用 data_comments_tool > list_comment_threads,参数为 isResolved: false 和 limit: 100。翻页,直到收集完所有线程。
记录:Site: {displayName} 和 Found {N} open thread(s)。
第 3 步 — 构建页面级元素映射
根据已获取的线程列表,构建 elementId.element → Set<pageId> 的频率映射,涵盖所有线程。任何出现在 2 个或更多不同页面上的 elementId.element 几乎肯定是页面根元素或 body 元素(真正的元素 ID 应限定于单个页面范围;只有共享的结构根元素会在多个页面重复)。
无需调用 API — 这是对线程数据进行的本地计算。
第 4 步 — 梳理每个讨论串
对于每个讨论串:
4a — 获取回复
针对该讨论串调用 data_comments_tool > list_comment_replies。
4b — 去重检查
查找 content 包含字符串 — 🤖 Comment Review Agent 的回复。
如果找到,记录最新的一条(lastAgentReply)。如果在 lastAgentReply.createdOn 之后没有任何人工回复,则跳过此讨论串(跳过计数加 1,继续处理下一个讨论串)。
4c — 计算元素上下文
elementId=thread.elementId?.element- 如果
elementId在第 3 步频率映射中的 2 个或更多不同pageId上出现,则isPageLevel= true
4d — 对讨论串分类
使用以下标准:
noise — 没有实际设计或工程价值:
- 测试/占位文本(“hello world”“testing”“asdf”、随机字符)
- 没有诉求的随意反馈(“looks nice”“nice!”“hey hey”)
- 没有提供任何新信息的重复意见
stale — 有实际问题,但已过时且可能已处理:
- 超过 14 天且没有回复或后续跟进的实质性评论
- 可能已解决的问题(“beta 会持续多久?”“这个对比度好吗?”)
- 正常评审本应发现的待办事项
open — 有实际且可执行的问题,需要关注:
- 明确的任务(“应使用句首字母大写格式”“修复图片”“查看名称与本地化的关系”)
- 仍需做出设计决策
- 具体明确的问题
page-level — 评论位于页面根级别,而非特定元素上:
- 当
isPageLevel为 true 时使用此分类 - 评论没有锚定到任何特定元素——可能是有意为之,也可能是已删除元素留下的孤立评论
4e — 编写回复
始终编写回复文本(无论何种模式,报告中都会显示):
- noise:用一句话确认可以安全解决。例如:
"看起来是测试文本,可以安全解决。" - stale:说明已过天数,建议解决,并邀请对方重新提出。例如:
"此评论已有 302 天,且没有后续跟进。可以安全解决——如果问题仍然相关,请在此回复。" - open:不编写回复文本——仅在报告中列出。
- page-level:用一句话说明该评论未关联到特定元素。例如:
"此评论位于页面根级别,而非特定元素上——可能是已删除元素留下的孤立评论。如果不再相关,可以安全解决。"
在每条回复文本后追加 \n\n— 🤖 Comment Review Agent。
4f — 发布回复(仅当 replyMode = true 时)
如果 replyMode 为 true 且判定结果不是 open,则使用编写好的回复内容调用 data_comments_tool > create_reply。
按以下格式记录每个讨论串:
{VERDICT_EMOJI} {verdict} "{preview (60 chars)}"
{one-sentence classification reason}
↳ {reply posted | no reply — report only | skipped}
判定表情符号:noise = 🗑,stale = 🕰,open = 🔴,page-level = 📄
第 5 步 — 编写报告
处理完所有讨论串后:
- 检查工作目录顶层是否存在
comment-reviews/目录。如果不存在,使用mkdir comment-reviews创建。 - 将 Markdown 报告写入
comment-reviews/{slugified-site-name}-comments-triage-report.md(小写字母、连字符,不含特殊字符)。
报告格式:
# Comment Review — [{siteName} ({siteId})](https://webflow.com/design/{siteId})
**Run:** {human-readable date and time}
**Mode:** {Report only | Report + replies posted}
**Threads:** {total} total | 🔴 {open} open | 🕰 {stale} stale | 📄 {page-level} page-level | 🗑 {noise} noise | ⏭ {skipped} skipped
---
## 🔴 Needs Attention ({count})
| Comment | Author | Age | Link |
|---------|--------|-----|------|
| "{first 80 chars of content}" | {author.name} | {age in days}d | [Open ↗]({thread.url}) |
## 🕰 Stale — Candidates to Resolve ({count})
| Comment | Author | Age | Suggested Reply | Link |
|---------|--------|-----|-----------------|------|
| "{first 80 chars of content}" | {author.name} | {age in days}d | {composed reply text, without the `— 🤖 Comment Review Agent` suffix} | [Open ↗]({thread.url}) |
## 📄 Page-level — Not Anchored to a Specific Element ({count})
| Comment | Author | Age | Suggested Reply | Link |
|---------|--------|-----|-----------------|------|
...
---
**🗑 Noise:** {count} thread(s) — {if replyMode: "replied to" | if report-only: "suggested replies in report"}. Safe to bulk-resolve.
没有条目的部分使用 _None._。
记录一行摘要,并确认报告路径。