Aller au contenu

Confirmation

Chaque outil d’écriture sauf approve_transactions et import_transactions passe par une seule fonction, confirm.ask, avant de modifier quoi que ce soit. Cette page décrit exactement ce qu’elle fait.

Chaque outil construit un sujet : le changement exact, sous forme de données.

Outil Sujet
apply_categories la liste des changements (transaction, catégorie après)
set_category_budget catégorie, mois (résolu), montant en milliunités
move_money les deux catégories, mois (résolu), montant déplacé en milliunités
flag_transactions les drapeaux (transaction, couleur après)
set_category_target catégorie, les champs d’objectif envoyés (montant en milliunités, date ou fréquence)
update_category catégorie, nom après, groupe après
create_category groupe, nom
create_transactions compte, les transactions, approved
split_transaction transaction, les lignes (montant, catégorie, mémo)
reconcile_account compte, solde bancaire, écart à ajuster
undo_operation l’identifiant de l’opération

Son empreinte est le SHA-256 du JSON [plan_id, subject], clés triées ; pour une liste de changements, l’ordre des éléments est indifférent. Une réponse ou un code ne confirme jamais que le sujet dont il porte l’empreinte.

ask regarde ce que le client a déclaré à la connexion et choisit :

1. Le client gère l’élicitation, protocole 2026-07-28

Section intitulée « 1. Le client gère l’élicitation, protocole 2026-07-28 »

Dans le protocole MCP actuel, un serveur ne peut pas envoyer de requête au client en cours d’appel. avenir-mcp utilise l’aller-retour input required :

  1. Le premier appel renvoie un InputRequiredResult au lieu de la réponse de l’outil. Il contient une demande, confirm, un formulaire avec un seul booléen value, dont le message est l’aperçu (jusqu’à 20 changements, puis « … and N more »), et un request_state : l’empreinte.
  2. Le client affiche le formulaire. L’utilisateur coche, ou refuse.
  3. Le client rappelle l’outil avec les mêmes arguments, la réponse dans input_responses, et le request_state reçu. FastMCP scelle cet état sur le réseau et rejette toute altération.
  4. avenir-mcp recalcule le plan et son empreinte. S’ils diffèrent du request_state — quelqu’un a modifié le plan entre-temps — l’appel échoue avec « The plan changed between the preview and the answer » et rien n’est écrit.

2. Le client gère l’élicitation, protocole antérieur

Section intitulée « 2. Le client gère l’élicitation, protocole antérieur »

Le serveur pose la question pendant l’appel (ctx.elicit) avec le même formulaire oui/non, et attend la réponse.

Le premier appel renvoie status: "confirmation_required", l’aperçu, et un code de confirmation. L’agent montre l’aperçu à l’utilisateur et, seulement s’il est d’accord, rappelle l’outil avec les mêmes arguments plus confirmation.

Réponse Résultat
formulaire accepté, case cochée applied
formulaire accepté, case non cochée declined
decline declined — rien d’écrit
cancel (fermé, ou client incapable de l’afficher) repli sur un code de confirmation

Une fermeture n’est pas un refus : les clients non interactifs ferment toutes les questions, et les compter comme un non rendrait toute écriture impossible — le défaut qu’a trouvé la première exécution de l’évaluation.

Propriété Valeur
Format 11 caractères sûrs pour une URL (secrets.token_urlsafe(8))
Durée de vie 600 secondes, sur une horloge monotone
Usage unique : un code est consommé à sa première utilisation, même s’il ne correspond pas
Portée l’empreinte d’un sujet dans un plan
Stockage la mémoire du serveur uniquement : un redémarrage oublie tous les codes

Un code inconnu, expiré, déjà utilisé ou émis pour d’autres changements est refusé avec : « This confirmation code is unknown, expired, already used, or was issued for different changes. Call again without confirmation to get a new preview. »

Un code de confirmation prouve qu’un aperçu a existé, pas que vous l’avez lu. Avec AVENIR_MCP_REQUIRE_ELICITATION=1 :

Situation Sans la variable Avec
le client sait demander, vous dites oui applied applied
question fermée un code de confirmation declined
le client ne sait pas demander un code de confirmation erreur : rien n’est modifié
un code confirmation est transmis vérifié, puis appliqué erreur : les codes sont désactivés

Seuls les clients qui gèrent l’élicitation MCP peuvent alors écrire.

Outil Question
apply_categories Recategorise 2 transaction(s)? puis une ligne par changement : date, bénéficiaire, montant, avant → après
set_category_budget Budget Restaurants for 2026-09-01: 120.00 → 150.00?
move_money Move 30.00 from Tennis to Restaurants for 2026-09-01? puis une ligne par catégorie, avant → après
flag_transactions Change the flag of 2 transaction(s)? puis une ligne par transaction : date, bénéficiaire, montant, couleur avant → après
set_category_target Set the target of Vacances: no target → 1200.00 by 2027-06-01?, et un avertissement quand l’annulation ne peut pas rétablir l’objectif précédent
update_category Change category ‘Tennis’ (Loisirs) to ‘Sport’ (Loisirs)?
create_category Create category ‘Animaux’ in Quotidien?
create_transactions Create 1 transaction(s) on Compte courant? puis une ligne par transaction
split_transaction Split 2026-09-12 Market 86.40 into 2 lines? puis une ligne par catégorie, et l’avertissement que seul YNAB peut l’annuler
reconcile_account Reconcile Compte courant: mark 49 cleared transaction(s) reconciled?
undo_operation Undo: recategorise 2 transaction(s)?, ou la sorte d’annulation

Les questions sont en anglais, comme les réponses des outils.

Projet non officiel. « We are not affiliated, associated, or in any way officially connected with YNAB or any of its subsidiaries or affiliates. The official YNAB website can be found at https://www.ynab.com. The names YNAB and You Need A Budget, as well as related names, tradenames, marks, trademarks, emblems, and images are registered trademarks of YNAB. » Nous ne sommes ni affiliés, ni associés, ni liés officiellement de quelque manière que ce soit à YNAB ou à ses filiales et sociétés affiliées. Le site officiel de YNAB se trouve à l’adresse https://www.ynab.com. Les noms YNAB et You Need A Budget, ainsi que les noms, dénominations commerciales, marques, emblèmes et images qui s’y rattachent, sont des marques déposées de YNAB. avenir-mcp est fourni tel quel, sans garantie, et n’est pas un conseil financier. Mentions légales · Confidentialité