# Un server MCP in Node: SDK ufficiale o dispatcher scritto a mano

In Node un server MCP deve gestire handshake, elenco e chiamate degli strumenti. L'SDK toglie il codice di trasporto; un catalogo in sola lettura ne fa a meno.

> Pagina: https://ui.eneawork.it/blog/mcp-server-node-sdk
> Markdown: https://ui.eneawork.it/blog/mcp-server-node-sdk.md

*2026-11-01*

Un server MCP in Node deve gestire l'handshake, l'elenco degli strumenti e le chiamate su un trasporto. L'SDK ufficiale evita il codice di trasporto, ma un catalogo in sola lettura funziona con un dispatcher scritto a mano.

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. Il server in backend/mcp.js espone 9 strumenti e risponde con protocolVersion 2025-06-18; package.json elenca 8 dipendenze e nessuna è un SDK MCP, verificato il 1 novembre 2026.

## Cosa fa l'SDK al posto tuo

Il pacchetto @modelcontextprotocol/sdk fornisce il server, i trasporti stdio e Streamable HTTP, la registrazione degli strumenti, la validazione dello schema di input e la serializzazione degli errori. Tu scrivi la funzione e il contenuto che restituisce.

## Cosa resta tuo in ogni caso

## Il filo è più semplice dell'SDK

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

La risposta contiene protocolVersion, capabilities, serverInfo e le istruzioni per l'agente. Chi risponde a questi campi e a quattro metodi ha già un server usabile da Cursor e da Claude Code.

## Perché un catalogo resta senza SDK

Gli strumenti sono 9 e leggono un indice in memoria: un dispatcher mostra esattamente cosa risponde, senza dipendenze da aggiornare. Il costo è la validazione manuale degli argomenti.

Il comando di installazione che gli strumenti restituiscono è già pronto: npx shadcn@latest add "https://ui.eneawork.it/api/registry/<libreria>/<nome>.json?token=YOUR_TOKEN". Il server non copia file: passa il comando all'agente.

## Il catalogo EneUI

Le azioni e i blocchi di prezzo escono come record, non come codice generato; un esempio è la data table di 21st-shadcn, licenza MIT e 114 stelle dichiarate a monte, letta il 1 novembre 2026.

## La limitazione

Un dispatcher a mano non valida lo schema: un argomento sbagliato fa cadere la funzione e la risposta diventa Tool failed: … con isError, non un -32602. EneUI accetta questo compromesso perché gli strumenti sono pochi e i tipi sono semplici.

## Dove continuare

I metodi e il trasporto sono in come costruire un server MCP; nome e schema di uno strumento sono in progettare un tool MCP; il quadro generale è in che cos'è MCP. Il confronto con le API REST è in MCP vs REST.

## FAQ

### Serve l'SDK per scrivere un server MCP?

No. L'SDK evita il codice di trasporto e di validazione, ma il protocollo è JSON-RPC su un trasporto: un dispatcher manuale è sufficiente per pochi strumenti.

### Quale trasporto scegliere in Node?

stdio se il client avvia il processo sulla stessa macchina; Streamable HTTP se il server è remoto e condiviso da più client.

### L'SDK gestisce l'autenticazione?

No. Token, sessione OAuth e intestazioni WWW-Authenticate restano a carico del server, che deve risolverli prima di eseguire lo strumento.

### Quante dipendenze ha il server EneUI?

Otto in package.json, nessuna delle quali è un SDK MCP. Il server usa Express per il corpo JSON e un array di strumenti per il resto.

### Un errore negli argomenti che risposta produce?

Nel server EneUI un contenuto con isError e il testo «Tool failed», non un errore JSON-RPC: la validazione è manuale e il catch è largo.
