Très content qu’il y ai autant d’intérêt pour ce travail !
Pour expliquer un peu plus, voici un schéma d’un ensemble fonctionnant avec le protocole MCP
Donc il y a le host qui contient le client MCP aujourd’hui ce sont souvent des agents bien connu Claude desktop, ChatGPT… qui intègrent ce client. Comme je disais, dans la vidéo démo au dessus, c’est l’agent présent dans VSCode avec Github Copilot.
Son travaille va être d’un côté de discuter avec le llm (souvent Claude Sonnet ou GPT-4) qui s’occupera de comprendre les demandes et analyser des données et de l’autre avec le serveur MCP.
Le serveur MCP s’occupe de déclarer des fonctions que le MCP client peut appeler pour interagir avec la ressource (dans notre cas la ressource c’est Gladys, mais ça peut être une base de données, Google Drive, Slack… n’importe quel outil local ou à distance).Dans notre cas pour l’instant 4 fonctions:
device.get-state
pour obtenir les données de capteurs
camera.get-image
pour récupérer les images de caméra
light.turn-(on|off)
pour allumer/éteindre les lumières d’une pièce
scene.start
pour lancer une scène
Maintenant si on regarde plus précisément tout en restant simple le fonctionnement de la partie host, quand on utilise par exemple Claude Desktop, voilà ce qui va être fait :
- Au démarrage, Claude Desktop va demander à tous les serveurs MCP auxquels il est connecté les fonctions disponibles que chacun propose (dans notre cas
device.get-state
, camera.get-image
…)
- Quand l’utilisateur demandes à Claude Desktop quelque chose (disons « Donne moi la température du salon ») il va envoyer au llm la question en précisant dans le contexte de la requête, qu’il a accès à plusieurs fonctions et que si la demande de l’utilisateur le nécessite on peut faire un appel à ces fonctions
- Le llm répond à Claude Desktop, « j’ai besoin que tu utilises
device.get-state
avec en paramètre la pièce salon
»
- Claude Desktop appel la fonction du serveur MCP de Gladys
device.get-state(salon)
et renvoi la donnée demandée au llm
- le llm construit la réponse avec cette nouvelle donnée et la renvoi à Claude Desktop qui te l’affiche
Il faut bien comprendre que ce n’est pas Gladys qui répond ici, Gladys ne fait que retourner un état et le llm construit la réponse. Je ne sais pas si tu utilises Google Home, Homekit/Siri ou Amazon Alexa avec Gladys mais je pense qu’on peut peut faire un parallèle pour bien comprendre. On a un service Gladys qui expose des appareils au travers d’un protocole, et le client Claude Desktop (qu’on pourrait comparer à l’app Google Home, Apple Maison ou même Siri) fait des requêtes à ce service pour avoir des informations. L’avantage par rapport à ces solutions propriétaires, c’est que le MCP est un protocole ouvert et implémentable par n’importe qui (que ce soit client ou serveur). Donc pour répondre à ta question :
on peut très bien imaginer un client MCP, intégré avec un modèle STT (que ce soit cloud ou local) et communiquant avec Gladys via MCP.
Pour répondre à ton autre question :
Réponse courte le serveur MCP est déjà intégré dans Gladys via le service que j’ai développé, la connexion que tu vas devoir réaliser c’est entre l’agent/client MCP et le serveur MCP (cf tuto à la fin de ce post).
La réponse longue va être un peu technique mais pour expliquer au mieux le choix d’en faire un service et comprendre les tutoriels en dessous, c’est intéressant.
Pour la connexion entre le MCP client et le MCP serveur on a 2 moyens de communication possible :
- soit en stdio (standart input/output)
- soit en HTTP (via le réseau)
Le stdio est la moyen de communication original du MCP, le MCP client va lancer un sous-process qui fait tourner le serveur et écouter les entrées/sorties du process (en schématisant beaucoup c’est comme s’il avait un clavier pour écrire et lisait les logs du terminal pour communiquer). Il y a plus d’agents compatibles qu’avec le http mais le serveur devant tourner sur la même machine que l’agent, ça implique de développer et gérer un nouveau projet en parallèle de Gladys.
Le HTTP ça permet de faire communiquer le client MCP et le serveur MCP via le réseau quand ils ne sont pas sur la même machine. Ça donne la possibilité de regrouper le serveur MCP et la ressource au même endroit. Intégrer le serveur MCP dans un service Gladys a plusieurs avantages
- au niveau du code, c’est ce qui m’a semblé le plus simple, pour avoir accès facilement à toutes les données et fonctions de Gladys
- au niveau structure du projet, ça évite d’avoir à maintenir un deuxième projet MCP-serveur-Gladys en plus de Gladys
- si un jour les clients MCP sortent sur téléphones (ou enceintes comme tu demandes), il y a des chances que ça se fasse en HTTP car installer un serveur MCP sur ce genre de appareils sera forcément plus compliqué
- si l’agent que vous utilisez n’est pas compatible MCP via HTTP vous pouvez utiliser mcp-proxy qui s’occupe de faire une passerelle entre stdio et HTTP (je vous explique ci dessous comment l’utiliser).
Pour les tutoriels de connexions, voilà quelques explications pour VSCode (directement en HTTP), Claude Desktop et Perplexity (utilisation du mcp-proxy
car Claude Desktop et Perplexity sont aujourd’hui uniquement compatible stdio). Si vous avez d’autres agents, on peut voir ça ensemble.
VSCode avec GitHub Copilot
Vous lancez le Chat Copilot.
En bas sélectionnez bien Agent puis cliquez sur la clé à molette
Dans la liste déroulante qui s’ouvre, tout en bas choisissez « Add more Tools… »
« Add MCP Server »
« HTTP »
Enfin entrez cette url http://GLADYS_IP_ADDRESS/api/v1/service/mcp/proxy
en remplaçant GLADYS_IP_ADDRESS par l’adresse IP de votre Gladys.
Choisissez un nom et c’est parti vous devriez pouvoir utiliser dans votre Agent Copilot
Pour plus d’informations : Use MCP servers in VS Code
Claude Desktop et Perplexity ne prennent pas encore en charge les serveurs MCP (ils ont bien annoncé la prise en charge prochainement), il est donc nécessaire de passer par mcp-proxy
Pour l’installation tout est indiqué ici GitHub - sparfenyuk/mcp-proxy: A bridge between Streamable HTTP and stdio MCP transports
Claude Desktop
Une fois mcp-proxy installé, démarrez Claude Desktop
Dans Paramètres → Développeur → MCP Locaux cliquez sur « Modifier la Config »
Dans un éditeur de texte modifiez le fichier claude_desktop_config.json
pour qu’il ressemble à
{
"mcpServers": {
"mcp-proxy": {
"command": "FULL_PATH/mcp-proxy",
"args": [
"http://GLADYS_IP_ADDRESS/api/v1/service/mcp/proxy",
"--transport",
"streamablehttp"
],
"env": {}
}
}
}
Pour trouver FULL_PATH, dans un terminal de commande tapez where mcp-proxy
(sur macOS/Linux, pour Windows tappez where.exe mcp-proxy
) et remplacez FULL_PATH par le chemin obtenu.
Remplacez également GLADYS_IP_ADDRESS par l’IP de votre Gladys
Sauvegardez la configuration puis redémarrez Claude, si tout s’est bien passé vous devriez pouvoir accéder aux fonctions MCP dans le chat
Perplexity
Une fois mcp-proxy installé, démarrez Perplexity
Dans Paramètres → Connecteurs → Ajouter un connecteur
Sélectionnez l’onglet « Avancé »
Donnez un nom « Gladys »
Modifiez la config pour qu’elle ressemble à
{
"args" : [
"http://GLADYS_IP_ADDRESS/api/v1/service/mcp/proxy",
"--transport",
"streamablehttp"
],
"command" : "FULL_PATH/mcp-proxy",
"env" : {}
}
Pour trouver FULL_PATH, dans un terminal de commande tapez where mcp-proxy
(sur macOS/Linux, pour Windows tappez where.exe mcp-proxy
) et remplacez FULL_PATH par le chemin obtenu.
Remplacez également GLADYS_IP_ADDRESS par l’IP de votre Gladys
Sauvegardez la configuration puis attendez que Perplexity détecte correctement toutes les fonctions, si tout s’est bien passé vous devriez pouvoir accéder aux fonctions MCP dans le chat.
Pour plus d’informations : https://www.perplexity.ai/help-center/en/articles/11502712-local-and-remote-mcps-for-perplexity
Voilà j’ai essayé d’être le plus complet et le plus clair possible, j’espère que ça a répondu à tes questions. Même si le protocole a déjà quelques mois, il en est encore à ses débuts, c’est très prometteur en particulier en voyant tous les géants de l’IA l’implémenter. Donc si la configuration de la connexion vous semble compliquée, n’hésitez pas à demander de l’aide et ça permettra d’améliorer les tutoriels selon les retours utilisateurs.