Construire un serveur MCP de A à Z : tools, resources, prompts, validation, transports stdio et HTTP — pour connecter Claude à n'importe quel système externe.
Avant MCP, pour que Claude accède à des données externes, vous deviez copier-coller. Résultats de requêtes SQL, tickets Linear, réponses d'API, logs serveur — tout passait par le presse-papier. MCP supprime cette friction : Claude appelle directement les systèmes concernés, comme un développeur qui a accès aux mêmes outils que vous.
Les LLMs ont une limite fondamentale : ils ne savent que ce qu'on leur dit dans la conversation. Pour tout ce qui vit en dehors — base de données, API REST, système de fichiers, service tiers — il faut soit tout copier dans le prompt, soit coder une intégration ad hoc pour chaque cas.
MCP standardise ces intégrations. Un seul protocole, un seul SDK, et Claude peut parler à n'importe quel système qui implémente le standard.
┌─────────────────────────────────────────────────────┐
│ CLIENT MCP (Claude Code, Claude Desktop, IDE...) │
│ │
│ "Quels outils tu as ?" → │
│ ← "get_user, list_orders" │
│ │
│ "Appelle get_user(42)" → │
│ ← { id: 42, name: "..." } │
└─────────────────────────────────────────────────────┘
↕ JSON-RPC 2.0
┌─────────────────────────────────────────────────────┐
│ SERVEUR MCP (votre code Node.js) │
│ │
│ - Expose des tools (fonctions appelables) │
│ - Expose des resources (contenu lisible) │
│ - Expose des prompts (templates réutilisables) │
│ │
│ Connecté à : DB / API / fichiers / services tiers │
└─────────────────────────────────────────────────────┘Le protocole est JSON-RPC 2.0 sur un transport (stdio, HTTP, SSE). Claude est le client — il découvre les capacités du serveur au démarrage, puis appelle les outils selon les besoins.
Claude peut déclencher des actions : créer un ticket, requêter une base de données, envoyer un email, déployer une app.
Claude : "crée un ticket pour ce bug"
→ Appelle l'outil create_ticket({ title, description, priority })
← { id: "BUG-142", url: "https://linear.app/..." }
Claude : "Ticket BUG-142 créé : https://linear.app/..."Claude peut lire du contenu structuré : la liste des utilisateurs, le contenu d'un fichier de config, les logs d'une application.
Claude : "donne-moi le statut de tous les services"
→ Lit la resource services://status
← { api: "up", db: "up", cache: "degraded" }
Claude : "Le cache est dégradé, les autres services sont opérationnels."Des templates de messages que les clients peuvent instancier avec des variables.
Claude : "utilise le template d'analyse de PR"
→ Charge le prompt analyze_pr({ pr_url, focus: "security" })
← Messages pré-construits avec les instructions d'analyse| Critère | API REST | MCP |
|---|---|---|
| Découverte des capacités | Documentation manuelle | Automatique (tools/list) |
| Typage des inputs | OpenAPI optionnel | JSON Schema intégré |
| Client nécessaire | SDK ou fetch | Intégré dans Claude |
| Description des outils | Docs externes | Dans le schéma lui-même |
| Gestion des erreurs | HTTP status codes | McpError standardisé |
MCP n'est pas un remplacement d'une API REST — c'est une couche qui rend votre API consommable par Claude sans code intermédiaire.
Accès à une base de données
> cherche tous les utilisateurs inactifs depuis 30 joursClaude appelle query_users({ active: false, inactiveSince: 30 }) sur votre serveur MCP qui fait la requête SQL.
Intégration système de tickets
> crée un ticket pour chaque TODO trouvé dans le codeClaude scanne le code (ses outils natifs), puis appelle create_ticket() pour chaque TODO trouvé.
Dashboard en temps réel
> quel est l'état de la prod en ce moment ?Claude lit la resource metrics://production qui retourne les métriques en temps réel depuis votre infra.
Workflow de déploiement
> déploie la branche feature/auth en stagingClaude appelle deploy({ branch: "feature/auth", env: "staging" }) qui déclenche votre pipeline CI/CD.
Ce cours construit un serveur MCP complet en TypeScript/Node.js :
À la fin, vous connectez votre serveur à Claude Code et Claude interagit avec votre système comme s'il en faisait partie.
L'architecture est claire. Passons à la pratique : setup du projet et premier tool opérationnel en 10 minutes.