Tu Agente de IA es Inútil Sin Esto
Por qué MCP es el USB-C de la Inteligencia Artificial.
Has construido un agente de IA. Quizás incluso es bueno. Los prompts están bien diseñados, el modelo es rápido y las respuestas se sienten naturales.
Pero entonces alguien le pide que consulte un registro de cliente en Salesforce. O que extraiga los últimos tickets de Jira. O que busque en tu documentación interna.
Y tu hermoso agente simplemente… no puede.
Este es el problema de integración que toda plataforma de IA termina enfrentando. Tu agente necesita manos. Necesita ojos para ver tus sistemas de negocio reales. Sin ellos, solo estás ejecutando un chatbot costoso.
La solución tradicional consiste en escribir un wrapper personalizado de API para cada servicio que quieras conectar. Leer su documentación, manejar su autenticación, lidiar con sus límites de tasa, rezar para que no cambien sus endpoints el próximo mes. Y luego hacerlo de nuevo para el siguiente servicio. Y el siguiente.
El Model Context Protocol cambia por completo este cálculo.
Lo que MCP Resuelve Realmente
Piensa en USB antes de USB-C. Tenías Mini-USB, Micro-USB, conectores propietarios de Apple y un cajón lleno de cables que solo funcionaban con dispositivos específicos. USB-C no solo añadió un nuevo conector, sino que estableció un estándar que significaba que cualquier cable podía funcionar con cualquier dispositivo.
MCP está haciendo lo mismo para las integraciones de herramientas de IA.
En lugar de escribir código personalizado para conectar tu agente con Salesforce, HubSpot, GitHub o cualquier otro servicio, implementas el protocolo una vez (o descargas un servidor preconstruido) y cualquier agente compatible con MCP puede comunicarse con él de inmediato.
El protocolo maneja la capa de comunicación. Tú solo defines qué hacen tus herramientas y qué datos necesitan.
Configuración de Múltiples Integraciones
Mastra tiene soporte nativo para MCP a través de su MCPClient. Puedes conectar tanto herramientas locales (ejecutándose como procesos hijo) como servicios remotos (ejecutándose en su propia infraestructura).
Aquí tienes una configuración de producción realista que conecta Google Maps para rutas, un servicio meteorológico y una búsqueda local de Wikipedia:
import { MCPClient } from '@mastra/mcp';
export const mcpClient = new MCPClient({ servers: { // Herramienta local (Stdio) wikipedia: { command: 'npx', args: ['-y', 'wikipedia-mcp'], }, // Mapas y Navegación (Remoto/HTTP) googleMaps: { url: new URL(process.env.GOOGLE_MAPS_MCP_URL!), requestInit: { headers: { Authorization: `Bearer ${process.env.GOOGLE_MAPS_API_KEY}`, }, }, }, // Integración del Servicio Meteorológico weather: { url: new URL('https://mcp.weatherapi.dev/v1'), requestInit: { headers: { 'X-API-Key': process.env.WEATHER_API_KEY!, }, }, }, },});El cliente gestiona el ciclo de vida de la conexión, maneja el spawning de procesos para herramientas locales y mantiene conexiones HTTP para servidores remotos. No tocas sockets ni stdio directamente.
Conexión de Herramientas a Agentes
Una vez que tienes tu cliente MCP configurado, darle esas herramientas a un agente es sencillo:
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(), // <--- Esta es la línea mágica});Cuando un usuario pregunta: “¿Cuál es la mejor ruta de San Francisco a Lake Tahoe, y debería preocuparme por el clima?”
El agente lee las definiciones de herramientas disponibles, se da cuenta de que tiene acceso a herramientas de rutas de Google Maps y pronóstico del tiempo, las ejecuta con los parámetros correctos y responde con una ruta óptima más las condiciones meteorológicas actuales en el camino.
No escribiste ni una sola línea de código de la API de Google Maps ni de integración con el servicio meteorológico.
Autenticación por Usuario
Aquí es fácil cometer un error de seguridad: hardcodear credenciales.
Si pones una única clave de API de Google Maps en tus variables de entorno y das el trabajo por terminado, todos los usuarios comparten la misma cuota y los mismos límites de tasa. Más importante aún, si usas servicios que almacenan preferencias de usuario (como ubicaciones guardadas o rutas favoritas), todos verían los mismos datos. Esto funciona bien para demos. Es un pasivo en producción.
Mastra lo resuelve permitiéndote crear clientes MCP de forma dinámica con credenciales específicas por usuario:
async function handleUserRequest(userPrompt: string, userCredentials: UserCreds) { // Crear un cliente para ESTE usuario en particular const userMcp = new MCPClient({ servers: { googleMaps: { url: new URL(process.env.GOOGLE_MAPS_MCP_URL!), requestInit: { headers: { // Clave de API o token específico del usuario Authorization: `Bearer ${userCredentials.mapsApiKey}`, 'X-User-ID': userCredentials.userId, }, }, }, }, });
const agent = mastra.getAgent('navigationDirectionsAgent');
// Inyectar herramientas en tiempo de ejecución const response = await agent.generate(userPrompt, { toolsets: await userMcp.getToolsets(), });
return response;}Cada usuario obtiene su propio conjunto de herramientas aislado con sus propias cuotas y preferencias de API. Las ubicaciones guardadas del Usuario A permanecen privadas, el historial de rutas del Usuario B es independiente. Así es como funcionan en la práctica los agentes SaaS multi-tenant.
Construcción de Herramientas Compuestas
A veces necesitas combinar múltiples herramientas MCP en una sola operación. Quizás quieras planificar una ruta que tenga en cuenta tanto el tráfico en tiempo real como las condiciones meteorológicas en el camino.
Puedes envolver herramientas MCP en definiciones de herramientas personalizadas:
export const smartRouteTool = createTool({ id: 'smart-route-planner', description: 'Plans optimal route considering traffic and weather conditions', execute: async ({ context, mastra }) => { // Obtener las herramientas raw const tools = await mcpClient.getTools();
// 1. Obtener la ruta base de Google Maps const routeData = await tools.googleMaps_getDirections.execute({ context: { origin: context.origin, destination: context.destination } });
// 2. Consultar el clima a lo largo de la ruta const weatherData = await tools.weather_getForecast.execute({ context: { coordinates: routeData.waypoints } });
// 3. Devolver la ruta mejorada con alertas meteorológicas return { ...routeData, weatherAlerts: weatherData.alerts, recommendation: weatherData.severe ? 'Consider delaying trip' : 'Safe to travel' }; },});Esto te da un control preciso sobre exactamente cómo interactúan las herramientas mientras aprovechas el protocolo MCP para el trabajo pesado.
Hacia Dónde Conduce Esto
Escribir clientes de API personalizados para cada servicio con el que tu agente de IA necesite comunicarse nunca fue sostenible. Escala mal, se rompe a menudo y ata tu plataforma a implementaciones específicas.
MCP no resuelve todos los desafíos de integración, la autenticación sigue siendo compleja, el rate limiting sigue importando y no todos los servicios tienen un servidor MCP todavía. Pero establece una base que hace que construir plataformas de agentes sea significativamente menos doloroso.
Si estás diseñando un sistema de IA que necesita interactuar con servicios externos, entender MCP probablemente valga tu tiempo.
Recursos
Lee la Serie
- LLM Routing
- Security & Guardrails
- MCP & Tool Integrations (Esta Publicación)
- Workflows & Memory