MCP benchmark: seven models, one format
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.
| Dimension | Key result |
|---|---|
| Answer quality | MCP 4.8/5 vs monolith 3.3/5 (three concordant judges) |
| RAG cost | MCP costs 3–11% of the monolith (best: 0.03×) |
| Scaling | MCP cost flat from 65 to 558 notes; monolith fails 6/6 questions |
| Latency | Up to 6.1× faster end-to-end |
| Out-of-domain | Monolith 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.
| Judge | Monolith | MCP | Delta |
|---|---|---|---|
| DeepSeek V4 Flash | 3.3/5 | 4.8/5 | +1.5 |
| GPT-5.6 Luna | 3.2/5 | 4.7/5 | +1.5 |
| Claude Opus 4.8 | 3.3/5 | 4.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)
| Model | Monolith | MCP | Ratio | Mon. TC | MCP TC | Mon. errors |
|---|---|---|---|---|---|---|
| Ministral 8B | $0.559 | $0.034 | 0.06× | 58 | 44 | 2/6 |
| DeepSeek V4 Flash | $0.385 | $0.043 | 0.11× | 600 | 34 | 2/6 |
| GLM 5.3 Flash | $0.091 | $0.035 | 0.38× | 138 | 23 | 6/6 |
| GPT-5.6 Luna | $0.124 | $0.070 | 0.56× | 125 | 31 | 1/6 |
| Gemini 3.8 Flash | $0.126 | $0.210 | 1.67× | 44 | 20 | 1/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)
| Model | Monolith | MCP | Ratio | Mon. errors | MCP errors |
|---|---|---|---|---|---|
| DeepSeek V4 Flash | $0.318 | $0.050 | 0.16× | 6/6 | 0/6 |
| GPT-5.6 Luna | $0.157 | $0.095 | 0.60× | 0/6 | 0/6 |
| Ministral 8B | $0.025 | $0.085 | 3.35× | 0/6 | 0/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.
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.
| Model | Monolith | MCP | Ratio | Mon. errors | MCP errors |
|---|---|---|---|---|---|
| GPT-5.6 Luna | $0.254 | $0.008 | 0.03× | 0/6 | 0/6 |
| DeepSeek V4 Flash | $0.217 | $0.014 | 0.07× | 6/6 | 0/6 |
| Ministral 8B | $0.132 | $0.033 | 0.25× | 1/6 | 1/6 |
| GLM 5.3 Flash | $0.126 | $0.039 | 0.31× | 6/6 | 0/6 |
| Qwen 3.8 Flash | $0.386 | $0.161 | 0.42× | 6/6 | 0/6 |
| Gemini 3.8 Flash | $0.535 | $0.358 | 0.67× | 5/6 | 0/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:
| Corpus | Monolith | MCP | Ratio | Mon. errors |
|---|---|---|---|---|
| 65 notes | $0.385 | $0.043 | 0.11× | 2/6 |
| 143 notes | $0.388 | $0.046 | 0.12× | — |
| 558 notes | $0.318 | $0.050 | 0.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
| Model | RAG 65 | RAG 558 | No-reas. | Stress OOD |
|---|---|---|---|---|
| DeepSeek V4 Flash | 0.11× | 0.16× | 0.07× | 0.43× |
| GPT-5.6 Luna | 0.56× | 0.60× | 0.03× | 0.16× |
| Ministral 8B | 0.06× | 3.35× | 0.25× | 0.61× |
| GLM 5.3 Flash | 0.38× | — | 0.31× | — |
| Gemini 3.8 Flash | 1.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.
| Model | Monolith | MCP | Ratio | Mon. completed | MCP completed |
|---|---|---|---|---|---|
| GPT-5.6 Luna | $0.226 | $0.037 | 0.16× | 5/6 | 6/6 |
| DeepSeek V4 Flash | $0.183 | $0.078 | 0.43× | 2/6 | 6/6 |
| Ministral 8B | $0.129 | $0.079 | 0.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 & corpus | Monolith | MCP | Speedup |
|---|---|---|---|
| DeepSeek (65 notes) | 461s | 75s | 6.1× |
| DeepSeek (558 notes) | 750s | 227s | 3.3× |
| GLM 5.3 Flash | 667s | 218s | 3.1× |
| GPT-5.6 Luna (558) | 238s | 86s | 2.8× |
| Ministral 8B (65) | 422s | 202s | 2.1× |
| GPT-5.6 Luna (65) | 190s | 105s | 1.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:
| Model | Notes | Cost | $/note | Time | Errors |
|---|---|---|---|---|---|
| GPT-5.6 Luna | 60 | $0.326 | $0.005 | 3m | 0 |
| Ministral 8B | 16 | $0.452 | $0.028 | 17m | 0 |
| DeepSeek V4 Flash | 32 | $1.436 | $0.045 | 31m | max_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.
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.