Without MVA
With MVA (mcp-fusion)
Tool count
50 individual tools. LLM sees ALL. Token explosion.
Action consolidation — 5,000+ ops behind ONE tool via discriminator. 10x fewer tokens.
Response
JSON.stringify() — the AI parses and guesses.
Structured perception package — validated data + rules + UI + affordances.
Domain context
None. 45000 — dollars? cents? yen?
System rules travel with the data. The AI knows it's cents.
Next actions
AI hallucinates tool names.
Agentic HATEOAS — .suggestActions() with explicit hints based on data state.
Large datasets
10,000 rows dump into context window.
Cognitive guardrails — .agentLimit(50) truncation + filter guidance.
Security
Internal fields leak to LLM.
Schema as boundary — Zod .strict() rejects undeclared fields with actionable errors. Automatic.
Charts
Not possible — text only.
UI Blocks — ECharts, Mermaid diagrams, summaries — server-rendered.
Routing
switch/case with 50 branches.
Hierarchical groups — platform.users.list — infinite nesting.
Error recovery
throw Error — AI gives up.
Self-healing — toolError() with recovery hints + retry args.
Token cost
Full JSON payloads every time.
TOON encoding — toonSuccess() reduces tokens by ~40%.
Type safety
Manual casting, no client types.
tRPC-style client — createFusionClient() with full end-to-end inference.
Reusability
Same entity rendered differently everywhere.
Presenter — define once, reuse across all tools. Same rules, same UI.