Praxsuite

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

Data

Leer y escribir filas

Schema

Tablas y columnas — estructura

Files

Subidas, descargas, adjuntos

Docs

Documentos y carpetas

Apps

Prax Apps: páginas, despliegues

Forms

Formularios y envíos

Dashboards

Dashboards y widgets

Automations

Automatizaciones, nodos, ejecuciones

Agents

Agentes de IA

Tasks

Tareas

Messaging

Correo y notificaciones

EndUsers

Los usuarios finales de tu app

Gateway

Endpoints, tópicos de bus, permisos de recursos

Security

API keys, roles, secretos

Workspace

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

None

Read

sí

ReadWrite

sí

sí

Full

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

Allow

Esta herramienta funciona, diga lo que diga el nivel de su grupo

Deny

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 ejecuta

Esto 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_VIOLATION es el de datos. Se arreglan en pestañas distintas.


Siguiente