← Tous les projets

Projet IA

Outils MCP

Des outils MCP pour des LLM locaux : une recherche RAG dans mes fichiers, une sandbox Docker pour exécuter du code sans risque, et un agent qui traite le LLM comme non fiable, vérifié par 238 tests d'attaque.

  • Python
  • MCP
  • Docker
  • Sécurité
  • LLM local
  • RAG

Le projet

MCP (Model Context Protocol) est un standard qui permet de brancher des outils sur n’importe quel LLM : OpenCode, LM Studio ou mon propre agent. J’ai créé plusieurs outils MCP pour travailler avec des modèles qui tournent en local, sur mon ordinateur, sans envoyer mes fichiers à un service externe.

Ce sont des projets personnels, faits en dehors du cursus.

Les outils

  • rag_mcp : mon moteur de recherche RAG (celui du projet RAG against the machine), accessible en MCP. Un LLM peut chercher dans mes fichiers en français ou en anglais, entièrement hors ligne. Des règles excluent les fichiers sensibles avant l’indexation.
  • sandbox_mcp : un outil qui exécute des commandes dans un conteneur Docker sans réseau, en lecture seule et sans droits. Le conteneur travaille sur une copie filtrée du dossier (sans fichiers cachés ni secrets), qui est supprimée ensuite : les vrais fichiers ne changent jamais.
  • local_agent : une boucle d’agent écrite de zéro (environ 2 000 lignes de Python) qui donne à un LLM l’accès à des fichiers et des commandes, en le traitant comme non fiable. Chaque action sensible demande l’accord de l’utilisateur.

La sécurité, testée par des attaques

Les règles de local_agent sont vérifiées par 238 tests, dont 15 dans de vrais conteneurs Docker. Pour vérifier que les tests servent à quelque chose, j’ai retiré 22 protections une par une : chaque retrait a fait échouer un test.

Ces tests ont trouvé de vrais problèmes, tous corrigés. Par exemple :

  • macOS ignore la casse des noms de dossiers : un nom en majuscules permettait d’écraser un fichier protégé ;
  • un motif de détection de secrets était trop lent sur un gros fichier et bloquait l’agent ;
  • une réponse partielle à une demande d’accord était prise pour un « oui ».

Ce que j’ai appris

  • Un LLM qui agit sur une machine doit être traité comme un utilisateur inconnu : chaque entrée est vérifiée, chaque accès est limité.
  • Un bon test de sécurité, c’est un test qui échoue quand on retire la protection.