关于 dumbwaiter-mcp
dumbwaiter-mcp 是一项 Agent 技能,指导 Claude 等待 GitHub 拉取请求条件或讨论事件。它通过 MCP 服务提供可恢复、可取消的等待,并发送进度通知。
主要功能
- 01启动、查询和取消等待
- 02等待 PR 检查、评审或合并
- 03筛选并接收 PR 讨论事件
- 04服务重启后恢复等待
适用场景
- 01暂停编排,直到 PR 检查通过
- 02响应拉取请求中的新评论
MCP 相关
该技能指导 Claude 使用 dumbwaiter-mcp stdio MCP 服务。其工具可启动、等待、查询和取消等待,并在事件流传输期间发送进度通知。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lambdamechanic/ skills --skill dumbwaiter-mcp安装后在 Claude Code 中输入/dumbwaiter-mcp确认已加载。
详细介绍
Dumbwaiter MCP:等待状态变化
目标:为 Claude 提供一种统一且稳定的方式,在代码托管平台上“等待 X 发生”(目前支持 GitHub;接下来支持 GitLab)。此技能会教 Claude 何时以及如何使用 Dumbwaiter MCP 服务的工具。
前置条件
- 服务端:此仓库会构建一个 stdio MCP 服务(
cargo build && target/debug/dumbwaiter-mcp)。 - 身份验证:
export GITHUB_TOKEN=…(对于提交状态,只需仓库读取权限)。 - 持久化(可选):通过
DUMBWAITER_DB覆盖./state/dumbwaiter.sqlite。 - 等待设置(可选):
DUMBWAITER_AWAIT_TTL_SECS(默认值为 900),设置DUMBWAITER_ENGINE=1可启用后台引擎(旧别名DUMBWAITER_WATCHER=1仍可用)。
何时使用此技能
- 你需要暂停编排,直到 PR 检查全部通过、PR 合并或检查失败。
- 你需要可持久化的等待,可通过
wait_id取消,并可在重启后恢复。 - 你希望通过 MCP
notify_progress向宿主显示进度更新。
工具概览
wait.start→ 针对某个选择器的条件返回{ wait_id }wait.status→ 返回当前状态:pending|satisfied|failed|timeout|cancelled|unknownwait.cancel→ 取消正在等待的任务wait.await→ 通过指数退避轮询服务提供方;发送进度通知;直至达到终态或超时
选择器与条件(GitHub)
- selector:
{ "owner": "ORG", "repo": "REPO", "pr": 123 } - 支持的
condition标记:checks_succeeded— 综合状态成功checks_failed— 综合状态失败/错误pr_merged— 合并标记为 truepr_approved— 至少有一条已批准的审查changes_requested— 有一条未关闭的审查要求修改workflow_completed— 至少有一次工作流运行已完成comment_received— 收到任何新的 PR 评论/审查/反应事件(见下方的流式处理部分)
对于 comment_received,可选的 filters 可进一步筛选符合条件的事件。如果省略,since 默认为等待的 created_at 时间戳,因此 Dumbwaiter 会流式处理等待创建后发布的所有内容。
正常流程
- 开始等待
- 名称:
wait.start - 参数:
{ "provider": "github", "selector": {…}, "condition": "checks_succeeded" } - 记录
wait_id
- 名称:
- 等待
- 名称:
wait.await - 参数:
{ "wait_id": "…" } - 观察进度通知;处理最终结果
- 名称:
- 按需查询或取消
wait.status或wait.cancel
指南
- 如果宿主可以显示进度,优先使用
wait.await;否则以小于退避上限的间隔(默认 30s)轮询wait.status。 - 始终将最终状态报告给编排器,并在日志/备注中附上
wait_id链接。 - 遇到身份验证错误或速率限制时,给出明确且可执行的提示;不要激进地重试(遵守退避策略)。
- 超时时,返回
timeout和已耗秒数;由调用方决定后续步骤。 - 安全:绝不回显令牌;遵循最小权限原则。
流式 GitHub 评论事件
将 condition 设为 comment_received,并可选添加筛选条件:
{
"provider": "github",
"selector": { "owner": "acme", "repo": "widgets", "pr": 42 },
"condition": "comment_received",
"filters": {
"since": "2025-01-01T00:00:00Z",
"include_bots": true,
"author_allowlist": ["alice"],
"author_denylist": ["bot"]
}
}
wait.await 会针对每条匹配的评论/审查/反应,在返回与流式事件相对应的最终载荷之前发出 notify_progress(包含正文、URL、反应计数和代码上下文)。如果编排器需要对每个单独的讨论事件作出响应,请使用此功能。
示例
- “等待 acme/widgets 中的 PR 42,直到检查通过。”
- start →
{ provider: "github", selector: { owner: "acme", repo: "widgets", pr: 42 }, condition: "checks_succeeded" } - await →
{ wait_id }
- start →
- “流式获取自 UTC 午夜以来 PR 42 上的每条新评论。”
- start →
{ provider: "github", selector: { owner: "acme", repo: "widgets", pr: 42 }, condition: "comment_received", filters: { since: "2025-01-01T00:00:00Z", include_bots: true } } - await → 接收每条评论的进度事件以及最终摘要载荷
- start →
故障排查
- 状态为
unknown:未找到wait_id(数据库已清理或项目错误)。 - 没有进度事件:确认宿主支持 MCP 通知且服务已连接。
- 身份验证失败:确保已设置
GITHUB_TOKEN,且该令牌对目标仓库有效。
评论
支持 Markdown