El backend/IA y agentes
El permiso de una clave
no es una política.
Dale a un agente herramientas reales sobre tus datos — leer, escribir, migrar, desplegar — a través de un servidor MCP al que se conecta con un bloque de configuración.
Y luego quítale la seguridad basada en la confianza. Lo que el agente puede tocar es una clave con alcance, y lo que la base de datos devolverá es seguridad a nivel de fila. Dos puertas, y ninguna es un prompt.
Model Context Protocol
Tu proyecto, como herramientas que un asistente puede llamar
@rebasepro/mcp habla el Model Context Protocol, así que cualquier cosa que hable MCP puede manejar tu backend: consultar y editar datos, empujar cambios de esquema, abrir una rama de base de datos, disparar un cron, seguir el servidor de desarrollo.
Tus definiciones de colección y el esquema de Drizzle generado también se exponen como recursos MCP, así que el asistente lee tu modelo de datos real en vez de deducirlo del código que tenga abierto.
No hay nada que construir ni ningún adaptador que escribir. Es un bloque en un archivo de configuración.
// .cursor/mcp.json — or Claude Desktop, Windsurf, Copilot…
{
"mcpServers": {
"rebase": {
"command": "npx",
"args": ["@rebasepro/mcp"],
"env": {
"REBASE_BASE_URL": "https://api.example.com",
"REBASE_API_TOKEN": "rk_live_…"
}
}
}
}La superficie de herramientas
40 tools, and these are their real names
No es un diagrama de categorías: es la lista real que registra el servidor. Un agente capaz de llamarlas puede construir y operar una aplicación sin una persona en la ruta de la petición.
- list_documents
- get_document
- create_document
- update_document
- delete_document
- list_users
- create_user
- update_user
- delete_user
- list_roles
- rebase_auth_reset_password
- rebase_schema_generate
- rebase_schema_introspect
- rebase_db_push
- rebase_db_generate
- rebase_db_migrate
- rebase_generate_sdk
- rebase_doctor
- rebase_db_branch_create
- rebase_db_branch_list
- rebase_db_branch_info
- rebase_db_branch_delete
- storage_list_objects
- storage_get_metadata
- storage_delete_object
- cron_list_jobs
- cron_get_job
- cron_trigger_job
- cron_get_job_logs
- cron_toggle_job
- invoke_function
- rebase_dev_start
- rebase_dev_logs
- rebase_dev_stop
- rebase_project_list
- rebase_project_current
- rebase_project_switch
- rebase_project_add
- rebase_project_remove
- rebase_project_status
Agentes con privilegio mínimo
Autorización que el agente no puede olvidar
Todo el mundo en esta categoría te dirá que su integración de agentes es segura. La pregunta que merece la pena es qué la aplica — porque si la respuesta es la capa de herramientas, un fallo en esa capa es una brecha. Aquí la capa de herramientas es la primera de dos puertas, y la segunda es la base de datos.
Revoca un scope abajo y mira cómo las mismas cuatro llamadas vuelven rechazadas.
The key you hand the agent. Revoke something and watch the session below.
scopes
RLS roles
Scopes decide which calls the key may make; roles decide which rows those calls see. As service alone, Postgres grants it nothing unless a policy names it.
200 20 rows · id, title, price, stock
200 1 row updated · orders/8f21
403 SCOPE_MISSING · data:delete:orders
Refused twice: the key has no such scope, and no delete policy on orders names "service", so 0 rows match.
404 NOT_FOUND · customers/c7
The key holds the scope. Postgres does not agree — customers lets each customer read their own row, and "service" is nobody's.
The two gates are independent, which is the part worth sitting with: grant data:delete:orders above and the call still deletes nothing, because a scope is not a policy — and it comes back 403 rather than reporting a delete that never happened. No prompt, jailbreak or bug in the tool layer widens what the database will return.
Una clave, no una credencial con poderes divinos
Una clave tiene scopes, uno por colección y operación — data:read:orders, data:write:orders — y delete es un scope propio, separado de write: justo el que quieres negarle a un agente.
Qué filas ve es otro ajuste: sus roles. Sin más rol que service, Postgres no le concede absolutamente nada salvo que una de tus políticas nombre ese rol.
La clave se muestra una sola vez. Lo que el servidor guarda es un hash SHA-256, así que un volcado de la tabla de claves no le entrega a nadie una clave funcional — y una clave filtrada se revoca borrando la fila, no rotando un secreto compartido. Cada una lleva su propio límite de tasa y su propia caducidad.
Cómo se generan las policies// The key behind that token. Scopes say which calls it may make —
// delete is its own scope — and roles say which rows those calls see.
{
"name": "support-agent",
"scopes": [
"data:read:products",
"data:read:orders",
"data:write:orders"
],
"roles": [],
"expires_at": "2026-12-31"
}Infraestructura para agentes
Todo lo que un agente necesita para operar
Búsqueda vectorial, claves con alcance, funciones en streaming, realtime y tareas programadas — la superficie operativa sobre la que construyen los agentes, en una ventana en vez de un muro de tarjetas.
A surface an agent can hold
No controllers, no serializers, no migrations to hand-write, and nothing for a model to invent between the schema and the route. The whole contract fits in one context window, and the compiler checks whatever it writes back.
MCP es un estándar, así que la lista de cosas que pueden manejar tu backend no la controlamos nosotros: es todo lo que lo hable.
Apunta un agente hacia él
Genera un proyecto, añade el bloque de configuración y dale a tu asistente una clave que pueda leer una colección. Es una forma más rápida de averiguar si algo de esto es cierto que leer el resto de esta página.