Los agentes de IA necesitan límites, no llaves maestras
Dar acceso a un agente de IA a tu aplicación a través de MCP es arriesgado. Estás entregando un llavero con la esperanza de que solo abran ciertas puertas. Esa confianza es un riesgo de seguridad.
Al construir herramientas MCP para una aplicación Laravel multi-inquilino, debes resolver un problema: cómo permitir que un agente controle la aplicación sin acceder a los datos de otra persona.
Cada herramienta MCP actúa como un endpoint. Un agente llama a una herramienta y tu servidor ejecuta el código. En una configuración multi-inquilino, cada herramienta debe responder a dos preguntas:
- ¿Tienes permiso para hacer esto?
- ¿Tienes permiso para hacerlo aquí?
Si te saltas estas preguntas, crearás un agujero de seguridad.
Las solicitudes web utilizan sesiones para gestionar la multi-tenencia. Las herramientas MCP utilizan tokens. No hay sesión ni middleware para establecer el contexto del inquilino actual. Si dependes de alcances globales (global scopes) que busquen una "organización actual" en una sesión, no encontrarán nada. Una consulta que debería estar restringida podría devolver todas las filas de tu base de datos.
Utilizo estas cuatro reglas para mantenerme seguro:
- Filtrado explícito: Nunca dependas de un alcance ambiental bajo autenticación por token. Utiliza un único trait para filtrar por organización en cada ocasión.
- Usa UUIDs: Nunca uses IDs de autoincremento. Utiliza identificadores imposibles de adivinar para que los agentes no puedan suponer la existencia de otros registros.
- Reutiliza permisos: No crees nuevos
