Aller au contenu principal

Implémenter un client

Maintenant que notre serveur MCP fonctionne, il est temps de construire le côté client. Le client permet à notre code applicatif de communiquer avec le serveur MCP et d’accéder à ses fonctionnalités.

Architecture du client

Dans la plupart des projets réels, vous implémenterez soit un client MCP, soit un serveur MCP — pas les deux. Nous construisons les deux ici pour bien comprendre comment ils fonctionnent ensemble.

Le client MCP se compose de deux éléments principaux :

  • MCP Client — Une classe personnalisée que nous créons pour faciliter l’utilisation de la session
  • Client Session — La connexion réelle au serveur (fournie par le SDK MCP Python)

La session client nécessite une gestion soigneuse des ressources — nous devons nettoyer les connexions correctement. C’est pourquoi nous l’encapsulons dans notre propre classe qui gère automatiquement ce nettoyage.

Fonctions essentielles du client

Nous devons implémenter deux fonctions : list_tools() et call_tool().

Lister les outils

Cette fonction récupère tous les outils disponibles du serveur MCP :

async def list_tools(self) -> list[types.Tool]:
    result = await self.session().list_tools()
    return result.tools

Simple : on accède à la session (la connexion au serveur), on appelle la méthode list_tools() intégrée, et on retourne les outils du résultat.

Appeler un outil

Cette fonction exécute un outil spécifique sur le serveur :

async def call_tool(
    self, tool_name: str, tool_input: dict
) -> types.CallToolResult | None:
    return await self.session().call_tool(tool_name, tool_input)

On passe le nom de l’outil et les paramètres d’entrée (fournis par Claude) au serveur et on retourne le résultat.

Tester le client

Le fichier client inclut un harnais de test simple. Vous pouvez le lancer directement pour vérifier que tout fonctionne :

uv run mcp_client.py

Cela connecte votre serveur MCP et affiche les outils disponibles — vous devriez voir les définitions de vos outils, incluant descriptions et schémas d’entrée.

Assembler le tout

Une fois les fonctions client implémentées, testez le flux complet :

uv run main.py

Essayez de demander : “Quel est le contenu du document rapport.pdf ?”

Voici ce qui se passe en coulisses :

1. Votre application utilise le client pour obtenir les outils disponibles
2. Ces outils sont envoyés à Claude avec votre question
3. Claude décide d'utiliser l'outil read_doc_contents
4. Votre application utilise le client pour exécuter cet outil
5. Le résultat est retourné à Claude, qui vous répond

Rôle du client

Le client agit comme pont entre votre logique applicative et les fonctionnalités du serveur MCP. Il rend facile l’intégration d’outils puissants dans vos workflows IA, sans que vous ayez à gérer les détails du protocole de communication.

Dans les prochaines leçons, nous ajouterons des ressources et des prompts à notre architecture.