mcpField
D
dumbwaiter-mcp

dumbwaiter-mcp

github.com/lambdamechanicエージェントワークフロー260 回インストール33 週間前に更新
リポジトリ

dumbwaiter-mcp について

dumbwaiter-mcpは、GitHubのプルリクエスト条件や議論イベントを待つためのClaude向けエージェントスキルです。MCPサーバーを通じて、再起動後も復旧できるキャンセル可能な待機と進捗通知を利用できます。

主な機能

  1. 01待機の開始・確認・キャンセル
  2. 02PRチェック・レビュー・マージの待機
  3. 03PR議論イベントの絞り込みと受信
  4. 04サーバー再起動後の待機復旧

活用シーン

  1. 01PRチェックの成功まで処理を保留
  2. 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|unknown
  • wait.cancel → 保留中の待機をキャンセルします
  • wait.await → 指数バックオフでプロバイダーをポーリングし、進捗通知を送信します。終端状態またはタイムアウトになると完了します

セレクターと条件(GitHub)

  • セレクター:{ "owner": "ORG", "repo": "REPO", "pr": 123 }
  • 対応する condition トークン:
    • checks_succeeded — 統合ステータスが成功
    • checks_failed — 統合ステータスが失敗/エラー
    • pr_merged — マージ済みフラグが true
    • pr_approved — 承認済みレビューが少なくとも 1 件ある
    • changes_requested — 変更を求めるオープンなレビューがある
    • workflow_completed — 完了したワークフロー実行が少なくとも 1 件ある
    • comment_received — 新しい PR コメント/レビュー/リアクションのイベント(下記のストリーミングのセクションを参照)

comment_received では、任意の filters を指定して、対象となるイベントを絞り込めます。省略した場合、since は待機の created_at タイムスタンプをデフォルトとするため、Dumbwaiter は待機の作成後に投稿されたすべての内容をストリーミングします。

基本的なフロー

  1. 待機を開始する
    • 名前:wait.start
    • 引数:{ "provider": "github", "selector": {…}, "condition": "checks_succeeded" }
    • wait_id を取得します
  2. 待機する
    • 名前:wait.await
    • 引数:{ "wait_id": "…" }
    • 進捗通知を確認し、最終結果を処理します
  3. 必要に応じて照会またはキャンセルする
    • 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 が設定されており、対象のリポジトリで有効であることを確認してください。

コメント