MCP vs API: cuándo convertir una API en herramienta para agentes de IA
MCP no sustituye tu API ni tu backend: añade un contrato descubrible para que hosts y agentes usen capacidades existentes con límites, identidad y respuestas estructuradas.
MCP vs API no es una elección excluyente. Una API es el contrato operativo que aplicaciones, servicios y SDKs usan para leer o cambiar datos. MCP es una capa de contrato, descubrimiento y transporte que presenta capacidades seleccionadas a hosts y agentes de IA. La API sigue siendo el backend; MCP es un adaptador controlado hacia él.
La API define cómo se ejecuta una operación; MCP define cómo una capacidad puede descubrirse y usarse en un flujo agentic. La identidad, política y acceso a datos deben vivir en capas confiables fuera del prompt.
Por qué conviven API y MCP
Reutilizar el cliente de dominio evita duplicar reglas. El servidor MCP valida argumentos, obtiene identidad del contexto confiable y llama a un servicio existente. Ese servicio comprueba tenant, permisos, estado y consistencia. Si cambia la API interna, el adaptador absorbe el cambio.
Una API puede tener cientos de endpoints genéricos; MCP puede publicar tres tools de alto nivel que un modelo seleccione mejor. Mantén ambos contratos: el de API protege consumidores deterministas y el de MCP protege discovery y exposición gradual.
No uses MCP como gateway universal ni como API administrativa para el modelo. Diseña una superficie pequeña de intenciones, con versión, owner y resultados validables.
Checklist
Tools, resources y prompts
Una tool representa una intención acotada, no un proxy como call_api(path, body). get_invoice_summary es más fácil de autorizar y evaluar que aceptar cualquier método y URL. Limita filtros, paginación, campos y tamaño.
Un resource encaja para documentación, estado o contexto de solo lectura. No escondas mutaciones detrás de una lectura. Un prompt ayuda a interactuar, pero no es frontera de seguridad: el servidor repite comprobaciones.
Devuelve resultados estructurados con campos estables, identificadores y estado. Los mensajes para el modelo acompañan, pero no sustituyen un contrato. outputSchema y structuredContent ayudan a encadenar tools.
¿Te está sirviendo? Hay una dosis cada semana
Te resumo herramientas de IA para devs, agentes, MCP, seguridad y workflows en un email de 5 minutos. En español y sin ruido.
Suscribirme gratisArquitectura de referencia
El flujo recomendado es host/agente → cliente MCP → servidor MCP → servicio de dominio → cliente API o repositorio → backend. En el borde MCP filtras tools, validas esquemas, aplicas límites y conectas identidad. En dominio compruebas tenant, autorización, estado y reglas.
Puntos a revisar
Lo que conviene comprobar
Para lecturas devuelve el mínimo dato necesario. Para mutaciones crea una intención explícita, exige aprobación cuando corresponda, usa una clave de idempotencia y persiste auditoría. Un timeout no demuestra que no hubo efecto: marca estado desconocido y reconcilia.
La imagen resume la frontera: dos rutas llegan al backend compartido, pero solo MCP añade discovery y contrato para agentes. MCP no es una base de datos ni una segunda fuente de verdad.
Ejemplo TypeScript
Este ejemplo registra una tool real. El host crea el servidor con un TrustedContext cerrado por sesión; el modelo solo aporta los argumentos declarados. La identidad, tenant y capacidades no entran por el schema.
import { z } from "zod";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
const Input = {
orderId: z.string().uuid(),
includeLines: z.boolean().default(false),
};
type TrustedContext = Readonly<{
subject: string; tenantId: string; capabilities: ReadonlySet<string>;
}>;
export function createServer(ctx: TrustedContext) {
const server = new McpServer({ name: "orders", version: "1.0.0" });
server.registerTool("read_order", {
description: "Lee el resumen de un pedido del tenant autenticado",
inputSchema: Input,
}, async ({ orderId, includeLines }) => {
if (!ctx.capabilities.has("orders:read"))
throw new Error("capability_denied");
const result = await ordersApi.getSummary({
orderId, tenantId: ctx.tenantId, includeLines,
});
const structuredContent = {
orderId: result.id, status: result.status, total: result.total,
lines: includeLines ? result.lines : undefined,
};
return {
structuredContent,
content: [{ type: "text", text: JSON.stringify(structuredContent) }],
};
});
return server;
}
El adaptador de sesión autentica al host y pasa un contexto cerrado; no acepta tenant, subject, scopes ni tokens del modelo. Para una tool mutante añade idempotencia ligada a la intención, política independiente y aprobación humana.
Pruebas y operación
Prueba listado de tools, schemas inválidos, campos desconocidos, capability denied, tenant incorrecto, resource inexistente y resultados parciales. Ejecuta también la API directa para demostrar las mismas reglas.
Mide latencia por capa, validaciones, denegaciones, tamaño, reintentos y timeouts. Conserva trace_id, tenant redactado, tool/version, hash de argumentos y política; nunca tokens.
Evalúa trayectorias: tool elegida, argumentos, aprobación, allowlist y manejo de errores. Versiona schemas y descripciones porque una descripción puede cambiar la selección. Usa MCP Inspector en manual y CI en casos críticos.
Checklist
Plan incremental
Inventaría APIs y clasifica operaciones como lectura, escritura reversible o mutación crítica. Elige una lectura estrecha, crea cliente de dominio y define identidad, allowlist, schema y resultado.
Conecta un host en entorno sintético. Compara MCP con API directa, añade logs, fixtures y casos de prompt injection. Después expón una operación reversible con idempotencia y aprobación.
Versiona contrato, documenta owners, rota credenciales, añade CI de schemas y amplía por capacidad. Retira MCP cuando no aporte discovery real.
Preguntas frecuentes
¿MCP reemplaza una API REST?
No. Presenta capacidades; la API o dominio sigue ejecutando reglas y accediendo a datos.
¿Puedo exponer todos los endpoints como tools?
No es recomendable. Diseña tools de intención estrecha, allowlist, límites y resultados validables.
¿Dónde se comprueba el usuario?
En contexto autenticado y backend confiable, nunca en un campo que rellene el modelo.
¿MCP solo sirve para tools?
No. También define resources y prompts, pero ninguno sustituye autorización o validación.
¿Necesito MCP con un solo agente?
Solo si discovery o separación host/backend justifican el coste; API directa puede ser mejor.
¿Qué hago tras un timeout de mutación?
Marca intención desconocida, reconcilia por clave y no repitas hasta saber si fue aceptada.
Cómo convertir una API en una tool MCP sin duplicar el backend
- Elegir capacidad. selecciona una lectura estrecha y documenta owner, datos, riesgo y consumidor.
- Definir contrato. crea schema de input, resultado estructurado, límites, errores y versión.
- Construir adaptador. registra tool MCP y llama al servicio de dominio o cliente API existente.
- Conectar identidad. deriva subject, tenant y capacidades del contexto autenticado.
- Aplicar política. usa allowlists, scopes mínimos, rate limits y separación lectura/mutación.
- Probar y observar. ejecuta casos negativos con Inspector/CI y compara con API directa.
- Ampliar. añade aprobación e idempotencia para mutaciones y elimina MCP cuando no aporte discovery.

Fuentes y referencias
También te puede interesar
MCP en producción: seguridad, permisos y supply chainMCP outputSchema y structuredContentMCP Streamable HTTP: servidores remotosOAuth 2.1 para MCP: autorizaciónMCP Inspector: testing y depuraciónRecibe una lectura semanal de herramientas IA para devs
Cada semana te resumo herramientas de IA para devs, agentes, MCP, seguridad y workflows en un email de 5 minutos. En español y sin ruido.
Suscribirme gratis