2026-09-22 · benchmark

MCP benchmark: seven models, one format

Versione italiana

Controlled comparison of an MCP server implementing the Mosaix Format against a monolithic file baseline. Seven LLMs, four corpus sizes, nine test dimensions. The architectural advantage holds across models — with two instructive exceptions.

Executive summary

An MCP server exposing atomic Mosaix notes was tested against a single monolithic file of identical content. On every dimension measured — answer quality, cost, speed, scaling, and robustness to out-of-domain queries — the atomic architecture wins. The advantage is structural: it holds across all seven LLMs tested, at corpus sizes from 35 to 558 notes, and grows with harder questions.

DimensionKey result
Answer qualityMCP 4.8/5 vs monolith 3.3/5 (three concordant judges)
RAG costMCP costs 3–11% of the monolith (best: 0.03×)
ScalingMCP cost flat from 65 to 558 notes; monolith fails 6/6 questions
LatencyUp to 6.1× faster end-to-end
Out-of-domainMonolith times out on 67% of trick questions; MCP completes all
Ingestion$0.005/note, 60 notes in 3 minutes, zero errors

Two exceptions: one model inverts the ratio on large vaults (excessive search loops), one costs more with MCP on small vaults (higher per-token spend on shorter responses). Both are documented below.

Setup

The benchmark compares two arms on the same task. The MCP arm uses a server implementing the Mosaix Format v1.2.0 specification — 11 tools including search, read_note, write_note, compose, and check. Notes are atomic: one idea per note, self-describing frontmatter (summary, keywords, entities, links), BM25 search. The standard arm uses a single file containing the same content as a monolithic document, with read_file and search_file as the only tools.

The corpus is an industrial product catalog (hydraulic hose, fittings, couplings) at four sizes: 35 notes, 65 notes (258 KB), 143 notes, and 558 notes (1 MB). The monolith for the 558-note vault is a 748 KB file.

Seven LLMs were tested via OpenRouter: DeepSeek V4 Flash ($0.06/$0.14 per million tokens), GPT-5.6 Luna ($0.20/$1.20), Ministral 8B ($0.15/$0.15), GLM 5.3 Flash ($0.075/$0.25), Gemini 3.8 Flash ($0.75/$3.75), Qwen 3.8 Flash ($0.15/$0.47), and DeepSeek V4.1 Flash ($0.10/$0.40). Partial data exists for Claude Opus 4.8 and GPT-5.6 Sol (credits exhausted mid-run).

Every run uses a cold start: a nonce is injected into the system prompt to defeat prefix caching. All token counts are uncached. Each test is N=1 per arm per model.

Answer quality

Three independent LLM judges rated the same six answers from both arms on a 1–5 scale for accuracy, completeness, and relevance. The judges had no knowledge of which arm produced which answer.

JudgeMonolithMCPDelta
DeepSeek V4 Flash3.3/54.8/5+1.5
GPT-5.6 Luna3.2/54.7/5+1.5
Claude Opus 4.83.3/54.95/5+1.6

Full concordance across three judges from different providers. The quality gap (+1.5 points) is not marginal — it is the difference between an incomplete answer that omits key specifications and a comprehensive answer that cites specific product codes, pressure ratings, and temperature ranges. The monolith arm suffers because the model receives the entire document and must locate the relevant section; the MCP arm retrieves only the relevant notes.

RAG multi-turn cost

Six consecutive questions over the catalog, cumulative context. The model must search, read, and answer — each turn builds on the previous. This is the core cost benchmark: it measures real-world retrieval cost over a sustained session.

65 notes (full catalog)

ModelMonolithMCPRatioMon. TCMCP TCMon. errors
Ministral 8B$0.559$0.0340.06×58442/6
DeepSeek V4 Flash$0.385$0.0430.11×600342/6
GLM 5.3 Flash$0.091$0.0350.38×138236/6
GPT-5.6 Luna$0.124$0.0700.56×125311/6
Gemini 3.8 Flash$0.126$0.2101.67×44201/6

MCP costs 6–56% of the monolith on five of six models. Gemini 3.8 Flash is the exception: it generates fewer tool calls but consumes more tokens per MCP response, making the atomic arm 67% more expensive. The finding is model-specific, not architectural — Gemini’s high per-token pricing ($0.75/$3.75) amplifies even small token differences.

MCP tool calls stay in a narrow band (20–44) regardless of model. Monolith tool calls range from 44 to 600, depending on how aggressively the model retries search_file on a large document. The consistency of the MCP arm suggests the advantage comes from the architecture, not from model-specific behavior.

558 notes (8.5× larger)

ModelMonolithMCPRatioMon. errorsMCP errors
DeepSeek V4 Flash$0.318$0.0500.16×6/60/6
GPT-5.6 Luna$0.157$0.0950.60×0/60/6
Ministral 8B$0.025$0.0853.35×0/60/6

DeepSeek fails all six questions on the monolith (max_loops on every query). MCP answers all six for $0.05. Luna completes everything on both arms but MCP costs 40% less.

When MCP loses: Ministral 8B at scale. On the 558-note vault, Ministral 8B generates 198–287 MCP tool calls (vs 52–59 on the monolith). The atomic search returns precise but narrow results, and a small model compensates by searching in a loop. The same model is the best performer on 65 notes (0.06×). The takeaway: vault size interacts with model capability. A model that is efficient at small scale can become expensive at large scale if it cannot plan its search strategy.

No-reasoning mode

Same 65-note RAG task with chain-of-thought reasoning disabled. Six models tested. Disabling reasoning amplifies the MCP advantage because it shrinks output tokens (where MCP has no edge) while leaving input tokens (where MCP saves the most) unchanged.

ModelMonolithMCPRatioMon. errorsMCP errors
GPT-5.6 Luna$0.254$0.0080.03×0/60/6
DeepSeek V4 Flash$0.217$0.0140.07×6/60/6
Ministral 8B$0.132$0.0330.25×1/61/6
GLM 5.3 Flash$0.126$0.0390.31×6/60/6
Qwen 3.8 Flash$0.386$0.1610.42×6/60/6
Gemini 3.8 Flash$0.535$0.3580.67×5/60/6

Luna no-reasoning at 0.03× is the best ratio recorded: MCP costs 97% less than the monolith. The median across six models is 0.28× (vs 0.38× with reasoning enabled). Every model favors MCP in no-reasoning mode — including Gemini, which inverted the ratio with reasoning on.

How costs scale with corpus size

DeepSeek V4 Flash on the same six questions at three corpus sizes:

CorpusMonolithMCPRatioMon. errors
65 notes$0.385$0.0430.11×2/6
143 notes$0.388$0.0460.12×—
558 notes$0.318$0.0500.16×6/6

MCP cost grows from $0.043 to $0.050 as the corpus scales 8.5× — a 16% increase. The monolith cost stays roughly flat in dollars, but the completion rate drops from 4/6 to 0/6. At 558 notes, the monolith arm cannot answer a single question within the loop limit. Cost stability without completion is not a useful metric.

Cross-model summary

ModelRAG 65RAG 558No-reas.Stress OOD
DeepSeek V4 Flash0.11×0.16×0.07×0.43×
GPT-5.6 Luna0.56×0.60×0.03×0.16×
Ministral 8B0.06×3.35×0.25×0.61×
GLM 5.3 Flash0.38×—0.31×—
Gemini 3.8 Flash1.67×—0.67×—
Qwen 3.8 Flash——0.42×—

Green cells are where MCP costs less; red where it costs more. The pattern: MCP wins on 27 of 29 measured cells. The two losses have specific, documented causes (small-model loop explosion at scale; high-price model on short responses). The architecture works. The exceptions tell you where to look.

Stress test: out-of-domain queries

Six deliberately difficult questions on the 558-note vault: a product that does not exist, a domain the catalog does not cover, an ambiguous question with no context, an impossible comparison, an incorrect product code, and a physically impossible specification. These questions are designed to test how quickly the system recognises that the answer is not in the data.

ModelMonolithMCPRatioMon. completedMCP completed
GPT-5.6 Luna$0.226$0.0370.16×5/66/6
DeepSeek V4 Flash$0.183$0.0780.43×2/66/6
Ministral 8B$0.129$0.0790.61×—6/6

The monolith arm cannot distinguish “I haven’t found it yet” from “it is not here”. On a 748 KB file, the model keeps calling search_file with different patterns, hoping the next search will find the answer. DeepSeek times out on four of six questions. The MCP arm gets a definitive signal from the BM25 search: no results means the data is not in the vault. The model accepts this and responds in 1–4 tool calls.

Other dimensions

Three additional benchmarks complete the picture: latency, ingestion cost, and CRUD lifecycle operations.

Latency

End-to-end time for the six-question RAG session:

Model & corpusMonolithMCPSpeedup
DeepSeek (65 notes)461s75s6.1×
DeepSeek (558 notes)750s227s3.3×
GLM 5.3 Flash667s218s3.1×
GPT-5.6 Luna (558)238s86s2.8×
Ministral 8B (65)422s202s2.1×
GPT-5.6 Luna (65)190s105s1.8×

Faster on every model and corpus size. One exception: Ministral 8B on 558 notes takes 4× longer with MCP, consistent with the excessive search loops documented above. The speedup comes from reading less: fewer tokens in means less time waiting for the model to process them.

Ingestion

The one-time cost of converting the raw catalog into atomic Mosaix notes, amortised over all subsequent queries:

ModelNotesCost$/noteTimeErrors
GPT-5.6 Luna60$0.326$0.0053m0
Ministral 8B16$0.452$0.02817m0
DeepSeek V4 Flash32$1.436$0.04531mmax_loops

Luna produces nearly twice as many notes as DeepSeek (60 vs 32) at a quarter of the cost ($0.33 vs $1.44) in a tenth of the time. A model with a higher per-token price can be dramatically cheaper in total when it plans better and finishes in fewer rounds.

CRUD

Create, read, search, update, supersede (following the Mosaix R7 rule: notes are superseded, not deleted), and verify conformity. Near parity across the board: 0.92×–1.15× on warm runs. The cold-start advantage (0.42×) disappears with prefix caching, which tells you exactly where the MCP advantage lives: in the input tokens, not the operations.

Caveats

These results should be read with the following limitations in mind.

N=1 per arm per model per test. The measurements are directional, not statistically powered. A single outlier run could shift any individual ratio.

All models run through OpenRouter, which does not expose prefix cache hit rates. Every token is counted as uncached. In production, prefix caching would reduce the monolith’s cost — but also some of MCP’s advantage, since the monolith benefits more from caching (it re-reads the same large document repeatedly).

The corpus is an industrial product catalog. Results may differ on creative, conversational, or code-generation tasks. The previous study (Why one note at a time) covered code generation; this one covers knowledge retrieval.

The 558-note vault contains approximately 133 real notes and 415 synthetic notes generated to stress the search index. The synthetic notes are structurally valid but may not represent real-world note density and overlap patterns.

The benchmark author designed both the format and the test. We report both the wins and the losses (Gemini and Ministral at scale) and encourage independent replication.

Disclosure. These measurements are ours. They have not yet been replicated by a third party. The MCP server, the test scripts, and the Mosaix Format specification are open source. The specification is at spec.html; the repository is on GitHub.

Further reading

Why one note at a time — the earlier code-generation study, measuring token compression and local model performance.

Mosaix Format v1.2.0 specification — the full spec, including the 11 MCP tools benchmarked here.

GitHub repository — specification, reference checker, and example vaults.