Skip to main content

Cos’è un server MCP (guida avanzata)

Il Model Context Protocol (MCP) è una specifica che consente a client AI (Claude, Cursor, GitHub Copilot, ecc.) e applicazioni di comunicare tramite un protocollo standardizzato. MCP ha tre primitive principali. Il vantaggio di costruire un server MCP in Laravel è poter riutilizzare tutto l’ecosistema Laravel: Eloquent, cache, autenticazione, validazione.
Questa guida avanzata entra nell’implementazione pratica. Per i concetti di base di MCP consulta Intermedio: Laravel MCP.

Installazione e setup iniziale

1

Installare il pacchetto

Installa con Composer.
2

Pubblicare il file delle rotte

Con vendor:publish generi routes/ai.php, dove registrerai il server MCP.
3

Generare la classe server

Crea la classe server con un comando Artisan.
Nel file generato app/Mcp/Servers/DatabaseServer.php registri tool, resource e prompt.
4

Registrare il server

In routes/ai.php colleghi il server a una rotta.
Un server web viene raggiunto via HTTP POST. Un server locale gira come comando Artisan e serve per integrare client AI basati su CLI.

Implementazione dei tool

I tool sono funzioni invocabili dai client AI. Puoi usare direttamente service container, validazione ed Eloquent di Laravel.

Creare un tool

Nella classe generata implementi i metodi handle e schema.

Definizione dei parametri (schema)

Nel metodo schema usi il builder Illuminate\Contracts\JsonSchema\JsonSchema per definire i parametri accettati.

Annotazioni dei tool

Le annotazioni del protocollo MCP aiutano il client AI a valutare la sicurezza del tool.

Risposte strutturate

Per restituire una risposta JSON facile da parsare per il client AI usa Response::structured.

Risposte in streaming

Per elaborazioni lunghe puoi restituire un Generator per streammare l’avanzamento.
Nel server web le risposte in streaming vengono inviate automaticamente come stream SSE (Server-Sent Events).

Registrazione condizionale

Puoi esporre un tool solo a utenti che soddisfano certe condizioni.

Implementazione delle risorse

Le risorse sono i dati che il client AI legge come contesto: documentazione, configurazioni, dati dinamici.

Risorsa statica

Risorsa dinamica (URI template)

Con gli URI template puoi fornire risorse dinamiche in base ai parametri dell’URL.
Il client AI richiede la risorsa con URI del tipo app://users/42/profile; il valore di {userId} è recuperabile con $request->get('userId').

Annotazioni delle risorse

Puoi indicare priorità e audience della risorsa.

Implementazione dei prompt

I prompt sono template riutilizzabili usati dal client AI. Standardizzano query ricorrenti e workflow complessi.

Creare un prompt

Con asAssistant() il messaggio è trattato come output dell’assistente AI. Combinando system prompt e messaggi utente controlli in modo fine il comportamento dell’AI.

Autenticazione e autorizzazione

Autenticazione token con Sanctum

Il metodo più semplice. Il client MCP invia l’header Authorization: Bearer <token>.

Autenticazione con OAuth 2.1

Per un’autenticazione più solida, usa Laravel Passport.
Per OAuth pubblichi le view di autorizzazione fornite da MCP e le configuri in AppServiceProvider.

Autenticazione con middleware custom

Se usi API token proprietari, validali con un middleware custom sull’header Authorization.

Autorizzazione all’interno dei tool

Nel metodo handle di un tool o risorsa puoi usare $request->user() per controlli d’autorizzazione fine.
shouldRegister si limita a nascondere il tool dalla lista. Il controllo di autorizzazione all’invocazione va sempre eseguito nel metodo handle.

Esempio pratico: tool per operazioni sul database

Esempio completo di tool che cercano e creano dati usando Eloquent.

Classe server

Tool di ricerca (sola lettura)

Tool di creazione (scrittura)

Esempio pratico: tool per il filesystem

Esempio di tool che opera sui file tramite il facade Storage.
Nei tool che operano sui file esegui sempre la sanitizzazione del path e impedisci l’accesso al di fuori delle directory autorizzate. Rifiuta i path che contengono ...

Test

Server MCP, tool, risorse e prompt sono testabili con gli strumenti di test standard di Laravel.

Testare un tool

Chiami il tool direttamente con il metodo Server::tool().

Testare risorse e prompt

Metodi di assertion principali

Debug con MCP Inspector

Per debug interattivo usa MCP Inspector.

Considerazioni per il deploy

HTTP streaming e SSE

Se usi risposte in streaming (Generator) sul server web, verifica la configurazione del server.

Combinazione con Laravel Octane

Per server MCP ad alto traffico valuta Laravel Octane (FrankenPHP o Swoole). L’overhead per richiesta si riduce significativamente.
Con Octane lo stato viene condiviso tra le richieste. Fai attenzione a non usare proprietà statiche o stato globale nei tool.

Rate limit

Limita le richieste al server MCP con il middleware throttle.

Cache

Per tool di sola lettura invocati di frequente sfrutta la cache.

Log e monitoraggio

Loggando le chiamate ai tool MCP tieni sotto controllo l’utilizzo dei client AI.
In produzione ti consigliamo di monitorare performance ed eccezioni del server MCP con Laravel Telescope o Sentry.
Ultima modifica il 13 luglio 2026