Piloto privadoDisponibilidad y límites actuales ↗
Docs/Agentes·
.mdEN

Tokens de agente para clientes

De una cuenta nueva a un agente de IA (Claude Code, Cursor o cualquier cliente MCP) que inspecciona tu esquema, aplica migraciones y despliega Edge Functions en un proyecto con un token acotado y con caducidad, en lugar de la clave service-role del proyecto. Un token con sql.execute o migration ejecuta SQL como dueño de la base de datos y puede leer todo lo que esa base guarda, incluidos los secretos del propio proyecto: dáselo solo a un agente al que confiarías esa clave. Todas las rutas de esta página están en el documento OpenAPI 3.1 que el servicio de identidad sirve en https://<host>/platform/identity/openapi.yaml.

Estos tokens los crea el cliente en la página con sesión. Los tokens que emite hoy la consola privada se describen en el inicio rápido para agentes. Cada paso indica su estado; los estados se definen en la página de datos. El operador activa las rutas de tokens con enroll-public-agents; hasta entonces responden 503. Qué protege hoy los datos del piloto: seguridad y estado.

1. Crea tu cuenta

Estado: Disponible en el piloto (access.signup)

Abre https://<host>/public-identity/ y elige Create account: correo, el código de 6 dígitos que enviamos (válido 15 minutos), una contraseña de 12 a 72 caracteres, una app autenticadora y, por último, guarda los códigos de recuperación. La página con sesión muestra tu organización, sus proyectos y, debajo, tus tokens de agente.

2. Crea un proyecto

Estado: Disponible en el piloto (access.self-service-project)

En la página con sesión, ponle nombre al proyecto y elige Create project. La fila muestra cada paso hasta que el proyecto está listo. El plan del piloto permite un proyecto por organización. Por script, con la sesión del navegador: POST /platform/api/dashboard/platform/organizations/{organization}/projects con {"name": "...", "idempotency_key": "<uuid>"} y luego consulta la operación que devuelve.

3. Crea un token de agente

Estado: En desarrollo (agents.tokens)

En la página con sesión: New token, ponle el nombre del agente, elige los proyectos, el acceso y la caducidad, y luego Create token. Copia el token o la configuración MCP lista y elige I stored this token. El token no se vuelve a mostrar; el servidor solo guarda su SHA-256.

ScopeHerramientasRoles que pueden otorgarlo
read (siempre incluido)get_project, get_project_url, get_publishable_keys, get_agent_operation, list_migrations, list_edge_functions, get_edge_functiontodo rol del proyecto
database.readlist_tables, get_policiestodo rol del proyecto
migrationapply_migrationowner, admin
sql.executeexecute_sqlowner, admin
deploydeploy_edge_function, invoke_edge_functionowner, admin

migration y sql.execute ejecutan SQL como dueño de la base de datos y pueden saltarse RLS; migration añade el registro de nombre y checksum. Otórgalos solo a agentes a los que dejarías administrar la base de datos.

Reglas que aplica el servidor:

  • Un token es tuyo, de una organización y de los proyectos que elegiste.
  • La caducidad es obligatoria: de 1 a 30 días por defecto; el operador fija el máximo, de 1 a 90 días. La página ofrece 1, 7, 30 y 90 días hasta ese máximo, y el propio máximo.
  • Como máximo 10 tokens activos y 10 creaciones por hora por cuenta.
  • Lo que puede hacer un token es su scope intersectado con tu rol en cada llamada: si tu rol baja a developer, desaparecen sus herramientas de SQL y despliegue, y vuelven si tu rol vuelve.
  • Si sales de la organización o pierdes el acceso a uno de los proyectos del token, el token queda revocado en ese momento y sigue revocado aunque te vuelvan a invitar o a dar el proyecto: crea uno nuevo.
  • Repetir una creación con el mismo idempotency_key devuelve el mismo token con "secret": null; revócalo y crea otro.

Por script, con la sesión del navegador (Origin, X-Plurabase-Request: 1 y el token CSRF de la sesión): POST /platform/api/dashboard/platform/agents/tokens con

json
{"organization": "<uuid>", "name": "Claude Code", "projects": ["<ref del proyecto>"],
 "scopes": ["read", "database.read", "migration"], "expires_in_days": 7,
 "idempotency_key": "<uuid>"}

La respuesta 201 trae secret una sola vez; GET .../agents/tokens lista los tokens sin él.

4. Conecta tu cliente MCP

Estado: En desarrollo (agents.tokens)

Endpoint, uno por proyecto: https://<host>/platform/api/dashboard/platform/agents/projects/<ref del proyecto>/mcp, con la cabecera Authorization: Bearer pbt_.... Guarda el token en el almacén de secretos del cliente o en una variable de entorno, nunca en un repositorio.

Claude Code:

sh
claude mcp add --transport http plurabase-<ref> \
  https://<host>/platform/api/dashboard/platform/agents/projects/<ref>/mcp \
  --header "Authorization: Bearer $PLURABASE_MCP_TOKEN"

Clientes que se configuran con JSON (la página copia esto con tu token incluido):

json
{"mcpServers": {"plurabase-<ref>": {"type": "http",
  "url": "https://<host>/platform/api/dashboard/platform/agents/projects/<ref>/mcp",
  "headers": {"Authorization": "Bearer <token>"}}}}

Clientes que solo arrancan servidores stdio locales: ejecuta el conector de agents/simplybase-mcp (npm ci --ignore-scripts una vez) como node connector.mjs, con PLURABASE_MCP_URL, PLURABASE_MCP_TOKEN y PLURABASE_MCP_HOSTS (tu <host>, separados por comas si son varios) en su entorno. Envía el token solo por HTTPS, a la ruta MCP de un proyecto, en un host que PLURABASE_MCP_HOSTS incluya. Muchos clientes arrancan los servidores stdio casi solo con el bloque env del servidor, así que define las tres ahí, en tu configuración MCP de usuario, nunca en un archivo dentro de un repositorio.

La lista de hosts detecta una URL mal escrita o un host parecido. No protege tu token de una configuración MCP que no escribiste tú. El archivo MCP de un repositorio puede fijar PLURABASE_MCP_URL y PLURABASE_MCP_HOSTS en su propio host, y su bloque env tiene prioridad sobre el entorno que pasa tu cliente, así que un token que esté en el entorno de tu shell termina allí. Cualquier comando que arranque puede además leer tus archivos y tu entorno, guardes donde guardes el token. Aprueba servidores MCP de proyecto solo en repositorios en los que confíes.

Empieza cada sesión con tools/list y get_project: la lista de herramientas es exactamente lo que este token puede hacer ahora. Límites: 60 llamadas por minuto por token, 600 cada 10 minutos por red, 2 llamadas en curso por servidor; un 429 trae Retry-After. El endpoint responde solo JSON (sin SSE) y rechaza peticiones de navegadores desde otros orígenes.

5. Migra tu esquema

Estado: En desarrollo (agents.tokens)

Pide al agente que aplique cada cambio con apply_migration (name, query, operation_id). Corre en una transacción y registra nombre y checksum: el mismo nombre y contenido otra vez es una repetición segura; otro contenido con el mismo nombre se rechaza. list_migrations muestra las últimas 200 migraciones que aplicaste con agentes en este proyecto, de la más antigua a la más reciente.

Cada llamada que modifica algo necesita un operation_id UUID nuevo. Tras un timeout, llama a get_agent_operation con el mismo id; nunca reenvíes la mutación con otro id. Un resultado unknown bloquea más mutaciones en ese proyecto hasta que el operador lo concilie.

Estado: En desarrollo (ops.migration)

Traer filas, usuarios de Auth y objetos de Storage desde un proyecto de Supabase es un trabajo de migración aparte, no una herramienta de agente; migración lo describe y explica cómo se mueve hoy un proyecto.

6. Despliega

Estado: En desarrollo (agents.tokens)

Edge Functions: deploy_edge_function con los archivos fuente, el entrypoint, verify_jwt y expected_revision (absent para una función nueva; si no, la revisión que da list_edge_functions), y luego invoke_edge_function con la clave pública o sin clave. Todavía sin verificar contra el runtime de proyectos del piloto.

Estado: En desarrollo (sites.git)

Los frontends no se despliegan con tokens: se publican desde Git a Sites (hosting de frontend).

7. Revoca

En la página con sesión, Revoke y luego Revoke token, o POST /platform/api/dashboard/platform/agents/tokens/{token_id}/revoke con {}. La siguiente petición del token se rechaza; una llamada que ya está en curso termina. Cerrar sesión o cambiar la contraseña no revoca tokens: después de recuperar tu cuenta, revisa la lista.

Rechazos

Las respuestas son {"error": "PUBLIC_AGENT_REJECTED", "reason": "<reason>"}.

EstadoReasonQué hacer
400rejectedCorrige la petición (campos, caducidad sobre el máximo, MCP-Protocol-Version)
401unauthorizedToken desconocido, caducado o revocado, o sesión cerrada: crea un token o inicia sesión
403forbiddenTu rol no permite ese scope en un proyecto elegido, o falló una comprobación de cabeceras
403step_up_requiredVuelve a iniciar sesión con tu autenticador
404not_foundNo es tu token, o el proyecto no está en este token o ya no es tuyo
409token_limitRevoca un token primero
409conflictMismo idempotency_key con otro contenido
409unsupportedEl runtime de este proyecto no ofrece herramientas de agente
413too_largeCuerpo MCP de más de 512 KiB
429try_laterEspera los segundos de Retry-After
503unavailableEl servicio de agentes aún no corre aquí, o no respondió

Los rechazos de una herramienta dentro de MCP (por ejemplo AGENT_SCOPE_DENIED o PROJECT_NOT_READY) llegan como resultado de la herramienta con isError: true.

OPERATION_HISTORY_LIMIT significa que el registro de operaciones de este proyecto está lleno: 10.000 operaciones, sin contar las migraciones aplicadas. MIGRATION_HISTORY_LIMIT significa que guarda 1.000 migraciones aplicadas; entonces solo se detiene apply_migration. Las entradas terminadas de más de 90 días dejan sitio solas; antes de eso, pide al operador que limpie el registro del proyecto. Los demás proyectos no se ven afectados.