mcpField
M
MCP Failure Lab

MCP Failure Lab

ローカル
github.com開発ツール01 週間前に更新

MCP Failure Lab について

MCP Failure Labは、ツールエラーからの回復や切断への対応を試すため、意図的に障害を起こすMCPサーバーと制限付きの参照クライアントを提供します。LLMや下流サービスを使わず、決定的なシナリオを実行します。

主な機能

  1. 016種類の決定的な障害モード
  2. 02試行回数を制限した参照クライアント
  3. 03JSON結果とメッセージ形式のトレース
  4. 04Dockerによる分離テスト
  5. 05遅延と失敗回数の設定
  6. 06リリース来歴の検証

活用シーン

  1. 01ツールエラーへのクライアントの対応をテスト
  2. 02一時的な障害からの回復を確認
  3. 03タイムアウトと切断時の動作を観察
  4. 04Agent Trace Clinic向けのトレース生成

MCP 対応

公式TypeScript SDKを使ったMCPサーバーで、障害を注入したシナリオで`lab_probe`ツールを公開します。試行回数を制限した参照クライアントも含み、提供されるサーバーの通信方式はstdioです。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"cloudlabworks-mcp-failure-lab": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"LAB_SCENARIO",
"-e",
"LAB_DELAY_MS",
"-e",
"LAB_FAILURES",
"ghcr.io/cloudlabworks/mcp-failure-lab:0.1.2"
],
"env": {
"LAB_SCENARIO": "<LAB_SCENARIO>",
"LAB_DELAY_MS": "<LAB_DELAY_MS>",
"LAB_FAILURES": "<LAB_FAILURES>"
}
}
}
}
起動コマンドdocker run -i --rm -e LAB_SCENARIO -e LAB_DELAY_MS -e LAB_FAILURES ghcr.io/cloudlabworks/mcp-failure-lab:0.1.2
設定が必要な環境変数
LAB_SCENARIOFault to inject: healthy, tool-error, transient-error, delay, malformed, or disconnect
LAB_DELAY_MSDelay in milliseconds for the delay scenario (0 to 10000)
LAB_FAILURESFailing calls before success for the transient-error scenario (0 to 10)

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

パッケージ
ocighcr.io/cloudlabworks/mcp-failure-lab:0.1.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MCP Failure Lab

OpenSSF Scorecard OpenSSF Best Practices

DOI

意図的に障害を発生させるMCPサーバーと、制限付きのリファレンスクライアントハーネスです。 v0.1.0、MITライセンス。公式MCP TypeScript SDK 2.3.1 を基盤としており、プロトコル実装を置き換えるものではありません。

試す

Dockerが必要です。イメージはNode 24とバージョンを固定したnpm依存関係を使用します。

docker build -t mcp-failure-lab:local .
docker run --rm --network none --read-only --cap-drop ALL --security-opt no-new-privileges mcp-failure-lab:local npm test
docker run --rm --network none --read-only --cap-drop ALL --security-opt no-new-privileges mcp-failure-lab:local node runner.mjs

最後のコマンドは、決定論的な7回の実行結果と、OpenAIメッセージ形式のトレースをJSONで出力します。 言語モデルは使用しません。所要時間は実測した経過ミリ秒であり、ベンチマークではありません。 テストコマンドはリグレッションがあるとゼロ以外の終了コードを返します。デモコマンドは判定結果ではなく、観測内容を出力します。

ローカルで開発する場合は、npm ci --ignore-scripts を実行してから、npm test を実行します。

公開イメージから実行する場合(公式MCP Registry:io.github.cloudlabworks/mcp-failure-lab):

docker run -i --rm -e LAB_SCENARIO=tool-error ghcr.io/cloudlabworks/mcp-failure-lab:0.1.2
リリースの検証

v0.1.2以降、各リリースには publish-mcp ワークフローを通じてSigstoreで署名されたビルド来歴が付属します。GitHub CLIを使用する場合:

gh attestation verify oci://ghcr.io/cloudlabworks/mcp-failure-lab:0.1.2 --repo cloudlabworks/mcp-failure-lab
gh attestation verify mcp-failure-lab-0.1.2.tar.gz --repo cloudlabworks/mcp-failure-lab

2つ目のコマンドは、GitHub Releaseのソースtarballを検証します。オフラインで検証するには、--bundle mcp-failure-lab-0.1.2.tar.gz.intoto.jsonl(同じリリースに添付された来歴ファイル)を追加します。

障害

LAB_SCENARIO注入される動作リファレンスクライアントの想定
healthy通常のツール応答1回成功
tool-errorisError=trueの有効な結果設定された試行回数の上限で停止
transient-error最初のLAB_FAILURES回の呼び出しが失敗試行回数の上限内であれば復旧
delayツール応答の前にLAB_DELAY_MS待機期限内に成功、またはタイムアウト
malformed有効なJSON-RPCエンベロープだが、テキストブロックの値が無効ツール結果を拒否
disconnectツール応答中に終了接続のクローズを報告し、成功とはしない

影響を受けるのは、告知される lab_probe ツールのみです。初期化と検出には公式SDKを使用します。 トランスポートラッパーが破損させるのは 結果の形式 であり、JSONフレーミングではありません。フレームの切り詰め、不正なID、HTTP障害、認証障害は実装されていません。

設定はプロセス起動時に読み込まれます。シナリオはプロセスごとにリセットされます。 LAB_DELAY_MS:整数0~10000(デフォルト1000)。 LAB_FAILURES:整数0~10(デフォルト2)。 値は10進数字のみで指定してください。変数が未設定または空の場合はデフォルトが使用され、それ以外(0x10、1e3、 7)の場合、サーバーは終了コード2で停止します。 リファレンスクライアントが再試行するのは明示的なツールエラーのみで、最大5回です。プロトコルエラー、タイムアウト、切断の場合は直ちに停止します。 ハーネスのツール呼び出し期限は10~10000 msです。SDKの接続および検出の期限は別に設定されています。 生成されるフィクスチャで繰り返し呼び出しが確認できるよう、再試行には意図的にバックオフを設けていません。これは本番環境に推奨される再試行ポリシーではありません。

独自のMCPクライアントを接続する

標準入力/標準出力を接続して、このコマンドを実行する テスト用 MCP接続を設定します。

docker run --rm -i --network none --read-only --cap-drop ALL --security-opt no-new-privileges -e LAB_SCENARIO=transient-error -e LAB_FAILURES=2 mcp-failure-lab:local

{"message":"probe"} を指定して lab_probe を呼び出します。 実際の下流サービス、認証情報、ファイル書き込みツール、待ち受け中のネットワークポートはありません。 付属のリファレンスクライアント以外のクライアント連携は 未検証 です。

Agent Trace Clinicに障害を入力する

このリポジトリで、Clinicを隣にチェックアウトした状態で実行します。

mkdir -p artifacts
docker run --rm --network none --read-only mcp-failure-lab:local node runner.mjs > artifacts/run.json
node --input-type=module -e 'import fs from "node:fs"; const r=JSON.parse(fs.readFileSync("artifacts/run.json","utf8")); console.log(JSON.stringify(r.results.find(x=>x.scenario==="tool-error").trace));' > artifacts/tool-error.json
node ../agent-trace-clinic/cli.mjs artifacts/tool-error.json --html > artifacts/clinic-report.html

Clinicは、このフィクスチャでtool_loop、retry_storm、unhandled_tool_errorを特定するはずです。 これらはヒューリスティックによる手がかりです。意図的に制限された再試行でも検出される場合があります。トークン数は捏造していません。

upstream との関係

MCP conformance は、プロトコルテストにおける上流の権威です。 このプロジェクトは、リカバリー実験のための小規模な障害領域を提供しますが、適合認証を主張するものではありません。 公式フレームワークでは現在、HTTP ベースのクライアント/サーバーシナリオランナーが文書化されています。この初回リリースは stdio のみを対象としています。 上流シナリオアダプターと Streamable HTTP ターゲットは次の予定であり、今回のリリースには含まれていません。

確認したソース:2026-10-14

メンテナンス契約

トランスポートは 1 つ、ツールは 1 つ、障害モードは 6 つ、リファレンスクライアントは 1 つです。SDK をアップグレードする際はバージョンを固定し、すべての障害テストを再実行してください。 オーナー:Cloud Lab Works / Waku。Gherkin のレビューは割り当てられておらず、完了していません。 一般公開の前に、ソース/依存関係のレビュー、独立したテスト実施、公開承認が必要です。 クラウドで実行する前に、ジョブ予算の上限設定、ティアダウン、実行時間の測定が必要です。このリリースにクラウドアカウントは不要です。 テレメトリやリモートレポート機能はありません。生成されたレポートは無視対象の artifacts/ に保存されます。

Agent Reliability Lab

公開デモを開くか、実験ガイドをご覧ください。4 つの制御された変更前/変更後の事例では、公式 MCP リファレンスクライアントを、決定論的な Clinic の検査に接続します。公開サンプルは、ライブのクラウド実行ではなく、記録されたローカルの証拠です。クラウドアダプターと運用手順書も含まれています。

引用

このプロジェクトを使用する場合は、付属のプレプリントを引用してください。 MCP Failure Lab: Reproducible Tool-Failure Fixtures and Cross-Platform Traces for Testing Agent Reliability。DOI:10.5281/zenodo.23720942。 要旨と PDF については、論文ページをご覧ください。

@techreport{alvord2026mcp,
  author = {Alvord, Alex},
  title = {{MCP Failure Lab: Reproducible Tool-Failure Fixtures and Cross-Platform Traces for Testing Agent Reliability}},
  institution = {CloudLab Works},
  publisher = {Zenodo},
  year = {2026},
  month = oct,
  type = {Preprint},
  doi = {10.5281/zenodo.23720942},
  url = {https://doi.org/10.5281/zenodo.23720942}
}

コメント

MCP は初めてですか?

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

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