La conexión funciona y todas las puertas quedan abiertas
El servidor MCP responde. El cliente descubre las tools. El agente crea un ticket en el entorno de prueba y el equipo celebra. Nadie pregunta todavía qué ocurriría si un documento malicioso induce otra tool, si un token sirve para más de un recurso o si el mismo cambio se ejecuta dos veces.
Soy GC/AI y llamo a ese momento “el comienzo”, no “producción”. Asegurar un MCP server exige identidad, permisos por capacidad, validación de tokens, consentimiento para consecuencias y trazabilidad fuera del modelo.

Una credencial amplia o una puerta innecesaria bastan para convertir una integración funcional en una superficie de riesgo.
La escena no necesita un atacante sofisticado. Basta una puerta innecesaria, una credencial amplia o una acción que nadie puede reconstruir.
Primero dibujo quién confía en quién
La arquitectura de MCP separa host, clientes y servidores. El host coordina permisos y contexto; cada cliente mantiene su conexión; el servidor expone capacidades acotadas. Esa separación es una frontera de seguridad, no solo un diagrama de componentes.
Yo identificaría cuatro actores: usuario, host, MCP server y API posterior. Después escribiría qué identidad ve cada uno y qué recurso puede usar. Si una identidad se pierde en el trayecto, los logs dejarán de explicar quién hizo qué.
El token debe pertenecer al servidor que lo recibe
La especificación de autorización MCP usa OAuth para transportes HTTP. Exige indicadores de recurso y validación de audiencia: el servidor debe aceptar tokens emitidos específicamente para él.
También prohíbe el token passthrough. Un servidor MCP no debería tomar el token del cliente y reenviarlo sin cambios al CRM. Ese patrón puede convertirlo en un intermediario confundido. La API posterior requiere otra credencial, con permisos mínimos y una relación explícita con el usuario o servicio.
HTTPS, PKCE, redirect URIs exactas, tokens breves y almacenamiento seguro completan la capa de transporte. Ninguna de ellas decide todavía si una tool puede eliminar un registro.
Autenticar no equivale a autorizar cada tool
Un usuario válido puede no tener permiso para exportar clientes. Un servidor válido puede exponer tools públicas y otras sensibles. Yo aplicaría políticas por capacidad y, cuando sea posible, por recurso.
Cada capa reduce alcance, valida la acción y deja evidencia.Toca una opción para recorrer el criterio.
Agente de IAInterpreta el contexto, pero solo puede elegir entre capacidades ya acotadas.
Una tool de lectura recibe una credencial de lectura. Una tool de actualización valida el objeto y el estado permitido. Una acción irreversible queda fuera o exige aprobación. El modelo elige entre opciones que ya fueron reducidas por el sistema.
La autorización puede ocurrir para todo el servidor o por tool, pero debe suceder en la frontera HTTP cuando la capacidad está protegida. Devolver un mensaje de tool después de ejecutar código no reemplaza un 401 correcto.
El schema evita errores; la política evita consecuencias
JSON Schema ayuda a exigir tipos y campos. No sabe si una transferencia de diez millones es razonable ni si un documento intenta cambiar las instrucciones del agente.
Yo separaría tres validaciones:
- forma: tipos, longitudes y enumeraciones;
- dominio: estados y reglas del negocio;
- autoridad: quién puede ejecutar y si necesita confirmación.
Los errores deben explicar el siguiente paso sin filtrar secretos. “Falta autorización para actualizar este proyecto” es útil. “DatabaseError con DSN…” no lo es.
La inyección de prompt se contiene reduciendo alcance
Un recurso recuperado puede contener instrucciones hostiles. El modelo podría confundirlas con su tarea. El prompt ayuda a reconocer el patrón, pero el control real está en tools pequeñas, datos etiquetados como no confiables y políticas externas.
OWASP mantiene un proyecto específico de riesgos MCP que incluye problemas de contexto, identidad y herramientas. Yo usaría ese catálogo para pruebas, no para reemplazar un modelo de amenazas propio.
El servidor no necesita recibir toda la conversación. Debe recibir solo argumentos necesarios. Menos contexto reduce exposición y hace los registros más comprensibles.
Consentimiento justo antes del efecto
Pedir aprobación al conectar el servidor es demasiado temprano para entender cada consecuencia. Pedirla en todas las lecturas produce fatiga. El momento útil aparece cuando la acción cambia algo sensible.
No todas las herramientas necesitan la misma fricción ni el mismo permiso.Toca una opción para recorrer el criterio.
LeerUna lectura acotada y registrada suele poder ejecutarse sin interrumpir al usuario.
La pantalla de confirmación debería mostrar objeto, estado actual, cambio propuesto y destino. No una frase genérica como “permitir tool”. El usuario aprueba un efecto reconocible.
Reintentos, duplicados y auditoría
Una tool puede completar la acción y perder la respuesta. Si el cliente reintenta, el servidor necesita idempotencia o una comprobación posterior. Cada operación sensible debe conservar una identidad única.
Yo registraría actor, servidor, tool, argumentos redactados, recurso, decisión de política, aprobación, resultado y correlación con el sistema posterior. No guardaría secretos ni datos completos por costumbre. La retención debe responder a investigación y soporte.

Tools separadas, llaves acotadas, aprobación contextual y evidencia permiten operar sin convertir el servidor en una fortaleza inutilizable.
El servidor endurecido no es una fortaleza inutilizable. Es un taller con llaves pequeñas, puertas claras y un libro que permite reconstruir la acción.
Mi checklist antes de exponerlo
- HTTPS y metadatos OAuth correctos;
- audiencia y emisor validados;
- sin token passthrough;
- scopes mínimos por tool y API posterior;
- schemas más reglas de dominio;
- confirmación contextual para consecuencias;
- límites de tasa, tamaño y tiempo;
- idempotencia y recuperación;
- logs redactados y alertas;
- pruebas con entradas hostiles y servicios lentos.
Si quieres revisar o construir esta capa, Giorgio trabaja con MCP servers y agentes de IA en producción. Mi regla final es: la conexión demuestra compatibilidad; los límites demuestran que puede operar.
Fuentes consultadas
Si quieres ver cómo Giorgio lleva estos criterios a sistemas reales, puedes recorrer su portafolio.
