/ Annuaire / Playground / Postgres
● Officiel modelcontextprotocol 🔑 Nécessite votre clé

Postgres

par modelcontextprotocol · modelcontextprotocol/servers

Laissez Claude interroger votre base de données Postgres en toute sécurité (lecture seule), avec introspection complète du schéma et plans EXPLAIN — sans jamais lui donner accès en écriture.

Le serveur MCP Postgres de référence. Se connecte avec une URL postgres:// standard, expose la navigation de schéma, l'exécution de requêtes et EXPLAIN. Strictement en lecture seule — pas d'INSERT/UPDATE/DELETE/DDL — ce qui le rend sûr pour pointer sur des répliques de lecture en production.

Pourquoi l'utiliser

Fonctionnalités clés

Démo en direct

Aperçu en pratique

postgres.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": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://..."
      ]
    }
  }
}

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

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

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": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://..."
      ]
    }
  }
}

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

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

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

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

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

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

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

claude mcp add postgres -- npx -y @modelcontextprotocol/server-postgres postgresql://...

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

Cas d'usage

Usages concrets : Postgres

Répondre à des questions métier ad hoc sans toucher au SQL

👤 PMs, fondateurs, quiconque préférerait ne pas écrire de SQL ⏱ ~10 min beginner

Quand l'utiliser : Vous avez une question sur vos données (« combien d'utilisateurs sont revenus cette semaine ? ») et le tableau de bord BI ne l'a pas.

Prérequis
  • Chaîne de connexion postgres:// en lecture seule vers une réplique — La plupart des PG gérées (RDS, Neon, Supabase) vous permettent de créer des identifiants en lecture seule
  • Accès réseau du lieu d'exécution de Claude à la base de données — VPN ou liste blanche d'IP pour votre machine
Déroulement
  1. Demandez à Claude d'inspecter d'abord les tables pertinentes
    Listez toutes les tables dans notre base de données. Pour les tables liées aux utilisateurs, commandes ou sessions, décrivez leurs schémas.✓ Copié
    → Aperçu du schéma avant toute requête
  2. Posez la question réelle
    Combien d'utilisateurs se sont inscrits au cours des 30 derniers jours mais n'ont pas encore passé de commande ? Grouper par semaine d'inscription.✓ Copié
    → Claude écrit le SQL, l'exécute, retourne le tableau de résultats
  3. Vérifiez les réserves
    Y a-t-il des raisons pour lesquelles ce nombre pourrait être trompeur ? Suppressions logiques ? Fuseau horaire dans created_at ? Types d'utilisateurs spécifiques à exclure ?✓ Copié
    → Signalement honnête des particularités des données

Résultat : Une réponse défendable à une question métier avec le SQL, le résultat et les réserves — en 2 minutes au lieu d'attendre 2 jours l'équipe données.

Pièges
  • Claude écrit une requête qui analyse votre plus grande table sans limites — Définissez statement_timeout = '30s' sur la connexion, et ajoutez « toujours inclure LIMIT 1000 par défaut » à votre prompt système
  • Compter les « utilisateurs » dépend de ce qui compte comme un utilisateur (supprimé ? bot ? test ?) — Dites à Claude vos conventions à l'avance : « exclure les lignes où deleted_at IS NOT NULL » etc.
Combiner avec : notion

Diagnostiquer pourquoi une requête est lente et suggérer des index

👤 Ingénieurs backend, DBAs ⏱ ~15 min intermediate

Quand l'utiliser : Vous avez une requête qui est plus lente qu'elle ne devrait l'être. Vous voulez un second regard qui ne se fatigue pas en lisant la sortie EXPLAIN ANALYZE.

Déroulement
  1. Obtenez le plan de requête
    Exécutez EXPLAIN ANALYZE sur cette requête : [coller]. Expliquez-moi ce que le planificateur fait.✓ Copié
    → Explication du plan pas à pas
  2. Identifiez le facteur de coût
    Quelle étape est responsable de la majorité du coût ? Est-ce un balayage séquentiel, un mauvais ordre de jointure ou un filtrage coûteux ?✓ Copié
    → Nœud spécifique identifié avec raison
  3. Suggérez un index ou une réécriture
    Suggérez le plus petit changement pour rendre ceci rapide. Préférez ajouter un index à réécrire la requête, mais seulement si l'index serait utile pour plus d'une requête.✓ Copié
    → Instruction CREATE INDEX concrète OU requête réécrite

Résultat : Une requête indexée ou réécrite, avec justification, que vous pouvez vérifier en exécutant EXPLAIN à nouveau.

Pièges
  • EXPLAIN sur un ensemble de données non représentatif (petite base de données de développement) donne des plans trompeurs — Exécutez toujours EXPLAIN sur une base de données avec des données de forme production ; sinon le plan est une fiction
  • Ajouter un index semble gratuit mais ralentit les écritures — Dites à Claude de vérifier que l'index serait utilisé en vérifiant avec EXPLAIN AVANT de vous demander de l'ajouter
Combiner avec : sentry

Auditer une table pour les problèmes de qualité des données

👤 Ingénieurs données, quiconque hérite d'un schéma inconnu ⏱ ~25 min intermediate

Quand l'utiliser : Vous êtes sur le point de construire une fonctionnalité au-dessus d'une table que vous n'avez pas conçue et vous soupçonnez qu'elle a des problèmes.

Déroulement
  1. Exécutez une batterie de contrôles NULL / doublons / orphelins
    Pour la table orders : comptez les valeurs NULL par colonne, comptez les lignes dupliquées par une clé naturelle (p. ex. (user_id, stripe_payment_intent_id)), comptez les lignes avec des clés étrangères pointant vers des lignes parentes supprimées.✓ Copié
    → Comptage des problèmes par vérification
  2. Vérifiez les anomalies de distribution des valeurs
    Quels sont la distribution min, max et percentile pour total_cents ? Y a-t-il suspicieusement de nombreuses lignes avec 0 ou des valeurs négatives ?✓ Copié
    → Statistiques de distribution, anomalies signalées
  3. Vérifiez par rapport aux règles métier attendues
    Chaque commande « complétée » devrait avoir un paid_at non-null. Y a-t-il des exceptions ?✓ Copié
    → Comptage des violations + ID d'exemples

Résultat : Une courte liste de bugs d'intégrité des données concrets, chacun avec un comptage et un chemin de correction.

Pièges
  • Certains « problèmes » sont des artefacts historiques intentionnels (migrations de données) — Confirmez toujours avec quelqu'un qui connaît l'historique avant de supposer que c'est un bug

Générer automatiquement la documentation du schéma pour votre équipe

👤 Responsables techniques intégrant de nouveaux ingénieurs ⏱ ~20 min beginner

Quand l'utiliser : Votre base de données a 40 tables, le wiki en a 0. Les nouvelles recrues continuent de demander « qu'est-ce que cette colonne ? »

Déroulement
  1. Obtenez toutes les tables et leurs schémas
    Listez chaque table dans le schéma public. Pour chacune, donnez-moi les colonnes, les types, la nullabilité, les valeurs par défaut et les clés étrangères.✓ Copié
    → Vidage complet du schéma
  2. Déduisez l'objectif à partir du nommage + exemples de données
    Pour chaque table, prélevez 3 lignes et écrivez une description d'un paragraphe de ce que cette table représente dans notre entreprise.✓ Copié
    → Explication en prose par table
  3. Marquez les tables inconnues / suspectes
    Y a-t-il des tables qui semblent inutilisées, ou pour lesquelles vous ne pouvez pas déduire un objectif ? Listez-les pour que je puisse demander à l'auteur original.✓ Copié
    → Liste honnête « je ne sais pas ce que c'est »

Résultat : Un document Markdown que votre équipe peut mettre dans Notion ou un wiki — couvrant 80% de ce que les nouvelles recrues doivent savoir.

Pièges
  • Prélever des données sensibles (PII) dans le contexte du LLM — Pour les tables avec PII, demandez à Claude de décrire uniquement les schémas sans prélever de lignes
Combiner avec : notion · filesystem

Calculer les résultats des tests A/B à partir des données d'événement brutes

👤 Analystes de produit, ingénieurs de croissance ⏱ ~30 min advanced

Quand l'utiliser : Vous avez exécuté une expérience, les données sont dans votre base de données, et vous voulez des nombres de significativité sans écrire SQL à la main.

Prérequis
  • Table d'événements avec assignation d'expérience + événements de conversion — Schéma standard : events(user_id, experiment, variant, timestamp), conversions(user_id, type, timestamp)
Déroulement
  1. Calculez le taux de conversion par variante
    Pour l'expérience « checkout-redesign-2026 » : combien d'utilisateurs ont été assignés à chaque variante, et quel était le taux de conversion (par [votre événement de conversion]) par variante ?✓ Copié
    → Tableau par variante avec taux
  2. Calculez la significativité statistique
    Calculez la valeur p du chi-carré pour la différence entre le contrôle et le traitement. Le résultat est-il statistiquement significatif à p < 0,05 ?✓ Copié
    → valeur p avec verdict
  3. Vérifiez la cohérence des chiffres
    Les tailles d'échantillons sont-elles équilibrées ? L'expérience a-t-elle duré assez longtemps ? Des segments où le résultat s'inverse ?✓ Copié
    → Vérification de santé, pas seulement la valeur p

Résultat : Un rapport de test A/B statistiquement défendable avec le SQL, les chiffres et les réserves.

Pièges
  • Regarder les résultats avant une taille d'échantillon prédéfinie conduit à des faux positifs — Faites vérifier à Claude si le test a atteint sa taille d'échantillon cible avant de calculer la significativité
Combiner avec : notion

Combinaisons

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

postgres + notion

Exécutez une requête, publiez les résultats sous forme de tableau Notion pour les parties prenantes qui n'ont pas accès à la base de données

Interrogez nos 10 principaux clients par revenu sur la durée de vie ce trimestre, puis créez une page Notion dans « Sales Reports » avec les résultats sous forme de tableau formaté.✓ Copié
postgres + sentry

Recoupez l'état de la base de données avec les erreurs — quand une erreur mentionne un ID d'enregistrement, recherchez-le

Le problème Sentry WEB-3a91 mentionne order_id 99214. Recherchez cette commande et dites-moi si quelque chose dans les données de ligne pourrait expliquer l'accident.✓ Copié
postgres + filesystem

Exportez les résultats des requêtes en CSV/JSON pour utilisation ultérieure

Exécutez ma requête de cohorte de désabonnement et enregistrez le résultat en tant que /reports/churn-2026-04.csv.✓ Copié

Outils

Ce que ce MCP expose

OutilEntréesQuand appelerCoût
list_tables schema?: str Première étape de toute session — découvrir le schéma gratuit
describe_table table: str, schema?: str Obtenir la structure complète d'une table spécifique avant interrogation gratuit
query sql: str Exécutez n'importe quel SQL en lecture seule — SELECT uniquement dépend de la requête

Coût et limites

Coût d'exécution

Quota d'API
Limité par la limite de connexion de votre base de données et l'expiration de la requête
Tokens par appel
Requêtes de schéma : ~500 tokens. Ensembles de résultats : dépend du nombre de lignes — plafonner avec LIMIT
Monétaire
Gratuit — les coûts sont ce que votre facture d'hébergement de base de données est déjà
Astuce
Définissez toujours un statement_timeout sur la connexion (p. ex. ?options=-c%20statement_timeout%3D30000) afin qu'une requête incontrôlée ne puisse pas faire tomber votre base de données.

Sécurité

Permissions, secrets, portée

Portées minimales : SELECT sur les tables que vous souhaitez exposer
Stockage des identifiants : Chaîne de connexion dans une variable env. Utilisez un rôle dédié en lecture seule : CREATE ROLE claude_readonly LOGIN PASSWORD '...'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_readonly;
Sortie de données : Toutes les requêtes vers votre base de données ; les lignes de résultats envoyées à tout fournisseur LLM que vous utilisez
Ne jamais accorder : INSERT UPDATE DELETE DROP TRUNCATE ALTER

Dépannage

Erreurs courantes et correctifs

FATAL: password authentication failed

Vérifiez la chaîne de connexion. Cause courante : caractères spéciaux dans le mot de passe non codés en URL.

Vérifier : psql 'postgres://...' -c 'SELECT 1'
no pg_hba.conf entry / SSL required

Ajoutez ?sslmode=require à la chaîne de connexion. La plupart des Postgres gérées nécessitent SSL.

permission denied for table X

Le rôle n'a pas SELECT sur cette table. Exécutez GRANT SELECT ON X TO claude_readonly.

Vérifier : psql -c '\dp X'
canceling statement due to statement timeout

La requête était trop lente. Soit l'optimiser (ajouter un index, réduire la clause WHERE), soit augmenter le délai d'expiration pour cette connexion.

Alternatives

Postgres vs autres

AlternativeQuand l'utiliserCompromis
Supabase MCPVous êtes sur Supabase — obtenez la gestion complète du projet plus SQLInclut l'accès en écriture ; moins sûr pour la prod
Neon MCPVous êtes sur Neon — ajoute le branchement pour les tests de migration sûrsLes fonctionnalités spécifiques à Neon ne fonctionnent que sur les bases de données Neon
dbHubVous avez besoin de support multi-base de données (Postgres, MySQL, MongoDB, etc.) dans un MCPPlus récent ; supporte plus de bases de données mais chaque intégration est plus superficielle
sqlite MCPBase de données basée sur un fichier local au lieu d'un serveurPas d'accès simultané, pas de réseau, mais zéro configuration

Plus

Ressources

📖 Lire le README officiel sur GitHub

🐙 Voir les issues ouvertes

🔍 Parcourir les 400+ serveurs MCP et Skills