---
title: Supabase
description: Usa la base de datos Supabase
---

import { BlockInfoCard } from "@/components/ui/block-info-card"

<BlockInfoCard 
  type="supabase"
  color="#1C1C1C"
/>

{/* MANUAL-CONTENT-START:intro */}
[Supabase](https://www.supabase.com/) es una potente plataforma backend-as-a-service de código abierto que proporciona a los desarrolladores un conjunto de herramientas para construir, escalar y gestionar aplicaciones modernas. Supabase ofrece una base de datos [PostgreSQL](https://www.postgresql.org/) completamente gestionada, autenticación robusta, APIs RESTful y GraphQL instantáneas, suscripciones en tiempo real, almacenamiento de archivos y funciones edge, todo accesible a través de una interfaz unificada y amigable para desarrolladores. Su naturaleza de código abierto y compatibilidad con frameworks populares la convierten en una alternativa convincente a Firebase, con el beneficio adicional de la flexibilidad y transparencia de SQL.

**¿Por qué Supabase?**
- **APIs instantáneas:** Cada tabla y vista en tu base de datos está disponible instantáneamente a través de endpoints REST y GraphQL, facilitando la creación de aplicaciones basadas en datos sin escribir código backend personalizado.
- **Datos en tiempo real:** Supabase permite suscripciones en tiempo real, permitiendo que tus aplicaciones reaccionen instantáneamente a los cambios en tu base de datos.
- **Autenticación y autorización:** Gestión de usuarios incorporada con soporte para email, OAuth, SSO y más, además de seguridad a nivel de fila para un control de acceso granular.
- **Almacenamiento:** Sube, sirve y gestiona archivos de forma segura con almacenamiento integrado que se integra perfectamente con tu base de datos.
- **Funciones Edge:** Despliega funciones serverless cerca de tus usuarios para lógica personalizada de baja latencia.

**Uso de Supabase en Sim**

La integración de Supabase en Sim facilita la conexión de tus flujos de trabajo basados en agentes con tus proyectos de Supabase. Con solo unos pocos campos de configuración —tu ID de proyecto, nombre de tabla y clave secreta de rol de servicio— puedes interactuar de forma segura con tu base de datos directamente desde tus bloques de Sim. La integración abstrae la complejidad de las llamadas a la API, permitiéndote concentrarte en construir lógica y automatizaciones.

**Beneficios clave de usar Supabase en Sim:**
- **Operaciones de base de datos sin código/con poco código:** Consulta, inserta, actualiza y elimina filas en tus tablas de Supabase sin escribir SQL o código backend.
- **Consultas flexibles:** Utiliza la [sintaxis de filtro de PostgREST](https://postgrest.org/en/stable/api.html#operators) para realizar consultas avanzadas, incluyendo filtrado, ordenamiento y limitación de resultados.
- **Integración perfecta:** Conecta fácilmente Supabase con otras herramientas y servicios en tu flujo de trabajo, habilitando potentes automatizaciones como sincronización de datos, activación de notificaciones o enriquecimiento de registros.
- **Seguro y escalable:** Todas las operaciones utilizan tu clave secreta de rol de servicio de Supabase, asegurando un acceso seguro a tus datos con la escalabilidad de una plataforma cloud gestionada.

Ya sea que estés construyendo herramientas internas, automatizando procesos de negocio o impulsando aplicaciones de producción, Supabase en Sim proporciona una forma rápida, confiable y amigable para desarrolladores de gestionar tus datos y lógica de backend—sin necesidad de gestionar infraestructura. Simplemente configura tu bloque, selecciona la operación que necesitas y deja que Sim se encargue del resto.
{/* MANUAL-CONTENT-END */}

## Instrucciones de uso

Integra Supabase en el flujo de trabajo. Admite operaciones de base de datos (consulta, inserción, actualización, eliminación, upsert), búsqueda de texto completo, funciones RPC, conteo de filas, búsqueda vectorial y gestión completa de almacenamiento (subir, descargar, listar, mover, copiar, eliminar archivos y buckets).

## Herramientas

### `supabase_query`

Consultar datos de una tabla de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `table` | string | Sí | Nombre de la tabla Supabase a consultar |
| `schema` | string | No | Esquema de base de datos desde el que consultar \(predeterminado: public\). Usa esto para acceder a tablas en otros esquemas. |
| `select` | string | No | Columnas a devolver \(separadas por comas\). Predeterminado: * \(todas las columnas\) |
| `filter` | string | No | Filtro PostgREST \(p. ej., "id=eq.123"\) |
| `orderBy` | string | No | Columna por la que ordenar \(añade DESC para orden descendente\) |
| `limit` | number | No | Número máximo de filas a devolver |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | array | Array de registros devueltos por la consulta |

### `supabase_insert`

Insertar datos en una tabla de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | ----------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `table` | string | Sí | Nombre de la tabla Supabase donde insertar datos |
| `schema` | string | No | Esquema de base de datos donde insertar \(predeterminado: public\). Usa esto para acceder a tablas en otros esquemas. |
| `data` | array | Sí | Los datos a insertar \(array de objetos o un solo objeto\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | array | Array de registros insertados |

### `supabase_get_row`

Obtener una sola fila de una tabla de Supabase basada en criterios de filtro

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `table` | string | Sí | Nombre de la tabla Supabase a consultar |
| `schema` | string | No | Esquema de base de datos desde el que consultar \(predeterminado: public\). Usa esto para acceder a tablas en otros esquemas. |
| `select` | string | No | Columnas a devolver \(separadas por comas\). Predeterminado: * \(todas las columnas\) |
| `filter` | string | Sí | Filtro PostgREST para encontrar la fila específica \(p. ej., "id=eq.123"\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | array | Array que contiene los datos de la fila si se encuentran, array vacío si no se encuentran |

### `supabase_update`

Actualizar filas en una tabla de Supabase según criterios de filtro

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `table` | string | Sí | Nombre de la tabla Supabase a actualizar |
| `schema` | string | No | Esquema de base de datos donde actualizar \(predeterminado: public\). Usa esto para acceder a tablas en otros esquemas. |
| `filter` | string | Sí | Filtro PostgREST para identificar las filas a actualizar \(p. ej., "id=eq.123"\) |
| `data` | object | Sí | Datos a actualizar en las filas coincidentes |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | array | Array de registros actualizados |

### `supabase_delete`

Eliminar filas de una tabla de Supabase según criterios de filtro

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `table` | string | Sí | Nombre de la tabla Supabase de la que eliminar |
| `schema` | string | No | Esquema de base de datos del que eliminar \(predeterminado: public\). Usa esto para acceder a tablas en otros esquemas. |
| `filter` | string | Sí | Filtro PostgREST para identificar las filas a eliminar \(p. ej., "id=eq.123"\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | array | Array de registros eliminados |

### `supabase_upsert`

Insertar o actualizar datos en una tabla de Supabase (operación upsert)

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `table` | string | Sí | Nombre de la tabla Supabase donde hacer upsert de datos |
| `schema` | string | No | Esquema de base de datos donde hacer upsert \(predeterminado: public\). Usa esto para acceder a tablas en otros esquemas. |
| `data` | array | Sí | Los datos para hacer upsert \(insertar o actualizar\) - array de objetos o un solo objeto |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | array | Array de registros insertados o actualizados |

### `supabase_count`

Contar filas en una tabla de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `table` | string | Sí | El nombre de la tabla Supabase de la que contar filas |
| `schema` | string | No | Esquema de base de datos desde el que contar \(predeterminado: public\). Usa esto para acceder a tablas en otros esquemas. |
| `filter` | string | No | Filtro PostgREST \(p. ej., "status=eq.active"\) |
| `countType` | string | No | Tipo de conteo: exact, planned o estimated \(predeterminado: exact\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `count` | number | Número de filas que coinciden con el filtro |

### `supabase_text_search`

Realizar búsqueda de texto completo en una tabla de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `table` | string | Sí | El nombre de la tabla Supabase donde buscar |
| `schema` | string | No | Esquema de base de datos en el que buscar \(predeterminado: public\). Usa esto para acceder a tablas en otros esquemas. |
| `column` | string | Sí | La columna en la que buscar |
| `query` | string | Sí | La consulta de búsqueda |
| `searchType` | string | No | Tipo de búsqueda: plain, phrase o websearch \(predeterminado: websearch\) |
| `language` | string | No | Idioma para la configuración de búsqueda de texto \(predeterminado: english\) |
| `limit` | number | No | Número máximo de filas a devolver |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | array | Array de registros que coinciden con la consulta de búsqueda |

### `supabase_vector_search`

Realizar búsqueda de similitud usando pgvector en una tabla de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | ----------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase (p. ej., jdrkgepadsdopsntdlom) |
| `functionName` | string | Sí | Nombre de la función PostgreSQL que realiza la búsqueda vectorial (p. ej., match_documents) |
| `queryEmbedding` | array | Sí | El vector/embedding de consulta para buscar elementos similares |
| `matchThreshold` | number | No | Umbral mínimo de similitud (0-1), típicamente 0.7-0.9 |
| `matchCount` | number | No | Número máximo de resultados a devolver (predeterminado: 10) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | array | Array de registros con puntuaciones de similitud de la búsqueda vectorial. Cada registro incluye un campo de similitud (0-1) que indica cuán similar es al vector de consulta. |

### `supabase_rpc`

Llamar a una función PostgreSQL en Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | ----------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase (p. ej., jdrkgepadsdopsntdlom) |
| `functionName` | string | Sí | Nombre de la función PostgreSQL a llamar |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | json | Resultado devuelto por la función |

### `supabase_storage_upload`

Subir un archivo a un bucket de almacenamiento de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Sí | El nombre del bucket de almacenamiento |
| `fileName` | string | Sí | El nombre del archivo \(p. ej., "documento.pdf", "imagen.jpg"\) |
| `path` | string | No | Ruta de carpeta opcional \(p. ej., "carpeta/subcarpeta/"\) |
| `fileContent` | string | Sí | El contenido del archivo \(codificado en base64 para archivos binarios, o texto plano\) |
| `contentType` | string | No | Tipo MIME del archivo \(p. ej., "image/jpeg", "text/plain"\) |
| `upsert` | boolean | No | Si es verdadero, sobrescribe el archivo existente \(predeterminado: false\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | object | Resultado de la subida incluyendo ruta del archivo y metadatos |

### `supabase_storage_download`

Descargar un archivo de un bucket de almacenamiento de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Sí | El nombre del bucket de almacenamiento |
| `path` | string | Sí | La ruta al archivo a descargar \(p. ej., "carpeta/archivo.jpg"\) |
| `fileName` | string | No | Anulación opcional del nombre del archivo |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `file` | file | Archivo descargado almacenado en archivos de ejecución |

### `supabase_storage_list`

Listar archivos en un bucket de almacenamiento de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | ----------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Sí | El nombre del bucket de almacenamiento |
| `path` | string | No | La ruta de la carpeta desde donde listar archivos \(predeterminado: raíz\) |
| `limit` | number | No | Número máximo de archivos a devolver \(predeterminado: 100\) |
| `offset` | number | No | Número de archivos a omitir \(para paginación\) |
| `sortBy` | string | No | Columna para ordenar: name, created_at, updated_at \(predeterminado: name\) |
| `sortOrder` | string | No | Orden de clasificación: asc o desc \(predeterminado: asc\) |
| `search` | string | No | Término de búsqueda para filtrar archivos por nombre |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | array | Array de objetos de archivo con metadatos |

### `supabase_storage_delete`

Eliminar archivos de un bucket de almacenamiento de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Sí | El nombre del bucket de almacenamiento |
| `paths` | array | Sí | Array de rutas de archivos a eliminar \(p. ej., \["carpeta/archivo1.jpg", "carpeta/archivo2.jpg"\]\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | array | Array de objetos de archivos eliminados |

### `supabase_storage_move`

Mover un archivo dentro de un bucket de almacenamiento de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Sí | El nombre del bucket de almacenamiento |
| `fromPath` | string | Sí | La ruta actual del archivo \(p. ej., "carpeta/viejo.jpg"\) |
| `toPath` | string | Sí | La nueva ruta para el archivo \(p. ej., "nuevacarpeta/nuevo.jpg"\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | object | Resultado de la operación de movimiento |

### `supabase_storage_copy`

Copiar un archivo dentro de un bucket de almacenamiento de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Sí | El nombre del bucket de almacenamiento |
| `fromPath` | string | Sí | La ruta del archivo de origen \(p. ej., "carpeta/origen.jpg"\) |
| `toPath` | string | Sí | La ruta para el archivo copiado \(p. ej., "carpeta/copia.jpg"\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | object | Resultado de la operación de copia |

### `supabase_storage_create_bucket`

Crear un nuevo bucket de almacenamiento en Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Sí | El nombre del bucket a crear |
| `isPublic` | boolean | No | Si el bucket debe ser accesible públicamente \(predeterminado: false\) |
| `fileSizeLimit` | number | No | Tamaño máximo de archivo en bytes \(opcional\) |
| `allowedMimeTypes` | array | No | Array de tipos MIME permitidos \(p. ej., \["image/png", "image/jpeg"\]\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | object | Información del bucket creado |

### `supabase_storage_list_buckets`

Listar todos los buckets de almacenamiento en Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | array | Array de objetos de bucket |

### `supabase_storage_delete_bucket`

Eliminar un bucket de almacenamiento en Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Sí | El nombre del bucket a eliminar |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `results` | object | Resultado de la operación de eliminación |

### `supabase_storage_get_public_url`

Obtener la URL pública para un archivo en un bucket de almacenamiento de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Sí | El nombre del bucket de almacenamiento |
| `path` | string | Sí | La ruta al archivo \(p. ej., "carpeta/archivo.jpg"\) |
| `download` | boolean | No | Si es verdadero, fuerza la descarga en lugar de mostrar en línea \(predeterminado: false\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `publicUrl` | string | La URL pública para acceder al archivo |

### `supabase_storage_create_signed_url`

Crear una URL firmada temporal para un archivo en un bucket de almacenamiento de Supabase

#### Entrada

| Parámetro | Tipo | Obligatorio | Descripción |
| --------- | ---- | -------- | ----------- |
| `projectId` | string | Sí | ID de tu proyecto Supabase \(p. ej., jdrkgepadsdopsntdlom\) |
| `bucket` | string | Sí | El nombre del bucket de almacenamiento |
| `path` | string | Sí | La ruta al archivo \(p. ej., "carpeta/archivo.jpg"\) |
| `expiresIn` | number | Sí | Número de segundos hasta que expire la URL \(p. ej., 3600 para 1 hora\) |
| `download` | boolean | No | Si es verdadero, fuerza la descarga en lugar de mostrar en línea \(predeterminado: false\) |
| `apiKey` | string | Sí | Tu clave secreta de rol de servicio de Supabase |

#### Salida

| Parámetro | Tipo | Descripción |
| --------- | ---- | ----------- |
| `message` | string | Mensaje de estado de la operación |
| `signedUrl` | string | La URL firmada temporal para acceder al archivo |

## Notas

- Categoría: `tools`
- Tipo: `supabase`
