Permisos de Herramientas MCP
Vincent Depassier · 30 de agosto de 2026
El tercer eje de permisos. Los scopes de tabla dicen qué datos puede tocar una credencial; los permisos de herramientas dicen qué operaciones puede ejecutar siquiera.
Se configuran en la pestaña Tools de una API key o de un conector de IA.
Por qué este eje existe aparte
Un conector MCP no es un cliente de consultas. Puede crear tablas, publicar apps, correr automatizaciones, mandar correo, emitir API keys — operaciones que no tienen nada que ver con leer una fila, y que un scope de tabla no tiene forma de describir.
Limitar eso por datos sería la forma equivocada. "¿Puede este conector crear un rol?" no es una pregunta sobre ninguna tabla. Así que el gateway la hace por separado: una credencial lleva una lista de grupos de herramientas que puede usar, y cada herramienta pertenece a exactamente uno.
Los grupos
Grupo | A grandes rasgos |
| Leer y escribir filas |
| Tablas y columnas — estructura |
| Subidas, descargas, adjuntos |
| Documentos y carpetas |
| Prax Apps: páginas, despliegues |
| Formularios y envíos |
| Dashboards y widgets |
| Automatizaciones, nodos, ejecuciones |
| Agentes de IA |
| Tareas |
| Correo y notificaciones |
| Los usuarios finales de tu app |
| Endpoints, tópicos de bus, permisos de recursos |
| API keys, roles, secretos |
| Ajustes y consumo a nivel workspace |
Una key nueva arranca solo con `Data`. Todo lo demás está apagado hasta que lo enciendas — así que una credencial recién creada puede leer y escribir filas y nada más.
Los niveles se arman con verbos
Un nivel es una combinación de tres verbos, y cada herramienta declara cuál necesita:
Nivel | Read | Write | Delete |
|
|
|
|
| sí |
|
|
| sí | sí |
|
| sí | sí | sí |
Una herramienta se permite cuando el nivel de su grupo contiene el verbo que la herramienta requiere. list_tables necesita read; create_table necesita write; delete_table necesita delete.
Por eso ReadWrite sobre Schema deja que un conector agregue una columna pero no que borre una — la diferencia es un verbo, no un ajuste aparte.
Excepciones por herramienta
Los grupos son el control grueso. Cuando un grupo casi sirve pero no exactamente, agregá una excepción para una sola herramienta:
Modo | Efecto |
| Esta herramienta funciona, diga lo que diga el nivel de su grupo |
| Esta herramienta nunca funciona, diga lo que diga el nivel de su grupo |
Dos formas cubren casi todos los casos reales:
Una herramienta de menos en un grupo que otorgaste. Automations en Full, con Deny en la única herramienta que habla con una pasarela de pago.
Una herramienta de más en un grupo que no otorgaste. Security en None, con Allow en list_api_keys para que una integración de monitoreo revise keys por vencer — sin darle la capacidad de emitir una.
Esa segunda forma es la que conviene recordar. Reemplaza el mal canje habitual de otorgar un grupo entero por culpa de una herramienta.
Presets
La pestaña Tools ofrece puntos de partida de un clic. Reemplazan todo el estado, excepciones incluidas — un preset es un arranque limpio, no una fusión.
Vale saber qué significa "solo lectura" acá: otorga Read en todos los grupos menos `Security`, que queda en `None`. Listar API keys es técnicamente una lectura, pero no es la clase de lectura que tiene en mente quien pide una key de solo lectura.
Tratá un preset como un punto de partida que después achicás, no como una configuración terminada.
La regla que sorprende
Un permiso de herramienta no es un permiso de datos. Otorgar el grupo Data no otorga ni una tabla. Otorgar Docs no otorga ni un documento.
Los dos se verifican por separado y los dos tienen que pasar:
Llega la llamada MCP
|
+-- ¿el grupo de esta herramienta está permitido en el verbo que necesita? -> no: se rechaza acá
|
+-- ¿los scopes de tabla / docs permiten este destino en particular? -> no: se rechaza acá
|
v
se ejecutaEsto compone en una sola dirección: cada eje solo puede achicar. No hay ajuste en el eje de herramientas que amplíe el de datos, ni ninguno en el de datos que habilite una herramienta.
La consecuencia práctica es que un conector con todos los grupos en Full y sin scopes de tabla no puede hacer absolutamente nada — puede llamar todas las herramientas, y todas van a encontrar nada sobre lo cual actuar. Esa es la posición inicial correcta para un conector nuevo: encendé las herramientas que necesita, después otorgá los datos, y mirá qué hace en la pestaña Logs antes de ampliar cualquiera de los dos.
Recomendaciones
Partí de lo que la integración hace, no de lo que podría hacer. Un grupo de herramientas se agrega después con un clic.
Dejá `Security` en `None` salvo que el trabajo real de la integración sea administrar credenciales. Una key que puede emitir keys es una key que puede sobrevivir a su propia revocación.
Preferí una excepción antes que un grupo. Necesitar una herramienta es razón para un
Allow, no para un grupo entero.Leé bien el 403. "Tool not permitted" es este eje;
SCOPE_VIOLATIONes el de datos. Se arreglan en pestañas distintas.
Siguiente
Credenciales y Principales — los tres ejes y cómo se componen.
Docs Scopes — el árbol de documentos y sus reglas de herencia.