MCP Fusion/Get started/本番パターン

本番パターン

VinkiusについてAIに質問

部分処理、幻覚したパラメーター、集中負荷、コンテキスト超過、古いデータ、盲目的なリトライ、データ漏えい、書き込み競合という8つの本番障害と、それぞれを解決するMCP Fusionの仕組みを説明します。

フレームワークの強力な機能は、障害パターンとして覚えると理解しやすくなります。以下の各項目は、本番で実際に起こる障害の種類と具体的な仕組みを示しており、単なる標語ではありません。

複数ステップ操作の部分的な失敗

Failure: 1つ目のステップは成功し、2つ目は失敗したため、エージェントはどの副作用がすでに発生したか判断できません。

Mechanism: ワークフローを、明示的な補償パスを持つ1つのアクションにまとめます。利用可能な復旧アクションとともに f.error() を返し、安全にリトライできるかをエージェントに推測させないでください。トランザクションや冪等性キーはハンドラーとデータベース側に置きます。

パラメーターの幻覚

Failure: モデルが tenantIdemailAddress、その他のもっともらしいフィールドを作り出します。

Mechanism: すべてのアクションスキーマは厳格です。不明なキーはミドルウェアとハンドラーの前に拒否され、送信された内容と期待された内容を <validation_error> で説明します。テナントの識別情報はツール入力ではなく、必ず ctx から取得します。

リクエストの集中

Failure: 多数のエージェントが同じ遅い上流サービスをリトライし続け、コネクタ自身のリソースを使い果たします。

Mechanism: .concurrency({ maxActive, maxQueue }) は実行中と待機中の処理を制限します。容量がいっぱいになるとリトライ案内付きで SERVER_BUSY を返します。上流のタイムアウトと、テナントまたはトークン単位のレートリミッターを組み合わせてください。

コンテキストウィンドウの超過

Failure: コレクションのレスポンスが大きすぎて、モデルが重要な行を失い、誤った判断をします。

Mechanism: Presenterの .agentLimit() はシリアライズ前に切り詰め、非表示にした行数とフィルターを使う案内を含む要約を先頭に追加します。.enableSelect() により、モデルはトップレベルのフィールドだけを要求できます。出力バイトガードは、最後のテキストレスポンスが大きすぎる場合に検出します。

ミューテーション後の古いデータ

Failure: 書き込みが成功した後も、エージェントは自分のコンテキスト内で古い読み取り結果を見ます。

Mechanism: 読み取りには .cached() または .stale()、書き込みには .invalidates('domain.pattern') を付けます。状態同期レイヤーは説明を装飾し、最初のブロックに無効化マーカーを出し、ミューテーション成功後にだけリソース更新を公開します。

盲目的なリトライループ

Failure: エラーが「失敗」としか伝えないため、モデルが同じ無効な呼び出しを繰り返します。

Mechanism: toolError(code, { suggestion, availableActions, retryAfter }) は構造化されたXML復旧契約を出力します。次のアクション名と待ち時間が明示され、型付きクライアントは MCPFusionClientError に解析できます。

モデルへのデータ漏えい

Failure: ハンドラーが、モデルに見せてはいけないフィールドを含むデータベース行を返します。

Mechanism: allowlistスキーマと .redactPII() を持つPresenterを付けます。宣言されていないフィールドは検証済み出力に入らず、宣言済みの機密パスはネットワークに送るクローン上でマスクされます。result.data@mcpfusion/testing でテストしてください。

破壊的操作の競合

Failure: 2つのエージェントが同時に返金、ワークフロー遷移、同じレコードの更新を行います。

Mechanism: f.mutation() はデフォルトでアクションを破壊的とし、builderはアクション単位のFIFOミューテーションシリアライザーを作成します。ドメイン層にも冪等性を追加してください。シリアライズは呼び出し順を制御しますが、外部の決済APIを冪等にはしません。

運用チェックリスト

Deploy の前に、次を確認します。

  • 厳格な入力とコンテキストからのテナント識別情報
  • ドメインデータを返すすべてのツールへのPresenter
  • すべてのコレクションへの上限
  • 上流呼び出しへの同時実行制限とレート制限
  • 書き込み時の無効化
  • 想定エラーの復旧フィールド
  • CIでのlockfileとテスト
  • 生のシークレットを保存しないテレメトリーと監査シンク

次のステップ