Comment donner à Claude un accès Postgres de production en lecture seule et en sécurité
Quand l'utiliser : Vous voulez que Claude réponde à des questions sur une vraie base de données sans outil execute_sql générique pouvant faire un DROP TABLE.
Prérequis
- Postgres accessible via une URL libpq — Utilisez un rôle en lecture seule ; jamais l'utilisateur applicatif avec droits d'écriture
- Docker ou Go installé — Toolbox est livré comme un seul binaire ; l'image Docker est la plus simple
Déroulement
-
Lancer Toolbox avec le profil postgres préconstruitDémarre mcp-toolbox en mode stdio avec
--prebuilt postgreset POSTGRES_URL pointant vers le réplica en lecture.✓ Copié→ Toolbox affichetools registered: list_tables, describe_table, execute_sql_readonly -
Le connecter à Claude DesktopAjoute la config docker Toolbox dans claude_desktop_config.json sous mcpServers, puis redémarre Claude.✓ Copié→
/mcpliste les outils Toolbox — sans erreurs -
Poser une vraie questionToolbox : liste les tables. Puis pour
orders, quelle est la valeur médiane des commandes sur les 7 derniers jours ? Montre-moi le SQL exact exécuté.✓ Copié→ Claude appelle list_tables → describe_table → execute_sql_readonly avec un SELECT (jamais UPDATE/DELETE)
Résultat : Analytics en lecture seule sur de vraies données, sans risque de mutation, avec journal d'audit de chaque requête.
Pièges
- Pointé vers l'utilisateur avec droits d'écriture — Claude finit par appeler un outil mutant — Utilisez toujours un rôle avec
GRANT SELECTuniquement ; vérifiez avec\dudans psql - Connection pool épuisé lors d'appels agents parallèles — Définissez
pool.max_open_connsdans tools.yaml ; la valeur par défaut est conservative