Par Anthropic · 2024 (novembre) · Sources officielles vérifiées
En résumé
Protocole standardisé ouvert introduit par Anthropic en 2024 permettant aux modèles d'IA et agents de se connecter de façon sécurisée et universelle aux outils, contextes et sources de données externes.
Le Model Context Protocol (MCP) est une spécification ouverte qui standardise la manière dont les applications hôtes (IDE, assistants, applications clientes) fournissent des informations contextuelles et des capacités d'exécution d'outils aux modèles de langage (LLMs). Conçu sur une architecture client-serveur et s'appuyant sur le protocole JSON-RPC 2.0, MCP découple totalement l'intelligence du modèle des intégrations logicielles concrètes (système de fichiers, bases de données, APIs GitHub, Slack, etc.).
L'écosystème MCP repose sur trois acteurs clés et trois primitives de communication standardisées.
L'hôte (ex: Claude Desktop, Cursor, Antigravity) instancie un client MCP qui dialogue avec un ou plusieurs serveurs MCP via stdio (processus local) ou SSE (Server-Sent Events via HTTP pour le distant).
Un programme léger exposant des fonctionnalités via le protocole MCP sans avoir besoin de connaître le modèle de langage qui l'interroge.
Prompts (gabarits pré-définis de requêtes), Resources (fichiers ou données passives lisibles en lecture seule) et Tools (fonctions exécutables avec effets de bord appelées par le modèle après validation humaine ou automatique).
Définition minimale d’un outil MCP avec le SDK TypeScript officiel (@modelcontextprotocol/sdk)
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
const server = new Server(
{ name: "coderoe-weather-mcp", version: "1.0.0" },
{ capabilities: { tools: {} } }
);
// Déclaration de l'outil exposé au LLM
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
{
name: "get_weather",
description: "Retourne les prévisions météorologiques actuelles pour une ville",
inputSchema: {
type: "object",
properties: {
city: { type: "string", description: "Nom de la ville (ex: Paris)" }
},
required: ["city"]
}
}
]
}));
// Exécution de l'outil quand le modèle le sollicite
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "get_weather") {
const city = String(request.params.arguments?.city);
return {
content: [{ type: "text", text: `Météo à ${city} : 18°C, Ensoleillé.` }]
};
}
throw new Error("Outil introuvable");
});
const transport = new StdioServerTransport();
await server.connect(transport);MCP est un standard de communication agnostique, tandis que les Function Callings sont des APIs fermées spécifiques à chaque fournisseur.
| Critère | MCP | Function Calling propriétaire (OpenAI Tools, Gemini Tools) |
|---|---|---|
| Portabilité | Multi-fournisseur : compatible avec n’importe quel LLM ou hôte implémentant la spec. | Verrouillé sur le SDK et le format de prompt du fournisseur (OpenAI/Google). |
| Architecture | Protocole client-serveur découplé via JSON-RPC 2.0 (stdio ou SSE). | Payload JSON envoyé directement dans la requête HTTP du modèle. |
| Gestion d’état & Ressources | Primitives complètes pour Prompts, Resources (fichiers/URIs) et Tools. | Uniquement l’exécution d’outils (Tools/Functions). |
Données techniques vérifiées auprès des documentations officielles, des RFCs et des spécifications standards.