Permisos del agente MCP
Qué puede hacer un agente MCP: permisos de su humano, alcance por proyecto y VPS, solo lectura y operaciones siempre prohibidas.
- Categoría: Inteligencia artificial y agentes
- Estado: Disponible
- Requisitos: Una cuenta de ArduMaker que autoriza al agente; Un agente conectado al servidor MCP (ver Servidor MCP)
- Herramientas MCP (Solo leen):
ver_contexto_inicial
¿Qué permite hacer?
- Limitar un agente a ciertos proyectos y, por separado, a ciertos VPS.
- Dejar un agente en solo lectura: no ve ni puede llamar herramientas que modifican datos.
- Cambiar el alcance o el modo desde
/mesin reconectar el agente, con efecto en su próxima llamada. - Revocar un agente o todos a la vez, al instante.
- Saber de antemano qué puede editar o borrar el agente en un proyecto, y por qué no.
¿Cuándo conviene usarlo?
- Al conectar un agente nuevo: empezar con el alcance mínimo y en solo lectura si solo tiene que diagnosticar.
- Cuando un agente va a trabajar sobre un solo VPS o un solo proyecto.
- Si se sospecha que una credencial se filtró: revocar.
¿Cómo funciona en ArduMaker?
Un permiso de un agente es la suma de tres capas. Las tres terminan en «no», pero el motivo es distinto y la respuesta lo dice:
| Capa | Qué decide | Motivo que devuelve |
|---|---|---|
| La persona que autorizó | El agente actúa como esa persona: rol en la empresa, en cada proyecto y acceso a cada VPS (incluidas las listas de miembros permitidos y excluidos del VPS) | the human who authorized this agent is not an admin of this project |
| La sesión | El alcance elegido al aprobar: proyectos, VPS y solo lectura | this agent was authorized with read-only scope |
| Las reglas del MCP | Operaciones que ningún agente puede hacer, tenga el alcance que tenga | no MCP agent can ever do this, whatever its scope |
Alcance
- Al aprobar se elige «todos los proyectos» o una lista, y por separado «todos los VPS» o una lista. Cada id se valida contra lo que la persona puede ver: no se puede dar a un agente más acceso que el propio.
- El alcance no queda congelado en el token: se resuelve en vivo en cada llamada. Reducirlo desde
/mevale en la llamada siguiente. - Un alcance restringido sin ningún id no se acepta: para dejar a un agente sin acceso se lo revoca.
Solo lectura
- El listado de herramientas solo incluye las que declaran que solo leen.
- Si igual llama a una que escribe, la llamada se rechaza con
sin_permisoyreintentable: false, y queda registrada como rechazo. - La misma regla vale para lo que el agente pueda tocar por la API REST (terminales, Docker): un agente de solo lectura no modifica un VPS por ningún camino.
- Al quitar el solo lectura, las herramientas de escritura funcionan enseguida; un cliente que ya tenía la lista cargada puede necesitar recargarla.
Lo que ningún agente puede hacer
- Borrar un proyecto completo.
- Agregar o quitar miembros de un proyecto, o cambiar su rol.
- Crear, editar o borrar un adjunto marcado como secreto (leerlo sí, si la persona puede).
- Borrar un VPS completo.
- Crear, editar o borrar roles de un proyecto, o cambiar quién tiene qué permisos.
- Crear, editar o firmar las políticas de un proyecto.
- Leer o tocar las finanzas de un proyecto: presupuestos, pagos de clientes, lo que cobra cada colaborador y sus comprobantes.
- Enviar mensajes de WhatsApp a números reales (solo el sandbox).
¿Qué cambia realmente?
- La conexión guarda el alcance (
alcance_todos,proyectos_permitidos,alcance_todos_vps,vps_permitidos) ysolo_lectura. - Revocar marca la conexión como revocada y corta también la cadena de refresh tokens: el agente pierde acceso al instante y no puede renovarse.
- Cerrar todas las sesiones revoca todos los agentes de la persona.
Guardas y herramientas restringidas
Algunas operaciones están permitidas pero piden una confirmación en el argumento, para que quede claro qué se destruye:
| Operación | Guarda |
|---|---|
| Registro DNS crítico (MX, NS, A/AAAA en el apex) | confirmado=true; sin él, 409 |
| Borrar un usuario Linux | confirmacion con el nombre exacto; root nunca |
Comando con forma destructiva (rm -rf, mkfs, shutdown, DROP DATABASE…) | 409 con lo que coincidió; reenviar con confirmado=true. Es una guarda contra accidentes, no una frontera de seguridad |
userdel o deluser por shell | Rechazado siempre: el camino es eliminar_usuario_vps |
| Borrar un servicio systemd crítico | Nombres protegidos (ssh, nginx, docker, mysql, postgresql…) |
Hay además herramientas solo para administradores del sistema (bandeja interna de bugs y solicitudes de escuelas). Solo aparecen si quien autorizó es admin del sistema, y eso se consulta en vivo en cada llamada: si se le quita el rol, su agente lo pierde al instante.
Esquema
- ¿Existe por MCP?: si no:
nunca permitido - ¿La sesión es de solo lectura?: si escribe: rechazo
- ¿Está en el alcance?: proyecto y VPS permitidos
- ¿Puede la persona?: rol de empresa, proyecto y VPS
- ¿Pide confirmación?:
confirmado/confirmacion
Resultado esperado
ver_contexto_inicialdevuelve el alcance (solo_lectura,todos_los_proyectos,todos_los_vps) ynunca_permitido.- Al ver un proyecto o una tarea, la respuesta incluye un bloque de permisos con
editar,borrary, si algo está enfalse, elmotivo. - En
/mecada conexión muestra su alcance, si está activa y si se detectó reutilización de un token (reuse_detected_at).
Errores y resolución
| Respuesta | Causa | Qué hacer |
|---|---|---|
sin_permiso por solo lectura | La sesión no escribe | Avisar a la persona: lo quita en /me; reintentar no sirve |
sin_permiso (403) | La persona no tiene ese permiso, o el recurso está fuera del alcance | Pedir el permiso o ampliar el alcance |
sin_permiso (430) | Herramienta de admin del sistema y quien autorizó no lo es | No hay camino |
conflicto (409) | Falta la confirmación de una guarda | Revisar y reenviar con la confirmación |
PATCH 400 en /me | Campo desconocido, tipo inválido o alcance restringido sin ids | Corregir el pedido |
PATCH 409 en /me | La conexión está revocada | Volver a autorizar |
Relación con MCP
El alcance se decide en la pantalla de autorización y se edita en /me (agentes conectados); no hay herramientas MCP para cambiar los propios permisos. Desde el agente, ver_contexto_inicial es la forma de conocerlos antes de planificar. Más detalle en /mcp/docs.