Une analyse approfondie des MCP, partie 1 : Qu'est-ce que le MCP, au juste ?

Si vous vous intéressez à l'IA, vous avez certainement entendu parler du protocole MCP (Model Context Protocol). Depuis qu'Anthropic a annoncé cette nouvelle norme en novembre 2024, sa popularité a considérablement augmenté. Il existe des MCP pour envoyer des e‑mails, des MCP pour effectuer des recherches sur le Web, et des MCP qui exécutent d'autres MCP. Les MCP permettent aux LLM de soumettre des demandes d'extraction et de réserver des billets d'avion. En mai, Microsoft a même annoncé la création d'un registre MCP pour Windows qui permet aux applications d'exposer leurs fonctionnalités aux agents IA

Parfait ! Cependant, comment procéder ? Qu'est-ce que le MCP ? Comment l'utilisez-vous ? Pourquoi est-ce devenu tellement plus populaire que les initiatives précédentes ? Comment cela permet-il aux chatbots d'interagir dans le monde réel ? Et comment pouvez-vous créer le vôtre ?

Lorsque nous avons décidé de développer notre propre serveur MCP pour API de DeepL, cela nous a semblé intimidant. Cependant, une fois que vous comprenez véritablement le fonctionnement des MCP, comment ils permettent aux agents de découvrir et d'utiliser des outils, et comment vous pouvez créer un serveur MCP de base avec seulement 10 lignes de code, cela n'apparaît plus comme une tâche complexe. Dans cette série d'articles, nous nous efforcerons de clarifier ce sujet. Nous examinerons :

  • Qu'est-ce que le MCP ?
  • Comment utiliser MCP dans un client IA
  • Comment configurer un serveur MCP

Allons-y !

Que signifie MCP ?

MCP signifie « ModelContextProtocol» (protocole de contexte de modèle).

Le «modèle »est un modèle d'IA. Il peut s'agir de n'importe quel type de surface IA, mais elle est généralement construite sur un LLM. Nous appellerons ici cela un agent IA ou un assistant IA.

Le terme «contexte »fait référence au contexte dans lequel l'agent IA opère. En IA, nous évoquons souvent la notion de « fenêtre contextuelle », qui désigne l'ensemble du contexte pris en compte par un modèle d'apprentissage profond (LLM) lorsqu'il génère sa réponse à une requête : l'historique de la conversation, la requête du système, etc. Pour que le MCP fonctionne, une surface IA fournit au LLM sous-jacent une invite supplémentaire précisant les outils qu'il peut utiliser et la manière de les utiliser.

Le « protocole »est un ensemble de règles qui définit la manière dont deux entités communiquent sur un réseau. Un protocole que vous utilisez quotidiennement est le HTTP (HyperText Transfer Protocol), qui régit la manière dont un serveur web et un client web communiquent.

Pour résumer : Le « protocole de contexte de modèle » est un protocole qui fournit le contexte permettant aux modèles d'IA d'utiliser des outils et des ressources externes.

MCP est une norme ouverte développée par deux ingénieurs d'Anthropic. Il utilise JSON-RPC, un protocole largement utilisé pour définir les appels de fonction. Et il s'inspire du Langue Server Protocol, créé par Microsoft afin de dissocier la logique sous-jacente au traitement des langues de codage des IDE.

MCP n'est pas un logiciel, une application ou une API. Cependant, cela permet aux agents IA d'accéder à tous ces éléments.

Que fait MCP ?

Les LLM peuvent fournir des réponses intelligentes et utiles aux requêtes des utilisateurs. Cependant, ils n'ont pas accès aux services externes, ne peuvent pas communiquer avec d'autres logiciels et ne disposent d'aucun moyen pour récupérer des informations actualisées. MCP permet à toute IA de surface d'envoyer des requêtes à n'importe quel service logiciel et d'obtenir une réponse. Il fournit à un agent IA un moyen standard d'accéder à des outils, des ressources et des données externes.

Sans MCP, un client IA n'est qu'un cerveau sans corps, incapable d'accéder au monde extérieur. Avec MCP, un client IA peut agir en tant qu'agent.

Qui peut utiliser MCP ?

Étant donné que MCP est une norme ouverte, toute personne peut mettre en œuvre un client MCP ou un serveur MCP.

Le client peut être n'importe quelle application basée sur un LLM. Vous pouvez utiliser les MCP dans des applications telles que Claude Desktop, VSCode, Windsurf et Cursor. Vous pouvez également utiliser les MCP avec un agent IA que vous avez développé à l'aide d'un framework tel que LangChain ou CrewAI.

Pourquoi MCP est-il devenu si populaire ?

L'une des raisons est qu'il s'agit d'une norme ouverte. Tout agent IA peut mettre en œuvre le MCP, tout comme n'importe quel outil. Cela lui confère un attrait plus large que les solutions destinées aux produits d'une entreprise spécifique, comme OpenAI's Appel de fonction.

Pour créer cette solution universelle, les développeurs de MCP se sont inspirés du protocole LSP (Language Server Protocol). Avant LSP, lorsqu'un IDE souhaitait implémenter des fonctionnalités telles que l'autocomplétion ou la coloration syntaxique pour une langue de programmation donnée, il devait développer sa propre intégration. Le résultat a été ce que les créateurs ont récemment appelé un problème m × n, dans lequel les personnes devaient mettre en œuvre des services de langue séparément pour chaque combinaison IDE/langue possible. Avec LSP, chaque langue de codage ne nécessite qu'une seule bibliothèque d'intégration. Un environnement de développement intégré (IDE) qui prend en charge LSP peut prendre en charge n'importe quelle langue de ce type. De même, une fois qu'un service implémente un serveur MCP, tout client IA prenant en charge MCP peut l'utiliser. Le client doit uniquement prendre en charge MCP.

Le MCP offre également d'autres avantages en termes de flexibilité. Il peut fonctionner localement ou sur un réseau. Et cela provient d'Anthropic, une entreprise très respectée qui serait disposée à partager les avantages d'une norme ouverte.

Pourquoi les agents IA ont-ils besoin d'un protocole standard ?

Étant donné que les LLM sont si performants dans la compréhension et l'application des informations, ne peuvent-ils pas déjà utiliser n'importe quel service logiciel dont la description figure dans leurs données d’entraînement ? Après tout, les LLM savent déjà comment utiliser de nombreuses API populaires, comme vous pourrez le constater en demandant l'aide d'un assistant de codage tel que Copilot ou Sourcegraph.

Cependant, si vous donniez à un LLM l'accès à toutes les API contenues dans ses données d’entraînement, cela entraînerait une situation chaotique. Comment saurait-il quelles API appeler et à quel moment ? Comment obtiendrait-il votre clé API et vos identifiants, et comment utiliserait-il les services nécessitant d'autres types d'accès ? Que faire si vous souhaitez connaître la distance en voiture entre Kansas City et Des Moines, ou la température actuelle à Bangkok ? Il existe plusieurs méthodes pour obtenir ces informations. En tant qu'utilisateur, vous souhaitez contrôler les actions choisies par votre LLM. Cela est particulièrement vrai lorsqu'il ne s'agit pas de récupérer des informations, mais d'effectuer des actions qui ont un impact sur le monde, comme envoyer un e‑mail ou commander une pizza.

Il est vrai qu'un agent pourrait lire et comprendre une spécification OpenAPI de bas niveau, ou l'intégralité de la documentation API, puis effectuer des appels API en conséquence. Cependant, MCP permet aux développeurs d'outils de définir des services de niveau supérieur qui seraient particulièrement utiles pour un agent IA, en orientant cet agent dans une direction utile. À ce jour, il s'agit d'un domaine dans lequel les humains continuent d'exceller.

Il s'avère donc que la meilleure approche pour l'instant consiste à définir explicitement les outils et les ressources que le LLM peut utiliser, ainsi que la manière dont il peut les utiliser. MCP procède de manière traditionnelle, de façon déterministe, non pas en laissant le LLM faire son travail, mais à l'aide de code et de JSON.

Cependant, comment un LLM peut-il utiliser des outils ?

Fondamentalement, un LLM est une machine qui génère des jetons - des jetons que les humains rencontrent sous forme de texte, d'images, d'audio, etc. Comment une telle machine peut-elle avoir accès à des outils et à des ressources ? Comment sait-il qu'il dispose d'un tel accès et comment sait-il lequel utiliser ?

La clé réside dans le fait que, comme le souligne Maximilian Schwarzmüller le souligne, les LLM ne peuvent communiquer avec le monde extérieur qu'à l'aide de jetons. Ils acceptent des jetons en entrée et produisent des jetons en sortie. Ces jetons peuvent inclure des entités qui signifient « Je souhaite utiliser un outil ». Ainsi, pour indiquer qu'il souhaite utiliser un outil ou une ressource, et pour l'utiliser effectivement, un LLM génère des jetons standard que le logiciel qui l'entoure reconnaîtra comme un appel d'outil et interceptera. Ce logiciel appelle ensuite un service et renvoie le résultat au LLM.

Le LLM pourrait utiliser des jetons spécialisés dans ce contexte. Cependant, il utilise généralement des délimiteurs et une langue spécifiques, ce qui permet d'intégrer cette fonctionnalité à un LLM existant en l'ajustant. Par exemple, vous pouvez utiliser des balises de début et de fin entre crochets qui encadrent le JSON, comme dans cet exemple de sortie d'agent :

Certainement ! Je peux créer une nouvelle feuille de calcul pour vous. Veuillez patienter...

[tool-start] { "tool": "spreadsheets", "action": "create" } [tool-end]

C'est précisément ce qu'ont fait les chercheurs dans leur article Toolformer publié en 2023, qui a démontré, comme l'indique le titre, que « les modèles linguistiques peuvent apprendre par eux-mêmes à utiliser des outils ». Dans cette étude, les auteurs ont généré des données d’entraînement comprenant des représentations en texte brut des appels API et de leurs résultats. En affinant un modèle LLM à l'aide de ces données supplémentaires, ils ont produit un modèle LLM capable d'appeler ces API afin de générer une réponse prometteuse à une invite.

Ils ont utilisé le format simple :

[nom_fonction(données) → résultat]

Par exemple, sachant que les LLM ont des difficultés avec les mathématiques, ils ont fourni un outil de calculatrice. Ils ont ensuite inclus dans les données d’entraînement des chaînes telles que celles-ci :

Sur 1 400 participants, 400 (soit [Calculatrice (400 / 1400) → 0,29] 29 %) ont réussi le test.

et

Le nom provient de « la tortuga », le mot espagnol signifiant [MT(« tortuga ») → tortue] tortue.

En ajustant un modèle LLM à l'aide de ces données, ils ont créé un modèle LLM capable d'appeler des API afin de générer la réponse la plus pertinente à une requête donnée.

Cependant, il n'est pas nécessaire d'ajuster un LLM pour lui permettre d'utiliser des outils. Il s'avère que tout ce dont vous avez besoin est une invite. Cet article montre comment enseigner à un LLM à utiliser des outils JSON délimités par [[qwen-tool-start]] et [[qwen-tool-end]], simplement en lui fournissant une invite appropriée. Vous pouvez essayer par vous-même ! Il vous suffit de vous rendre sur votre chatbot enregistré et de lui indiquer :

Félicitations. Vous avez désormais la possibilité d'utiliser un outil pour effectuer des multiplications. Lorsque vous avez besoin d'effectuer un calcul, il vous suffit de saisir la syntaxe suivante : 

[Mathématiques] { « arg1 » : {valeur}, « arg2 » : {valeur} } [/Math] 

où, bien entendu, chaque {valeur} représente une valeur que vous souhaitez multiplier. OK? 

Ensuite, soumettez un problème mathématique au LLM et observez comment il génère fidèlement la syntaxe que vous avez fournie pour votre outil mathématique.

Les LLM modernes utilisent toujours les outils de manière similaire. Par exemple, Anthropic décrit ici la manière dont ils construisent une invite système pour que Claude utilise les outils de leur API.

Comment un LLM traite-t-il les résultats d'un outil ?

Comment un LLM reçoit-il les résultats des outils ? Une fois de plus, tout est question de jetons. Une fois que le client IA reçoit les résultats d'un outil, il les renvoie au LLM en tant qu'entrée, mais de manière à ce que le LLM sache qu'il s'agit des résultats d'un outil et non d'une entrée de l'utilisateur final.

Tout rassembler

Pour résumer, voici ce qui se produit lorsqu'un LLM utilise un outil :

  • Types d'utilisateurs dans les données saisies
  • LLM traite ces données.
  • Lorsqu'il génère une sortie, le LLM « décide » que l'appel d'un outil est le meilleur moyen de finaliser sa sortie. Cela signifie qu'il génère un ensemble de jetons qu'il a été entraîné à définir et qui lui permettent d'appeler un outil.
  • Le client IA identifie ces jetons comme devant appeler un outil, les intercepte, analyse le JSON en paramètres et tout autre élément de la requête, puis les transmet à l'outil approprié.
  • Cet outil génère des résultats, qui peuvent ou non impliquer l'utilisation d'une API. Il renvoie cette information au client IA, qui la transmet au LLM.
  • LLM traite les résultats des outils
  • LLM utilise cette sortie pour continuer à générer une réponse pour l'utilisateur.

Et voilà, ceci est un aperçu rapide de ce qu'est le MCP et de la manière dont il est mis en œuvre dans les LLM. Dans mon prochain article, je vous expliquerai comment utiliser les MCP dans votre propre client IA.


À propos de l'auteur

En tant qu'évangéliste développeur chez DeepL, Ben Morss s'efforce d'aider toute personne souhaitant utiliser l'API de DeepL pour accéder à ses traductions IA de classe mondiale. Auparavant, chez Google, il occupait le poste de chef de produit pour Chrome et de promoteur du développement pour un web amélioré. Auparavant, il a occupé le poste d'ingénieur logiciel au New York Times et chez AOL, et il a également été musicien à temps plein. Il a obtenu une licence en informatique à Harvard et un doctorat en musique à l'université de Californie à Davis. Vous pourriez encore le rencontrer en train de faire de la musique avec le groupe Ancient Babies, ou en train d'analyser des chansons pop sur Rock Theoryet en train d'écrire une comédie musicale qui ne traite pas réellement de Steve Jobs.

Partager