mcpField
R
reviewthread

reviewthread

ローカル
github.com/CloudCorpRecordsバージョン管理01 週間前に更新

reviewthread について

reviewthreadは、指定されたPull Requestのレビューコメントを、対応が必要、ノイズ、クローズ、古いコメント、重複に分類します。順序付きのルールを適用し、コメントを取得せずに各判定の根拠を示します。

主な機能

  1. 01コメントを5種類に分類
  2. 02順序付きルールによる判定
  3. 03分類ごとの根拠を提示
  4. 04コメントとスレッド状態を入力
  5. 05取得処理のない分類

活用シーン

  1. 01Pull Requestのコメントをまとめて整理
  2. 02ボットの投稿から対応が必要な指摘を特定
  3. 03解決済み、古い、重複したコメントを識別

MCP 対応

MCP サーバーは `triage_review_comments` を提供し、呼び出し元から渡されたレビューコメントを分類して、判定、根拠、件数、合計を返します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"cloudcorprecords-reviewthread": {
"command": "npx",
"args": [
"-y",
"@reneturcios/reviewthread"
]
}
}
}
起動コマンドnpx -y @reneturcios/reviewthread

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@reneturcios/reviewthread0.1.0
ocighcr.io/cloudcorprecords/reviewthread:0.1.0

ツール

1

掲載時のツール一覧 · 1 週間前に更新

パラメーター型必須説明
commentsarrayはい分類するレビューコメント

詳細

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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。