mcpField
A
approvepath

approvepath

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

approvepath について

approvepathは、PRの変更ファイルをCODEOWNERSの担当者に対応付け、渡されたレビュー履歴から頻繁にレビューした人を特定します。定義されたCODEOWNERSルールの一部に従って入力データだけで計算し、リポジトリやホスティングAPIには問い合わせません。

主な機能

  1. 01順序付きCODEOWNERSルールでファイルを照合
  2. 02最後に一致したルールで担当者を決定
  3. 03ファイルごとの頻出レビュアーを集計
  4. 04未割り当てファイルと必要なレビュアーを表示
  5. 05パスを示す入力検証エラー

活用シーン

  1. 01PR内のファイル担当者を確認
  2. 02変更ファイルを過去にレビューした人を特定
  3. 03担当者が設定されていない変更ファイルを確認

MCP 対応

MCP サーバーは `map_approvals` を公開し、CODEOWNERSルール、変更ファイル、任意のレビュー履歴を受け取り、担当者、頻出レビュアー、未割り当てファイル、必要なレビュアーを返します。

設定

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

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

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

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

ツール

1

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

パラメーター型必須説明
reviewsarrayいいえ過去のレビュー活動(任意):{reviewer, files}
codeownersarrayはいファイル内の順序に沿った CODEOWNERS ルール:{pattern, owners}
changed_filesarrayはいPR で変更されるファイルのパス

詳細

approvepath

CODEOWNERS ファイルには、変更を承認することになっている人が記されています。 レビュー履歴には、実際に誰がレビューに参加したかが記されています。approvepath は、1 つのプルリクエストについてこの 2 つを並べて表示します。CODEOWNERS のルール、PR が変更するファイル、手元にある過去のレビュー活動を渡すと、ファイルごとに、ルールで割り当てられたオーナーと、そのファイルそのものを過去にレビューした人を返します。

パターンの照合には、固定された CODEOWNERS セマンティクスの一部を使用するため、どの CODEOWNERS 方言を想定していたかによって結果が変わることはありません。比較の前に、パターンとファイルパスの両方から先頭の / を取り除きます。末尾が / のパターンはディレクトリのプレフィックスで、そのディレクトリ以下のすべてのファイルに一致します。* を含むパターンはパス全体に一致するグロブです。** は / を含む任意の文字列に一致し、単一の * は / を除く任意の文字列に一致します。それ以外のパターンは、完全一致するファイル、またはそのパターンに / を付けたものをプレフィックスとする配下のファイルに一致するため、ディレクトリ名だけのパターンはそのディレクトリ以下全体のオーナーになります。

複数のルールが同じファイルに一致する場合は、ファイル内で最後に一致したルールが適用されます。これは CODEOWNERS 自体と同じ上書きルールであり、広い範囲に一致する先行ルールがサブツリーをチームに割り当てた後、より限定的な後続ルールがその一部を別のオーナーに戻せる理由です。どのルールにも一致しないファイルはオーナーなしとなり、owners リストは空、pattern は null になります。また、入力順で unowned_files にも表示されます。

レビュー履歴は単純に集計されます。変更されたファイルごとに、frequent_reviewers は、レビュー担当者ごとに、その担当者の提供されたレビューエントリーのうちファイルを正確に列挙している数を数えます。プレフィックス一致やディレクトリ一致はカウントされません。レビュー担当者は、件数の降順、次に名前の昇順で並べられ、上位 3 名のみが報告されます。required_reviewers には、PR 全体で適用されたすべてのルールのオーナーが重複なく集められ、ソートされます。これは「この PR に実際に承認が必要なのは誰か?」への、最も簡潔で正確な回答です。

すべての処理は引数だけを使ってローカルで行われます。リポジトリは読み込まず、ホスティング API も呼び出さず、推測もしません。パターンが空のルール、空でない文字列ではない変更ファイル、レビュー担当者が欠落しているレビューエントリーなど、不正な入力は、該当するパスを示す検証エラーとなり、部分的な結果は返されません。

CLI

npx @reneturcios/approvepath map --input args.json
npx @reneturcios/approvepath --version

args.json には引数オブジェクト全体を格納します。

{
  "codeowners": [
    { "pattern": "src/", "owners": ["@core"] },
    { "pattern": "src/api/", "owners": ["@api-team", "sam"] }
  ],
  "changed_files": ["src/api/handler.ts", "README.md"],
  "reviews": [
    { "reviewer": "sam", "files": ["src/api/handler.ts"] },
    { "reviewer": "lee", "files": ["src/api/handler.ts"] }
  ]
}

reviews は省略可能で、省略時のデフォルトは [] です。結果は JSON として出力されます。

{
  "files": [
    {
      "file": "src/api/handler.ts",
      "owners": ["@api-team", "sam"],
      "pattern": "src/api/",
      "frequent_reviewers": [
        { "reviewer": "lee", "reviews": 1 },
        { "reviewer": "sam", "reviews": 1 }
      ]
    },
    {
      "file": "README.md",
      "owners": [],
      "pattern": null,
      "frequent_reviewers": []
    }
  ],
  "unowned_files": ["README.md"],
  "required_reviewers": ["@api-team", "sam"]
}

終了コード:成功時は 0、実行時エラー(読み取り不能または無効な入力ファイル、無効な入力を含む)時は 1、使用方法のエラー時は 2 です。

MCP server

npx -y @reneturcios/approvepath mcp

MCP クライアントの設定:

{
  "mcpServers": {
    "approvepath": {
      "command": "npx",
      "args": ["-y", "@reneturcios/approvepath", "mcp"]
    }
  }
}
ツール
  • map_approvals — プルリクエストの承認経路をマッピングします。

    • codeowners(配列、必須、空でも可)— ファイル順の CODEOWNERS ルール。各エントリーは {pattern, owners} で、pattern は空でない文字列、owners は空でない文字列の配列です(空でも可)。
    • changed_files(文字列の配列、必須、空でない)— PR が変更するファイルのパス
    • reviews(配列、省略可能、デフォルトは [])— 過去のレビュー活動。各エントリーは {reviewer, files} で、reviewer は空でない文字列、files は文字列の配列です(空でも可)。

    {files, unowned_files, required_reviewers} を返します。files には、入力順で変更されたファイルごとに 1 つの {file, owners, pattern, frequent_reviewers} エントリーが格納されます。

Docker

docker run -i ghcr.io/cloudcorprecords/approvepath
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/approvepath map --input /w/args.json

開発

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

ライセンス

MIT — Copyright (c) 2026 Rene Turcios

コメント

MCP は初めてですか?

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

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