/ Directorio / Playground / Supabase
● Oficial supabase-community 🔑 Requiere tu clave

Supabase

por supabase-community · supabase-community/supabase-mcp

MCP oficial de Supabase — gestiona proyectos, ejecuta SQL, despliega Edge Functions, configura autenticación, consulta logs, todo desde el chat.

MCP oficial de Supabase, mantenido por la organización supabase-community. Envuelve la API de Gestión de Supabase más acceso a Postgres por proyecto. Permite a un agente crear ramas, ejecutar migraciones, escribir Edge Functions, consultar la base de datos y leer logs — sin salir del chat.

Por qué usarlo

Características clave

Demo en vivo

Cómo se ve en la práctica

supabase.replay ▶ listo
0/0

Instalar

Elige tu cliente

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": [
        "-y",
        "@supabase/mcp-server-supabase"
      ]
    }
  }
}

Abre Claude Desktop → Settings → Developer → Edit Config. Reinicia después de guardar.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": [
        "-y",
        "@supabase/mcp-server-supabase"
      ]
    }
  }
}

Cursor usa el mismo esquema mcpServers que Claude Desktop. La configuración del proyecto prevalece sobre la global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": [
        "-y",
        "@supabase/mcp-server-supabase"
      ]
    }
  }
}

Haz clic en el icono MCP Servers de la barra lateral de Cline y luego en "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": [
        "-y",
        "@supabase/mcp-server-supabase"
      ]
    }
  }
}

Mismo formato que Claude Desktop. Reinicia Windsurf para aplicar.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "supabase",
      "command": "npx",
      "args": [
        "-y",
        "@supabase/mcp-server-supabase"
      ]
    }
  ]
}

Continue usa un array de objetos de servidor en lugar de un mapa.

~/.config/zed/settings.json
{
  "context_servers": {
    "supabase": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@supabase/mcp-server-supabase"
        ]
      }
    }
  }
}

Añádelo a context_servers. Zed recarga en caliente al guardar.

claude mcp add supabase -- npx -y @supabase/mcp-server-supabase

Un solo comando. Verifica con claude mcp list. Quita con claude mcp remove.

Casos de uso

Usos del mundo real: Supabase

Probar una migración destructiva en una rama de base de datos antes de aplicarla en producción

👤 Ingenieros que envían cambios de esquema ⏱ ~30 min advanced

Cuándo usarlo: Tienes una migración que elimina una columna o rellena millones de filas, y quieres hacer una ejecución de prueba en una rama con datos reales primero.

Requisitos previos
  • Plan Supabase Pro o superior — La ramificación se restringe a planes pagos
  • Token de acceso personal — supabase.com/dashboard/account/tokens — limita el alcance a tu organización
Flujo
  1. Crear una rama desde producción
    Crea una rama de base de datos llamada 'test-drop-legacy-col' a partir de la rama principal en el proyecto <ref>. Espera a que esté lista.✓ Copiado
    → Rama creada con su propia cadena de conexión
  2. Ejecutar la migración en la rama
    Aplica la siguiente migración en la nueva rama: <pega SQL>. Reporta filas afectadas y errores.✓ Copiado
    → La migración se ejecuta; se ven los recuentos de filas
  3. Verificar y promover o descartar
    Ejecuta SELECT de prueba en la rama (las 10 primeras filas de las tablas afectadas, recuento de NULLs en columnas modificadas). Si se ve bien, dímelo y promoveré; si no, elimina la rama.✓ Copiado
    → Salida de verificación, luego un go/no-go explícito del usuario

Resultado: Migración validada contra la forma de datos reales antes de tocar producción.

Errores comunes
  • Las ramas no tienen los datos exactos de producción — son una instantánea al momento de crear la rama — Anota la marca de tiempo de la instantánea; si tu migración es sensible a filas recientes, ramifica lo más cerca posible del momento de aplicación
  • La creación de ramas cuesta horas de computación — Siempre elimina la rama después de probar; las ramas abandonadas acumulan facturación
Combinar con: github · postgres

Escribir y desplegar una Edge Function de Supabase desde el chat

👤 Desarrolladores que agregan pequeños endpoints backend (webhooks, generadores de URL firmadas, etc.) ⏱ ~20 min intermediate

Cuándo usarlo: Necesitas un endpoint HTTP rápido con acceso a BD — perfecto para una Edge Function — y no quieres cambiar de contexto al panel de control.

Flujo
  1. Estructurar la función
    Crea una Edge Function stripe-webhook en el proyecto <ref>. Debe: validar la firma de Stripe, luego INSERTAR una fila en la tabla stripe_events. Usa importaciones estilo Deno.✓ Copiado
    → Código de función escrito con convenciones Deno adecuadas
  2. Desplegar
    Despliega stripe-webhook en el proyecto <ref>. Muéstrame la URL resultante.✓ Copiado
    → URL desplegada devuelta
  3. Probar con un payload de ejemplo
    POST un payload de prueba a la URL y sigue los logs de la función. ¿Se ejecutó correctamente y escribió una fila?✓ Copiado
    → Los logs muestran invocación; fila visible en la tabla

Resultado: Un endpoint activo más una fila en la BD para probar que funciona, en 5 minutos.

Errores comunes
  • Los secretos (STRIPE_SECRET) no se inyectan automáticamente — Configúralos a través del panel de control de Supabase o herramienta MCP set_secrets antes de invocar; referencia a través de Deno.env.get('STRIPE_SECRET')
  • Las Edge Functions arrancan en frío; la primera solicitud es lenta — Invoca una vez después de desplegar para calentar antes de declarar 'funciona'
Combinar con: stripe · github

Auditar políticas de Seguridad a Nivel de Fila en un proyecto Supabase

👤 Desarrolladores y revisores conscientes de la seguridad ⏱ ~25 min intermediate

Cuándo usarlo: Antes del lanzamiento — quieres confirmar que RLS está activado para cada tabla y que las políticas hacen lo que crees.

Flujo
  1. Listar tablas y estado de RLS
    Lista cada tabla en el esquema público. Para cada una, ¿está activado RLS? Lista las políticas adjuntas.✓ Copiado
    → Estado de RLS por tabla más cuerpos de políticas
  2. Encontrar tablas sin RLS
    Destaca cualquier tabla donde RLS está DESACTIVADO, o RLS está ACTIVADO pero no existen políticas (efectivamente nega todo silenciosamente).✓ Copiado
    → Lista de riesgos con categoría clara para cada uno
  3. Probar como anónimo
    Para 3 tablas sensibles, simula una consulta de usuario anónimo (usando el rol anón). ¿Devuelve filas? No debería.✓ Copiado
    → Resultados vacíos = bien; filas devueltas = error de política

Resultado: Una aprobación previa al lanzamiento sobre la postura de autenticación, con evidencia por tabla.

Errores comunes
  • RLS desactivado en una tabla que pensabas que era interna — La clave de rol de servicio omite RLS por diseño — nunca la expongas del lado del cliente. Audita qué claves se usan dónde

Investigar por qué un usuario no puede iniciar sesión

👤 Ingenieros de soporte, fundadores haciendo primera línea ⏱ ~10 min beginner

Cuándo usarlo: Un usuario reporta 'mi enlace de inicio de sesión no funciona' y quieres ver si el email se envió, qué eventos de autenticación se dispararon, etc.

Flujo
  1. Encontrar el usuario
    Encuentra el usuario de autenticación con correo '[email protected]'. Muestra created_at, last_sign_in_at, email_confirmed_at.✓ Copiado
    → Registro de usuario o veredicto 'no encontrado'
  2. Verificar logs de autenticación recientes
    Extrae entradas de log de autenticación para ese user_id en las últimas 24h. Agrupa por tipo de evento.✓ Copiado
    → Secuencia de eventos de autenticación (otp_sent, sign_in_failed, etc.)
  3. Resolver
    Basándote en los eventos, ¿cuál es el problema real? Sugiere la solución (reenviar invitación, confirmar manualmente, restablecer contraseña).✓ Copiado
    → Diagnóstico más plan de acción

Resultado: Un ticket de soporte resuelto con rastro de auditoría, en 5 minutos.

Errores comunes
  • PII fluye hacia los logs del chat — Evita pegar registros de usuario sin procesar en el historial de chat que está archivado; redacta correos electrónicos al resumir

Generar tipos TypeScript a partir de tu esquema Supabase

👤 Desarrolladores frontend que usan `supabase-js` ⏱ ~10 min beginner

Cuándo usarlo: Cambiaste tu esquema de BD y quieres que los tipos del cliente se actualicen para coincidir.

Flujo
  1. Generar tipos
    Genera tipos TypeScript para el esquema público del proyecto <ref>. Guarda en src/types/database.ts.✓ Copiado
    → Archivo de tipos escrito
  2. Differenciar y verificar el uso
    Comparado con el archivo de tipos anterior (en git), ¿qué cambió? ¿Hay cambios que rompan sitios de llamada existentes en src/?✓ Copiado
    → Análisis de impacto por cambio
  3. Abrir PR
    Confirma la actualización de tipos más cualquier corrección de sitio de llamada necesaria. Abre un PR titulado 'chore: regen db types YYYY-MM-DD'.✓ Copiado
    → PR abierto con diff completo

Resultado: Los tipos se mantienen sincronizados con el esquema; los sitios de llamada rotos se detectan en tiempo de PR, no en producción.

Errores comunes
  • Los tipos generados no incluyen vistas a menos que la vista tenga SECURITY INVOKER establecido — Añade vistas explícitamente o documenta la brecha; supabase-js las maneja con from('view_name') de todas formas
Combinar con: github · filesystem

Combinaciones

Combínalo con otros MCPs para multiplicar por 10

supabase + github

Abre un PR con una migración, despliega en una rama, adjunta resultados de prueba al PR

Abre un PR que agregue la migración en supabase/migrations/. Crea una rama de Supabase con la migración aplicada. Comenta en el PR con los resultados de prueba de la rama.✓ Copiado
supabase + stripe

Construye una Edge Function de webhook de Stripe que escriba eventos en Supabase

Crea una Edge Function que reciba webhooks de Stripe, valide la firma e inserte eventos en una tabla stripe_events. Configura el endpoint del webhook en Stripe para que apunte a él.✓ Copiado
supabase + filesystem

Sincroniza archivos de migración SQL locales con el estado del proyecto Supabase

Compara /supabase/migrations/ en disco con migraciones aplicadas en el proyecto. Aplica cualquiera que falta en orden.✓ Copiado

Herramientas

Lo que expone este MCP

HerramientaEntradasCuándo llamarCoste
list_projects ninguno Descubre qué proyectos puede acceder tu token gratuito
get_project / pause_project / restore_project project_id: str Inspecciona o controla un proyecto gratuito
create_branch / list_branches / merge_branch / delete_branch project_id, name? Ramificación de base de datos para probar migraciones (Pro+) Horas de computación de rama facturadas
list_tables project_id, schemas?: str[] Introspección de esquema gratuito
list_extensions / list_migrations project_id Metadatos de BD gratuito
apply_migration project_id, name: str, query: str Aplicar una migración rastreada a la BD del proyecto gratuito
execute_sql project_id, query: str SQL ad-hoc — lectura o escritura gratuito
list_edge_functions / get_edge_function / deploy_edge_function project_id, nombre de función, código, punto de entrada Gestiona edge functions basadas en Deno Invocaciones de edge function facturadas
get_logs project_id, service: 'postgres'|'auth'|'edge-function'|... Extrae logs recientes de un servicio gratuito
generate_typescript_types project_id Regenera tipos de cliente después de cambios de esquema gratuito
get_anon_key / get_project_url / get_advisors project_id Metadatos de proyecto; los asesores señalan problemas de seguridad o rendimiento gratuito

Coste y límites

Lo que cuesta ejecutarlo

Cuota de API
Límites de velocidad estándar de Supabase por plan
Tokens por llamada
Consultas de esquema: pequeño. Logs y resultados SQL: depende del volumen de datos — siempre establece límites de tiempo/filas
Monetario
MCP gratuito; el proyecto Supabase es por plan ($0 plan gratuito; Pro $25/mes). La ramificación consume horas de computación.
Consejo
Las ramas son excelentes para probar pero caras cuando se olvidan. Siempre delete_branch después de fusionar o cuando se descartan.

Seguridad

Permisos, secretos, alcance

Ámbitos mínimos: token de acceso personal limitado a proyectos específicos cuando sea posible
Almacenamiento de credenciales: Token de acceso personal en variable de entorno SUPABASE_ACCESS_TOKEN
Salida de datos: Todas las llamadas a api.supabase.com y el endpoint regional de tu proyecto
No conceder nunca: clave de rol de servicio al agente a menos que sea absolutamente necesario — omite RLS

Resolución de problemas

Errores comunes y soluciones

No autorizado — token inválido

Token expirado o alcance incorrecto. Genera uno nuevo en supabase.com/dashboard/account/tokens.

Verificar: curl -H 'Authorization: Bearer $TOKEN' https://api.supabase.com/v1/projects
Las herramientas de ramificación fallan con 'el plan no admite ramificación'

La ramificación es Pro+. Actualiza el plan u omite los flujos de ramificación.

El despliegue de Edge Function falla: 'código Deno inválido'

El código de la función debe ser compatible con Deno (sin require estilo Node). Verifica que las importaciones usen especificadores https://deno.land/... o npm:.

execute_sql devuelve 'permiso denegado'

El MCP usa un rol limitado al proyecto. Para operaciones privilegiadas, ejecuta a través del editor SQL del panel de control. No otorgues al rol MCP superusuario.

Alternativas

Supabase vs otros

AlternativaCuándo usarlaContrapartida
Postgres MCPSolo necesitas acceso SQL de solo lectura y no necesitas características específicas de SupabaseSin ramificación, edge functions, introspección de autenticación o logs
Neon MCPEstás en Neon en su lugar — también tiene ramificaciónPlataforma diferente; sin funciones de autenticación/edge
Supabase CLI directamenteQuieres flujo de desarrollo local completo con supabase startSin ergonomía de agente; mejor para flujos comprometidos

Más

Recursos

📖 Lee el README oficial en GitHub

🐙 Ver issues abiertas

🔍 Ver todos los 400+ servidores MCP y Skills