En algún punto entre lanzar el agente de IA de WhatsApp de Lueira y montar una herramienta interna para nuestro propio equipo de operaciones, me di cuenta de que habíamos dejado de preguntarnos "¿esto debería ser una API REST o un panel?" y habíamos empezado a preguntarnos "¿qué herramientas necesita el cliente de IA?". Es un cambio pequeño de enfoque, pero ha cambiado cómo construimos casi todo lo que no es una pantalla puramente orientada a personas. Este post trata de señalar ese patrón en voz alta, a través de tres piezas de herramientas internas muy distintas.
1. El patrón que empezamos sin darnos cuenta
En un post anterior escribí sobre cómo funciona el agente de IA de WhatsApp de Lueira: no un modelo improvisando contra un calendario de reservas, sino un conjunto pequeño y estrictamente tipado de herramientas — check_availability, create_booking, send_payment_link — que el modelo puede invocar, cada una validada contra el motor de reservas real antes de que nada se confirme. El objetivo de ese diseño no era la parte de IA; era la disciplina. Definir una superficie estrecha de acciones, tipar cada entrada y salida, y no dejar nunca que el modelo toque la base de datos directamente.
Una vez que esa disciplina existe para un producto, resulta ser la respuesta correcta para problemas que no tienen nada que ver con WhatsApp ni con reservas. Model Context Protocol (MCP) — el protocolo abierto de Anthropic — es esencialmente esa misma idea estandarizada: en lugar de construir una integración a medida entre "el modelo" y "nuestro sistema", expones un conjunto de herramientas tipadas sobre un transporte común, y cualquier cliente compatible con MCP puede descubrirlas e invocarlas.
2. Ringover: convertir una API de telefonía en herramientas reutilizables
El ejemplo más claro es interno, no de cara al cliente. Usamos Ringover para llamadas, SMS, plantillas de WhatsApp y contactos, y como la mayoría de proveedores de telefonía SaaS tiene una API REST que nadie en Maladeta quiere integrar a mano cada vez que alguien necesita saber "¿puedes comprobar quién nos llamó la semana pasada?". Así que construimos un servidor MCP para ella — usando el framework xmcp — que expone 26 herramientas seleccionadas entre llamadas, analítica de llamadas por IA, contactos, mensajería, control de llamadas en vivo y búsquedas de directorio.
La autenticación es por petición: el servidor no almacena las credenciales de Ringover de nadie, reenvía la propia API key de Ringover de quien hace la llamada en cada petición. Lo que eso nos da en la práctica es que cualquiera con un cliente compatible con MCP puede preguntar "¿cuántas llamadas perdidas tuvimos la semana pasada?" o "envía un SMS a este cliente diciendo que vamos con retraso" y obtener una respuesta o una acción, sin que nadie escriba código de integración a medida. Así es, de forma simplificada, una de esas herramientas:
export const schema = {
to: z.string().describe("E.164 phone number of the recipient"),
message: z.string().max(1600).describe("SMS body to send"),
from_number_id: z.string().describe("Ringover number to send the SMS from"),
};
export const metadata = {
name: "ringover_send_sms",
description: "Send an SMS to a contact through Ringover",
};
export default async function ringoverSendSms(
{ to, message, from_number_id },
{ ringoverApiKey }
) {
const result = await ringoverClient(ringoverApiKey).sms.send({
to,
body: message,
number_id: from_number_id,
});
if (!result.ok) {
throw new Error(`Ringover rejected the SMS: ${result.error}`);
}
return { status: "sent", message_id: result.id };
}
3. Widgets interactivos, no solo datos
La plataforma de Marketplace Genérico — el núcleo compartido detrás de RocRoi, KayakGrandTour y NaturaAdventour — llevó el patrón a un sitio que no esperaba: más allá de los datos y hacia la interfaz. Su servidor MCP de catálogo no solo expone herramientas que devuelven JSON; también expone widgets "MCP App", como una ficha de producto o un calendario de disponibilidad, que se renderizan directamente dentro de la propia interfaz de un cliente compatible con MCP — Claude o ChatGPT, sin que ninguno de los dos productos haya tenido que construir una interfaz a medida para ello.
4. Cuándo MCP es la respuesta correcta, y cuándo no
Un panel puramente orientado a personas no mejora porque le atornilles un servidor MCP. MCP se gana su lugar específicamente cuando un cliente de IA necesita tomar de forma fiable una acción real o extraer datos reales, y prefieres definir eso una vez en lugar de construir una integración a medida cada vez.
Construir bien un servidor MCP requiere exactamente la misma disciplina que siempre ha requerido construir una buena API. Es tentador envolver cada tabla de tu base de datos en una herramienta y llamarlo "habilitado para MCP", y esa es una idea peor que no construir ninguno.
Lo que ha cambiado para nosotros no es la disciplina — es el punto de partida por defecto. Hace un año, "necesitamos que la IA hable con este sistema" significaba una integración puntual. Ahora significa: definir un conjunto pequeño de herramientas tipadas, validar cada llamada contra el sistema de registro real, y exponerlas sobre MCP.