La création d'un serveur MCP devient beaucoup plus simple lorsque vous utilisez le SDK Python officiel de MCP. Au lieu d'écrire manuellement des schémas JSON complexes pour les outils, vous pouvez les définir avec des décorateurs et laisser le SDK se charger du travail le plus lourd.

Dans cet exemple, nous créons un serveur MCP qui gère des opérations sur des documents. Le serveur disposera de deux outils principaux : l'un pour lire le contenu des documents et l'autre pour les mettre à jour. Tous les documents existent en mémoire sous la forme d'un simple dictionnaire où les clés sont des identifiants de documents et les valeurs sont les chaînes de contenu.
Avantages du SDK Python de MCP
Le projet MCP fournit des SDK officiels pour créer des serveurs et des clients dans plusieurs langages de programmation. L'utilisation du SDK Python offre plusieurs avantages :
- Crée des serveurs MCP avec un minimum de code répétitif
- Génère automatiquement des schémas JSON à partir des signatures de fonctions Python
- Simplifie la définition des outils grâce à des décorateurs
- Gère la validation des types et la gestion des erreurs

Voici à quel point il est facile de définir un outil avec le SDK. Le décorateur @mcp.tool, combiné à des indications de type et à des descriptions de champs, crée automatiquement le schéma d'outil approprié que Claude peut comprendre et utiliser.
Configuration du serveur
Ce cours utilise la version 1 du SDK Python de MCP. L'importation ci-dessous échoue avec la version 2, qui a renommé FastMCP. Si vous configurez le projet vous-même, conservez une version du SDK inférieure à la version 2 :
uv add "mcp[cli]<2"Avec pip, la même contrainte de version s'écrit pip install "mcp[cli]<2".
La configuration de base du serveur ne nécessite que quelques lignes :
from mcp.server.fastmcp import FastMCP
from pydantic import Field
mcp = FastMCP("DocumentMCP", log_level="ERROR")
docs = {
"deposition.md": "This deposition covers the testimony of Angela Smith, P.E.",
"report.pdf": "The report details the state of a 20m condenser tower.",
"financials.docx": "These financials outline the project's budget and expenditures",
"outlook.pdf": "This document presents the projected future performance of the system",
"plan.md": "The plan outlines the steps for the project's implementation.",
"spec.txt": "These specifications define the technical requirements for the equipment"
}Implémentation de l'outil de lecture
Le premier outil permet à Claude de lire le contenu d'un document en fournissant un identifiant de document :
@mcp.tool(
name="read_doc_contents",
description="Read the contents of a document and return it as a string."
)
def read_document(
doc_id: str = Field(description="Id of the document to read")
):
if doc_id not in docs:
raise ValueError(f"Doc with id {doc_id} not found")
return docs[doc_id]La définition de l'outil comprend :
- Un nom clair qui décrit l'action
- Une description expliquant ce que fait l'outil
- Des paramètres typés avec des descriptions de champs
- Une gestion des erreurs pour les identifiants de documents invalides
Implémentation de l'outil de modification
Le second outil effectue de simples opérations de recherche et remplacement sur le contenu d'un document :
@mcp.tool(
name="edit_document",
description="Edit a document by replacing a string in the documents content with a new string."
)
def edit_document(
doc_id: str = Field(description="Id of the document that will be edited"),
old_str: str = Field(description="The text to replace. Must match exactly, including whitespace."),
new_str: str = Field(description="The new text to insert in place of the old text.")
):
if doc_id not in docs:
raise ValueError(f"Doc with id {doc_id} not found")
docs[doc_id] = docs[doc_id].replace(old_str, new_str)Cet outil prend trois paramètres : l'identifiant du document, le texte à rechercher et le texte de remplacement. L'implémentation utilise la méthode intégrée de Python replace() pour plus de simplicité.
Détails clés de l'implémentation
Lorsque vous définissez des outils avec le SDK MCP, gardez à l'esprit ces points importants :
- Importez
Fielddepuis pydantic pour ajouter des descriptions de paramètres - Utilisez des indications de type pour spécifier les types de paramètres
- Incluez une gestion des erreurs pour les cas limites
- Rédigez des noms et des descriptions d'outils clairs et explicites
- Le SDK Python de MCP convertit automatiquement la signature de votre fonction en un schéma JSON approprié
Le SDK Python de MCP réduit considérablement la complexité de la création d'outils par rapport à l'écriture manuelle de schémas JSON. Ce qui nécessitait autrefois des dizaines de lignes de définition de schéma ne prend désormais que quelques lignes de fonctions Python décorées.
Le décorateur @mcp.tool et sa génération de schéma basée sur la signature proviennent du SDK Python de MCP. Le Claude Agent SDK fournit un décorateur @tool distinct(s’ouvre dans un nouvel onglet) pour définir des outils personnalisés, et il attend un argument input_schema explicite plutôt que des annotations pydantic Field sur la signature de la fonction. En Python, ce schéma est un dictionnaire associant des noms de paramètres à des types, comme {"latitude": float}, que l'Agent SDK convertit pour vous en JSON Schema, ou un dictionnaire JSON Schema complet lorsque vous avez besoin d'énumérations, de plages, de champs optionnels ou d'objets imbriqués. Lorsque vous lisez du code d'outil ailleurs, vérifiez quel SDK il importe, car les deux décorateurs sont faciles à confondre.