Nelle moderne applicazioni di intelligenza artificiale, l'efficienza della comunicazione tra modelli e applicazioni rappresenta un fattore decisivo. Gli sviluppatori si trovano spesso di fronte a sfide nell'integrazione di strumenti e tecnologie diverse, soprattutto quando si tratta di scambiare informazioni di contesto in modo affidabile e flessibile. Il Model Context Protocol (MCP) [1] offre una soluzione, definendo un'interfaccia uniforme e indipendente dal linguaggio attraverso la quale le applicazioni possono fornire informazioni di contesto ai modelli di intelligenza artificiale e ricevere le loro risposte.
Sviluppato originariamente da Anthropic [2], l'MCP si ispira ai concetti del Language Server Protocol (LSP), fornendo così una base altrettanto universale e flessibile per i sistemi basati su AI. I server MCP possono essere gestiti in diverse modalità: come container OCI (dal catalogo di Docker [3]), come modulo WebAssembly (ad esempio, tramite _mcp.run_) o come una normale applicazione implementata in qualsiasi linguaggio di programmazione.
Spring AI [4], che ha recentemente integrato l'MCP, offre ora agli sviluppatori Java una comoda possibilità di consumare i server MCP direttamente nelle applicazioni Spring Boot e di implementare i propri server MCP. Questo articolo esaminerà in dettaglio come sfruttare queste capacità, partendo dalle basi tecniche del protocollo fino all'integrazione pratica in scenari di sviluppo.
Fondamenti tecnici del MCP
Il Model Context Protocol mira a creare un'interfaccia unificata e chiaramente definita per la comunicazione tra applicazioni e modelli di intelligenza artificiale. L'MCP segue un'architettura client-server, simile al Language Server Protocol (LSP), che si è già affermato come standard negli ambienti di sviluppo. L'MCP definisce una chiara ripartizione dei ruoli tra client e server:
- MCP-Server: elabora le richieste in ingresso e restituisce informazioni di contesto o risultati. Le attività tipiche di un server MCP includono, ad esempio, la fornitura di dati da database, file system, sistemi di ticketing o modelli di intelligenza artificiale esterni.
- MCP-Client: invia richieste al server MCP ed elabora le risposte. Esempi di client MCP sono ambienti di sviluppo, applicazioni web o altri strumenti di intelligenza artificiale che richiedono informazioni di contesto per l'elaborazione dei compiti.
Per la comunicazione tra client e server, l'MCP supporta diversi tipi di trasporto (Abb.1). Per la comunicazione con processi locali e strumenti da riga di comando, l'MCP offre il tipo di trasporto Standard Input/Output (_stdio_), che scambia richieste e risposte attraverso i flussi di input e output standardizzati (_stdin_/_stdout_). In alternativa, per la comunicazione basata su HTTP è disponibile il tipo di trasporto Server-sent Events (SSE), con cui i client e i server MCP possono connettersi tra loro anche attraverso la rete.
L'MCP utilizza un formato di protocollo standardizzato, generalmente basato su JSON-RPC. Ciò semplifica lo sviluppo di nuovi client e server MCP, garantendo al contempo un'ampia compatibilità con diversi sistemi. Questa standardizzazione è fondamentale per creare un ecosistema interoperabile dove diverse componenti possono comunicare senza frizioni, riducendo la complessità per gli sviluppatori.
Deployment flessibile dei server MCP
Un grande vantaggio del Model Context Protocol risiede nella flessibilità delle forme operative dei server MCP. Gli sviluppatori possono integrare in modo ottimale l'MCP nei paesaggi di sistema esistenti, utilizzando esattamente le tecnologie che soddisfano le loro esigenze. È anche possibile rendere disponibili sistemi software esistenti per applicazioni di intelligenza artificiale tramite un server MCP. Questo apre nuove possibilità per sfruttare dati e logica aziendale preesistenti nel contesto di nuove soluzioni AI.
I server MCP possono essere impiegati sia localmente come applicazioni da riga di comando sia remotamente tramite HTTP. Grazie alle interfacce standardizzate, i server MCP possono essere integrati senza soluzione di continuità, come spesso dimostrato nelle demo, in ambienti di sviluppo come Visual Studio Code o IntelliJ IDEA, nonché in framework applicativi come Spring Boot con Spring AI. I server MCP possono essere utilizzati, a seconda della situazione, come cosiddetti "Content Retriever" per fornire ai modelli di intelligenza artificiale i dati di contesto necessari. Questa capacità di fungere da "recuperatori di contenuto" è cruciale per alimentare i Large Language Models (LLM) con informazioni specifiche e aggiornate, migliorando l'accuratezza e la pertinenza delle loro risposte.
Integrazione di MCP in Spring AI
L'MCP Java SDK [5] offre un'implementazione completa del Model Context Protocol per Java. Consente la comunicazione standardizzata tra modelli di intelligenza artificiale e strumenti esterni e supporta sia schemi di comunicazione sincroni che asincroni. Gli sviluppatori possono creare i propri client e server MCP utilizzando l'SDK.
Spring AI MCP estende l'MCP Java SDK con una stretta integrazione nell'ecosistema Spring. Con gli starter forniti per Spring Boot, è possibile sviluppare client e server MCP in modo semplice ed efficiente. Ciò facilita la connessione degli strumenti esistenti ai modelli di intelligenza artificiale e la fornitura di proprie fonti di contesto nell'ambito delle applicazioni di intelligenza artificiale.
Tramite lo Spring Initializer, i progetti possono essere rapidamente configurati con il supporto Spring AI MCP necessario. Gli sviluppatori beneficiano così dei meccanismi abituali di Spring Boot, come la configurazione automatica e la gestione semplificata di connessioni e servizi. Questa coesione con l'ecosistema Spring riduce significativamente il tempo di sviluppo e la complessità, consentendo agli sviluppatori di concentrarsi sulla logica di business piuttosto che sui dettagli dell'infrastruttura.
Integrazione di un server MCP basato su Node in Spring AI
Spring AI supporta anche l'integrazione di server MCP esterni, implementati in altri linguaggi, come Node.js. In questo esempio, un server MCP per la query meteo (_@h1deya/mcp-server-weather_) viene integrato tramite _stdio_ in un'applicazione Spring Boot e interrogato tramite un endpoint di chat. Questa dimostrazione sottolinea la natura agnostica del linguaggio di MCP e la sua capacità di interoperare con diverse tecnologie.
Affinché l'applicazione possa comunicare con i server MCP e pilotare i modelli OpenAI, sono necessarie due dipendenze (Listing 1):
- _spring-ai-starter-mcp-client:_ consente la comunicazione con i server MCP tramite l'MCP Java SDK.
- _spring-ai-starter-model-openai:_ integra i modelli OpenAI come GPT-4o-mini nell'infrastruttura Spring AI.
Listing 1: Maven Dependencies per Spring AI e il client MCP
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
Il file _application.yaml_ (Listing 2) configura la connessione a un server MCP locale basato su Node, che viene automaticamente avviato tramite npx. La combinazione di _command: npx_ e _args: -y,@h1deya/mcp-server-weather_[6] avvia il server MCP direttamente dal processo Java con il modulo Node.js. Questa configurazione assicura che il server MCP venga automaticamente fornito all'avvio dell'applicazione e sia raggiungibile tramite _stdio_. Con l'API Java corrispondente, è anche possibile configurare e utilizzare il client MCP in modo programmatico, offrendo maggiore flessibilità per scenari complessi.
Listing 2: application.yml, per configurare il McpSyncClient
spring:
application:
name: mcp-client-weather
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4o-mini
mcp:
client:
stdio:
connections:
weather:
command: npx
args: -y,@h1deya/mcp-server-weather
Il _WeatherController_ (Listing 3, implicito nel testo originale) implementa un endpoint REST che riceve le richieste degli utenti e le elabora tramite Spring AI:
- Nel costruttore viene costruito un _ChatClient_ che è specializzato per le domande sul meteo.
- Tramite _defaultTools_, il server MCP esterno viene collegato come Tool (MCP-Client).
- L'endpoint _/ask_ riceve una domanda e restituisce una risposta generata dall'AI, eventualmente integrata dal server MCP.
Questa configurazione collega il modello linguistico generico di OpenAI con l'intelligenza specifica del dominio di un servizio meteo supportato da MCP, in modo flessibile ed estendibile con ulteriori strumenti. L'approccio dimostra come l'MCP possa fungere da ponte essenziale per fornire ai modelli di AI il contesto specifico necessario per compiti specializzati, superando i limiti dei modelli generici e consentendo la creazione di applicazioni AI robuste e contestualmente consapevoli.