MCP : connecter base de données et API locales à votre agent IA
Pourquoi MCP compte pour les power users
Avant MCP, chaque IDE avait son propre format de plugins. Le Model Context Protocol d'Anthropic standardise la découverte des capacités par un client IA : lister les outils → appeler un outil avec des arguments JSON → renvoyer des résultats structurés. Un seul serveur Postgres en lecture seule peut ainsi servir Claude Desktop, Cursor et d'autres hôtes MCP sans réécrire les intégrations.
Les développeurs exigeants s'y intéressent parce que :
- Les bases de données deviennent un contexte interrogeable sans coller le schéma dans chaque chat
- Les API internes (facturation, feature flags, statut de déploiement) apparaissent comme outils typés au lieu de copier-coller fragiles
- Les piles IDE + agent partagent la même chaîne d'outils lorsque vous exécutez aussi des alternatives à Claude Code ou OpenClaw sur un Mac distant
Référence officielle : spécification Model Context Protocol et documentation MCP Anthropic.
Architecture MCP en 60 secondes
┌─────────────┐ JSON-RPC ┌──────────────────┐
│ MCP Host │ ◄──────────────► │ MCP Server │
│ (Claude / │ tools/resources │ (your custom code)│
│ Cursor) │ │ → DB / API / CLI │
└─────────────┘ └──────────────────┘
| Rôle | Exemples | Responsabilité |
|---|---|---|
| Hôte | Claude Desktop, Cursor, Claude Code | Lance le serveur, envoie tools/call, affiche les résultats |
| Serveur | Votre binaire Node/Python | Implémente list_tools, call_tool, optionnel resources/read |
| Transport | stdio, SSE | Porte les messages JSON-RPC entre hôte et serveur |
Règle de profondeur : Un serveur par frontière de confiance. Ne mettez pas l'accès écriture production et des outils shell expérimentaux dans le même binaire — séparez les processus pour pouvoir révoquer un bloc de config sans toucher à l'autre.
Matrice de choix du transport
| Transport | Latence | Idéal pour | Fichier de config (typique) |
|---|---|---|---|
| stdio | La plus basse | DB locale sur portable, mono-utilisateur | claude_desktop_config.json, Cursor mcp.json |
| SSE (HTTP) | +1 saut | Serveur sur NAS, Mac distant, sidecar Docker | URL hôte http://host:port/sse |
| Streamable HTTP (hôtes récents) | Proche de SSE | Comme SSE ; vérifier la version de l'hôte | Selon la doc de l'hôte |
| Scénario | Transport recommandé |
|---|---|
| Fichier SQLite sur la même machine que Claude Desktop | stdio |
| PostgreSQL sur le LAN du bureau | Serveur SSE sur bastion OU stdio via wrapper SSH |
| 5 microservices REST internes | Un serveur MCP passerelle avec outils namespacés |
| Catalogue d'outils partagé en équipe | Serveur MCP central sur hôte toujours actif (voir configuration Mac distant) |
Pattern 1 — Serveur MCP base de données
Objectif : Permettre au modèle d'exécuter du SQL en lecture seule (ou des requêtes prédéfinies) contre PostgreSQL, MySQL ou SQLite.
Contraintes de conception :
- Exposer des outils nommés (
query_sales_summary,list_tables) plutôt que du SQL arbitraire quand c'est possible - Imposer des limites de lignes (ex. max 200) et des timeouts de requête (ex. 5 s)
- Ne jamais faire passer les chaînes de connexion par le modèle — charger depuis
DATABASE_URLdans l'environnement du serveur
Exemple de surface d'outils :
| Nom d'outil | Entrée | Sortie |
|---|---|---|
postgres_query_readonly |
{ "sql": "SELECT ..." } |
Lignes JSON + noms de colonnes |
describe_table |
{ "table": "orders" } |
Types de colonnes depuis information_schema |
Utilisez un rôle DB en lecture seule : GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_reader;
Pattern 2 — Passerelle API REST locale
Objectif : Encapsuler des endpoints HTTP existants en outils MCP pour que Claude ne garde jamais de clés API longue durée dans la fenêtre de chat.
Pattern passerelle :
Claude → MCP tool "deploy_status" → your server → GET https://internal/api/v1/deployments
Conseils d'implémentation :
- Associer chaque outil à une méthode HTTP + un modèle de chemin
- Valider les entrées avec un schéma (Zod, Pydantic) avant d'appeler fetch
- Renvoyer du JSON tronqué (8 premiers Ko) plus un indicateur
truncated: truequand la réponse est énorme - Logger les correlation IDs côté serveur ; ne pas renvoyer de secrets dans les résultats d'outils
Cela s'accorde bien avec l'orchestration multi-agents OpenClaw lorsque les workers OpenClaw appellent les mêmes API internes via MCP au lieu de curl ad hoc.
Pattern 3 — Pont IDE et dépôt
Cursor et Claude Code intègrent déjà un client MCP. Votre serveur personnalisé peut exposer :
- Outils dépôt :
git_diff_summary,run_linter(sandboxés) - Ressources doc :
file://ouresources/readpourAGENTS.md, specs OpenAPI - Crochets ECC / plugins : après l'installation ECC, ajoutez des outils MCP qui encapsulent les scripts
eccde votre équipe
Gardez les ponts IDE en stdio local sauf si toute l'équipe partage une même machine de dev distante.
Runbook en huit étapes
Étape 1 — Installer le SDK officiel
Node (recommandé pour la plupart des hôtes) :
mkdir mcp-company-gateway && cd mcp-company-gateway
npm init -y
npm install @modelcontextprotocol/sdk zod pg
Alternative Python : pip install mcp (voir MCP Python SDK).
Étape 2 — Scaffolder un serveur minimal
Créez src/index.ts :
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new McpServer({ name: "company-gateway", version: "1.0.0" });
server.tool("ping", {}, async () => ({
content: [{ type: "text", text: "pong" }],
}));
const transport = new StdioServerTransport();
await server.connect(transport);
Exécutez une fois : npx tsx src/index.ts — le processus doit bloquer en attente de stdio (aucune sortie est normal).
Étape 3 — Ajouter un outil Postgres en lecture seule
export DATABASE_URL="postgresql://mcp_reader:****@127.0.0.1:5432/app"
Enregistrez postgres_query_readonly avec du SQL validé par Zod qui doit commencer par SELECT (rejeter ; et les mots-clés DDL côté serveur).
Étape 4 — Enregistrer dans Claude Desktop
Éditez ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) :
{
"mcpServers": {
"company-gateway": {
"command": "npx",
"args": ["tsx", "/absolute/path/mcp-company-gateway/src/index.ts"],
"env": { "DATABASE_URL": "postgresql://mcp_reader@127.0.0.1:5432/app" }
}
}
}
Redémarrez Claude Desktop. Dans un nouveau chat, confirmez que l'icône marteau/outils liste ping et postgres_query_readonly.
Étape 5 — Enregistrer dans Cursor
Projet ou global .cursor/mcp.json :
{
"mcpServers": {
"company-gateway": {
"command": "npx",
"args": ["tsx", "/absolute/path/mcp-company-gateway/src/index.ts"]
}
}
}
Rechargez la fenêtre Cursor. Testez le même outil ping depuis le panneau agent.
Étape 6 — Exposer SSE pour un hôte distant (optionnel)
Quand le serveur MCP tourne sur un Mac distant (bastion d'équipe ou M4 loué) :
# Example: SDK HTTP/SSE transport on port 8787 — bind localhost only unless behind VPN
node dist/sse-server.js --port 8787 --host 127.0.0.1
Pointez la config hôte vers url: "http://127.0.0.1:8787/sse" via tunnel SSH :
ssh -L 8787:127.0.0.1:8787 user@remote-mac
Ne exposez jamais un port MCP SSE non authentifié sur Internet public.
Étape 7 — Secrets et sandboxing
| Règle | Pourquoi |
|---|---|
Secrets uniquement dans l'env du serveur, jamais dans les arguments d'outil |
Évite l'exfiltration par injection de prompt |
| Serveurs séparés pour prod vs staging | Évite les requêtes cross-environnement accidentelles |
Limiter les outils subprocess avec timeout et listes blanches |
Bloque les erreurs de type rm -rf |
Étape 8 — Vérifier avec MCP Inspector
npx @modelcontextprotocol/inspector npx tsx src/index.ts
Appelez tools/list et tools/call manuellement avant de faire confiance à l'UI de l'hôte. Loguez chaque invocation d'outil avec horodatage + utilisateur OS (pas le contenu du chat) pour l'audit.
Checklist sécurité et sandbox
- Rôles DB en lecture seule pour les outils analytics ; serveur secondaire avec outils d'écriture uniquement sur machines de dev
- Validation des entrées sur chaque outil ; rejeter les objets imbriqués au-delà de 32 Ko
- Sortie réseau en liste blanche depuis le processus serveur (iptables ou pare-feu macOS) lors de l'encapsulation d'API internes
- OAuth pour SaaS — implémenter le refresh de token dans le serveur ; n'exposer au modèle qu'un
tool_okopaque
Quand faire tourner MCP sur un Mac dédié
La mise en veille du portable tue les serveurs stdio. Les équipes qui veulent des catalogues MCP partagés (mêmes outils Postgres pour 8 ingénieurs) font souvent tourner le serveur sur un Mac Apple Silicon toujours actif — bureau local ou petit nœud distant — puis y accèdent via tunnel SSH ou VPN.
C'est un choix d'infrastructure, pas une exigence MCP. Un M4 16 Go fait tourner confortablement 3 à 5 processus serveurs MCP légers (~80–150 Mo chacun) plus l'outillage Node ; ajoutez de la RAM si vous exécutez aussi des bases Docker sur la même machine. Pour comparer les offres d'hébergement Mac et le dimensionnement, consultez nos tarifs ; pour la configuration pas à pas, le centre d'aide KuzCloud couvre l'accès SSH et les bonnes pratiques de tunnel.
Dépannage
Erreur : Connection closed juste après le spawn
Symptôme : les logs Claude Desktop montrent un code de sortie 1 du serveur.
Correctif : exécutez le même command + args dans le Terminal ; corrigez tsx manquant, chemin absolu erroné ou exception au démarrage. Les hôtes MCP n'affichent pas stderr dans l'UI.
Erreur : Tool not found / liste d'outils vide
Symptôme : typo JSON dans le nom du serveur ou hôte non rechargé.
Correctif : validez le JSON avec jq . claude_desktop_config.json ; quittez complètement et rouvrez l'application hôte (pas seulement fermer la fenêtre).
Erreur : SSE 404 ou échecs CORS
Symptôme : URL distante avec mauvais chemin (/sse vs /mcp).
Correctif : alignez le chemin sur la doc du transport HTTP du SDK ; tunnelisez avec ssh -L et utilisez 127.0.0.1 dans la config.
Parcours recommandé
| Votre situation | Action |
|---|---|
| Dev solo, DB sur portable | stdio + Claude Desktop + Cursor mcp.json |
| API internes d'équipe | Un serveur MCP passerelle avec outils namespacés |
| DB sur LAN, portable ailleurs | Serveur MCP sur bastion + tunnel SSH vers SSE/stdio |
| Agents lourds + MCP sur une même machine | 24 Go RAM si Docker DB + fan-out OpenClaw partagent l'hôte |
| Projet neuf | Commencer par Inspector + outil ping avant tout SQL production |
Si X → Y : Si les données vivent sur une autre machine, placez le serveur MCP à côté des données et tunnelisez vers l'hôte — ne donnez pas à Claude un port base de données brut sur Internet public.
FAQ
Quelle est la différence entre MCP et les plugins ChatGPT ?
MCP est un protocole JSON-RPC ouvert et indépendant de l'hôte, avec des SDK dans plusieurs langages. Les plugins étaient spécifiques à une plateforme. Les serveurs MCP tournent comme processus locaux ou distants que vous contrôlez ; l'hôte ne fait que les lancer ou s'y connecter.
Puis-je connecter MySQL ou SQLite comme PostgreSQL ?
Oui. L'implémentation serveur change (driver + dialecte SQL) ; la surface MCP (list_tools, call_tool) reste identique. Utilisez des connexions en lecture seule et des garde-fous spécifiques au dialecte (SELECT uniquement).
Claude Code prend-il en charge les serveurs MCP personnalisés ?
En 2026, Claude Code et Cursor prennent tous deux en charge une configuration client MCP similaire à Claude Desktop. Les chemins diffèrent selon le produit — consultez la doc Anthropic et Cursor pour l'emplacement de mcpServers. Le code serveur que vous écrivez est réutilisable entre hôtes.
Combien d'outils un serveur doit-il exposer ?
Restez sous ~20 outils par serveur pour un routage fiable par le modèle. Séparez en billing-gateway, data-gateway, ops-gateway quand le catalogue grossit. Chacun apparaît comme un bloc distinct dans la config hôte.
Est-il sûr d'exposer des outils d'écriture (DELETE, deploy) ?
Uniquement sur des serveurs non production avec des flux de confirmation humaine explicites. Préférez les outils en lecture dans les configs partagées ; réservez l'écriture à un second serveur MCP que seuls les développeurs seniors activent dans leur config personnelle.
Hébergez vos serveurs MCP sur Apple Silicon
Un Mac mini KuzCloud toujours actif garde vos catalogues MCP stdio/SSE disponibles pour toute l'équipe — tunnel SSH, Node 22+ et plusieurs processus serveur légers sur un seul nœud M4.