MCP Fusion/Operate and integrate/Observabilité

Observabilité

Demandez à l’IA à propos de Vinkius

Inspectez chaque appel MCP sans contaminer stdio : événements de DebugObserver, enregistrements de TelemetrySink, traçage du pipeline, économie des tokens et inspecteur hors bande.

Un serveur MCP présente un problème d’observabilité particulier : stdio appartient au protocole. Une ligne de log au mauvais endroit corrompt le transport. MCP Fusion maintient les diagnostics sur des canaux séparés, afin que vous puissiez inspecter un connecteur actif sans modifier ce que reçoit l’agent.

Trois sinks, trois fonctions

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

registry.enableTelemetry((event) => telemetry.write(event));
registry.enableTracing(tracer);
SinkJobWhen to use
DebugObserverflux d’événements local et lisiblemcpfusion dev et mcpfusion inspect
TelemetrySinkévénements structurés de sécurité, coût et cycle de vietableaux de bord et alertes de production
MCPFusionTracerspans avec durée par étape et attributs d’erreur sémantiquebackends OpenTelemetry

Les trois restent inertes tant qu’ils ne sont pas configurés. Aucun wrapper, minuteur ni allocation n’est ajouté au chemin de requête lorsqu’aucun sink n’est présent.

Événements du DebugObserver

L’observer reçoit le pipeline au fil de son déroulement : arrivée de la requête, résolution de l’outil, validation, middleware, handler, Presenter, réponse et échec. Le middleware de sécurité ajoute des événements tels que security.firewall, security.rateLimit et security.audit ; le sandbox émet sandbox.exec ; les changements de FSM émettent fsm.transition. Le payload porte l’identité de l’outil et de l’action, la durée, le statut du résultat et les métadonnées sûres pertinentes, jamais un secret brut.

L’inspecteur utilise le même flux via un Shadow Socket hors bande. Il n’écrit jamais dans stdout, si bien qu’un client stdio reste propre pour le protocole tandis que le terminal affiche les appels, la latence, les erreurs, les outils actifs et la sortie du Presenter.

bash
mcpfusion inspect

Tracer la requête

Un tracer représente les mêmes étapes sous forme de spans : route, parse, validate, middleware, execute, Present et serialize. Les attributs identifient l’outil et l’action, leur caractère destructif ou en lecture seule et la classe d’erreur sémantique. Le framework sépare une erreur de l’agent d’un échec amont et d’un échec côté Vinkius, ce qui rend un tableau de fiabilité exploitable plutôt qu’un simple compteur rouge.

Raccordez le tracer à votre exportateur OpenTelemetry à la frontière. MCP Fusion possède le vocabulaire des spans ; votre exportateur possède leur destination.

Télémétrie et coût

Le collecteur de télémétrie enregistre les métadonnées nécessaires au système de gouvernance : chemins de masquage, décisions du firewall, décisions de limitation, statut d’audit, profil de tokens, résultat du sandbox et transitions d’état. Token Economics ajoute l’inflation estimée des entrées et sorties, le ratio de surcharge et la classification du risque. Ce sont des estimations fondées sur du texte de forme JSON, non des affirmations de facturation du fournisseur ; le but est de comparer un changement au contrat précédent.

Sécurité de l’observabilité

Les événements d’audit hachent les arguments avec SHA-256 lorsque hashArgs est activé. Le framework émet les événements vers votre sink ; il ne prétend pas que le sink OSS forme une chaîne Ed25519 inviolable. Sur Vinkius Cloud, le connecteur hébergé ajoute la piste d’audit signée et la rétention dans la console. Cette frontière compte lors d’une revue de conformité.

Ne journalisez jamais ctx, les credentials, les en-têtes d’autorisation bruts ni tous les arguments d’un outil. Observez la classe d’identité, le hash du tenant, le nom de l’outil, la durée, le statut et un digest. Les événements intégrés suivent ce principe, mais un sink personnalisé peut encore divulguer ce que vous y placez.

Câblage de production

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,
});

Attachez-les au démarrage, pas dans un handler. Le registry propage les sinks aux builders existants et à ceux enregistrés plus tard. Lorsque tracing et debug sont actifs ensemble, le framework donne la priorité au tracing pour le chemin de diagnostic commun.

Étapes suivantes

  • Performance : ce qui est précompilé et ce que coûte une requête
  • Introspection : métadonnées sans appel client
  • Contracts : transformer l’observabilité en gate de release