dumbwaiter-mcp について
dumbwaiter-mcpは、GitHubのプルリクエスト条件や議論イベントを待つためのClaude向けエージェントスキルです。MCPサーバーを通じて、再起動後も復旧できるキャンセル可能な待機と進捗通知を利用できます。
主な機能
- 01待機の開始・確認・キャンセル
- 02PRチェック・レビュー・マージの待機
- 03PR議論イベントの絞り込みと受信
- 04サーバー再起動後の待機復旧
活用シーン
- 01PRチェックの成功まで処理を保留
- 02プルリクエストの新しいコメントに対応
MCP 対応
このスキルはClaudeによるdumbwaiter-mcpのstdio MCPサーバー利用を案内します。ツールで待機の開始、実行、確認、キャンセルができ、イベント配信中に進捗通知を送ります。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ lambdamechanic/ skills --skill dumbwaiter-mcpインストール後、Claude Code で/dumbwaiter-mcpを入力して読み込まれたか確認します。
詳細
Dumbwaiter MCP:変更を待機
目標:コードホスト上で「X が起きるまで待機する」ための、Claude 向けの単一かつ安定した方法を提供します(現在は GitHub、次は GitLab)。このスキルでは、Dumbwaiter MCP サーバーのツールをいつ、どのように使うかを Claude に説明します。
前提条件
- サーバー:このリポジトリは 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)
- セレクター:
{ "owner": "ORG", "repo": "REPO", "pr": 123 } - 対応する
conditionトークン:checks_succeeded— 統合ステータスが成功checks_failed— 統合ステータスが失敗/エラーpr_merged— マージ済みフラグが truepr_approved— 承認済みレビューが少なくとも 1 件あるchanges_requested— 変更を求めるオープンなレビューがあるworkflow_completed— 完了したワークフロー実行が少なくとも 1 件ある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 で、チェックが通るまで待機します。」
- 開始 →
{ provider: "github", selector: { owner: "acme", repo: "widgets", pr: 42 }, condition: "checks_succeeded" } - 待機 →
{ wait_id }
- 開始 →
- 「UTC の午前 0 時以降に PR 42 に投稿された新しいコメントをすべてストリーミングします。」
- 開始 →
{ provider: "github", selector: { owner: "acme", repo: "widgets", pr: 42 }, condition: "comment_received", filters: { since: "2025-01-01T00:00:00Z", include_bots: true } } - 待機 → コメントごとの進捗イベントと最終サマリーペイロードを受信します
- 開始 →
トラブルシューティング
- ステータスが
unknown:wait_idが見つかりませんでした(DB の消去、またはプロジェクトが間違っている可能性があります)。 - 進捗イベントがない:ホストが MCP 通知に対応していること、およびサーバーが接続されていることを確認してください。
- 認証エラー:
GITHUB_TOKENが設定されており、対象のリポジトリで有効であることを確認してください。