mcpField
R
release-readiness-triage-mcp

release-readiness-triage-mcp

ローカル
github.com/vola-trebla開発ツール023 週間前に更新

release-readiness-triage-mcp について

release-readiness-triage-mcp は、リリースの安全性を評価するエンジニアリングチーム向けの MCP サーバーです。CI 失敗の分類、不安定テストの履歴、コード変更との関連、マイグレーション検査を組み合わせ、リスクに基づく判定を出します。

主な機能

  1. 01CI 失敗のグループ化と分類
  2. 02不安定テストの履歴との照合
  3. 03変更ファイルと失敗テストの関連付け
  4. 04リスクに基づくリリース判定の生成
  5. 05時間依存の失敗パターンの検出
  6. 06マイグレーションのロールバック準備状況の評価

活用シーン

  1. 01リリース前の CI 失敗のトリアージ
  2. 02不安定テストと回帰の可能性の切り分け
  3. 03PR コメント用のリリース推奨事項の作成
  4. 04ロールバックを妨げるマイグレーションの確認

MCP 対応

失敗分析から判定生成までのリリーストリアージツールを MCP クライアントに公開します。不安定テスト、AST 影響分析、Playwright trace の各 MCP サーバーと連携したオーケストレーションにも対応します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"vola-trebla-release-readiness-triage": {
"command": "npx",
"args": [
"-y",
"release-readiness-triage-mcp"
]
}
}
}
起動コマンドnpx -y release-readiness-triage-mcp

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

パッケージ
npmrelease-readiness-triage-mcp0.2.0

ツール

6

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

パラメーター型必須説明
runIdstringいいえCI 実行 ID
branchstringいいえブランチ名
failuresarrayはいCI 実行で失敗したテストのリスト
commitShastringいいえコミット SHA
totalTestsintegerはい実行内のテスト総数
passedTestsintegerはい合格したテスト数
customInfraPatternsarrayいいえインフラストラクチャエラーとして分類する追加の正規表現パターン(文字列)。例:'No space left on device' や 'GCP quota exceeded' などのクラウドプロバイダー固有のメッセージ

詳細

🚦 release-readiness-triage-mcp

npm CI License: MIT

CI ログを読むのはやめて、判定結果を得ましょう。

テストの失敗を集約し、不安定さの履歴と照合して、GO / CONDITIONAL_GO / NO_GO / INVESTIGATE のリリース判定を出力する MCP サーバーです。AI エージェントは、3000 行のログを読むよう頼む代わりに、数秒で失敗した CI のトリアージを行えます。


🤔 問題

実際のコードベースでは、CI では常に何かが失敗します。難しいのは「失敗があるか」ではなく、**「これらの失敗は本当のリグレッションなのか、それともいつものノイズなのか」**という問いです。

答えるには、次の 3 つのシグナルを同時に関連付ける必要があります。

  • 🔍 エラーシグネチャ — 同じ失敗が 12 回繰り返されているのか、それとも 12 種類の異なる問題なのか?
  • 📊 不安定さの履歴 — このテストは信頼性が低いことで知られているのか?
  • 🔗 コードの変更 — 失敗したテストは、実際に変更内容と関係しているのか?

構造化されたツールがなければ、AI エージェントはこれを実行できません。生の CI ログは何千行にも及びます。不安定さのデータベースは外部にあります。コードとテストの対応付けには AST 解析が必要です。この MCP がなければ、エージェントは推測するしかありません。


🛠️ ツール

aggregate_suite_failures

失敗を正規化されたエラーシグネチャごとにグループ化し、繰り返されたエラーを重複排除して、assertion / timeout / network / crash に分類します。クラウド固有のエラーには customInfraPatterns を渡します。

cross_reference_flakiness

各失敗を不安定さの履歴と照合し、KNOWN FLAKY、MILDLY FLAKY、NO HISTORY のいずれかに評価します。

correlate_code_changes

変更されたファイルと失敗したテストを照合します。単独で使用することも、ast-impact-mapper-mcp から事前計算された影響対象テストのリストと組み合わせて使用することもできます。

generate_release_recommendation

最後のステップです。信頼度スコアと詳細な内訳を含む、リスクで重み付けされた判定を出力します。GitHub の PR コメントや Slack 向けに format: "markdown" をサポートしています。

判定レベル:

  • NO_GO — 重大な領域(payment、auth、billing、checkout、security)のリグレッション
  • CONDITIONAL_GO — 低~中リスクの領域(analytics、docs、admin)のリグレッション。リリース前に確認してください
  • GO — すべての失敗が既知の不安定さ、またはインフラストラクチャのノイズ
  • INVESTIGATE — 判定するには不明点が多すぎます

出力内容:

  • aggregate_risk_score — 0.0~1.0。すべてのリグレッションリスク要因を合算した発生確率
  • failing_tests_analysis[] — domain、severity(HIGH/MEDIUM/LOW)、risk_contribution、blast_radius を含む、リグレッションごとの詳細
detect_temporal_failure_patterns

タイムスタンプ付きの過去の失敗を分析し、時間に起因するアーティファクトを特定します。これは、同じ UTC 時刻、曜日、月の日付、または夏時間への移行時にのみ発生する失敗です。パターンが見つかった場合、その失敗はコードのリグレッションではなく、時間に起因するアーティファクトです。

出力内容:

  • temporal_pattern_detected — ブール値
  • clusters[] — テストごとに、pattern_type(hourly | daily | monthly | timezone_shift)、cluster_times、confidence_score
analyze_rollback_readiness

リポジトリをスキャンしてバージョン管理されたマイグレーションファイル(Flyway の V*.sql、Prisma の migration.sql、Liquibase の XML/YAML)を検出し、各操作を追加型(ロールバック可能)または破壊的(前方修正のみ)に分類します。

検出される破壊的操作: DROP TABLE、DROP COLUMN、ALTER COLUMN TYPE、MODIFY COLUMN、TRUNCATE

出力内容:

  • rollback_eligible — ブール値
  • blocking_migrations[] — 各項目に file、line、operation、reason を含みます
  • deployment_strategy — standard | forward_fix_only

🧪 実際の使用例

CI で 5 件の失敗。本物の問題はどれで、ノイズはどれでしょうか?

failures:
  - Auth Suite > login with expired token   → "Expected status 200, got 401"
  - API Suite > health check                → "connect ECONNREFUSED 127.0.0.1:3000"
  - Button Suite > renders button correctly → "Expected null, got <button>Submit</button>"
  - Search Suite > debounce timing          → "Expected 42, received 43"
  - Storage Suite > upload avatar           → "GCP quota exceeded for this project"

changedFiles: ["src/components/Button.tsx"]
affectedTests: ["renders button correctly"]
customInfraPatterns: ["GCP quota exceeded"]
format: "markdown"

出力:

## 🔴 Release Recommendation: NO_GO (75% confidence)

> 1 confirmed regression(s) in critical domain(s) [payment]. Do not release.

**Aggregate risk score:** 1.0

| Category            | Count |
| ------------------- | ----- |
| Total failures      | 5     |
| 🔴 Real regressions | 1     |
| 🟡 Known flaky      | 2     |
| ⚪ Infra blips      | 2     |
| ❓ Unknown          | 0     |

### Risk Breakdown

| Test                                   | Domain | Severity | Risk | Blast Radius |
| -------------------------------------- | ------ | -------- | ---- | ------------ |
| Button Suite::renders button correctly | core   | MEDIUM   | 0.5  | 1            |

### Blockers (must fix before release)

**Button Suite > renders button correctly**

- Test is directly affected by code changes in this commit
- `Expected null, got <button>Submit</button>`

### Safe to ignore

- ~~Auth Suite > login with expired token~~ — Historically flaky: 73% failure rate in history
- ~~API Suite > health check~~ — Error pattern matches infrastructure issues (network)
- ~~Search Suite > debounce timing~~ — Mildly flaky: 22% historical failure rate
- ~~Storage Suite > upload avatar~~ — Error pattern matches infrastructure issues (network)

ツール呼び出しは 1 回。判定も 1 つ。Button.tsx を修正しましょう。


⚡ セットアップ

{
  "mcpServers": {
    "release-readiness-triage": {
      "command": "npx",
      "args": ["-y", "release-readiness-triage-mcp"]
    }
  }
}

🚀 使い方

「CI の実行結果、フレーキーテストのデータベース、この PR で変更されたファイルです。リリースしても安全ですか?」

エージェントが generate_release_recommendation を呼び出し、詳細な分析を含む判定を返します。PR コメントや Slack にそのまま貼り付けられます。

単独で使うことも、次のツールを連携させるメタオーケストレーターとして使うこともできます。


📦 リンク

ライセンス

MIT

コメント

MCP は初めてですか?

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

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