> ## Content Index
> Fetch the complete content index at: https://adrianoamalfi.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# La tassa sugli strumenti MCP: paghi la superficie prima ancora di chiedere
- URL: https://adrianoamalfi.com/la-tassa-sugli-strumenti-mcp/
- Published: 2026-09-04T05:56:26.000Z
- Updated: 2026-09-04T05:56:26.000Z
- Description: Definizioni tool reiniettate a ogni richiesta: 6.726 token per soli 36 tool misurati. Quattro strategie per abbattere la tassa, scelte per contesto d'uso.
- Author: Adriano Amalfi
- Tags: AI Agentica, MCP, AI Tools, LLM

Ogni volta che un agente si collega a un server MCP, il client chiama `tools/list` e riceve, per ciascun tool, una definizione JSON Schema completa: nome, descrizione, parametri, tipi, vincoli. Quella definizione entra nel contesto del modello, viene contata in token e viene reiniettata a ogni nuova conversazione, anche quando l'agente userà un solo tool o non ne userà nessuno.

I maintainer del protocollo l'hanno scritto in chiaro nella roadmap ufficiale: "il modello paga per l'intera superficie prima che l'utente abbia posto una sola domanda" ([roadmap MCP](https://blog.modelcontextprotocol.io/posts/mcp-roadmap/?ref=adrianoamalfi.com)). Non è un bug: è il comportamento di default del protocollo, e ora è un cantiere dichiarato sotto il nome di progressive discovery.

## La misura in prima persona

Per capire quanto pesa davvero questa superficie, ho catturato `tools/list` via stdio (JSON-RPC su `npx`) da tre server ufficiali e contato i token con `tiktoken` in cl100k\_base.

| Server (ufficiale) | Tool   | Char       | Token     |
| ------------------ | ------ | ---------- | --------- |
| server-filesystem  | 14     | 12.983     | 2.759     |
| server-memory      | 9      | 10.760     | 2.288     |
| server-everything  | 13     | 7.663      | 1.679     |
| **Totale**         | **36** | **31.406** | **6.726** |

Tre soli server, trentasei tool: **6.726 token** buttati nel contesto a ogni richiesta, prima che l'utente chieda qualsiasi cosa. In media **187 token per tool**.

La deduplicazione, da sola, non basta — Nessuno dei tre server usa \`$defs\` o \`$ref\`: zero occorrenze nei payload. Il costo non nasce dalla duplicazione di schemi, ma dalla semplice presenza degli schemi. È il controesempio alla tesi "basta deduplicare".

Il problema è già stato misurato su scala più ampia: l'analisi di LeanZero ha contato [145 tool su 10 server per 40.784 token](https://leanzero.net/blog/mcp-tool-definitions-context-cost?ref=adrianoamalfi.com) a richiesta, con l'81,1% del payload occupato da JSON Schema e 3,2 GiB di KV cache bruciati prima che la conversazione inizi. Il paper "Tool Attention" parla di una tassa tra 10k e 60k token per turno sui deployment multi-server ([arXiv](https://arxiv.org/abs/2604.21816?ref=adrianoamalfi.com)).

## Quattro strategie a confronto

| Strategia                                      | Costo token/richiesta                                                | Latenza                               | Complessità                 | Quando conviene                                               |
| ---------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------- | --------------------------- | ------------------------------------------------------------- |
| **Schemi ricchi, $defs ripetuti** (status quo) | Altissimo: cresce col numero di tool e con la ricchezza degli schemi | Zero                                  | Zero: è il default          | Server già in produzione, se il budget token non è un vincolo |
| **API avvolte 1:1**                            | Basso: schemi minimi, zero $defs                                     | Zero                                  | Bassa: un tool per endpoint | Agenti monouso con pochi endpoint noti                        |
| **Discovery differita / lazy loading**         | Basso: si carica solo il tool che serve                              | Da bassa a media: una chiamata in più | Media: serve un loader      | Agenti multi-server con decine di tool                        |
| **Progressive discovery della spec**           | Minimo: dedup via $ref e retrieval per embedding                     | Zero a regime, non ancora disponibile | Dipende dalla spec          | Server pubblici serviti a molti client diversi                |

La prima riga è lo status quo, ed è il punto da cui si parte. La seconda è una decisione di design: chi espone un tool per endpoint con schemi minimi, senza `$defs`, abbassa il costo per tool alla fonte. È la leva che controlla chi costruisce il server.

La terza, la discovery differita, è la risposta che Swarms ha già messo in produzione: la release v15 "Akira" dichiara che i suoi 16 tool built-in costano circa 2.600 token a richiesta e introduce un `DynamicToolLoader` che registra i tool ma li carica solo quando servono ([blog Swarms](https://www.swarms.ai/blog/swarms-v15-akira-release?ref=adrianoamalfi.com)).

La quarta è il cantiere ufficiale annunciato nella roadmap: la progressive discovery. I meccanismi che prefigura, deduplicare gli schemi via `$ref` e recuperare i tool per embedding invece di inviarli tutti, sono già stati delineati da una proposta del settembre 2025 ([SEP-1576](https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1576?ref=adrianoamalfi.com)), ma una proposta non è una revisione: la spec deve ancora adottarli.

## Dove conviene cosa

Non esiste una strategia che vince su tutti i fronti, e chi la propone sta vendendo la propria.

**Agente monouso, pochi endpoint.** L'avvolgimento 1:1 è la scelta giusta: schemi minimi, costo quasi azzerato, nessuna infrastruttura in più. Il prezzo è rinunciare alla scoperta dei tool a runtime, ma un agente monouso non ne ha bisogno.

**Agente multi-server con decine di tool.** Qui la tassa diventa il problema: 4 server come i tre che ho misurato, circa 50 tool, costano oltre **9.000 token a richiesta** con un tokenizer standard, il 7% di una finestra da 128k, prima ancora della conversazione. Il lazy loading è la risposta migliore oggi: paghi solo i tool che entrano davvero nel contesto.

Il costo è una chiamata in più per risolvere i tool, e la complessità di un loader che decide cosa caricare. Il paper "Tool Attention" misura una riduzione del 95% dei token con questa tecnica, da 47.300 a 2.400, su un benchmark simulato da 120 tool: i numeri end-to-end sono proiezioni dichiarate, ma la direzione è netta ([arXiv](https://arxiv.org/abs/2604.21816?ref=adrianoamalfi.com)).

**Server pubblico servito a molti client diversi.** È il caso che solo la spec risolve: un server non sa in anticipo quale tool un client ignoto vorrà usare, quindi la discovery progressiva con retrieval per embedding è l'unica leva che scala senza sprecare superficie per tutti.

Il vincitore assoluto non esiste, e questa è la conclusione operativa: la scelta dipende da chi paga il conto.

## Il conto per tool

I dati pubblicati e la mia misura permettono un confronto che nessuna delle fonti fa direttamente: il costo per tool dei server ufficiali contro quello dei server ricchi. LeanZero pubblica la media dei suoi dieci server: **281 token per tool**, con una forchetta da 87 a 898 ([LeanZero](https://leanzero.net/blog/mcp-tool-definitions-context-cost?ref=adrianoamalfi.com)). I tre server ufficiali che ho misurato stanno a 187 token per tool. Il confronto è approssimativo ma onesto: i due tokenizer sono diversi (LeanZero usa un tokenizer open-weight locale, io `cl100k_base`), e sui tre server che abbiamo misurato entrambi il suo conta meno del mio, quindi con lo stesso tokenizer il divario con i server ricchi sarebbe ancora più largo.

Il punto non è la media, sono i casi estremi. Notion costa **698 token per tool** secondo LeanZero, quasi quattro volte i miei 187, perché ripete 9 `$defs` in 24 tool ([LeanZero](https://leanzero.net/blog/mcp-tool-definitions-context-cost?ref=adrianoamalfi.com)). Il costo per tool non è costante e non dipende dal numero di tool: dipende dalla ricchezza dello schema.

Ne segue la conseguenza che regge il confronto: la deduplicazione via `$ref` fa risparmiare di più proprio sui server più pesanti, quelli che oggi gonfiano la tassa. Sul server snello il taglio è marginale, sul server con gli schemi ripetuti è il 77,7% del payload ([LeanZero](https://leanzero.net/blog/mcp-tool-definitions-context-cost?ref=adrianoamalfi.com)). Ridurre il numero di tool, al contrario, colpisce la variabile sbagliata: la correlazione tra tool e costo misurata da LeanZero è r = 0,518.

La leva non sta nel ridurre il numero di tool, ma nel ridurre la superficie per tool che si paga. E fino a quando la progressive discovery non sarà nella spec, quella leva è nelle mani di chi costruisce il server: un tool con schema minimo costa 187 token. Un tool con schemi ricchi e `$defs` ripetuti ne costa quasi 700\. La differenza è una decisione di design, non un vincolo del protocollo.

## Further Reading

[The New MCP RoadmapAn update on the Model Context Protocol roadmap and focus areas for upcoming specification releases.![](https://adrianoamalfi.com/content/images/icon/favicon-8e9c79df-ae03-4692-9225-4937712d46e8.svg)Model Context Protocol BlogDavid Soria Parra (Lead Maintainer) and Den Delimarsky (Lead Maintainer)![](https://adrianoamalfi.com/content/images/thumbnail/og-image-b2de1759-4f7f-496b-8b37-a907b5836aa0.png)](https://blog.modelcontextprotocol.io/posts/mcp-roadmap/?ref=adrianoamalfi.com)

[145 MCP tool definitions cost 40,784 tokens | LeanZeroMeasured on ten real MCP servers: 145 tool definitions burn 40,784 context tokens before your question, and 30% is one server repeating itself.![](https://adrianoamalfi.com/content/images/icon/favicon-32x32-dd54eb4e-4c2e-4a12-ada1-2aa56f2fe2dc.png)LeanZeroMihai Perdum![](https://adrianoamalfi.com/content/images/thumbnail/93b72f3e564ffdbcc4170202128e444a37170b32-1200x630-672a5a3f-6912-4ea6-b924-6b3dfabf2ee3.png)](https://leanzero.net/blog/mcp-tool-definitions-context-cost?ref=adrianoamalfi.com)

[SEP-1576: Mitigating Token Bloat in MCP: Reducing Schema Redundancy and Optimizing Tool Selection · Issue #1576 · modelcontextprotocol/modelcontextprotocolPreamble Title: Mitigating Token Bloat in MCP: Reducing Schema Redundancy and Optimizing Tool Selection Authors: Zeze Chang (changzeze@huawei.com), Jinyang Li (lijinyang9@huawei.com), Zhen Cao (zhe…![](https://adrianoamalfi.com/content/images/icon/favicon-dc87c51d-e73a-476a-a55b-f98d8e76e810.svg)GitHubChangZeze![](https://adrianoamalfi.com/content/images/thumbnail/1576-fd1e38f1-1a80-4e9e-b0db-ae930b73054c)](https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1576?ref=adrianoamalfi.com)

[Swarms v15 ‘Akira’: Dynamic Tool Loading, a Real Agent Harness, and Typed Chat TurnsThe complete technical changelog for Swarms v15, code-named Akira. A DynamicToolLoader defers tool schemas behind a searchable catalog so a fifty-tool agent sends one schema, the autonomous agent harness ships sixteen working built-in tools with an honest transcript and a mutable plan, every multi-agent structure now delivers context as typed chat turns instead of one flattened blob, and 27 dead modules are gone. Every new feature, improvement, and bug fix from July 29 to September 1, 2026, day by day.![](https://adrianoamalfi.com/content/images/icon/logo-799e48b4-c904-4272-807a-dd81f6de56ee.svg)Swarms AIKye Gomez![](https://adrianoamalfi.com/content/images/thumbnail/opengraph-image-g58prh-b63913ca-ed81-44f5-a8c3-3a9332bcf72a)](https://www.swarms.ai/blog/swarms-v15-akira-release?ref=adrianoamalfi.com)

[Swarms v15 ‘Akira’: Dynamic Tool Loading, a Real Agent Harness, and Typed Chat TurnsThe complete technical changelog for Swarms v15, code-named Akira. A DynamicToolLoader defers tool schemas behind a searchable catalog so a fifty-tool agent sends one schema, the autonomous agent harness ships sixteen working built-in tools with an honest transcript and a mutable plan, every multi-agent structure now delivers context as typed chat turns instead of one flattened blob, and 27 dead modules are gone. Every new feature, improvement, and bug fix from July 29 to September 1, 2026, day by day.![](https://adrianoamalfi.com/content/images/icon/logo-15ab8277-2a11-4d34-b28a-ba4c40bc7c44.svg)Swarms AIKye Gomez![](https://adrianoamalfi.com/content/images/thumbnail/opengraph-image-g58prh-79674c19-3c95-49d5-8735-7f11f06cfe0f)](https://www.swarms.ai/blog/swarms-v15-akira-release?ref=adrianoamalfi.com)