DanLevy.net

Il Tuo Agente AI è Inutile Senza Questo

Perché MCP è l'USB-C dell'Intelligenza Artificiale.

Hai costruito un agente AI. Forse è anche valido. I prompt sono precisi, il modello è veloce e le risposte sembrano naturali.

Ma poi qualcuno gli chiede di controllare un record cliente su Salesforce. O di tirare giù gli ultimi ticket Jira. O di cercare nella tua documentazione interna.

E il tuo bell’agente semplicemente… non può.

Questo è il problema d’integrazione che ogni piattaforma AI prima o poi affronta. Il tuo agente ha bisogno di mani. Ha bisogno di occhi nei tuoi sistemi aziendali reali. Senza di essi, stai solo eseguendo un costoso chatbot.

La soluzione tradizionale? Scrivere un wrapper API personalizzato per ogni singolo servizio che vuoi connettere. Leggere la loro documentazione, gestire la loro autenticazione, gestire i loro limiti di frequenza, sperare che non cambino i loro endpoint il mese prossimo. Poi rifarlo per il servizio successivo. E il successivo.

Il Model Context Protocol cambia completamente questo calcolo.


Cosa Risolve Realmente MCP

Pensa all’USB prima dell’USB-C. Avevi Mini-USB, Micro-USB, connettori Apple proprietari e un cassetto pieno di cavi che funzionavano solo con dispositivi specifici. L’USB-C non ha aggiunto solo un nuovo connettore—ha stabilito uno standard per cui qualsiasi cavo potesse funzionare con qualsiasi dispositivo.

MCP sta facendo la stessa cosa per le integrazioni di strumenti AI.

Invece di scrivere codice personalizzato per connettere il tuo agente a Salesforce, HubSpot, GitHub o qualsiasi altro servizio, implementi il protocollo una volta (o scarichi un server pre-costruito), e qualsiasi agente compatibile con MCP può parlarci immediatamente.

Il protocollo gestisce il livello di comunicazione. Tu definisci solo cosa fanno i tuoi strumenti e di quali dati hanno bisogno.


Configurare Integrazioni Multiple

Mastra ha supporto nativo per MCP tramite il suo MCPClient. Puoi connettere sia strumenti locali (eseguiti come processi figlio) che servizi remoti (eseguiti sulla propria infrastruttura).

Ecco una configurazione di produzione realistica che collega Google Maps per il routing, un servizio meteo e la ricerca locale su Wikipedia:

src/mastra/mcp/index.ts
import { MCPClient } from '@mastra/mcp';
export const mcpClient = new MCPClient({
servers: {
// Strumento locale (Stdio)
wikipedia: {
command: 'npx',
args: ['-y', 'wikipedia-mcp'],
},
// Mappe e Navigazione (Remoto/HTTP)
googleMaps: {
url: new URL(process.env.GOOGLE_MAPS_MCP_URL!),
requestInit: {
headers: {
Authorization: `Bearer ${process.env.GOOGLE_MAPS_API_KEY}`,
},
},
},
// Integrazione Servizio Meteo
weather: {
url: new URL('https://mcp.weatherapi.dev/v1'),
requestInit: {
headers: {
'X-API-Key': process.env.WEATHER_API_KEY!,
},
},
},
},
});

Il client gestisce il ciclo di vita della connessione, la gestione dell’avvio dei processi per gli strumenti locali e mantiene le connessioni HTTP per i server remoti. Non tocchi socket o stdio direttamente.


Collegare Strumenti agli Agenti

Una volta configurato il tuo client MCP, dare quegli strumenti a un agente è semplice:

src/mastra/agents/navigation-agent.ts
import { Agent } from '@mastra/core/agent';
import { openai } from '@ai-sdk/openai';
import { mcpClient } from '../mcp';
export const navigationDirectionsAgent = new Agent({
id: 'navigation-directions-agent',
name: 'Navigation & Directions Assistant',
instructions: `You are a helpful navigation assistant that provides route planning and travel advice.
- Always confirm the start and destination locations
- Use Google Maps tools to find optimal routes
- Check weather conditions along the route
- Provide estimated travel times and suggest alternatives if weather is poor
- Include relevant details like traffic, road conditions, and points of interest
- Keep responses clear and actionable`,
model: openai('gpt-5'),
tools: await mcpClient.getTools(), // <--- Questa è la linea magica
});

Quando un utente chiede: “Qual è il percorso migliore da San Francisco a Lake Tahoe, e dovrei preoccuparmi del meteo?”

L’agente legge le definizioni degli strumenti disponibili, realizza di avere accesso agli strumenti di routing di Google Maps e alle previsioni meteo, li esegue con i parametri giusti e risponde con un percorso ottimale più le condizioni meteorologiche attuali lungo il tragitto.

Non hai scritto una singola riga di codice dell’API di Google Maps o di integrazione del servizio meteo.


Autenticazione Per-Udente

C’è un errore di sicurezza facile da commettere qui: hardcodare le credenziali.

Se metti una chiave API di Google Maps nelle tue variabili d’ambiente e la chiami giorno, ogni utente condivide la stessa quota e gli stessi limiti di frequenza. Ancora più importante, se utilizzi servizi che memorizzano le preferenze degli utenti (come luoghi salvati o percorsi preferiti), tutti vedrebbero gli stessi dati. Funziona bene per demo. È una responsabilità in produzione.

Mastra gestisce questo permettendoti di creare client MCP dinamicamente con credenziali specifiche per utente:

async function handleUserRequest(userPrompt: string, userCredentials: UserCreds) {
// Crea un client per QUESTO specifico utente
const userMcp = new MCPClient({
servers: {
googleMaps: {
url: new URL(process.env.GOOGLE_MAPS_MCP_URL!),
requestInit: {
headers: {
// Chiave API o token specifico dell'utente
Authorization: `Bearer ${userCredentials.mapsApiKey}`,
'X-User-ID': userCredentials.userId,
},
},
},
},
});
const agent = mastra.getAgent('navigationDirectionsAgent');
// Inietta gli strumenti in fase di esecuzione
const response = await agent.generate(userPrompt, {
toolsets: await userMcp.getToolsets(),
});
return response;
}

Ogni utente ottiene il proprio set di strumenti isolato con le proprie quote API e preferenze. I luoghi salvati dell’Utente A rimangono privati, la cronologia dei percorsi dell’Utente B è separata. È così che funzionano gli agenti SaaS multi-tenant in pratica.


Costruire Strumenti Compositi

A volte devi combinare più strumenti MCP in un’unica operazione. Forse vuoi pianificare un percorso che tenga conto sia del traffico in tempo reale che delle condizioni meteorologiche lungo il tragitto.

Puoi avvolgere gli strumenti MCP in definizioni di strumenti personalizzate:

export const smartRouteTool = createTool({
id: 'smart-route-planner',
description: 'Pianifica il percorso ottimale considerando traffico e condizioni meteo',
execute: async ({ context, mastra }) => {
// Ottieni gli strumenti grezzi
const tools = await mcpClient.getTools();
// 1. Ottieni il percorso base da Google Maps
const routeData = await tools.googleMaps_getDirections.execute({
context: {
origin: context.origin,
destination: context.destination
}
});
// 2. Controlla il meteo lungo il percorso
const weatherData = await tools.weather_getForecast.execute({
context: { coordinates: routeData.waypoints }
});
// 3. Restituisci il percorso migliorato con avvisi meteo
return {
...routeData,
weatherAlerts: weatherData.alerts,
recommendation: weatherData.severe ? 'Considera di rimandare il viaggio' : 'Viaggio sicuro'
};
},
});

Questo ti dà un controllo granulare su esattamente come gli strumenti interagiscono, sfruttando comunque il protocollo MCP per il lavoro pesante.


Dove Porta Questo

Scrivere client API personalizzati per ogni servizio con cui il tuo agente AI deve parlare non è mai stato sostenibile. Scala male, si rompe spesso e lega la tua piattaforma a implementazioni specifiche.

MCP non risolve ogni sfida d’integrazione—l’autenticazione è ancora complessa, i limiti di frequenza contano ancora, e non tutti i servizi hanno ancora un server MCP. Ma stabilisce una fondazione che rende la costruzione di piattaforme agentiche significativamente meno dolorosa.

Se stai architettando un sistema AI che deve interagire con servizi esterni, capire MCP probabilmente vale il tuo tempo.

Risorse

Leggi la Serie

  1. Routing LLM
  2. Sicurezza e Guardrail
  3. MCP e Integrazioni di Strumenti (Questo Articolo)
  4. Workflow e Memoria