/ Annuaire / Playground / Supabase
● Officiel supabase-community 🔑 Nécessite votre clé

Supabase

par supabase-community · supabase-community/supabase-mcp

MCP officiel Supabase — gérer les projets, exécuter du SQL, déployer des Edge Functions, configurer l'auth, consulter les logs, le tout depuis le chat.

MCP officiel de Supabase, maintenu par l'organisation supabase-community. Enveloppe l'API de gestion Supabase plus l'accès Postgres par projet. Permet à un agent de créer des branches, exécuter des migrations, écrire des Edge Functions, interroger la base de données et lire les logs — sans quitter le chat.

Pourquoi l'utiliser

Fonctionnalités clés

Démo en direct

Aperçu en pratique

supabase.replay ▶ prêt
0/0

Installer

Choisissez votre client

~/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"
      ]
    }
  }
}

Ouvrez Claude Desktop → Settings → Developer → Edit Config. Redémarrez après avoir enregistré.

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

Cursor utilise le même schéma mcpServers que Claude Desktop. La config projet l'emporte sur la globale.

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

Cliquez sur l'icône MCP Servers dans la barre latérale Cline, puis "Edit Configuration".

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

Même format que Claude Desktop. Redémarrez Windsurf pour appliquer.

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

Continue utilise un tableau d'objets serveur plutôt qu'une map.

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

Ajoutez dans context_servers. Zed recharge à chaud à la sauvegarde.

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

Une seule ligne. Vérifiez avec claude mcp list. Supprimez avec claude mcp remove.

Cas d'usage

Usages concrets : Supabase

Tester une migration destructrice sur une branche de base de données avant d'appliquer en prod

👤 Ingénieurs livrant des changements de schéma ⏱ ~30 min advanced

Quand l'utiliser : Vous avez une migration qui supprime une colonne ou remplit des millions de lignes, et vous souhaitez faire un essai à sec sur une branche avec données réelles d'abord.

Prérequis
  • Plan Supabase Pro ou supérieur — Le branching est réservé aux plans payants
  • Token d'accès personnel — supabase.com/dashboard/account/tokens — limiter à votre organisation
Déroulement
  1. Créer une branche à partir de la prod
    Créer une branche de base de données nommée 'test-drop-legacy-col' à partir de la branche principale dans le projet <ref>. Attendre qu'elle soit prête.✓ Copié
    → Branche créée avec sa propre chaîne de connexion
  2. Exécuter la migration sur la branche
    Appliquer la migration suivante sur la nouvelle branche : <coller SQL>. Signaler les lignes affectées et les erreurs.✓ Copié
    → La migration s'exécute ; les comptages de lignes sont visibles
  3. Vérifier et promouvoir ou supprimer
    Exécuter des SELECTs de vérification sur la branche (10 premières lignes des tables affectées, comptages NULL des colonnes modifiées). Si c'est bon, dites-le-moi et je vais promouvoir ; sinon, supprimez la branche.✓ Copié
    → Résultat de vérification, puis décision explicite humaine go/no-go

Résultat : Migration validée contre la forme réelle des données avant de toucher la prod.

Pièges
  • Les branches n'ont pas les données exactes de la prod — c'est un instantané au moment de la création de la branche — Notez l'horodatage de l'instantané ; si votre migration est sensible aux lignes récentes, créez la branche aussi proche que possible du moment d'application
  • La création de branche consomme des heures de calcul — Toujours supprimer la branche après les tests ; les branches abandonnées accumulent la facturation
Combiner avec : github · postgres

Écrire et déployer une Supabase Edge Function depuis le chat

👤 Développeurs ajoutant de petits points de terminaison backend (webhooks, générateurs d'URL signées, etc.) ⏱ ~20 min intermediate

Quand l'utiliser : Vous avez besoin d'un point de terminaison HTTP rapide avec accès à la base de données — parfait pour une Edge Function — et vous ne voulez pas basculer entre contextes vers le tableau de bord.

Déroulement
  1. Structurer la fonction
    Créer une Edge Function stripe-webhook dans le projet <ref>. Elle devrait : valider la signature Stripe, puis INSERT une ligne dans la table stripe_events. Utilisez des imports de style Deno.✓ Copié
    → Code de fonction écrit avec les conventions Deno appropriées
  2. Déployer
    Déployer stripe-webhook au projet <ref>. Montrez-moi l'URL résultante.✓ Copié
    → URL déployée renvoyée
  3. Tester avec un exemple de charge utile
    POST un test de charge utile à l'URL et regardez les logs de la fonction. A-t-il réussi et écrit une ligne ?✓ Copié
    → Les logs montrent l'invocation ; la ligne est visible dans la table

Résultat : Un point de terminaison en direct plus une ligne dans la base de données pour prouver que ça fonctionne, en 5 minutes.

Pièges
  • Les secrets (STRIPE_SECRET) ne sont pas auto-injectés — Définissez-les via le tableau de bord Supabase ou l'outil MCP set_secrets avant d'appeler ; référencez via Deno.env.get('STRIPE_SECRET')
  • Les Edge functions démarrent à froid ; la première requête est lente — Invoquez une fois après le déploiement pour réchauffer avant de déclarer 'ça marche'
Combiner avec : stripe · github

Auditer les politiques Row-Level Security sur un projet Supabase

👤 Développeurs et relecteurs soucieux de la sécurité ⏱ ~25 min intermediate

Quand l'utiliser : Avant le lancement — vous voulez confirmer que RLS est activé pour chaque table et que les politiques font réellement ce que vous pensez.

Déroulement
  1. Lister les tables et l'état RLS
    Lister chaque table dans le schéma public. Pour chacune, RLS est-elle activée ? Lister les politiques attachées.✓ Copié
    → État RLS par table plus les corps des politiques
  2. Trouver les tables sans RLS
    Mettre en évidence toute table où RLS est OFF, ou RLS est ON mais aucune politique n'existe (effectivement deny-all silencieusement).✓ Copié
    → Liste des risques avec catégorie claire pour chacun
  3. Tester en tant qu'anonyme
    Pour 3 tables sensibles, simulez une requête utilisateur anon (en utilisant le rôle anon). Retourne-t-elle des lignes ? Elle ne devrait pas.✓ Copié
    → Résultats vides = bon ; lignes retournées = bug de politique

Résultat : Un accord de lancement sur la posture d'authentification, avec des preuves par table.

Pièges
  • RLS désactivé sur une table que vous pensiez interne — La clé de rôle de service contourne RLS par conception — ne l'exposez jamais côté client. Auditez quelles clés sont utilisées où

Enquêter sur la raison pour laquelle un utilisateur ne peut pas se connecter

👤 Ingénieurs du support, fondateurs faisant la première ligne ⏱ ~10 min beginner

Quand l'utiliser : Un utilisateur signale 'mon lien de connexion ne fonctionne pas' et vous voulez voir si l'e-mail a été envoyé, quels événements d'authentification se sont produits, etc.

Déroulement
  1. Trouver l'utilisateur
    Trouver l'utilisateur d'authentification avec l'e-mail '[email protected]'. Afficher created_at, last_sign_in_at, email_confirmed_at.✓ Copié
    → Enregistrement utilisateur ou verdict 'non trouvé'
  2. Vérifier les logs d'authentification récents
    Extraire les entrées de log d'authentification pour cet user_id dans les dernières 24h. Grouper par type d'événement.✓ Copié
    → Séquence d'événements d'authentification (otp_sent, sign_in_failed, etc.)
  3. Résoudre
    D'après les événements, quel est le problème réel ? Suggérer le correctif (renvoyer l'invitation, confirmer manuellement, réinitialiser le mot de passe).✓ Copié
    → Diagnostic plus plan d'action

Résultat : Un ticket de support résolu avec trace d'audit, en 5 minutes.

Pièges
  • Les données personnelles s'écoulent dans les logs de chat — Évitez de coller des enregistrements utilisateur bruts dans l'historique de chat archivé ; rédiger les e-mails lors du résumé

Générer des types TypeScript à partir de votre schéma Supabase

👤 Développeurs frontend utilisant `supabase-js` ⏱ ~10 min beginner

Quand l'utiliser : Vous avez modifié votre schéma DB et souhaitez que les types clients se mettent à jour en conséquence.

Déroulement
  1. Générer les types
    Générer des types TypeScript pour le schéma public du projet <ref>. Enregistrer dans src/types/database.ts.✓ Copié
    → Fichier des types écrit
  2. Comparer et vérifier l'utilisation
    Par rapport au fichier de types précédent (dans git), qu'est-ce qui a changé ? Y a-t-il des modifications qui cassent les sites d'appel existants dans src/ ?✓ Copié
    → Analyse d'impact par modification
  3. Ouvrir une PR
    Valider la mise à jour des types plus les corrections de site d'appel nécessaires. Ouvrir une PR intitulée 'chore: regen db types YYYY-MM-DD'.✓ Copié
    → PR ouverte avec le diff complet

Résultat : Les types restent synchronisés avec le schéma ; les sites d'appel cassés sont détectés au moment de la PR, pas en production.

Pièges
  • Les types générés n'incluent pas les vues à moins que la vue n'ait SECURITY INVOKER défini — Ajouter les vues explicitement ou documenter l'écart ; supabase-js les gère avec from('view_name') de toute façon
Combiner avec : github · filesystem

Combinaisons

Associez-le à d'autres MCPs pour un effet X10

supabase + github

Ouvrir une PR avec une migration, déployer sur une branche, joindre les résultats de test à la PR

Ouvrir une PR ajoutant la migration dans supabase/migrations/. Créer une branche Supabase avec la migration appliquée. Commenter la PR avec les résultats de test de la branche.✓ Copié
supabase + stripe

Construire une Stripe webhook Edge Function qui écrit les événements dans Supabase

Créer une Edge Function qui reçoit les webhooks Stripe, valide la signature et insère les événements dans une table stripe_events. Configurer le point de terminaison webhook dans Stripe pour qu'il pointe dessus.✓ Copié
supabase + filesystem

Synchroniser les fichiers de migration SQL locaux avec l'état du projet Supabase

Comparer /supabase/migrations/ sur disque aux migrations appliquées sur le projet. Appliquer les manquantes dans l'ordre.✓ Copié

Outils

Ce que ce MCP expose

OutilEntréesQuand appelerCoût
list_projects none Découvrir quels projets votre token peut accéder free
get_project / pause_project / restore_project project_id: str Inspecter ou contrôler un projet free
create_branch / list_branches / merge_branch / delete_branch project_id, name? Branching de base de données pour les tests de migration (Pro+) Branch compute hours billed
list_tables project_id, schemas?: str[] Introspection de schéma free
list_extensions / list_migrations project_id Métadonnées de base de données free
apply_migration project_id, name: str, query: str Appliquer une migration suivie à la base de données du projet free
execute_sql project_id, query: str SQL ad-hoc — lecture ou écriture free
list_edge_functions / get_edge_function / deploy_edge_function project_id, function name, code, entrypoint Gérer les edge functions basées sur Deno Edge function invocations billed
get_logs project_id, service: 'postgres'|'auth'|'edge-function'|... Extraire les logs récents pour un service free
generate_typescript_types project_id Régénérer les types clients après les changements de schéma free
get_anon_key / get_project_url / get_advisors project_id Métadonnées de projet ; les conseillers signalent les problèmes de sécurité ou de performance free

Coût et limites

Coût d'exécution

Quota d'API
Limites de débit Supabase standard par plan
Tokens par appel
Requêtes de schéma : petites. Logs et résultats SQL : dépend du volume de données — toujours définir les limites de temps/lignes
Monétaire
MCP gratuit ; le projet Supabase est par plan (0 $ niveau gratuit ; Pro 25 $/mois). Le branching consomme des heures de calcul.
Astuce
Les branches sont excellentes pour tester mais coûteuses quand elles sont oubliées. Toujours delete_branch après fusion ou quand elles sont supprimées.

Sécurité

Permissions, secrets, portée

Portées minimales : token d'accès personnel limité à des projets spécifiques si possible
Stockage des identifiants : Token d'accès personnel dans la variable d'env SUPABASE_ACCESS_TOKEN
Sortie de données : Tous les appels à api.supabase.com et au point de terminaison régional de votre projet
Ne jamais accorder : clé service_role à l'agent sauf si absolument nécessaire — elle contourne RLS

Dépannage

Erreurs courantes et correctifs

Non autorisé — token invalide

Token expiré ou mauvaise portée. Générez-en un nouveau à supabase.com/dashboard/account/tokens.

Vérifier : curl -H 'Authorization: Bearer $TOKEN' https://api.supabase.com/v1/projects
Les outils de branching échouent avec 'le plan ne supporte pas le branching'

Le branching est Pro+. Mettre à niveau le plan ou ignorer les flux de travail de branching.

Le déploiement de Edge Function échoue : 'code Deno invalide'

Le code de la fonction doit être compatible Deno (pas de require de style Node). Vérifiez que les imports utilisent https://deno.land/... ou les spécificateurs npm:.

execute_sql retourne 'permission refusée'

Le MCP utilise un rôle limité au projet. Pour les opérations privilégiées, exécutez via l'éditeur SQL du tableau de bord. N'accordez pas le rôle superuser au MCP.

Alternatives

Supabase vs autres

AlternativeQuand l'utiliserCompromis
Postgres MCPVous n'avez besoin que d'un accès SQL en lecture seule et ne nécessitez pas de fonctionnalités spécifiques à SupabasePas de branching, edge functions, introspection d'auth ou logs
Neon MCPVous êtes sur Neon à la place — a aussi le branchingPlateforme différente ; pas d'auth/edge functions
Supabase CLI directlyVous voulez le flux de développement local complet avec supabase startPas d'ergonomie agent ; mieux pour les flux de travail engagés

Plus

Ressources

📖 Lire le README officiel sur GitHub

🐙 Voir les issues ouvertes

🔍 Parcourir les 400+ serveurs MCP et Skills