spinny:~/writing $ less mcp-model-context-protocol-guide.md
12Le **Model Context Protocol (MCP)** est un standard ouvert créé par Anthropic qui définit comment les modèles AI communiquent avec des outils externes, des sources de données et des services. Considérez-le comme l'"USB-C de l'AI" - un connecteur universel qui permet à n'importe quel agent AI de communiquer avec n'importe quel outil via une interface standardisée.34Depuis son lancement, MCP a dépassé les **97 millions de téléchargements mensuels du SDK** et a été adopté par tous les principaux fournisseurs d'AI : Anthropic, OpenAI, Google, Microsoft et Amazon. Dans ce guide, nous explorerons tout ce que vous devez savoir pour construire avec MCP.56## Pourquoi MCP Existe78Avant MCP, chaque application AI devait créer des intégrations personnalisées pour chaque outil qu'elle voulait utiliser. Vous voulez que votre AI lise des fichiers ? Écrivez du code personnalisé. Interroger une base de données ? Encore plus de code personnalisé. Publier sur Slack ? Encore une autre intégration.910Cela créait un **problème N×M** : N applications AI nécessitant chacune M intégrations personnalisées, entraînant des efforts dupliqués et des écosystèmes fragmentés.1112```mermaid13graph TD14 subgraph "Before MCP (N×M)"15 A1[AI App 1] --> T1[GitHub Integration]16 A1 --> T2[Slack Integration]17 A1 --> T3[DB Integration]18 A2[AI App 2] --> T4[GitHub Integration]19 A2 --> T5[Slack Integration]20 A2 --> T6[DB Integration]21 end22```2324MCP résout ce problème avec un **protocole unique** que n'importe quel client AI peut utiliser pour communiquer avec n'importe quel serveur MCP :2526```mermaid27graph TD28 subgraph "With MCP (N+M)"29 A1[AI App 1] --> MCP[MCP Protocol]30 A2[AI App 2] --> MCP31 MCP --> S1[GitHub Server]32 MCP --> S2[Slack Server]33 MCP --> S3[DB Server]34 end35```3637## Concepts Fondamentaux3839MCP repose sur trois primitives fondamentales :4041### 1. Outils (Tools)42Les outils sont des fonctions que l'AI peut appeler. Ils représentent des actions comme "créer un fichier", "interroger une base de données" ou "envoyer un message". Chaque outil a un nom, une description et un JSON Schema pour ses paramètres.4344```typescript45{46 name: "create_issue",47 description: "Create a new GitHub issue",48 inputSchema: {49 type: "object",50 properties: {51 title: { type: "string", description: "Issue title" },52 body: { type: "string", description: "Issue body" },53 repo: { type: "string", description: "Repository name" }54 },55 required: ["title", "repo"]56 }57}58```5960### 2. Ressources (Resources)61Les ressources sont des données que l'AI peut lire. Elles représentent des fichiers, des enregistrements de base de données, des réponses API ou toute autre source de données. Les ressources sont identifiées par des URIs.6263```typescript64{65 uri: "file:///Users/dev/project/README.md",66 name: "Project README",67 mimeType: "text/markdown"68}69```7071### 3. Prompts72Les prompts sont des modèles réutilisables qui aident à structurer les interactions. Ils peuvent inclure des paramètres dynamiques et sont utiles pour standardiser les flux de travail courants.7374```typescript75{76 name: "code_review",77 description: "Review code changes for quality and security",78 arguments: [79 { name: "diff", description: "The code diff to review", required: true }80 ]81}82```8384## Architecture8586MCP suit une architecture client-serveur :8788```mermaid89graph LR90 subgraph "Host Application"91 Client[MCP Client]92 end9394 subgraph "MCP Server"95 Server[Server Process]96 Server --> Tools[Tools]97 Server --> Resources[Resources]98 Server --> Prompts[Prompts]99 end100101 Client -- "JSON-RPC 2.0\n(stdio or SSE)" --> Server102```103104- **Hôte** : L'application AI (Claude Desktop, Cursor, votre application personnalisée)105- **Client** : Maintient une connexion 1:1 avec un serveur MCP106- **Serveur** : Expose les outils, ressources et prompts au client107- **Transport** : La communication se fait via JSON-RPC 2.0 sur stdio (local) ou Server-Sent Events (distant)108109## Construire un Serveur MCP110111Construisons un serveur MCP pratique qui interagit avec une liste de tâches stockée dans un fichier JSON.112113### Installation114115```bash116mkdir mcp-todo-server && cd mcp-todo-server117npm init -y118npm install @modelcontextprotocol/sdk zod119```120121### Implémentation du Serveur122123```typescript124// src/index.ts125import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";126import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";127import { z } from "zod";128import fs from "fs";129130const TODO_FILE = "./todos.json";131132function readTodos(): { id: number; text: string; done: boolean }[] {133 if (!fs.existsSync(TODO_FILE)) return [];134 return JSON.parse(fs.readFileSync(TODO_FILE, "utf-8"));135}136137function writeTodos(todos: { id: number; text: string; done: boolean }[]) {138 fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2));139}140141const server = new McpServer({142 name: "todo-server",143 version: "1.0.0",144});145146// Tool: Add a todo147server.tool(148 "add_todo",149 "Add a new todo item",150 { text: z.string().describe("The todo text") },151 async ({ text }) => {152 const todos = readTodos();153 const newTodo = { id: Date.now(), text, done: false };154 todos.push(newTodo);155 writeTodos(todos);156 return { content: [{ type: "text", text: `Added: "${text}"` }] };157 }158);159160// Tool: List todos161server.tool(162 "list_todos",163 "List all todo items",164 {},165 async () => {166 const todos = readTodos();167 const list = todos168 .map((t) => `${t.done ? "✅" : "⬜"} [${t.id}] ${t.text}`)169 .join("\n");170 return { content: [{ type: "text", text: list || "No todos yet." }] };171 }172);173174// Tool: Complete a todo175server.tool(176 "complete_todo",177 "Mark a todo as completed",178 { id: z.number().describe("The todo ID to complete") },179 async ({ id }) => {180 const todos = readTodos();181 const todo = todos.find((t) => t.id === id);182 if (!todo) return { content: [{ type: "text", text: "Todo not found." }] };183 todo.done = true;184 writeTodos(todos);185 return { content: [{ type: "text", text: `Completed: "${todo.text}"` }] };186 }187);188189// Resource: Current todos as a readable resource190server.resource(191 "todos://list",192 "Current todo list",193 async () => ({194 contents: [{195 uri: "todos://list",196 mimeType: "application/json",197 text: JSON.stringify(readTodos(), null, 2),198 }],199 })200);201202// Start the server203const transport = new StdioServerTransport();204await server.connect(transport);205```206207### Configuration208209Pour utiliser ce serveur avec Claude Desktop, ajoutez-le à votre configuration :210211```json212{213 "mcpServers": {214 "todo": {215 "command": "npx",216 "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"]217 }218 }219}220```221222## Construire un Client MCP223224Vous pouvez également construire un client personnalisé qui se connecte à n'importe quel serveur MCP :225226```typescript227import { Client } from "@modelcontextprotocol/sdk/client/index.js";228import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";229230const transport = new StdioClientTransport({231 command: "npx",232 args: ["tsx", "./src/index.ts"],233});234235const client = new Client({ name: "my-client", version: "1.0.0" });236await client.connect(transport);237238// List available tools239const { tools } = await client.listTools();240console.log("Available tools:", tools.map((t) => t.name));241242// Call a tool243const result = await client.callTool({244 name: "add_todo",245 arguments: { text: "Write MCP blog post" },246});247console.log(result);248```249250## Serveurs MCP Populaires251252L'écosystème MCP a connu une croissance rapide. Voici quelques-uns des serveurs les plus populaires :253254| Serveur | Description | Cas d'utilisation |255|---------|-------------|-------------------|256| **GitHub** | Créer des issues, PRs, gérer des repos | Flux de travail de développement |257| **Slack** | Envoyer des messages, gérer des canaux | Communication d'équipe |258| **PostgreSQL** | Interroger et gérer des bases de données | Accès aux données |259| **Filesystem** | Lire, écrire et rechercher des fichiers | Développement local |260| **Puppeteer** | Automatisation du navigateur et scraping | Tests web |261| **Sentry** | Surveillance des erreurs et débogage | Support en production |262| **Supabase** | Base de données, auth, stockage | Opérations backend |263264## MCP vs A2A (Agent-to-Agent)265266Alors que MCP gère la communication **agent-outil**, le protocole **A2A (Agent-to-Agent)** de Google gère la communication **agent-agent**. Ils sont complémentaires :267268```mermaid269graph TD270 Agent1[Agent 1] -- "A2A Protocol" --> Agent2[Agent 2]271 Agent1 -- "MCP Protocol" --> Tool1[GitHub MCP Server]272 Agent2 -- "MCP Protocol" --> Tool2[Database MCP Server]273```274275- **MCP** : Comment un agent AI utilise les outils (intégration verticale)276- **A2A** : Comment les agents AI collaborent entre eux (intégration horizontale)277278## Bonnes Pratiques2792801. **Gardez les serveurs focalisés** : Un serveur par domaine (serveur GitHub, serveur Slack, etc.). Ne construisez pas de serveurs monolithiques.2812. **Validez les entrées avec Zod** : Validez toujours les entrées des outils avec des schémas appropriés.2823. **Gérez les erreurs avec élégance** : Retournez des messages d'erreur significatifs, pas des stack traces.2834. **Utilisez les ressources pour les données en lecture seule** : Si l'AI n'a besoin que de lire des données, exposez-les comme une ressource plutôt qu'un outil.2845. **Ajoutez des descriptions appropriées** : De bonnes descriptions d'outils et de paramètres aident l'AI à comprendre quand et comment utiliser chaque outil.2856. **Testez avec l'MCP Inspector** : Utilisez `npx @modelcontextprotocol/inspector` pour tester votre serveur de manière interactive.286287## Pour Commencer288289```bash290# Create a new MCP server from template291npx @modelcontextprotocol/create-server my-server292293# Test with the MCP Inspector294npx @modelcontextprotocol/inspector npx tsx ./src/index.ts295```296297## Conclusion298299MCP est devenu le standard de facto pour l'utilisation des outils AI en 2026. Que vous construisiez des agents AI personnalisés, étendiez Claude Code ou créiez des intégrations pour des plateformes existantes, comprendre MCP est essentiel. Le protocole est assez simple pour être appris en un après-midi mais suffisamment puissant pour construire des flux de travail AI de niveau production.300301**Prochaines étapes :**302- Explorez la [Spécification MCP](https://spec.modelcontextprotocol.io/)303- Parcourez les [serveurs MCP existants](https://github.com/modelcontextprotocol/servers) pour vous inspirer304- Construisez votre premier serveur avec le SDK TypeScript ou Python305- Testez-le avec Claude Desktop ou l'MCP Inspector306
:MCP (Model Context Protocol) : Le Guide Complet pour les Développeurslines 1-306 (END) — press q to close