Cargando la bóveda…
Cargando la bóveda…
MCP server production-ready que conecta Claude Code a tu proyecto Supabase. Permite queries SELECT, inspección de schemas y migraciones controladas, con permisos finos por tipo de operación. Open-source, listo para usar.
Trabajar con Supabase desde Claude tiene fricciones:
Este plugin (MCP server) le da a Claude acceso controlado a tu proyecto Supabase, con permisos finos: puede leer todo el schema, hacer SELECTs, pero NO modificar datos ni ejecutar migraciones a menos que vos lo habilites explícitamente.
npx -y @supabase/mcp-server-supabase --helpSi te tira ayuda, el package es accesible. No hace falta install global — npx -y lo baja on-demand.
Editá .claude/settings.json del proyecto:
{
"mcpServers": {
"supabase": {
"command": "npx",
"args": ["-y", "@supabase/mcp-server-supabase@latest"],
"env": {
"SUPABASE_URL": "${SUPABASE_URL}",
"SUPABASE_SERVICE_ROLE_KEY": "${SUPABASE_SERVICE_ROLE_KEY}",
"WRITE_MIGRATIONS": "false"
}
}
}
}La service role key te da permisos de admin. Solo usala en tu máquina, nunca la commitees. Para CI usá variables de entorno del runner, y considerá si realmente necesitás MCP server en pipelines (probablemente no).
Entrá a Claude Code en el proyecto y probá:
> ¿Qué tablas tengo en Supabase?Claude debería invocar list_tables y devolverte un resumen. Si no detecta el server, verificá:
claude --debug 2>&1 | grep -i supabaseAntes de pedirle a Claude que escriba un select con joins, dejalo ver el schema:
> Mostrame las tablas relacionadas con usuarios y sus relacionesClaude va a usar list_tables + describe_table y te va a tirar el schema real, no uno inventado. Después podés pedir:
> Escribime una query que traiga los usuarios activos con sus últimos 3 pedidosY va a usar los nombres de columnas y FKs correctos.
Después de aplicar una migración:
> Regenerá los types de TypeScriptClaude invoca generate_types y actualiza tu database.types.ts. Útil porque te olvidás de hacerlo a mano.
Si te tira "permission denied" en una query y no entendés por qué:
> ¿Qué políticas RLS tiene la tabla orders?inspect_rls te devuelve las políticas activas. Mucho más rápido que abrir el dashboard.
Con WRITE_MIGRATIONS=true (úsalo solo cuando lo necesités):
> Necesito agregar una columna `notes` (text, nullable) a la tabla ordersClaude va a:
ALTER TABLE orders ADD COLUMN notes text NULL;Si trabajás en producción, NUNCA actives WRITE_MIGRATIONS=true sin un workflow de revisión. El patrón recomendado:
{
"mcpServers": {
"supabase-prod": {
"command": "npx",
"args": ["-y", "@supabase/mcp-server-supabase@latest"],
"env": {
"SUPABASE_URL": "${SUPABASE_URL_PROD}",
"SUPABASE_SERVICE_ROLE_KEY": "${SUPABASE_SERVICE_KEY_PROD}",
"WRITE_MIGRATIONS": "false",
"READ_ONLY": "true"
}
},
"supabase-staging": {
"command": "npx",
"args": ["-y", "@supabase/mcp-server-supabase@latest"],
"env": {
"SUPABASE_URL": "${SUPABASE_URL_STAGING}",
"SUPABASE_SERVICE_ROLE_KEY": "${SUPABASE_SERVICE_KEY_STAGING}",
"WRITE_MIGRATIONS": "true"
}
}
}
}Así tenés dos "ambientes" con distintos permisos. Cuando le pidas a Claude algo destructivo, especificás el ambiente:
> Aplicá esta migración en supabase-stagingUna skill que, antes de aprobar un PR con cambios a queries, corre las queries contra staging:
---
name: verify-queries
description: Verifica queries SQL del diff actual ejecutándolas en Supabase staging y reportando si fallan o devuelven 0 rows.
---
Para cada query SQL modificada en el diff:
1. Identificá la query
2. Ejecutala contra el MCP `supabase-staging` con `query`
3. Si tira error, marcá como bloqueante
4. Si devuelve 0 rows en un contexto donde no debería, marcá como warningSi tu equipo siempre regenera types después de migraciones:
{
"hooks": {
"Stop": [
{
"matcher": ".*",
"hooks": [
{ "type": "command", "command": "test -f .claude/migration-applied && npx supabase gen types typescript --local > database.types.ts && rm .claude/migration-applied || true" }
]
}
]
}
}(El plugin tira el archivo .claude/migration-applied cuando aplica una migración.)
Cosas que están en desarrollo (al momento de mayo 2026):
Para sugerir features o reportar bugs: github.com/supabase-community/supabase-mcp.
Si no usás Supabase pero sí Postgres directo, mirá @modelcontextprotocol/server-postgres — el oficial de Anthropic, más limitado pero funciona con cualquier Postgres.
Para Firebase y otros: hay MCP servers community, calidad variable. Si tu necesidad es crítica, considerá construir el tuyo propio siguiendo la guía de MCP server propio.