MCP Fusion/Core concepts/Le pattern MVA

Le pattern MVA

Demandez à l’IA à propos de Vinkius

Le Model View Agent remplace le MVC pour les backends IA : la View devient un Presenter, une couche de perception qui contrôle exactement ce que l’agent IA voit, sait et peut faire ensuite.

MVA signifie Model View Agent. C’est un pattern d’architecture pour les backends d’agents IA, et MCP Fusion en est l’implémentation de référence pour le Model Context Protocol. L’idée est petite et profonde à la fois : quand le consommateur de votre API est un agent IA plutôt qu’un navigateur, la couche View change de sens. Elle ne rend plus du HTML. Elle façonne ce que l’agent perçoit.

MVA · one tool call
The Model row becomes the perception package the agent sees. Click a step or press Run.
f.query() · billing.get_invoice
// the agent called the tool
billing.get_invoice({ id: 'inv_2026_0417' })

// the handler returns the raw model row
ctx.db.invoices.findUnique({
  where: { id: input.id },
});
What the agent sees

waiting for the tool result…

Raw SDK would give

A raw SDK server would return this row as-is: every column, every internal field, straight into the model context.

Step 1 of 6
The MVA perception flow, step by step. Press Run and follow one tool call: the raw Model row enters the Presenter, PII is redacted on egress, rules teach the units, affordances suggest the next action and the agent receives a clean perception package. The right pane shows what a raw SDK server would have handed the model instead.

Appuyez sur Run et suivez un appel de tool à travers le pattern : ligne brute, Presenter, masquage, règles, affordances, et un paquet de perception propre.

Les trois lettres

LettreNomResponsabilité
MModelVos données de domaine : factures, utilisateurs, tickets. Déclarées une fois avec defineModel().
VView (Presenter)La couche de perception : quels champs existent, quelles valeurs sont masquées, quelles règles l’agent reçoit, quelles actions il peut entreprendre ensuite.
AAgentLe LLM. Il ne touche jamais le Model directement. Il ne voit que ce qu’un Presenter a choisi de montrer.

Trois défaillances que le MVA élimine

Famine de contexte. Un dump JSON brut gaspille la fenêtre de contexte sur des champs dont la tâche n’a pas besoin. Les Presenter réduisent chaque réponse aux champs dont la tâche a besoin et plafonnent le volume avec .limit().

Cécité d’action. L’agent a fini une étape et devine maintenant quoi faire ensuite, si bien qu’il hallucine un nom de tool. Les Presenter clôturent chaque réponse avec .suggest(), une liste d’affordances : le serveur indique à l’agent ce qu’il peut faire ensuite, comme le fait HATEOAS pour les API web.

Dérive de perception. Deux tools renvoient la même entité sous des formes différentes, ou les unités changent sans que personne ne le dise au modèle. Un Presenter est défini une fois par entité, donc toute tool qui renvoie cette entité montre la même vérité façonnée, et .rules() portent le sens dans des lignes de system prompt.

MVC et MVA côte à côte

AspectMVCMVA
ConsommateurNavigateurAgent IA
Couche ViewRend du HTML ou du JSONFaçonne la perception : champs, règles, affordances
Frontière de confianceL’utilisateur voit l’UILe modèle ne doit pas voir les secrets
NavigationLiens entre pagesAffordances .suggest() entre actions
Mode de défaillancePage casséeHallucination, fuite de PII, mauvaises unités

De quoi un Presenter est fait

Chaque pièce est optionnelle et composable :

  • .schema() : les champs qui existent, avec des descriptions que l’agent lit
  • .redactPII() : des chemins retirés avant la sérialisation, toujours
  • .rules() : des lignes de system prompt injectées à chaque réponse
  • .ui() : des blocs rendus, comme des tables dont les données contournent le masquage, pour les dashboards
  • .suggest() : les actions suivantes que l’agent est autorisé à envisager
  • .limit() : un plafond de volume de réponse avec un message d’auto-guérison
  • .embed() : des Presenter imbriqués pour les entités liées

Le Presenter est une frontière de sécurité, pas un assistant de mise en forme. Le masquage s’exécute après le rendu des blocs UI et avant la sérialisation, donc le fil ne voit jamais de données sensibles. C’est pourquoi chaque tool de MCP Fusion attache son Presenter avec .returns().

Prochaines étapes