ResiliReplay - AIエージェントとMCPサーバーのカオステスト
ResiliReplay は、AIエージェントとMCPサーバーを対象とした、ローカル優先・モデル非依存のTypeScript製カオステストツールです。バージョン管理されたトレースを記録し、シード制御された障害を注入して、宣言された証拠に基づいて回復をスコアリングし、初発の因果障害を編集可能なシナリオと実行可能なNode.js回帰テストに変換します。決定論的な経路にはAPIキーやLLM判定は不要で、デモ、MCP監査、複数のレポート形式、GitHub Actionが含まれます。
ResiliReplay は、AIエージェントとMCP(Model Context Protocol)サーバーを対象としたカオステスト/レジリエンス検証ツールです。TypeScript製で、ローカル優先・モデル非依存を特徴とします。基本的な流れは、バージョン管理されたTraceEventを記録し、シード制御された障害を注入して、利用者が宣言した証拠に基づいて回復をスコアリングし、最初の因果障害を編集可能なシナリオと実行可能なNode.js回帰テストに変換するというものです。この決定論的な経路にはAPIキー、有料モデル、Docker、外部アカウント、テレメトリー、LLM判定が一切不要で、オフラインでも再現可能です。
クイックスタートに必要なのはNode.js 20/22とpnpmだけです。リポジトリをクローンし、pnpm install --frozen-lockfile、pnpm build、pnpm demoを実行すると、実際の決定論的ローカルサブプロセスが起動し、3つの障害が注入されます。成功した回復と未回復の失敗がそれぞれスコアリングされ、全レポート形式の出力、失敗トレースのコンパイル、生成された回帰テストの実行まで一通り確認できます。続けて pnpm demo:mcp と pnpm exec resilireplay test scenarios を実行すると、MCPデモを試せます。このデモでは、意図的に脆弱なtoy stdioサーバーと回復力のあるサーバーを監査し、前者では2件の想定されたセーフカナリー(safe-canary)検出が、後者ではゼロ件になります。
実際の利用例として、record コマンドで同梱の決定論的エージェントを記録し、replay でベースラインレポートを生成します。実在のエージェントフレームワーク向けアダプターも、同じバージョン化されたTraceEventを出力します。MCP監査では、resilireplay mcp audit がデフォルトでtools/listスキーマを取得し、reliability_probe という名前のツールだけを呼び出します。ツールの挙動を確認せずに --call-tools を使うべきではありません。MCP呼び出しはサーバー側に副作用を及ぼす可能性があるためです。ループバック以外のStreamable HTTPターゲットには --allow-remote も必要です。
障害注入は組み込みの障害またはレビュー可能なYAMLシナリオで行えます。同じトレース・シナリオ・シードからは常に同じ変異が生成されるため、再現性が保証されます。対応する障害は、有界レイテンシ、タイムアウト、429/5xx、リセット、切断、不正なJSON、重複、古い応答などのプロバイダー/トランスポート系と、ツールのエラー、権限、一時ファイル欠落、結果破損、副作用の重複、ハンドオフ喪失、誤った受信者、古い状態、矛盾する指示、ループなどのツール/ワークフロー系です。失敗トレースを回帰テストに変換するには、generate-test コマンドを使います。最小化されたfixture、シナリオ、manifest、実行可能なnode:testが生成され、manifest.jsonがSHA-256ハッシュで各成果物を関連付けます。
各実行では、ターミナル、JSON、HTML、JUnit、SARIF 2.1.0、manifest、SVGバッジの各レポートを生成でき、ローカル確認、CIアノテーション、コードスキャン連携に利用できます。サンプルレポートでは回復スコア100/100、リトライ1/3、安全性準拠などが示されます。アーキテクチャ上の安定境界は、モデルSDKではなく、厳密でベンダー中立なTraceEventです。リポジトリは @resilireplay/core、trace、reporters、mcp-chaos、proxy、CLI、GitHub Action などのパッケージに分かれており、それぞれイベント/障害エンジン、トレースコンパイラ、レポート生成、MCPカオス、ループバックプロキシ、CLI、CI統合を担当します。
セキュリティ面では、record は指定されたコマンドをそのまま実行するだけで、OSサンドボックスではありません。所有または監査権限のあるMCPサーバーのみを対象とし、--call-toolsを使う前には必ずMCPスキーマを確認してください。認証情報に似た値や機密キーはトレース保存前に編集されますが、ソーストレースにプライベートなアプリケーションデータが含まれる場合、レポート自体を機密のテスト証跡として扱う必要があります。ファイルシステム障害は専用の一時ディレクトリを使用し、出力パスは包含チェックされ、起動プロセスには期限とクリーンアップがあり、リスナーは特別な指定がない限りループバックにバインドされます。SECURITY.md と THREAT_MODEL.md を読むことが推奨されます。
制限事項も明示されています。Streamable HTTPのサポートはstdioほど統合テストが進んでいません。recordはサンドボックスではありません。MCPツール呼び出しはサーバー側副作用を持つ場合があります。因果の最小化は、アダプターがparentIdとcauseIdを提供すると最も効果的です。v0.1.0ではストリーミング出力がレスポンスイベントに集約されます。レポートのハッシュはリンクと整合性を証明するだけで、真正性は証明しません。パッケージはnpmに未公開です。CIでは pnpm quality でローカルゲート全体を実行できるほか、composite action(aliengineering-byte/[email protected])も利用できます。プロジェクトはApache-2.0ライセンスで、決定的・有界・テストでカバーされた貢献を歓迎しています。このプロジェクトはAliによって開発・保守されています。