Model Context Protocol (MCP) Server a fost dezvoltat de către Anthropic (este firma care a dezvoltat modelul AI Claude Sonnet) și a fost introdus în noiembrie 2024. Creșterea sa exponențială îl plasează între tehnologiile cu cel mai mare impact la nivel global și care este esențial să fie cunoscut de programatorii pasionați de proiectele bazate pe Inteligență Artificială.
MCP este un standard de comunicare între sistemele de inteligență artificială, cum ar fi Large Language Models (LLM) și datele pe care acestea le folosesc pentru a procesa informații și a răspunde cerințelor.
Arhitectura MCP este de tip Client-Server și standardul de comunicare este metaforic numit protocolul de comunicare "USB Type-C" pentru aplicațiile de inteligență artificială, bazat pe JSON-RPC 2.0.
Diagrama de mai jos ilustrează fluxul de calluri între un LLM, un MCP host & client(s) și unul sau mai multe MCP Server(e) care expun toolurile susținute de DB/API/Code.
Astfel se realizează conexiunea între:
Aplicațiile LLM (inițiază conexiunea, conține clientul MCP și interacționează cu utilizatorul);
MCP Client (realizează conexiunea cu serverul și trimite mesajele);
Capacitățile unui MCP Server:
Prompts: presupune template-uri sau instrucțiuni care ajută LLM-ul să interacționeze cu utilizatorul, cum ar fi un template cu întrebări predefinite, instrucțiuni etc.
Resources: conține datele propriu-zise, accesate doar pentru a fi citite, care pot să fie statice (de exemplu fișiere) sau dinamice (de exemplu interogări la o bază de date, apelarea unor API etc.)
Mai departe ne propunem să configurăm un MCP Server folosind Quarkus.
Documentația oficială de la Quarkus este foarte ușor de urmărit și de implementat, astfel vom implementa următorii pași:
1. Adăugăm dependența pentru mcp-server folosind maven sau gradle (exemplu pentru maven):
<dependency>
<groupId>
io.quarkiverse.mcp
</groupId>
<artifactId>
quarkus-mcp-server-http
</artifactId>
<version>${mcp.version}</version>
</dependency>
2. Adăugăm o configurație simplă:
## Use Server-Sent Events (SSE) for
## MCP transport
quarkus.mcp.server.transport=sse
quarkus.http.port=3000
3. Definim o capacitate de tip Tool pentru MCP Server:
@ApplicationScoped
public class VehicleTools {
@Tool(description = "Get vehicle details by VIN")
public JsonObject getVehicleDetails(@ToolArg(description = "VIN Number") String vin) { }
}
4. Definim o capacitate de tip Resource pentru MCP Server:
@ApplicationScoped
public class VehicleResource {
@Resource(
uri = "file://manual.xml",
name = "manual",
title = "Car manual",
description = "Read the car manual XML file",
mimeType = "application/xml"
)
public TextResourceContents readManual() {}
}
5. Definim o capacitate de tip Prompt pentru MCP Server:
@ApplicationScoped
public class VehiclePrompt {
@Prompt(description = " Find similar cars based on a short description")
PromptMessage findSimilarCars(@PromptArg(description = "Short description", defaultValue = "3 series") String description) {}
}
După ce avem configurat un MCP Server, avem nevoie de un MCP Client ca să explorăm capabilitățile serverului. Există un MCP Client Inspector bazat pe React, care conține o aplicație Web și care poate fi folosită cu ajutorul următoarei comenzi:
npx @modelcontextprotocol/inspector mcp.json
Putem să definim o configurație a serverului nostru MCP, folosind format JSON și să o folosim ca argument pentru MCP Client-ul de mai sus.
{
"mcpServers": {
"vehicle": {
"url": "http://localhost:3000/sse",
"transport": "sse"
}
}
}
Adoptarea serverelor MCP este esențială pentru construirea de aplicații AI enterprise, sigure și scalabile, oferind o punte de legătură standardizată între capabilitățile cognitive ale LLM-urilor și datele specifice ale organizațiilor.
Implementarea unui MCP Server folosind Quarkus este simplă, rapidă și eficientă. Având în vedere că multe aplicații enterprise folosesc Java ca limbaj de programare, viitorul automatizării acestor aplicații enterprise a devenit puțin mai standardizat și mult mai promițător.