iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
Formations
Node.js · Intermédiaire

Créer un serveur MCP en Node.js

Construire un serveur MCP de A à Z : tools, resources, prompts, validation, transports stdio et HTTP — pour connecter Claude à n'importe quel système externe.

Node.jsTypeScriptMCPClaude Code
01Comprendre MCP02Premier serveur MCP03Tools avancés — validation, erreurs, structure04Resources — exposer du contenu05Prompts — templates réutilisables06Transports et déploiement07Projet complet — MCP de gestion de projet
Chapitre 1·15 min

Comprendre MCP

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.

Le problème que MCP résout

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.

Architecture client / serveur

┌─────────────────────────────────────────────────────┐
│  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.

Les trois primitives MCP

Tools — fonctions appelables

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/..."

Resources — contenu lisible

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."

Prompts — templates réutilisables

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

Comparaison avec une API REST classique

CritèreAPI RESTMCP
Découverte des capacitésDocumentation manuelleAutomatique (tools/list)
Typage des inputsOpenAPI optionnelJSON Schema intégré
Client nécessaireSDK ou fetchIntégré dans Claude
Description des outilsDocs externesDans le schéma lui-même
Gestion des erreursHTTP status codesMcpError 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.

Cas d'usage concrets

Accès à une base de données

> cherche tous les utilisateurs inactifs depuis 30 jours

Claude 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 code

Claude 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 staging

Claude appelle deploy({ branch: "feature/auth", env: "staging" }) qui déclenche votre pipeline CI/CD.

Ce qu'on va construire

Ce cours construit un serveur MCP complet en TypeScript/Node.js :

  1. Setup du projet et premier tool fonctionnel
  2. Validation des inputs avec Zod, gestion d'erreurs
  3. Resources statiques et dynamiques
  4. Prompt templates
  5. Transports stdio et HTTP
  6. Un projet complet — serveur MCP pour gérer une API de gestion de projet

À 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.

Suivant
Premier serveur MCP

Développeur fullstack passionné. J'apprends en construisant et je documente tout — front, back, outils. Le code s'apprend mieux en public.

Naviguer

IndexTous les articlesFormationsProfilOutilsBibliothech

Ailleurs

GitHub RSS

Newsletter

Les articles, libs et découvertes. Une fois par semaine, pas plus.

© 2026 William LoreeConçu & codé à la main