MCP Fusion/Core concepts/MVAパターン

MVAパターン

VinkiusについてAIに質問

Model View Agent は、AI バックエンドにおいて MVC を置き換えるパターンです。View が Presenter となり、AI エージェントが見るもの、知ること、次に何ができるかを正確に制御する知覚レイヤーになります。

MVA は Model View Agent の略です。AI エージェントのバックエンドのためのアーキテクチャパターンで、MCP Fusion はその Model Context Protocol におけるリファレンス実装です。考え方は小さく、そして深い。API の消費者がブラウザーではなく AI エージェントになると、View レイヤーの意味が変わります。もう HTML をレンダリングしません。エージェントが知覚するものを整形します。

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.

Run を押して、1 回のツール呼び出しがパターンを通る様子を追ってみてください。生の行、Presenter、マスキング、ルール、アフォーダンス、そしてきれいな知覚パッケージです。

3 つの文字

文字名前責務
MModelドメインデータ: 請求書、ユーザー、チケット。defineModel() で一度だけ宣言します。
VView (Presenter)知覚レイヤー: どのフィールドが存在し、どの値がマスキングされ、どのルールをエージェントが受け取り、次にどのアクションが取れるか。
AAgentLLM。Model には直接触れません。Presenter が見せることを選んだものだけを見ます。

MVA が取り除く 3 つの失敗

コンテキスト飢餓。 生の JSON ダンプは、タスクに不要なフィールドでコンテキストウィンドウを浪費します。Presenter は各レスポンスをタスクに必要なフィールドへ切り詰め、.limit() でボリュームを上限にします。

アクション盲目。 エージェントは 1 ステップを終え、次に何をすべきか推測するしかなく、ツール名をハルシネーションします。Presenter は各レスポンスを .suggest() で締めます。アフォーダンスのリストであり、HATEOAS が Web API で行うように、サーバーがエージェントに次に何ができるかを伝えます。

知覚のドリフト。 2 つのツールが同じエンティティを違う形で返したり、単位が変わっても誰もモデルに教えなかったりします。Presenter はエンティティごとに一度だけ定義されるので、そのエンティティを返す全ツールが同じ整形された真実を見せ、.rules() が system prompt の行として意味を運びます。

MVC と MVA の比較

観点MVCMVA
消費者ブラウザーAI エージェント
View レイヤーHTML や JSON をレンダリング知覚を整形: フィールド、ルール、アフォーダンス
信頼の境界ユーザーは UI を見るモデルは秘密を見てはならない
ナビゲーションページ間のリンクアクション間の .suggest() アフォーダンス
障害モード壊れたページハルシネーション、PII 漏洩、単位の誤り

Presenter の構成要素

各要素は省略可能で、組み合わせられます。

  • .schema(): 存在するフィールドと、エージェントが読む説明
  • .redactPII(): シリアライズ前に必ず除去されるパス
  • .rules(): 毎回のレスポンスに注入される system prompt の行
  • .ui(): ダッシュボード向けの、データがマスキングを迂回するテーブルなどのレンダリングブロック
  • .suggest(): エージェントが検討してよい次のアクション
  • .limit(): 自己修復メッセージ付きのレスポンス量の上限
  • .embed(): 関連エンティティのためのネストした Presenter

Presenter はフォーマットの補助ではなく、セキュリティの境界です。マスキングは UI ブロックのレンダリング後、シリアライズ前に実行されるので、ネットワークには機密データが流れません。だからこそ MCP Fusion の全ツールは .returns() で Presenter を取り付けます。

次のステップ