Skip to content

Latest commit

 

History

History
132 lines (99 loc) · 6.8 KB

File metadata and controls

132 lines (99 loc) · 6.8 KB

🔌 Intégration MCP (Model Context Protocol)

📋 Vue d'Ensemble

My Personal AI intègre désormais le Model Context Protocol (MCP), un standard ouvert qui permet aux modèles d'IA (comme Ollama) d'interagir de manière sécurisée et standardisée avec des outils locaux et des sources de données externes.

Grâce à cette intégration, l'IA n'est plus limitée à ses connaissances internes ou à la recherche web basique. Elle peut désormais :

  • Lire et écrire dans votre système de fichiers local.
  • Interagir avec des bases de données (SQLite, etc.).
  • Exécuter des commandes Git.
  • Utiliser n'importe quel serveur MCP compatible.

🏗️ Architecture MCP dans My AI

L'intégration repose sur le module core/mcp_client.py qui agit comme un pont entre Ollama et les outils/serveurs MCP.

1. Outils Locaux (LocalTools)

Ce sont des fonctions Python exécutées directement dans le processus de l'application. Elles encapsulent les capacités de My AI de manière standardisée pour qu'Ollama puisse les appeler de manière autonome.

Capacités d'interaction système : L'IA a un accès direct encadré à votre PC pour travailler selon ses plans :

  • write_local_file : Crée ou écrit dans un fichier sur votre ordinateur.
  • move_local_file : Renomme ou déplace un fichier (conserve les dossiers parents grâce à Mkdir intégré).
  • create_directory : Crée de nouveaux dossiers de travail.
  • search_local_files : Explore la racine de votre PC par glob pattern (ex: *.py).
  • read_local_file : Analyse et relit le contenu de n'importe quel de vos fichiers locaux.
  • delete_local_file : Supprime un fichier avec confirmation utilisateur.
  • Et bien d'autres outils (mémoire vectorielle RAG, recherche web via DuckDuckGo, etc.).

2. Serveurs MCP Externes (MCPServers)

My AI peut se connecter à des serveurs MCP externes via le transport stdio. Cela permet d'étendre les capacités de l'IA de manière infinie en utilisant l'écosystème grandissant des serveurs MCP (ex: serveurs pour GitHub, Slack, bases de données d'entreprise, etc.).

🚀 Comment ça marche ?

  1. Découverte : Au démarrage, le mcp_client recense tous les outils locaux disponibles et se connecte aux serveurs MCP externes configurés pour récupérer leurs outils.
  2. Exposition : Tous ces outils sont convertis au format JSON Schema attendu par l'API d'Ollama.
  3. Décision : Lors d'une requête utilisateur, la liste des outils est envoyée à Ollama avec le prompt. Ollama décide intelligemment s'il a besoin d'utiliser un outil pour répondre.
  4. Exécution : Si Ollama décide d'utiliser un outil, le mcp_client intercepte l'appel, exécute l'outil local ou transfère la requête au serveur MCP externe, puis renvoie le résultat à Ollama.
  5. Synthèse : Ollama utilise le résultat de l'outil pour formuler sa réponse finale à l'utilisateur.

⚙️ Configuration

La configuration des serveurs MCP externes se fait dans la section mcp du fichier config.yaml :

mcp:
  # Outils locaux (toujours actifs, pas de dépendance externe)
  local_tools:
    web_search: true
    search_memory: true
    read_local_file: true
    list_directory: true
    generate_code: true
    calculate: true

  # Serveurs MCP externes (optionnels, désactivés par défaut)
  # Mettre enabled: true pour activer
  servers:
    filesystem:           # Requiert Node.js
      enabled: false
      command: "npx"
      args: ["@modelcontextprotocol/server-filesystem", "./"]

    git:                  # Accès aux dépôts Git
      enabled: false
      command: "npx"
      args: ["@modelcontextprotocol/server-git", "--repository", "."]

    sqlite:               # Accès aux bases SQLite
      enabled: false
      command: "npx"
      args: ["@modelcontextprotocol/server-sqlite", "memory/vector_store/chroma.db"]

    sequential_thinking:  # Raisonnement structuré
      enabled: false
      command: "npx"
      args: ["@modelcontextprotocol/server-sequential-thinking"]

    brave_search:         # Requiert une clé API Brave
      enabled: false
      command: "npx"
      args: ["@modelcontextprotocol/server-brave-search"]
      env:
        BRAVE_API_KEY: "${BRAVE_API_KEY}"

    fetch:                # Récupération de pages web
      enabled: false
      command: "npx"
      args: ["@modelcontextprotocol/server-fetch"]

Pour activer un serveur, passer enabled: true. Les serveurs externes nécessitent Node.js (via npx).

🛠️ Dépendances

L'intégration MCP utilise le SDK officiel mcp pour Python. Si le SDK n'est pas installé, My AI gère la situation de manière gracieuse (dégradation gracieuse) et continue de fonctionner avec ses capacités de base.

Pour installer le SDK MCP :

pip install mcp

⚠️ Confirmation de Suppression

Quand l'IA décide d'utiliser l'outil delete_local_file pour supprimer un fichier, une fenêtre de confirmation modale s'affiche dans l'interface graphique :

  • Icône ⚠️ et titre "Confirmation de suppression"
  • Chemin complet du fichier affiché clairement
  • Bouton "Oui, supprimer" (orange) et "Non, annuler" (sombre)
  • La suppression est bloquée tant que l'utilisateur n'a pas cliqué sur un bouton
  • Si l'utilisateur refuse, l'IA reçoit un message indiquant que la suppression a été annulée

Mécanisme technique :

  • Le thread IA attend via un threading.Event
  • Le dialogue est créé dans le thread GUI principal via root.after(0, ...)
  • La synchronisation est thread-safe

🌟 Avantages

  • Autonomie : L'IA décide elle-même quand et comment utiliser les outils.
  • Sécurité : Confirmation utilisateur obligatoire avant toute suppression de fichier.
  • Extensibilité : Ajout facile de nouvelles capacités via des serveurs MCP standards.
  • Standardisation : Utilisation d'un protocole ouvert adopté par l'industrie (Anthropic, etc.).

🧩 Note sur l'extension VS Code

Depuis la v1.1.0 de l'extension VS Code, un client connecté depuis VS Code n'utilise PAS les MCP locaux décrits ci-dessus. À la place, le Relay aiguille la conversation vers un mode agentique dédié (core/agentic_executor.py) qui expose un set d'outils distinct (read_file, write_file, edit_file, list_dir, glob, grep, run_command, get_active_editor, open_file) dont l'exécution est déléguée à l'extension côté client.

Cette séparation est intentionnelle : elle garantit que l'utilisateur de l'extension ne voit que son workspace VS Code, et pas l'intégralité du PC hôte (auquel le GUI desktop et le mobile ont accès via les MCP). C'est aussi pour ça que les outils VS Code sont sandboxés au workspace par défaut, avec un modal d'approbation obligatoire pour toute sortie de ce périmètre.

Le mobile et le GUI desktop continuent d'utiliser les MCP locaux décrits dans cette page, sans changement.