mcpField
W
webflow-mcp:review-comments

webflow-mcp:review-comments

github.com/webflow生产力133693 次安装今天更新
代码仓库

关于 webflow-mcp:review-comments

用于审查和分流 Webflow 站点未解决评论串的技能。它会分类并生成报告;启用回复模式时,还可对指定的非开放类评论发布回复。

主要功能

  1. 01审查未解决的评论串
  2. 02分类噪声、过时、待处理和页面级评论
  3. 03检查已有 Agent 回复
  4. 04仅报告或发布回复
  5. 05生成 Markdown 分流报告

适用场景

  1. 01分流特定站点的评论
  2. 02跨站点检查未解决评论
  3. 03找出可执行的设计反馈
  4. 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 步 — 确定网站

如果网站标识符为空或仅含空白字符 — 跨网站评论调查
  1. 调用 data_sites_tool > list_sites 获取所有网站。翻页,直到全部收集完毕。
  2. 对每个网站,调用 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"}.
  3. 对每个网站,计算:
    • unresolvedCount = 未解决线程总数
    • newestDate = 该网站所有未解决线程中最大的 lastUpdated 值(将 ISO 格式转换为易读日期,例如 "Apr 3, 2026")。如果没有线程,则显示 —。
    • oldestDate = 该网站所有未解决线程中最小的 lastUpdated 值(将 ISO 格式转换为易读日期)。如果没有线程,则显示 —。
  4. 按 unresolvedCount 降序排列网站。取前 10 个。
  5. 在表格上方显示标题行:### 已检查 {totalSiteCount} 个网站 — {sitesWithUnresolved} 个网站有未解决评论。
  6. 按以下格式显示表格(仅将网站名称链接到 https://webflow.com/design/{siteId}):
| Site | Unresolved Comments | Newest / Oldest |
|------|---------------------|-----------------|
| [Site Name](https://webflow.com/design/{siteId}) ({siteId}) | {N} | {newestDate} / {oldestDate} |
  1. 表格后告知用户:"运行 /webflow-mcp:review-comments <site name or ID> 以审查特定网站。"
  2. 将调查结果写入文件:
    • 确保 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。
  3. 停止 — 不要继续执行第 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 步 — 编写报告

处理完所有讨论串后:

  1. 检查工作目录顶层是否存在 comment-reviews/ 目录。如果不存在,使用 mkdir comment-reviews 创建。
  2. 将 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._。

记录一行摘要,并确认报告路径。

评论

支持 Markdown