MCP Fusion/Core concepts/El patrón MVA

El patrón MVA

Pregunta a la IA sobre Vinkius

El Model View Agent sustituye al MVC en backends de IA: la View se convierte en un Presenter, una capa de percepción que controla exactamente lo que el agente de IA ve, sabe y puede hacer a continuación.

MVA significa Model View Agent. Es un patrón de arquitectura para backends de agentes de IA, y MCP Fusion es su implementación de referencia para el Model Context Protocol. La idea es pequeña y profunda a la vez: cuando el consumidor de tu API es un agente de IA en lugar de un navegador, la capa View cambia de significado. Ya no renderiza HTML. Moldea lo que el agente percibe.

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.

Pulsa Run y sigue una llamada de tool a través del patrón: fila cruda, Presenter, redacción, reglas, affordances y un paquete de percepción limpio.

Las tres letras

LetraNombreResponsabilidad
MModelTus datos de dominio: facturas, usuarios, tickets. Declarados una vez con defineModel().
VView (Presenter)La capa de percepción: qué campos existen, qué valores se redactan, qué reglas recibe el agente, qué acciones puede tomar a continuación.
AAgentEl LLM. Nunca toca el Model directamente. Solo ve lo que un Presenter decidió mostrar.

Tres fallos que el MVA elimina

Inanición de contexto. Un volcado de JSON puro desperdicia ventana de contexto en campos que la tarea no necesita. Los Presenter recortan cada respuesta a los campos que la tarea necesita y limitan el volumen con .limit().

Ceguera de acción. El agente terminó un paso y ahora adivina qué hacer después, así que alucina un nombre de tool. Los Presenter cierran cada respuesta con .suggest(), una lista de affordances: el servidor le dice al agente qué puede hacer después, igual que HATEOAS lo hace para las APIs web.

Deriva de percepción. Dos tools devuelven la misma entidad con formas distintas, o cambian las unidades y nadie se lo dice al modelo. Un Presenter se define una vez por entidad, así que toda tool que devuelva esa entidad muestra la misma verdad moldeada, y .rules() llevan el significado en líneas del system prompt.

MVC y MVA lado a lado

AspectoMVCMVA
ConsumidorNavegadorAgente de IA
Capa ViewRenderiza HTML o JSONMoldea la percepción: campos, reglas, affordances
Frontera de confianzaEl usuario ve la UIEl modelo no debe ver secretos
NavegaciónEnlaces entre páginasAffordances de .suggest() entre acciones
Modo de falloPágina rotaAlucinación, fuga de PII, unidades incorrectas

De qué está hecho un Presenter

Cada pieza es opcional y se puede componer:

  • .schema(): los campos que existen, con descripciones que el agente lee
  • .redactPII(): rutas eliminadas antes de la serialización, siempre
  • .rules(): líneas del system prompt inyectadas con cada respuesta
  • .ui(): bloques renderizados, como tablas cuyos datos omiten la redacción, pensados para dashboards
  • .suggest(): acciones siguientes que el agente puede considerar
  • .limit(): un tope al volumen de la respuesta con un mensaje de autorreparación
  • .embed(): presenter anidados para entidades relacionadas

El Presenter es una frontera de seguridad, no un ayudante de formato. La redacción se ejecuta después de renderizar los bloques de UI y antes de la serialización, así que el cable nunca ve datos sensibles. Por eso cada tool de MCP Fusion conecta su Presenter con .returns().

Próximos pasos