# Sampling in MCP: when the server asks for a generation

Sampling lets an MCP server ask the client to run a completion with the user's model. Here is the flow, and why a catalogue refuses it.

> Page: https://ui.eneawork.it/blog/mcp-sampling-guida
> Markdown: https://ui.eneawork.it/blog/mcp-sampling-guida.md

*2026-11-01*

In MCP il sampling è la primitiva con cui un server chiede al client di eseguire una generazione con il modello dell'utente. Il server invia sampling/createMessage con i messaggi; il client decide se generare, con quale modello e cosa mostrare.

Il catalogo EneUI conta 111.985 componenti, 1.556 blocchi e 12.808 icone da 1.472 librerie, letti da /api/stats il 1 novembre 2026. L'endpoint /mcp espone 9 strumenti e 4 design system, verificati il 1 novembre 2026: la risposta initialize dichiara solo capabilities.tools.listChanged. Una chiamata sampling/createMessage allo stesso endpoint restituisce errore -32601, «method not found».

## Chi decide cosa

Il server non vede il modello: propone una lista di messaggi e un numero massimo di token. Il client verifica la capacità dichiarata nella sessione, applica il consenso dell'utente e restituisce il testo oppure un errore.

## Perché la direzione conta

Un tool viaggia dal client al server; il sampling viaggia nella direzione opposta, sulla stessa sessione. Il server deve poter inviare una richiesta mentre il client resta in ascolto: su stdio è naturale, su Streamable HTTP serve un canale aperto.

curl -s https://ui.eneawork.it/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"sampling/createMessage","params":{"messages":[]}}'

La risposta è {"code":-32601,"message":"method not found: sampling/createMessage"}. Non è un guasto di rete: il metodo non è nel dispatcher e la capacità non è dichiarata, quindi un client corretto non deve nemmeno provarci.

## Il costo lo paga il client

Ogni generazione consuma il credito dell'utente, non quello del server. Per un catalogo di componenti la cosa non porta valore: gli strumenti restituiscono record, URL e comandi già pronti, senza bisogno di un modello.

## Il rischio che il sampling introduce

Il server scrive i messaggi che finiscono nel modello dell'utente. Un server ostile può usare quella strada per iniettare istruzioni o far spendere token; per questo la specifica lascia al client il consenso e la scelta del modello.

## Il catalogo EneUI

Il server espone in sola lettura tabelle e dashboard; un record di esempio è data table di 21st-shadcn, licenza MIT e 114 stelle dichiarate a monte, letto il 1 novembre 2026. La configurazione del client è su /agents.

## La limitazione

EneUI non implementa sampling e non lo dichiara: la risposta initialize elenca solo tools. Un client che chiama il metodo ottiene -32601, e il protocollo non richiede sampling per essere conforme.

## Dove continuare

Il quadro del protocollo è in che cos'è MCP; lo schema di uno strumento è in progettare un tool MCP; il dispatcher scritto a mano è in come costruire un server MCP. Il confronto con le API REST è in MCP vs REST.

## FAQ

### Il sampling è obbligatorio in MCP?

No. È una capacità opzionale: un server può non dichiararla e un client può non supportarla. Il server EneUI non la dichiara e non implementa il metodo.

### Chi paga i token del sampling?

L'utente del client. Il server non usa una chiave propria: la generazione avviene con il modello e il credito del client, che può rifiutare la richiesta.

### Un server legge la conversazione grazie al sampling?

No, non l'intera conversazione. Riceve solo i messaggi che ha inviato e la risposta che il client restituisce, mai il resto del dialogo.

### Sampling e tool sono la stessa cosa?

No. Un tool è una funzione del server che il modello chiama; il sampling è una generazione chiesta dal server al modello del client.

### Cosa risponde EneUI a sampling/createMessage?

-32601, metodo non trovato. L'endpoint dichiara solo la capacità tools, quindi il metodo non esiste nel dispatcher.
