MCP - Model Context Protocol (Standard Ouvert Anthropic)

Par Anthropic · 2024 (novembre) · Sources officielles vérifiées

IA & ProtocolesDonnée vérifiée & sourcéeIAAgentsAnthropicJSON-RPCLLMContext

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.

1. Définition détaillée & Contexte d'émergence

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

Pourquoi ce concept a été créé : Avant MCP, chaque développeur devait coder des connecteurs d'outils ad hoc ('function calling') spécifiques à chaque fournisseur d'IA. Anthropic a publié MCP en open source pour créer un standard universel type 'USB-C pour les LLM'.

2. Architecture 3-tiers & Primitives MCP

L'écosystème MCP repose sur trois acteurs clés et trois primitives de communication standardisées.

1. MCP Host & MCP Client

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

2. MCP Server

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.

3. Les 3 Primitives : Prompts, Resources, Tools

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

3. Caractéristiques fondamentales

  • Standard ouvert basé sur JSON-RPC 2.0 bidirectionnel.
  • Transports officiels supportés : stdio (processus locaux isolés) et SSE / HTTP (serveurs distants).
  • Validation de schémas stricts via JSON Schema pour chaque outil.
  • Contrôle granulaire des permissions et validation des appels avant exécution.
  • Écosystème florissant de serveurs prêts à l’emploi (PostgreSQL, Git, Brave Search, FileSystem).

4. Exemple concret d'implémentation

Définition minimale d’un outil MCP avec le SDK TypeScript officiel (@modelcontextprotocol/sdk)

mcp-server-example.tstypescript
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);

5. Avantages et limites techniques

Points forts

  • ✓Universalité : un seul serveur MCP fonctionne avec Claude, Cursor, Antigravity et n’importe quel client compatible.
  • ✓Sécurité accrue grâce au sandboxing du transport stdio et aux autorisations explicites.
  • ✓SDKs officiels robustes en TypeScript et Python fournis par Anthropic.
  • ✓Facilite la création d’agents IA autonomes sans réinventer le pipeline de context.

Points de vigilance

  • ⚠Norme encore jeune (fin 2024), en évolution active des spécifications.
  • ⚠Gestion de l’authentification et multi-tenancy sur SSE encore en cours de maturation industrielle.
  • ⚠Nécessite la gestion des tokens de contexte consommés par les retours d’outils verbeux.

6. Recommandations : Quand l'utiliser ?

Idéal pour :

  • Vous construisez un agent IA devant interagir avec votre base de données, vos APIs internes ou vos outils métier.
  • Vous souhaitez que votre SaaS ou outil dev soit pilotable depuis Cursor, Claude Desktop ou des IDEs IA modernes.
  • Vous voulez découpler le code d’intégration de vos outils des bibliothèques propriétaires de chaque LLM.

À éviter pour :

  • Pour un script simple sans IA utilisant des appels API REST traditionnels.
  • Pour des transferts de flux binaires temps réel très haute fréquence (ex: streaming vidéo direct).

7. Comparatif : MCP vs Function Calling propriétaire (OpenAI Tools, Gemini Tools)

MCP est un standard de communication agnostique, tandis que les Function Callings sont des APIs fermées spécifiques à chaque fournisseur.

CritèreMCPFunction 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).
ArchitectureProtocole 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 & RessourcesPrimitives complètes pour Prompts, Resources (fichiers/URIs) et Tools.Uniquement l’exécution d’outils (Tools/Functions).

8. Sources officielles vérifiées

Données techniques vérifiées auprès des documentations officielles, des RFCs et des spécifications standards.