Automatisation IA

MCP : connecter base de données et API locales à votre agent IA

Serveur MCP personnalisé pour connecter base de données et API locales à Claude en 2026
Divulgation : KuzCloud publie des guides d'hébergement Mac ; le MCP est un protocole ouvert d'Anthropic. Cet article est un tutoriel technique, pas une promotion produit.
Résumé rapide : Le Model Context Protocol (MCP) permet à un hôte (Claude Desktop, Cursor, Claude Code) d'appeler des outils, de lire des ressources et d'utiliser des prompts exposés par un processus serveur MCP séparé. Pour étendre ou « personnaliser » MCP, vous écrivez un serveur personnalisé qui encapsule votre base de données, votre API REST interne ou vos scripts shell — puis vous l'enregistrez dans la config de l'hôte. Utilisez stdio pour les setups locaux mono-machine ; utilisez SSE/HTTP quand le serveur tourne sur un autre hôte (ex. Mac mini toujours actif). Ce guide détaille 8 étapes du scaffold aux vérifications production, avec chemins et extraits de config concrets.

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_URL dans 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: true quand 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:// ou resources/read pour AGENTS.md, specs OpenAPI
  • Crochets ECC / plugins : après l'installation ECC, ajoutez des outils MCP qui encapsulent les scripts ecc de 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_ok opaque

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.

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.