MCP Fusion/Operate and integrate/オブザーバビリティ

オブザーバビリティ

VinkiusについてAIに質問

stdio を汚染せずにすべての MCP 呼び出しを調査します。DebugObserver イベント、TelemetrySink レコード、パイプラインのトレース、トークンエコノミクス、帯域外インスペクターを扱います。

MCP サーバーには独特なオブザーバビリティの問題があります。stdio はプロトコルに属するためです。誤った場所のログ行は転送を壊します。MCP Fusion は診断を別のチャネルに保ち、エージェントが受け取る内容を変えずに稼働中のコネクタを調査できます。

3 つのシンク、3 つの役割

typescript
registry.enableDebug((event) => {
  console.error('[fusion]', event.type, event);
});

registry.enableTelemetry((event) => telemetry.write(event));
registry.enableTracing(tracer);
SinkJobWhen to use
DebugObserverローカルで人間が読めるイベントストリームmcpfusion devmcpfusion inspect
TelemetrySink構造化されたセキュリティ、コスト、ライフサイクルイベント本番ダッシュボードとアラート
MCPFusionTracerステージ時間と意味的エラー属性を持つスパンOpenTelemetry バックエンド

3 つとも設定するまで何もしません。シンクがない場合、リクエストパスにラッパー、タイマー、割り当ては追加されません。

DebugObserver イベント

オブザーバーはパイプラインを発生順に受け取ります。リクエスト到着、ツール解決、検証、ミドルウェア、ハンドラー、Presenter、レスポンス、失敗です。セキュリティミドルウェアは security.firewallsecurity.rateLimitsecurity.audit などのイベントを追加し、サンドボックスは sandbox.exec を、FSM の変更は fsm.transition を出力します。ペイロードにはツールとアクションの ID、期間、結果ステータス、安全な関連メタデータが含まれますが、生の秘密情報は含まれません。

インスペクターは帯域外の Shadow Socket を通じて同じストリームを使います。stdout には決して書き込まないため、stdio クライアントはプロトコルを保ったまま、端末には呼び出し、レイテンシ、エラー、アクティブなツール、Presenter 出力が表示されます。

bash
mcpfusion inspect

リクエストをトレースする

トレーサーは同じステージをスパンとして表します。route、parse、validate、middleware、execute、Present、serialize です。属性はツールとアクション、破壊的か読み取り専用か、意味的なエラークラスを識別します。フレームワークはエージェントのミス、上流の失敗、Vinkius 側の失敗を分けるため、単一の赤いカウンターではなく、対応可能な信頼性ダッシュボードを作れます。

境界でトレーサーを OpenTelemetry エクスポーターに接続してください。スパンの語彙は MCP Fusion が管理し、送信先はエクスポーターが管理します。

テレメトリとコスト

テレメトリコレクターはガバナンスシステムに必要なメタデータを記録します。レダクションパス、ファイアウォールの判断、レート制限の判断、監査ステータス、トークンプロファイル、サンドボックス結果、状態遷移です。Token Economics は入力と出力の推定膨張率、オーバーヘッド比率、リスク分類を追加します。JSON 型テキストに基づく推定であり、プロバイダーの請求額を主張するものではありません。変更を以前の契約と比較することが目的です。

オブザーバビリティのセキュリティ

hashArgs を有効にすると、監査イベントは引数を SHA-256 でハッシュします。フレームワークはシンクにイベントを出力しますが、OSS シンクが改ざん不能な Ed25519 チェーンだとは主張しません。Vinkius Cloud ではホスト型コネクタが署名済み監査証跡とコンソール保持を追加します。この境界はコンプライアンスレビューで重要です。

ctx、クレデンシャル、生の認証ヘッダー、ツール引数全体を決してログに記録しないでください。ID クラス、テナントハッシュ、ツール名、期間、ステータス、ダイジェストを観測します。組み込みイベントはこの原則に従いますが、カスタムシンクは渡した内容を漏らす可能性があります。

本番での配線

typescript
const observer = createDebugObserver({
  sink: (event) => process.stderr.write(JSON.stringify(event) + '\n'),
});

await registry.attachToServer(server, {
  debug: observer,
  telemetry: (event) => metrics.record(event),
  tracing: otelTracer,
});

起動時にアタッチし、ハンドラーの中では行わないでください。レジストリは既存のビルダーと後から登録されるビルダーにシンクを伝播します。トレースとデバッグが同時に有効な場合、重複する診断パスではフレームワークがトレースを優先します。

次のステップ

  • Performance: 事前コンパイルされるものとリクエストのコスト
  • Introspection: クライアント呼び出しなしのメタデータ
  • Contracts: オブザーバビリティをリリースゲートにする