El reto de la autenticación
Un servidor MCP que se conecta a GitHub, Slack o un proveedor cloud necesita credenciales. Esas credenciales deben almacenarse de forma segura, transmitirse con seguridad y refrescarse cuando expiran. Hacerlo bien es fundamental, porque una credencial comprometida le da a un atacante acceso a todo aquello a lo que se conecte el servidor MCP.
El protocolo MCP no impone un mecanismo de autenticación específico. Esa flexibilidad permite que cada desarrollador elija el enfoque que mejor se adapte a su caso, pero implica que no existe una manera estandarizada de gestionar la autenticación entre servidores.
Patrón de API key
El patrón más sencillo consiste en pasar una API key al servidor MCP mediante variables de entorno. El servidor lee la clave al arrancar y la incluye en las peticiones al servicio externo. Funciona bien con servicios que tienen API keys estables y de larga duración.
La ventaja es la simplicidad: defines una variable de entorno, arrancas el servidor y la autenticación funciona. La desventaja es que las API keys guardadas en variables de entorno pueden filtrarse a través de listados de procesos, archivos de log o fugas en archivos de configuración. Conviene usar archivos de variables de entorno (como .env) con permisos de archivo adecuados, en lugar de exportarlas directamente en la shell.
Patrón de flujo OAuth
Los servicios que usan OAuth (Google, Microsoft, Slack, GitHub) requieren un flujo de autenticación más elaborado. El usuario debe autorizar al servidor MCP a acceder a su cuenta, lo que implica redirigir a la página de autorización del servicio, conceder el permiso y recibir un access token.
Algunos servidores MCP manejan esto levantando un servidor web local durante el flujo de autorización. El usuario abre una URL, otorga permiso y la redirección envía el token al servidor local. Es un flujo cómodo, pero exige que el servidor MCP incorpore capacidades de servidor HTTP para esa fase.
Otros utilizan una herramienta de autorización aparte que el usuario ejecuta una vez para obtener tokens, los cuales se almacenan localmente y se usan después desde el servidor MCP. Esto separa la responsabilidad de autenticación del servidor MCP, a costa de un paso de configuración adicional.
Refresco de tokens
Los access tokens de OAuth caducan. Cuando ocurre, el servidor MCP necesita usar un refresh token para obtener uno nuevo sin pedirle al usuario que vuelva a autorizar. Implementar bien el refresco es importante para servidores MCP de larga duración que necesitan acceso ininterrumpido a servicios externos.
Problemas habituales: no manejar el refresco en absoluto (el servidor deja de funcionar al expirar el token), refrescar tokens pero no persistir los nuevos (lo que obliga a reautorizar tras cada reinicio) y condiciones de carrera cuando varias peticiones disparan refrescos simultáneos.
Buenas prácticas de seguridad
Nunca incrustes credenciales en el código fuente del servidor MCP. Parece evidente, pero ocurre con la suficiente frecuencia como para repetirlo. Las credenciales en código pueden acabar en el control de versiones, compartirse en revisiones de código y filtrarse al dar acceso al repositorio.
Usa los scopes más restrictivos posibles al configurar el acceso OAuth. Si el servidor MCP sólo necesita leer correos, no pidas permiso para enviarlos. Limitar los scopes reduce el daño si el servidor se ve comprometido o si un ataque de prompt injection intenta abusar de sus capacidades.
Guarda los tokens en ubicaciones seguras. La integración con el llavero (macOS), el Administrador de credenciales (Windows) o archivos cifrados con permisos restringidos (Linux) son siempre mejores que un archivo de texto plano. Algunos servidores MCP soportan estos backends seguros; conviene revisar la documentación antes de caer en alternativas menos seguras.
Lecturas relacionadas
- Implicaciones de seguridad de conectar LLM a herramientas externas
- Privacidad de los datos al usar servidores MCP
- Cómo evaluar un servidor MCP antes de instalarlo
Explora servidores MCP en Skillful.sh. Busca integraciones con autenticación.