MCP Fusion/Core concepts/Das MVA-Pattern

Das MVA-Pattern

Frag die KI über Vinkius

Model View Agent ersetzt MVC für KI-Backends: Die View wird zum Presenter, einer Wahrnehmungsschicht, die genau steuert, was der KI-Agent sieht, weiß und als Nächstes tun kann.

MVA steht für Model View Agent. Es ist ein Architekturmuster für KI-Agenten-Backends, und MCP Fusion ist die Referenzimplementierung für das Model Context Protocol. Die Idee ist klein und tief zugleich: Wenn der Verbraucher Ihrer API ein KI-Agent statt eines Browsers ist, ändert die View-Schicht ihre Bedeutung. Sie rendert kein HTML mehr. Sie formt, was der Agent wahrnimmt.

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.

Drücken Sie Run und verfolgen Sie einen Tool-Aufruf durch das Muster: rohe Zeile, Presenter, Schwärzung, Regeln, Affordances, ein sauberes Wahrnehmungspaket.

Die drei Buchstaben

BuchstabeNameVerantwortung
MModelIhre Domänendaten: Rechnungen, Nutzer, Tickets. Einmal mit defineModel() deklariert.
VView (Presenter)Die Wahrnehmungsschicht: welche Felder existieren, welche Werte geschwärzt werden, welche Regeln der Agent erhält, welche Aktionen er als Nächstes ergreifen darf.
AAgentDas LLM. Es berührt das Model nie direkt. Es sieht nur, was ein Presenter zu zeigen gewählt hat.

Drei Fehler, die MVA beseitigt

Kontexthunger. Ein roher JSON-Dump verschwendet Kontextfenster auf Felder, die die Aufgabe nicht braucht. Presenter kürzen jede Antwort auf die Felder, die die Aufgabe braucht, und deckeln das Volumen mit .limit().

Aktionsblindheit. Der Agent hat einen Schritt beendet und rät nun, was als Nächstes zu tun ist, daher halluziniert er einen Tool-Namen. Presenter schließen jede Antwort mit .suggest() ab, einer Liste von Affordances: Der Server sagt dem Agenten, was er als Nächstes tun darf, so wie HATEOAS es für Web-APIs tut.

Wahrnehmungsdrift. Zwei Tools liefern dieselbe Entität in unterschiedlichen Formen, oder Einheiten ändern sich und niemand sagt es dem Modell. Ein Presenter wird einmal pro Entität definiert, also zeigt jedes Tool, das diese Entität liefert, dieselbe geformte Wahrheit, und .rules() tragen die Bedeutung in System-Prompt-Zeilen.

MVC und MVA im Vergleich

AspektMVCMVA
VerbraucherBrowserKI-Agent
View-SchichtRendert HTML oder JSONFormt Wahrnehmung: Felder, Regeln, Affordances
VertrauensgrenzeDer Nutzer sieht die UIDas Modell darf keine Geheimnisse sehen
NavigationLinks zwischen Seiten.suggest()-Affordances zwischen Aktionen
FehlerbildKaputte SeiteHalluzination, geleakte PII, falsche Einheiten

Woraus ein Presenter besteht

Jedes Teil ist optional und kombinierbar:

  • .schema(): die Felder, die existieren, mit Beschreibungen, die der Agent liest
  • .redactPII(): Pfade, die vor der Serialisierung entfernt werden, immer
  • .rules(): System-Prompt-Zeilen, die mit jeder Antwort injiziert werden
  • .ui(): gerenderte Blöcke, etwa Tabellen, deren Daten die Schwärzung für Dashboards umgehen
  • .suggest(): nächste Aktionen, die der Agent in Betracht ziehen darf
  • .limit(): ein Deckel für das Antwortvolumen mit selbstheilender Nachricht
  • .embed(): verschachtelte Presenter für verwandte Entitäten

Der Presenter ist eine Sicherheitsgrenze, kein Formatierungshelfer. Die Schwärzung läuft nach dem Rendern der UI-Blöcke und vor der Serialisierung, sodass der Wire nie sensible Daten sieht. Deshalb hängt jedes Tool in MCP Fusion seinen Presenter mit .returns() an.

Nächste Schritte