Aller au contenu principal

Définir des outils avec MCP

La construction d’un serveur MCP devient beaucoup plus simple avec le SDK Python officiel. Au lieu d’écrire des schémas JSON complexes à la main, vous définissez des outils avec des décorateurs et laissez le SDK faire le travail.

Initialiser le serveur MCP

Le SDK MCP Python rend la création de serveur très simple — une seule ligne suffit :

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("DocumentMCP", log_level="ERROR")

Vos documents peuvent être stockés dans un dictionnaire simple :

docs = {
    "deposition.md": "Ce document couvre le témoignage d'Angela Smith, P.E.",
    "rapport.pdf": "Ce rapport détaille l'état d'une tour de condensation de 20m.",
    "finances.docx": "Ces finances décrivent le budget et les dépenses du projet.",
    "perspectives.pdf": "Ce document présente les performances futures projetées.",
    "plan.md": "Ce plan décrit les étapes de mise en œuvre du projet.",
    "spec.txt": "Ces spécifications définissent les exigences techniques."
}

Définir des outils avec des décorateurs

Le SDK utilise des décorateurs pour définir les outils. Au lieu d’écrire des schémas JSON manuellement, vous utilisez les annotations de type Python et des descriptions de champs. Le SDK génère automatiquement le schéma approprié que Claude peut comprendre.

Outil de lecture de documents

Le premier outil lit le contenu d’un document par son identifiant :

from pydantic import Field

@mcp.tool(
    name="read_doc_contents",
    description="Lit le contenu d'un document et le retourne sous forme de chaîne."
)
def read_document(
    doc_id: str = Field(description="Identifiant du document à lire")
):
    if doc_id not in docs:
        raise ValueError(f"Document avec l'id {doc_id} introuvable")
    
    return docs[doc_id]

Le décorateur spécifie le nom et la description de l’outil, tandis que les paramètres de la fonction définissent les arguments requis. La classe Field de Pydantic fournit des descriptions d’arguments qui aident Claude à comprendre ce que chaque paramètre attend.

Outil d’édition de documents

Le deuxième outil effectue des opérations de recherche-remplacement sur les documents :

@mcp.tool(
    name="edit_document",
    description="Modifie un document en remplaçant une chaîne par une nouvelle."
)
def edit_document(
    doc_id: str = Field(description="Identifiant du document à modifier"),
    old_str: str = Field(description="Le texte à remplacer. Doit correspondre exactement, espaces compris."),
    new_str: str = Field(description="Le nouveau texte à insérer à la place de l'ancien.")
):
    if doc_id not in docs:
        raise ValueError(f"Document avec l'id {doc_id} introuvable")
    
    docs[doc_id] = docs[doc_id].replace(old_str, new_str)

Cet outil prend trois paramètres : l’identifiant du document, le texte à trouver, et le texte de remplacement.

Avantages de l’approche SDK

Approche manuelleAvec le SDK MCP
Écrire des schémas JSON à la mainLes annotations de type génèrent le schéma
Gestion manuelle des erreursLes exceptions Python s’intègrent naturellement
Enregistrement manuelLes décorateurs gèrent tout automatiquement
Descriptions d’arguments séparéesField() intègre les descriptions

Pourquoi cette approche fonctionne

Le SDK MCP Python transforme la création d’outils d’un exercice de rédaction de schémas complexes en de simples définitions de fonctions Python. Cette approche facilite la construction et la maintenance de serveurs MCP tout en garantissant que Claude reçoit des spécifications d’outils correctement formatées.

Dans la prochaine leçon, nous verrons comment tester ces outils avec l’inspecteur MCP intégré.