Retour au blog

Créer son premier serveur MCP, pas à pas

Code5 min de lecture · 27 septembre 2026

L'équipe GetPack

MCP veut dire Model Context Protocol : une façon standard de donner à un modèle comme Claude un accès direct à un service, une base de données, ou n’importe quel outil que tu as écrit toi-même. Si tu as déjà branché un connecteur MCP existant, tu sais déjà à quoi ça sert côté utilisateur. Ici, on passe de l’autre côté : écrire son propre serveur MCP, minimal mais fonctionnel, en suivant uniquement la documentation et les SDK officiels.

MCP, concrètement : qui parle à qui

L’architecture officielle distingue trois rôles. L’hôte MCP (MCP host) est l’application qui utilise l’IA, par exemple Claude Code ou Claude Desktop. Le client MCP est le composant que l’hôte crée pour maintenir une connexion dédiée à un serveur donné. Le serveur MCP, celui que tu vas écrire, est le programme qui fournit du contexte ou des actions aux clients qui s’y connectent. Un serveur local (le cas le plus courant quand tu débutes) communique via l’entrée-sortie standard du processus (le transport « stdio ») ; un serveur distant, hébergé quelque part, communique en HTTP.

Les trois briques que ton serveur peut exposer

La documentation officielle définit trois primitives principales côté serveur :

  • Tools (outils) : des fonctions exécutables que l’application IA peut invoquer pour agir (appeler une API, interroger une base de données, manipuler un fichier).
  • Resources (ressources) : des sources de données qui apportent du contexte (le contenu d’un fichier, un enregistrement de base de données, une réponse d’API).
  • Prompts : des modèles de prompt réutilisables qui structurent une interaction avec le modèle (un prompt système, des exemples few-shot).

Pour un premier serveur, un seul tool suffit largement : c’est la brique la plus simple à comprendre et la plus utile immédiatement.

Écrire un serveur minimal en TypeScript

Crée un dossier de projet, puis installe le SDK officiel TypeScript et la librairie de validation qu’il utilise pour décrire les entrées d’un tool :

npm install @modelcontextprotocol/server
npm install zod

Crée un fichier (par exemple index.ts) avec ce contenu, repris du dépôt officiel du SDK :

import { McpServer } from '@modelcontextprotocol/server';
import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
import * as z from 'zod/v4';

const server = new McpServer({ name: 'greeting-server', version: '1.0.0' });

server.registerTool(
    'greet',
    {
        description: 'Greet someone by name',
        inputSchema: z.object({ name: z.string() })
    },
    async ({ name }) => ({
        content: [{ type: 'text', text: `Hello, ${name}!` }]
    })
);

async function main() {
    const transport = new StdioServerTransport();
    await server.connect(transport);
}

main();

Ce code fait trois choses : il crée un serveur nommé greeting-server, il enregistre un tool greet dont l’entrée attendue est validée par un schéma Zod ({ name: string }), puis il connecte le serveur au transport stdio, celui que les hôtes MCP utilisent pour parler à un serveur lancé localement comme un simple processus.

Si tu préfères Python

Le SDK officiel Python propose le même résultat avec une syntaxe à base de décorateurs. Installation :

uv add "mcp[cli]"

(ou pip install "mcp[cli]" si tu n’utilises pas uv). Le serveur minimal tient en quelques lignes :

from mcp.server import MCPServer

mcp = MCPServer("Demo")

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers."""
    return a + b

Pas de schéma à écrire à la main : les annotations de type Python (a: int, b: int) suffisent au SDK pour générer automatiquement la description de l’outil.

Le tester avec l’inspecteur MCP

Avant de brancher quoi que ce soit à Claude, teste ton serveur avec le MCP Inspector, l’outil de référence officiel pour ça. Il tourne via npx, sans installation préalable (il demande Node 22.19.0 ou plus récent) :

npx @modelcontextprotocol/inspector node chemin/vers/index.js

Cette commande ouvre une interface web locale où tu peux lister les tools exposés par ton serveur, appeler greet avec un nom en paramètre, et voir directement la réponse renvoyée. C’est l’étape qui évite de découvrir une erreur de schéma une fois le serveur branché à Claude. Si tu préfères rester dans le terminal, l’inspecteur propose aussi un mode CLI (--cli) et un mode TUI (--tui) qui font la même vérification sans navigateur.

Pour un serveur Python lancé avec mcp dev, l’inspecteur s’ouvre automatiquement :

uv run mcp dev server.py

Le brancher à Claude

Une fois le serveur validé, tu peux le déclarer dans Claude Code avec claude mcp add, en séparant bien les options de Claude Code (avant le --) de la commande qui lance ton serveur (après le --) :

claude mcp add --transport stdio greeting-server -- node chemin/vers/index.js

Claude Code enregistre le serveur immédiatement. Tu peux vérifier qu’il apparaît bien avec claude mcp list, et le retirer avec claude mcp remove greeting-server si besoin. À partir de là, dans une conversation, Claude peut découvrir ton tool greet et l’appeler exactement comme n’importe quel autre outil MCP.

Aller plus loin : une ressource, et plusieurs clients à la fois

Un tool n’est qu’une des trois briques possibles. Le SDK Python expose une resource de façon très proche d’un tool, avec un décorateur dédié :

@mcp.resource("config://app-name")
def get_app_name() -> str:
    """Nom de l'application, exposé en lecture seule comme resource."""
    return "greeting-server"

La différence de fond entre les deux : un tool est fait pour agir (il peut avoir des effets de bord), une resource est faite pour être lue, un peu comme une requête GET qui ne modifie rien. Si ton serveur ne fait que donner accès à des données déjà existantes, une resource est souvent plus honnête à exposer qu’un tool.

Deuxième chose à savoir avant d’aller plus loin : un serveur en transport stdio, comme celui de cet article, ne sert qu’un seul client à la fois — parfait pour développer en local ou pour un usage strictement personnel. Le jour où tu veux qu’un même serveur soit interrogeable par plusieurs personnes en même temps, la documentation officielle recommande de passer au transport Streamable HTTP, conçu justement pour ce cas : le serveur tourne alors quelque part en continu (souvent hébergé), et chaque client ouvre sa propre connexion HTTP vers lui, sans avoir besoin d’un processus local dédié à chaque utilisateur.

Si ce serveur MCP fait partie d’un projet noté (un TP, un projet de fin de module), vérifie d’abord les règles d’usage de l’IA de ton établissement : utiliser Claude pour t’aider à écrire ou déboguer ton code n’est pas forcément traité pareil d’un cours à l’autre.

À retenir

  • MCP relie un hôte (comme Claude Code), un client, et un serveur que tu écris toi-même.
  • Trois primitives possibles côté serveur : tools (actions), resources (données), prompts (modèles d’interaction). Un tool suffit pour commencer.
  • SDK TypeScript officiel : npm install @modelcontextprotocol/server, une instance McpServer, un registerTool, un transport stdio.
  • SDK Python officiel : uv add "mcp[cli]", une instance MCPServer, un tool déclaré avec @mcp.tool().
  • Teste toujours avant de brancher : npx @modelcontextprotocol/inspector node ton-serveur.js.
  • Connexion à Claude Code : claude mcp add --transport stdio <nom> -- <commande>, puis claude mcp list pour vérifier.

Sources

  1. Architecture overview — Model Context Protocol · consulté le 27 septembre 2026
  2. MCP Inspector — Model Context Protocol · consulté le 27 septembre 2026
  3. typescript-sdk (README) — GitHub modelcontextprotocol · consulté le 27 septembre 2026
  4. MCP Python SDK — Get started · consulté le 27 septembre 2026
  5. python-sdk (README) — GitHub modelcontextprotocol · consulté le 27 septembre 2026
  6. Connect Claude Code to tools via MCP — Claude Code Docs · consulté le 27 septembre 2026
PartagerWhatsAppLinkedInXE-mail

Lire l'article suivant

Code27 septembre 2026

Déployer son premier site gratuitement : Vercel, Netlify, Cloudflare Pages ou GitHub Pages

Décryptage27 septembre 2026

Détecteurs d'IA : Compilatio, Turnitin, GPTZero sont-ils fiables ?

Code27 septembre 2026

Écrire sa propre skill Claude : structure, SKILL.md et description qui déclenche

Carrière27 septembre 2026

Le statut national d'étudiant-entrepreneur (SNEE) et les PEPITE : ce que ça apporte vraiment

Analyse27 septembre 2026

La France dans la course à l'IA : Mistral, énergie, talents

Actu IA27 septembre 2026

French Tech et IA : les startups françaises à connaître en 2026

Code27 septembre 2026

Git sans peur : comprendre commit, branche, remote, puis les commandes qui sauvent

Décryptage27 septembre 2026

IA chinoises : DeepSeek, Qwen, Kimi… pourquoi l'Europe se méfie

Santé27 septembre 2026

IA en études de médecine : réviser PASS, LAS et EDN sans se piéger

Outils27 septembre 2026

IA gratuites pour étudiants : offres et réductions en 2026

Carrière27 septembre 2026

IA en stage ou alternance : ce qui est permis, ce qui ne l'est pas

Code27 septembre 2026

Des IDE aux ADE : coder avec des agents IA en 2026

Code27 septembre 2026

Lire une erreur sans paniquer : anatomie d'une stack trace (Python et JavaScript)

Outils27 septembre 2026

Meilleures IA pour étudiants en 2026 : le comparatif honnête

Outils27 septembre 2026

Nouveaux modèles d'IA en 2026 : lequel choisir pour étudier ?

Outils27 septembre 2026

IA françaises méconnues : Noota, Moshi, Vibe (ex-Le Chat)…

Analyse27 septembre 2026

Pourquoi l'IA coûte si cher (et les IA américaines encore plus)

Code27 septembre 2026

Bien prompter une IA de code : la méthode qui change tout

Code27 septembre 2026

Sécurité d'une app vibe-codée : 7 erreurs à corriger avant de publier

Code27 septembre 2026

Slopsquatting : quand l'IA recommande des paquets qui n'existent pas

Veille27 septembre 2026

Veille IA : l'essentiel de la semaine du 21 au 27 septembre 2026

Code27 septembre 2026

Vibe-coding : ce que c'est vraiment (et comment ne pas te planter)

Actu IA27 septembre 2026

Pourquoi Yann LeCun veut AMI : l'IA au-delà des LLM

Tutoriel26 septembre 2026

Brancher un connecteur MCP dans Claude, sans écrire une ligne de code

Orientation26 septembre 2026

Choisir sa formation avec les vraies données MonMaster et InserSup

Méthode26 septembre 2026

APA 7, ISO 690, Vancouver : comment bien citer tes sources

Décryptage26 septembre 2026

Les « codes cachés » de ChatGPT vus sur TikTok : le vrai du faux

Santé26 septembre 2026

Médecine : réviser l'EDN avec la Base de données publique des médicaments

Carrière26 septembre 2026

Gratification de stage et salaire d'apprenti en 2026 : les règles

Décryptage26 septembre 2026

IA et intégrité académique : ce que disent vraiment les universités

Tutoriel26 septembre 2026

Installer une skill dans Claude en 2 minutes

Mémoire26 septembre 2026

Mémoire : construire sa problématique et son plan avec l'IA

Méthode26 septembre 2026

Faire son rétroplanning de partiels avec l'IA, sans le rater

Méthode26 septembre 2026

Réviser avec l'IA sans tricher : rappel actif, Feynman, quiz

Carrière26 septembre 2026

Choisir son alternance avec les vrais chiffres d'insertion

Code27 septembre 2026

Apprendre à coder à l'ère de l'IA : ce qu'il faut encore savoir faire soi-même

Code27 septembre 2026

Le mini cahier des charges à écrire avant de lancer une IA de code

Mémoire27 septembre 2026

Citer ChatGPT ou Claude dans un mémoire : APA, MLA, ISO 690

Code27 septembre 2026

Claude Code pour débutants : installation, premier lancement, CLAUDE.md

Actu IA27 septembre 2026

Claude Opus 5.5 : ce qui change vraiment (et comment t'en servir pour étudier)

Analyse27 septembre 2026

Course à l'IA : pourquoi certains ont peur et d'autres pas

Rejoins GetPack

Déjà un compte ? Se connecter