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.
Ce qui est confirmé
Section intitulée « Ce qui est confirmé »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.
Trois façons de demander
Section intitulée « Trois façons de demander »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 :
- Le premier appel renvoie un
InputRequiredResultau lieu de la réponse de l’outil. Il contient une demande,confirm, un formulaire avec un seul booléenvalue, dont le message est l’aperçu (jusqu’à 20 changements, puis « … and N more »), et unrequest_state: l’empreinte. - Le client affiche le formulaire. L’utilisateur coche, ou refuse.
- Le client rappelle l’outil avec les mêmes arguments, la réponse dans
input_responses, et lerequest_statereçu. FastMCP scelle cet état sur le réseau et rejette toute altération. - 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.
3. Le client ne gère pas l’élicitation
Section intitulée « 3. Le client ne gère pas l’élicitation »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.
Lecture des réponses
Section intitulée « Lecture des réponses »| 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.
Codes de confirmation
Section intitulée « Codes de confirmation »| 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. »
N’accepter que votre propre réponse
Section intitulée « N’accepter que votre propre réponse »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.
Ce que voit l’utilisateur
Section intitulée « Ce que voit l’utilisateur »| 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é