reviewthread について
reviewthreadは、指定されたPull Requestのレビューコメントを、対応が必要、ノイズ、クローズ、古いコメント、重複に分類します。順序付きのルールを適用し、コメントを取得せずに各判定の根拠を示します。
主な機能
- 01コメントを5種類に分類
- 02順序付きルールによる判定
- 03分類ごとの根拠を提示
- 04コメントとスレッド状態を入力
- 05取得処理のない分類
活用シーン
- 01Pull Requestのコメントをまとめて整理
- 02ボットの投稿から対応が必要な指摘を特定
- 03解決済み、古い、重複したコメントを識別
MCP 対応
MCP サーバーは `triage_review_comments` を提供し、呼び出し元から渡されたレビューコメントを分類して、判定、根拠、件数、合計を返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| comments | array | はい | 分類するレビューコメント |
詳細
reviewthread
プルリクエストのレビューコメントスレッドには、あらゆる内容が集まります。メンテナーが実際に壊れているチェックを指摘したコメント、ボットの「LGTM」、同じカバレッジに関する指摘の重複投稿、すでに書き換えられたコードへのコメントなどです。reviewthread は、そうしたコメントのまとまりを、レビュアーが実際に対応する5つの分類(actionable、noise、closed、stale、duplicate)に整理し、それぞれについて、分類の根拠となったルールを正確に示すので、判定を鵜呑みにせず確認できます。
コメントごとに、ID、投稿者名、投稿者がボットか人間か、本文、スレッドの状態(open、resolved、outdated)、および任意で、コメントが現在失敗しているチェックに紐づいているかどうかと、重複している別のコメントのIDを指定します。データの取得は行われません。分類は、渡された内容だけに基づく純粋関数です。
ルールは決まった順序で実行され、最初に一致したルールが適用されます。スレッドが解決済みならclosed、古くなっていればstaleとなり、コメントのほかの条件は考慮されません。トリミング後のduplicate_ofが空でなければduplicateとなり、根拠にはトリミング後の対象IDが示されます。失敗しているチェックに紐づくコメントはactionableです。これは、ボットが何を言っていても、ほかのすべてのルールより優先されます。投稿者が判定に関係するのはその後です。本文をトリミングし、小文字に変換し、連続する空白を1つにまとめ、末尾の!と.を取り除いた結果が、lgtm、looks good to me、ship itなど、定められた11個のフレーズのいずれかと完全に一致する、称賛だけのボットコメントはnoiseとなります。また、失敗しているチェックがない場合、それ以外のボットコメントもnoiseとなります。残りの、未解決の人間によるコメントはactionableとなります。
判定上の扱いが明確に定められている項目が2つあります。duplicate_ofがない、空、または空白のみの場合、重複はないものとして扱います。また、称賛かどうかは定められたフレーズとの完全一致で判定します。たとえば、ボットが「great job, but the tests fail」と投稿した場合、正規化した本文全体がフレーズと一致しないため、称賛だけのコメントではなく、一般的なボットコメントとして扱われます。
不正な入力(comments配列がない、または空である、コメントがオブジェクトではない、idまたはauthorがない、空、または文字列ではない、author_kindがbot/human以外、bodyがない、または文字列ではない、stateがopen/resolved/outdated以外、failing_checkがブール値ではない、またはduplicate_ofが文字列ではない場合)は、該当するパスを示す検証エラーになります。部分的な結果は返されません。コメント項目内を含む不明な追加フィールドは無視されます。
CLI
npx @reneturcios/reviewthread triage --input args.json
npx @reneturcios/reviewthread --version
args.jsonには引数オブジェクト全体が含まれます。
{
"comments": [
{
"id": "c1",
"author": "ci-bot",
"author_kind": "bot",
"body": "Coverage dropped below the threshold.",
"state": "open",
"failing_check": true
},
{
"id": "c2",
"author": "dependabot[bot]",
"author_kind": "bot",
"body": "LGTM!",
"state": "open"
},
{
"id": "c3",
"author": "marisol",
"author_kind": "human",
"body": "This still races when the cache is cold.",
"state": "open"
}
]
}
結果はJSONとして出力されます。
{
"comments": [
{
"id": "c1",
"author": "ci-bot",
"verdict": "actionable",
"evidence": "comment is attached to a failing check"
},
{
"id": "c2",
"author": "dependabot[bot]",
"verdict": "noise",
"evidence": "praise-only bot comment with no failing check"
},
{
"id": "c3",
"author": "marisol",
"verdict": "actionable",
"evidence": "open human comment"
}
],
"counts": {
"actionable": 2,
"noise": 1,
"closed": 0,
"stale": 0,
"duplicate": 0
},
"total": 3
}
終了コード:成功時は0、実行時エラー(読み取り不能または無効な入力ファイル、無効な入力を含む)の場合は1、使用方法のエラーの場合は2です。
MCP server
npx -y @reneturcios/reviewthread mcp
MCP クライアントの設定:
{
"mcpServers": {
"reviewthread": {
"command": "npx",
"args": ["-y", "@reneturcios/reviewthread", "mcp"]
}
}
}
ツール
-
triage_review_comments— 呼び出し元が指定したコメント情報に基づいて、プルリクエストのレビューコメントをactionable、noise、closed、stale、duplicateに分類します。comments(配列、必須、1項目以上) — 分類するレビューコメントです。各項目:id(文字列、必須、空でない) — コメントの識別子author(文字列、必須、空でない) — コメントの投稿者名author_kind(文字列、必須、botまたはhuman) — 投稿者がボットか人間かbody(文字列、必須、空でも可) — コメント本文state(文字列、必須、open、resolved、またはoutdated) — コメントのスレッド状態failing_check(ブール値、任意、省略時はfalse) — コメントが現在失敗しているチェックに紐づいているかどうかduplicate_of(文字列、任意) — このコメントが重複している別のコメントのID
{comments, counts, total}を返します。commentsは各入力コメントに対応する{id, author, verdict, evidence}で、入力順に並びます。countsは{actionable, noise, closed, stale, duplicate}で、キーの順序もこのとおりです。totalは入力コメントの件数です。
Docker
docker run -i ghcr.io/cloudcorprecords/reviewthread
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/reviewthread triage --input /w/args.json
Development
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (pure local, no network)
npm run dev # run the CLI from source
License
MIT — Copyright (c) 2026 Rene Turcios
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。