MCP Academy · Leçon

Gérer les demandes d’annulation

Arrêtez proprement le travail lorsque le client l’annule.

Leçon 2 sur 413 étapes

Gérer les demandes d’annulation est une leçon MCP Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage MCP Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours MCP Academy comprend 4 leçons au total.

Pourquoi l’annulation existe

Un utilisateur peut fermer une conversation ou changer d’avis pendant l’exécution d’un outil long. MCP permet au client d’envoyer une annulation afin d’arrêter le travail inutile.

La notification cancelled

Le client le signale avec un message notifications/cancelled indiquant le requestId qu’il souhaite arrêter. Il s’agit d’un envoi sans réponse attendue.

{"method": "notifications/cancelled",
 "params": {"requestId": 7, "reason": "user aborted"}}

Ce n’est qu’une demande

Seule une demande en cours peut être annulée, en fonction de son requestId. Les notifications, qui n’ont pas d’identifiant, ne peuvent jamais être annulées.

L’annulation est une mesure de meilleure volonté

Une annulation est une demande courtoise, pas un arrêt forcé. Votre travail est peut-être déjà sur le point de se terminer ; considérez-la donc comme une indication de meilleure volonté vous invitant à terminer progressivement.

asyncio s’occupe de la connexion

Avec le SDK Python, une annulation arrive sous la forme d’une asyncio.CancelledError levée dans votre outil en attente. Vous n’avez généralement pas besoin de vérifier vous-même un indicateur.

import asyncio
# CancelledError is raised at the next await point

Laissez-la se propager

Le comportement correct le plus simple consiste à laisser CancelledError remonter. Le framework arrête alors la tâche et évite d’envoyer un résultat normal.

@mcp.tool()
async def crunch(ctx: Context) -> str:
    for item in items:
        await heavy(item)  # cancel lands here

Nettoyez après une annulation

Si votre outil conserve un fichier ouvert ou un verrou, encapsulez-le afin qu’une annulation libère tout de même les ressources. Un bloc try/finally garantit que le nettoyage sera effectué lors de la sortie.

try:
    await do_work()
finally:
    handle.close()

Ne l’ignorez pas

Ne capturez jamais CancelledError pour continuer discrètement. Cela va à l’encontre de l’objectif même de l’annulation et laisse le client penser que le travail a été arrêté.

# Anti-pattern:
# except asyncio.CancelledError:
#     pass  # do NOT do this

Aucune réponse après l’annulation

Une fois une demande annulée, n’envoyez ni résultat ni erreur pour celle-ci. Le client est passé à autre chose et toute réponse tardive est simplement ignorée.

Libérer les ressources

Respecter rapidement l’annulation libère du temps CPU, du réseau et des jetons du modèle. Un serveur qui s’arrête rapidement se comporte en bon citoyen au sein d’un agent très sollicité.

Vérifier aux points naturels

Pour les boucles CPU serrées sans await, insérez de temps en temps un court await asyncio.sleep(0) afin de laisser l’annulation intervenir entre deux itérations.

for chunk in chunks:
    crunch(chunk)
    await asyncio.sleep(0)

Vérification rapide

Vérifiez comment l’annulation se manifeste dans un outil MCP Python.

Récapitulatif : annulation

Vous avez vu la notification cancelled, compris pourquoi les annulations sont nécessairement approximatives et appris à laisser CancelledError se propager tout en effectuant le nettoyage. Bravo !

Gratuit pour commencer

Apprends Python avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
30
Leçons
120

Questions Fréquemment Posées

La leçon « Gérer les demandes d’annulation » est-elle gratuite ?

Oui — le texte complet de « Gérer les demandes d’annulation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours MCP Academy, passe à CoddyKit PRO. Le cours MCP Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Gérer les demandes d’annulation » ?

Arrêtez proprement le travail lorsque le client l’annule. Tu pratiques MCP Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer MCP Academy ?

Aucune expérience préalable n'est requise. MCP Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Gérer les demandes d’annulation » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon MCP Academy ?

Oui. Chaque leçon MCP Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Envoyer la progression des tâches longues
  2. Gérer les demandes d’annulation
  3. Journalisation structurée vers le client
  4. Définir les niveaux de journalisation à l’exécution
← Retour à MCP Academy