DEV Community

Franck Hlb
Franck Hlb

Posted on

MCP en production : retour d'expérience après 87 outils connectés

Qu'est-ce que MCP et pourquoi c'est un game-changer

Le Model Context Protocol (MCP) est un standard ouvert, initie par Anthropic, qui definit comment un modele de langage interagit avec des outils externes. Avant MCP, chaque framework d'agents avait sa propre maniere de definir des outils : LangChain avait la sienne, AutoGPT une autre, CrewAI encore une autre. Le resultat etait un ecosysteme fragmente ou chaque outil devait etre reecrit pour chaque framework.

MCP resout ce probleme en proposant un protocole universel. Un outil ecrit une fois au format MCP fonctionne avec n'importe quel client compatible. C'est l'equivalent de ce que REST a fait pour les APIs web : un standard commun qui permet l'interoperabilite.

Concretement, un serveur MCP expose :

  • Des outils (fonctions avec des parametres types)
  • Des ressources (donnees accessibles en lecture)
  • Des prompts (templates reutilisables)

Un client MCP -- typiquement un modele de langage dans un framework d'agent -- peut decouvrir ces outils, comprendre leurs parametres et les appeler de maniere structuree.


Mon setup : 87 outils repartis en 9 categories

Apres 18 mois d'iteration, mon serveur MCP expose 87 outils organises par domaine.

Inventaire complet des 87 outils par categorie

Monitoring systeme (12 outils)

  • Statut GPU (temperature, VRAM, utilisation, frequences)
  • Sante du cluster (CPU, RAM, disque, reseau)
  • Etat des processus et services systemd
  • Metriques d'inference (latence, debit, file d'attente)

Gestion des modeles (8 outils)

  • Lister les modeles disponibles (Ollama + LM Studio)
  • Charger / decharger un modele
  • Interroger un modele specifique
  • Statut du cluster de modeles

Trading et finance (15 outils)

  • Pipeline de consensus multi-modeles (v2)
  • Signaux en attente de validation
  • Historique des trades
  • Gestion du portefeuille et exposition
  • Alertes de prix

Orchestration JARVIS (10 outils)

  • Dashboard de l'orchestrateur
  • Statistiques par noeud
  • Executer un "domino" (unite de tache)
  • Lister les skills disponibles
  • Lancer une tache autonome

Memoire et connaissance (8 outils)

  • Recall de memoire (recherche semantique dans l'historique)
  • Analyse cognitive (brain_analyze)
  • Statut du cerveau (contexte courant, charge cognitive)

Reseau et communication (7 outils)

  • Informations reseau (mesh inter-machines)
  • Bridge vers d'autres noeuds du cluster
  • Requetes HTTP sortantes
  • Notifications

Automatisation navigateur (9 outils)

  • Screenshot de l'ecran ou d'une fenetre
  • Interaction DOM via CDP (Chrome DevTools Protocol)
  • Navigation et extraction de contenu web

Productivite (10 outils)

  • Gestion de fichiers et recherche
  • Execution de scripts (bash, PowerShell via couche de compatibilite)
  • Integrations calendrier et notes

Diagnostic et debug (8 outils)

  • Diagnostic rapide du systeme
  • Statut de boot JARVIS
  • Logs structures
  • Healthcheck complet

L'inventaire complet avec le code est disponible dans ce gist : MCP Inventory


Les patterns qui marchent

Apres des dizaines d'iterations et beaucoup d'echecs, voici les patterns qui se sont imposes.

Pattern 1 : Le wrapper minimaliste

Chaque outil MCP doit faire une seule chose et la faire bien. Pas d'outils couteau-suisse qui prennent 15 parametres. Un outil gpu_info qui retourne l'etat des GPUs, point. Si vous avez besoin d'une analyse des tendances GPU, c'est un autre outil qui appelle gpu_info en interne.

Les modeles de langage gerent beaucoup mieux le choix entre 10 outils simples qu'entre 3 outils complexes avec des parametres conditionnels.

Pattern 2 : Le typage strict des parametres et retours

Chaque parametre est type et documente avec une description claire. Chaque retour est un JSON structure, jamais du texte libre. Le modele doit pouvoir parser le resultat de maniere fiable.

Mauvais exemple :

Retour : "Les GPUs vont bien, le GPU 0 est a 65 degres et 8Go utilises"
Enter fullscreen mode Exit fullscreen mode

Bon exemple :

{
  "gpus": [
    {
      "id": 0,
      "temp_c": 65,
      "vram_used_gb": 8.2,
      "vram_total_gb": 12,
      "utilization_pct": 45
    }
  ],
  "status": "healthy"
}
Enter fullscreen mode Exit fullscreen mode

Pattern 3 : La hierarchie d'outils

Les outils sont organises en niveaux :

Niveau Type Exemple
1 Atomique Lire un capteur, envoyer une requete
2 Compose Diagnostic complet = GPU + CPU + RAM + disque
3 Workflow Pipeline trading = collecte + analyse + consensus + decision

Le modele choisit le niveau adapte a la demande. "Comment va le GPU 0 ?" appelle un outil de niveau 1. "Le systeme est-il en bonne sante ?" appelle un outil de niveau 2.

Pattern 4 : Le circuit breaker

Chaque outil a un timeout et un mecanisme de retry avec backoff exponentiel. Si un outil echoue 3 fois consecutives, il est temporairement desactive (circuit ouvert) et le modele en est informe. Apres 5 minutes, un test est effectue (circuit semi-ouvert). Si le test passe, l'outil est reactive.

# Exemple simplifie de circuit breaker MCP
class MCPCircuitBreaker:
    def __init__(self, tool_name, max_failures=3, reset_timeout=300):
        self.tool_name = tool_name
        self.failures = 0
        self.state = "closed"  # closed | open | half-open
        self.last_failure_time = None
        self.max_failures = max_failures
        self.reset_timeout = reset_timeout  # secondes

    def call(self, *args, **kwargs):
        if self.state == "open":
            if time.time() - self.last_failure_time > self.reset_timeout:
                self.state = "half-open"
            else:
                raise CircuitOpenError(f"{self.tool_name} est desactive")

        try:
            result = self._execute_tool(*args, **kwargs)
            if self.state == "half-open":
                self.state = "closed"
                self.failures = 0
            return result
        except Exception as e:
            self.failures += 1
            self.last_failure_time = time.time()
            if self.failures >= self.max_failures:
                self.state = "open"
            raise
Enter fullscreen mode Exit fullscreen mode

Sans ce pattern, un outil defaillant peut bloquer toute une chaine d'agents et provoquer un effet cascade.

Le code complet du health check avec circuit breaker : Health Check Gist

Pattern 5 : Les permissions par role

Chaque client MCP (agent) a un profil de permissions. Un agent de monitoring voit les outils de monitoring et de diagnostic, pas ceux de trading. Un agent de trading voit les outils financiers, pas les outils systeme.

Ce n'est pas de la securite au sens strict (tout tourne en local), mais cela evite les erreurs : un modele qui hallucine un appel d'outil de trading alors qu'il devrait faire du monitoring, c'est dangereux.


Les erreurs a eviter

Erreur 1 : Trop d'outils d'un coup

J'ai commis l'erreur de connecter 40 outils des le depart. Resultat : le modele passait plus de temps a choisir l'outil qu'a resoudre le probleme. Le contexte se remplissait de descriptions d'outils inutiles.

La solution : charger dynamiquement les outils selon le contexte. Un agent de trading ne voit que ses 15 outils, pas les 87.

Erreur 2 : Des descriptions d'outils ambigues

La description d'un outil MCP est la seule information dont dispose le modele pour decider de l'utiliser.

# Ne faites pas ca
"Fait des trucs avec le reseau"

# Faites ca
"Retourne les informations reseau du noeud specifie :
IP, latence, bande passante, etat de la connexion mesh"
Enter fullscreen mode Exit fullscreen mode

J'ai passe des heures a reecrire les descriptions d'outils. C'est du temps tres bien investi : une description claire reduit les appels errones de 40%.

Erreur 3 : Ignorer les erreurs silencieuses

Un outil qui retourne {"status": "ok", "data": null} au lieu de lever une erreur explicite, c'est un piege. Le modele va interpreter null comme "pas de donnees" au lieu de "quelque chose a plante".

Toujours retourner des erreurs explicites avec un message lisible.

Erreur 4 : Pas de versioning

Quand vous changez le format de retour d'un outil, tous les agents qui l'utilisent se cassent. Versionner les outils (v1, v2) et maintenir la retrocompatibilite, ou au minimum logguer un avertissement de depreciation avant de supprimer un champ.

Erreur 5 : Le couplage temporel

Un outil qui suppose qu'un autre outil a ete appele avant lui est fragile. Chaque outil doit etre autonome. S'il a besoin de donnees d'un autre outil, il les recupere lui-meme ou les prend en parametre.


L'avenir : MCP comme standard universel

MCP est encore jeune, mais les signaux sont clairs :

  • Adoption croissante : les principaux frameworks d'agents (Claude Code, Cursor, Windsurf, et de nombreux autres) integrent MCP nativement. L'ecosysteme de serveurs MCP open source explose.
  • Marketplace d'outils : on commence a voir emerger des registres de serveurs MCP prets a l'emploi. L'equivalent de npm ou pip pour les outils d'IA.
  • Standardisation enterprise : les grandes entreprises commencent a exposer leurs APIs internes en MCP pour que leurs employes puissent les utiliser via des assistants IA.
  • Composition avancee : les prochaines versions de MCP devraient permettre des patterns de composition plus sophistiques -- chainage d'outils declaratif, transactions, souscriptions temps reel.

Ma prediction : dans deux ans, MCP sera aussi omnipresent que REST l'est aujourd'hui pour les APIs web. Tout service qui veut etre "IA-compatible" exposera un endpoint MCP. Et les agents IA navigueront dans cet ecosysteme d'outils aussi naturellement qu'un navigateur web navigue entre les sites.

Pour les developpeurs, le moment d'investir dans MCP c'est maintenant. Ecrire un serveur MCP basique prend une heure. Comprendre les patterns de production prend quelques semaines. Mais cette competence sera differenciante pendant les deux prochaines annees, avant de devenir un prerequis.

Le code du consensus multi-modeles qui tourne derriere le pattern 4 : Multi-Model Consensus Gist


Conclusion

87 outils MCP en production, c'est a la fois beaucoup et pas assez. Chaque semaine, j'en ajoute de nouveaux, j'en retire d'obsoletes, j'en refactorise d'imparfaits. C'est un organisme vivant qui evolue avec les besoins.

Le conseil le plus important que je puisse donner : commencez par 5 outils bien faits plutot que 50 outils bacles. Un outil MCP fiable avec une description claire vaut dix outils instables. La qualite des outils determine directement la qualite du comportement de vos agents.

MCP n'est pas juste un protocole technique. C'est le pont entre le monde du langage naturel et le monde des systemes. Et ce pont, nous sommes en train de le construire.


Retour d'experience base sur un deploiement MCP en production depuis mars 2025. Les patterns decrits sont issus d'iterations reelles, pas de theorie.

Voir le projet JARVIS sur GitHub

Top comments (0)