Skip to main content
Glama

StampyWallet

Server Details

Official MCP server for StampyWallet, loyalty cards in Apple Wallet and Google Wallet for local shops. Design a card and put it live without an account; with OAuth, read your numbers, message customers and manage the card and team, always after your approval.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4/5.0

Scored across 32 tools

Disambiguation4/5

Despite 32 tools, most have clearly distinct jobs and the descriptions explicitly state when to use one versus another (envoyer_message vs programmer_message_recurrent vs regler_automatismes; affichette vs envoyer_affichette; regler_jours_fermes vs ajouter_conges). The main soft spots are the analytics trio (tableau_de_bord / rentabilite / meilleurs_moments) and simuler_fidelite vs rentabilite, which a hasty agent could mix up, plus concevoir_carte vs modifier_carte vs voir_carte which differ mainly by context (prospect vs existing commerce).

Naming Consistency4/5

Everything is French snake_case with a strong verb_noun pattern for actions (creer_commerce, modifier_carte, envoyer_message, supprimer_conges, inviter_membre). Read-oriented tools are less predictable: some use verbs (voir_carte, lister_equipe, chercher_clients) while others are bare nouns (fiche_client, historique_messages, tableau_de_bord, rentabilite, avis_google). The noun families are internally consistent (fiche_*, lister_*), so it stays readable.

Tool Count3/5

32 tools is on the heavy side for what is essentially a loyalty-card admin surface; several families (6 recurring-message tools, 5 team tools, 4 closure tools) add up. Each tool does earn a distinct place, but the surface would benefit from consolidation (e.g. a single recurring-message tool with an action parameter). It is borderline-heavy rather than bloated.

Completeness4/5

Coverage is broad and lifecycle-aware: prospect onboarding (concevoir_carte, simuler_fidelite, creer_commerce), card read/update, client lookup, one-off/recurring/automated messaging with history, team CRUD, closures, and three analytics views. Gaps are minor: no tool to mark a reward as redeemed/offered (fiche_client reports rewards 'à offrir' but nothing acts on it), and no way to delete/close a commerce; image assets are explicitly deferred to the app.

Available Tools

32 tools
affichetteAffichette et QR codeA
Read-onlyIdempotent
Inspect

Rend le QR code d’inscription des clients (celui à poser au comptoir, que les clients scannent pour ajouter la carte à leur téléphone), le lien public, la carte, et les liens de téléchargement de l’affichette à imprimer (PDF A5 ou A6) et du QR seul (PNG, SVG) pour un menu, une vitrine ou Canva. À utiliser quand le commerçant veut imprimer son affichette, récupérer son QR code ou le lien à mettre dans sa bio. Les téléchargements s’ouvrent dans l’application, connecté. Pour recevoir les PDF par e-mail : envoyer_affichette. Lecture seule.

NameRequiredDescriptionDefault
formatNoFormat du PDF mis en avant : a5 (demi-feuille, affiche de comptoir) ou a6 (quart de feuille, chevalet ou porte-carte).a5

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: downloads open inside the app and require a connected session, and the output is a set of links rather than a rendered asset. It stops short of saying whether those download links expire, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The output enumeration is front-loaded and the usage conditions and alternative follow in a logical order, with no filler sentences. It is a dense, long single block rather than clearly separated clauses, which slightly hurts scannability but every sentence still earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description compensates by enumerating the return payload (QR, public link, card, PDF and PNG/SVG download links). Combined with read-only annotations and a single well-documented optional parameter, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the enum values already carry clear explanations (a5 = demi-feuille / comptoir, a6 = quart de feuille / chevalet). The description only echoes 'PDF A5 ou A6' and adds nothing about default behavior or what changes when a6 is chosen, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and enumerates exactly what the tool returns: the registration QR code, the public link, the card, and download links for the printable poster (PDF A5/A6) and the QR alone (PNG, SVG). It names the sibling it is not ('Pour recevoir les PDF par e-mail : envoyer_affichette'), so an agent can distinguish it from envoyer_affichette without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'À utiliser quand le commerçant veut imprimer son affichette, récupérer son QR code ou le lien à mettre dans sa bio' gives explicit trigger conditions, and the trailing sentence names the alternative tool for the email-delivery case. Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ajouter_congesAjouter des congésA
Destructive
Inspect

Ajoute une période de fermeture (congés, jour férié), du premier au dernier jour inclus. Les jours fermés ne comptent pas dans l’absence d’un client : des congés bien déclarés évitent que des habitués passent pour « perdus de vue » et reçoivent une relance au retour. En option, prevenir_clients=true avec un texte prépare aussi une notification à tous les clients (mêmes règles qu’envoyer_message : un message par jour). confirmer=false (défaut) rend un aperçu ; confirmer=true enregistre (et envoie le message s’il est demandé), après accord explicite de la personne.

NameRequiredDescriptionDefault
auNoDernier jour fermé, inclus (AAAA-MM-JJ). Par défaut, le même jour que du.
duYesPremier jour fermé (AAAA-MM-JJ).
texteNoTexte de la notification aux clients (180 caractères au plus), si prevenir_clients=true.
libelleNoNom de la période, pour s’y retrouver (« Congés d’été »).
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
prevenir_clientsNotrue : envoie aussi une notification à tous les clients avec texte. Compte comme le message du jour.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint/readOnlyHint annotations by disclosing side effects: closed days don't count toward client absence, mis-declared closures make regulars look 'perdus de vue' and trigger follow-ups, and prevenir_clients sends one message per day to all clients (counting as the day's message). The preview-vs-commit semantics are also spelled out.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by effect, optional notification, and confirm flow in a logical order. The prose is dense but each sentence carries useful information with little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter mutation with side effects and no output schema, the description covers the range, the notification option, and the confirm flow adequately, and annotations already flag the destructive profile. Minor gaps remain around reversibility/undo and how it relates to the closure-listing siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage the baseline is 3, but the description adds meaning by framing du/au as an inclusive range, clarifying that prevenir_clients requires texte and follows envoyer_message rules, and explaining confirmer's preview-vs-execute behavior in context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Ajoute) and resource (période de fermeture / congés) with clear scope (premier au dernier jour inclus) and even explains the downstream effect on client absence tracking. It is very clear what the tool does, though it never explicitly names sibling tools (lister_fermetures, supprimer_conges, regler_jours_fermes) to differentiate the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the optional notification path (prevenir_clients=true with texte) and the two-step preview/confirm workflow ('confirmer=false rend un aperçu ; confirmer=true enregistre... après accord explicite de la personne'). However, it gives no explicit when-not guidance or routing versus the closure-management siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

annuler_invitationAnnuler une invitationA
Destructive
Inspect

Annule une invitation pas encore utilisée : son lien ne marche plus. Réservé au propriétaire. confirmer=false (défaut) rend un aperçu ; confirmer=true agit, après accord explicite de la personne.

NameRequiredDescriptionDefault
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
invitationYesLe lien d’invitation ou son jeton, lus avec lister_equipe.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare the tool as destructive and not idempotent, and the description adds real context beyond them: owner-only authorization, the concrete effect (the invitation link stops working), and a two-step confirmation protocol that must wait for the user's explicit consent. That is exactly the extra behavioral guidance annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is three compact clauses. The effect and the precondition are front-loaded, the authorization constraint follows, and the confirm protocol comes last. No sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter destructive tool with full schema coverage and no output schema, the description covers effect, authorization, and safety flow adequately. It omits what happens if the invitation was already used, such as the error behavior, which would round out the picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters are already documented in the schema, including the confirmer preview semantics. The description restates the confirmer=false/true behavior but adds no syntax or format detail beyond that, so it is at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb with its resource and adds a limiting condition: canceling an invitation that has not yet been used, and that the link stops working. This distinguishes the tool in practice from inviter_membre, retirer_membre, and lister_equipe, even though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states a clear usage context: it is reserved for the owner, it applies only to unused invitations, and it lays out the preview-then-act flow with confirmer. It does not explicitly compare itself with the alternatives or state what to do when an invitation has already been used, which stops it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

arreter_message_recurrentArrêter un message récurrentA
Destructive
Inspect

Arrête et supprime un message récurrent ; ce qui est déjà parti reste dans l’historique. confirmer=false (défaut) rend un aperçu ; confirmer=true l’exécute, après l’accord explicite de la personne.

NameRequiredDescriptionDefault
idYesLa règle visée, donnée par lister_messages_recurrents.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds genuinely new context: the deletion does not erase message history, and execution must follow an explicit human approval obtained via the preview step. It stops short of saying whether the deleted rule can be recovered, which matters for a destructive, non-idempotent operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler: the first states the action and its data consequence, the second states the two-step confirmation flow. The most consequential fact (preview vs execute) is placed where it will be read before invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter destructive tool with no output schema, the description covers the safety protocol and the side effect on history, which are the two things an agent could not derive from structured fields. It leaves open what the preview actually contains and whether the rule can be restored, minor but real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are already fully documented in the schema, including the default and the consent workflow. The description restates the confirmer semantics without adding syntax or edge-case detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb with a specific resource ('Arrête et supprime un message récurrent') and clarifies the scope of the deletion by noting that already-sent messages remain in history. It does not explicitly contrast with the close sibling 'suspendre_message_recurrent', so an agent must infer that this is permanent removal rather than a pause, but the verb 'supprime' carries that distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly specifies the operational protocol: confirmer=false returns a preview, confirmer=true executes, and execution requires the person's explicit consent first. What is missing is guidance on when to prefer this tool over 'suspendre_message_recurrent' or 'modifier_message_recurrent', which is the main ambiguity among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

avis_googleAvis GoogleA
Destructive
Inspect

Les avis Google du commerce. Chaque client reçoit la même demande d’avis (notification Wallet, SMS ou e-mail selon le canal réglé dans regler_automatismes, canal_avis), avec le lien direct vers la fiche Google : pas de note intermédiaire, pas de tri, aucune récompense contre un avis (règles de Google). Montre les chiffres sur 30 jours (demandes envoyées, clients allés sur Google) ; et règle la demande : lien de la fiche Google, demande active ou non, moment (première récompense ou après N passages), délai, texte. Sans changement : lecture seule. Avec changements : confirmer=false rend un aperçu avant → après, confirmer=true enregistre. Seuls les champs fournis changent.

NameRequiredDescriptionDefault
lienNoLien « écrire un avis » de la fiche Google (g.page/r/…/review, search.google.com/local/writereview?placeid=…). Sans lui, aucune demande ne part.
momentNoQuand demander : recompense = à la première récompense ; passages = après N passages (voir passages).
effacerNoChamps texte à vider. texte_demande revient au texte par défaut.
passagesNoNombre de passages avant la demande, si moment=passages.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
retirer_lienNotrue : retire le lien de la fiche (coupe de fait toutes les demandes).
delai_minutesNoDélai entre le passage et la demande, en minutes : 0, 30, 60, 180, 1440 (1440 = le lendemain).
texte_demandeNoTexte de la demande, 300 caractères au plus. Le lien vers la fiche Google est ajouté après.
demande_activeNoEnvoyer ou non la demande d’avis aux clients.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false, and the description adds genuinely useful context: a mandatory preview-then-confirm flow, the fact that only supplied fields change (partial update), and that retirer_lien cuts off all requests. It also cites Google's policy constraints (no intermediate rating, no filtering, no incentive), which explain why certain behaviors are absent. Some of this repeats what the confirmer parameter description already says, keeping it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The read/write distinction and the preview-confirm rule are front-loaded and the sentences are dense with information. The semicolon-chained style is slightly heavy but nearly every clause carries a distinct fact. Minor redundancy with the confirmer schema text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, zero-required, destructive configuration tool with no output schema, the description covers the read path, the write path, the confirmation protocol, and the partial-update semantics. What it does not describe is the shape of the 30-day statistics it returns, though that is arguably minor and inferable from the field names given.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains lien, moment, passages, délai, texte, and the removal flags in detail. The description only restates a subset (lien, demande active, moment, délai, texte) without adding syntax or constraints. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (Google reviews for the business) and two clear capabilities: showing 30-day figures and configuring the review request. It cross-references regler_automatismes for the channel setting, which helps separate the two tools. It falls short of 5 because the opening is a bare noun phrase rather than a verb-first statement of what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit operating rule: with no changes it is read-only; with changes, confirmer=false returns a before/after preview and confirmer=true persists. That tells the agent exactly how to sequence calls. It does not state when to prefer a sibling tool (e.g. regler_automatismes for the channel itself) beyond a passing reference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

changer_role_membreChanger le rôle d’un membreA
Destructive
Inspect

Passe un membre de l’équipe en employé ou en responsable. Réservé au propriétaire. confirmer=false (défaut) rend un aperçu ; confirmer=true agit, après accord explicite de la personne.

NameRequiredDescriptionDefault
roleYesstaff = employé, ne voit que le scanner ; manager = responsable, voit chiffres, clients, messages et règle la carte, sans toucher à l’équipe.
emailNoOu l’e-mail du membre, à la place de membre_id.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
membre_idNoIdentifiant du membre, lu avec lister_equipe.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and non-idempotent, so the safety profile is covered. The description adds real context beyond that: an owner-only authorization requirement and a mandatory two-phase preview-then-confirm flow with the affected person's consent. It stops short of saying the previous role is replaced/lost, which would be the final useful detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler: purpose, authorization, then the preview/confirm rule. The most operationally important constraint (confirmer semantics) is front-loaded and easy to act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, owner-restricted mutation with no output schema, the description covers permissions, the safe preview path, and the consent gate, and all four parameters are documented in the schema. Only the shape of the preview response is left unstated, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the enum values plus the confirmer preview/execute semantics are already spelled out in the property descriptions. The description restates the confirmer behavior rather than adding syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ("Passe un membre de l'équipe en employé ou en responsable") and names the two allowed target states, so the operation is unambiguous. It does not explicitly contrast itself with nearby siblings like inviter_membre or retirer_membre, but the purpose is inherently distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the prerequisite ("Réservé au propriétaire") and prescribes the workflow: preview with confirmer=false first, then act only "après accord explicite de la personne." It doesn't name alternatives or exclusions, but the when/how guidance is concrete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chercher_clientsChercher des clientsA
Read-onlyIdempotent
Inspect

Liste les clients du commerce selon un segment (habitués, perdus de vue, à un tampon de la récompense, récompense à offrir, nouveaux, inactifs, jamais revenus) croisé avec des filtres : prénom, tampons sur la carte, nombre de visites, date d’inscription, date de dernière visite, type de wallet ; triés et paginés. Rend pour chacun un identifiant, le prénom et l’initiale du nom, les visites, la dernière visite et l’état de la carte, jamais d’e-mail ni de téléphone. À utiliser pour « qui sont mes meilleurs clients ? », « qui n’est pas revenu ? », « qui est proche de sa récompense ? », ou pour retrouver l’identifiant d’un client avant fiche_client.

NameRequiredDescriptionDefault
triNoOrdre des résultats. Défaut derniere_visite (les plus récents d’abord).derniere_visite
ordreNoauto (défaut) : décroissant, sauf prenom (A→Z).auto
limiteNoNombre maximum de résultats.
walletNoOù le client garde sa carte. aucun = page web, sans wallet.tous
segmentNoGroupe de départ, défini comme dans l’application. tous (défaut) ; habitues = au moins 4 passages sur les 60 derniers jours ; perdus = venus au moins 4 fois, et absents depuis plus d’une fois et demie leur rythme habituel (médiane des écarts entre leurs passages), ou, sans assez d’historique, depuis plus de le délai du commerce ; congés et jours de fermeture non comptés ; presque = il ne leur manque qu’un tampon pour la récompense ; recompense_prete = une récompense gagnée, pas encore offerte, pas expirée ; nouveaux = inscrits dans les 30 derniers jours ; inactifs = aucun passage depuis plus de le délai du commerce, en jours calendaires, quel que soit leur nombre de visites ; un_seul_passage = un passage au plus : inscrits mais jamais revenus.tous
decalageNoNombre de résultats à sauter (pagination).
rechercheNoMorceau du prénom ou du nom (accents et casse ignorés).
tampons_maxNoTampons au plus sur la carte en cours.
tampons_minNoTampons au moins sur la carte en cours.
visites_maxNoPassages au plus depuis l’inscription.
visites_minNoPassages au moins depuis l’inscription (tampons de bienvenue exclus).
inscrit_avantNoInscrit ce jour-là ou avant (AAAA-MM-JJ).
inscrit_depuisNoInscrit ce jour-là ou après (AAAA-MM-JJ).
actif_depuis_joursNoAu moins un passage dans les N derniers jours.
inactif_depuis_joursNoAucun passage depuis au moins N jours calendaires (un client jamais venu compte depuis son inscription).
derniere_visite_avantNoDernier passage ce jour-là ou avant (AAAA-MM-JJ). Exclut ceux jamais venus.
derniere_visite_depuisNoDernier passage ce jour-là ou après (AAAA-MM-JJ).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, but the description adds a meaningful data-disclosure guarantee: it returns only id, prénom, initiale du nom, visites, dernière visite and card state, and "jamais d'e-mail ni de téléphone". That privacy boundary and the pagination/tri behavior are genuine additions. It stops short of 5 because it says nothing about volume limits beyond pagination or about empty-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then filters, then return shape, then usage — a sensible order with no filler sentences. It runs long as a single dense block and re-enumerates the segment list that the schema already defines, which is redundant for an agent that reads schemas.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 17 optional parameters and no output schema, the description carries the burden well: it discloses the exact fields returned, the privacy exclusions, and how sorting/pagination apply. Nothing material an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description names the filter dimensions (prénom, tampons, visites, dates, wallet) and glosses the segments in human terms ("habitués, perdus de vue, à un tampon..."), which helps map colloquial phrasing to enum values, but it adds no syntax or semantics beyond what the enum descriptions already spell out in detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb ("Liste") and resource ("les clients du commerce"), then states the two axes it operates on: segment and filters, plus sorting and pagination. It also distinguishes itself from fiche_client by positioning itself as the way to obtain a client identifier first, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger questions ("qui sont mes meilleurs clients ?", "qui n'est pas revenu ?", "qui est proche de sa récompense ?") and an explicit downstream handoff ("retrouver l'identifiant d'un client avant fiche_client"). This is real when-to-use guidance plus an alternative-tool routing rule, not implied usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

concevoir_carteConcevoir une carte de fidélitéA
Read-onlyIdempotent
Inspect

Dessine une carte de fidélité StampyWallet (Apple Wallet et Google Wallet) pour un commerce, sans compte et sans rien enregistrer. À utiliser quand quelqu’un veut une carte de fidélité, fidéliser ses clients, ou voir à quoi ressemblerait sa carte. Tous les paramètres sont facultatifs : sans eux, une carte adaptée au métier est proposée. Le logo (logo_url) et la photo de chaque récompense (paliers[].image_url) se donnent par leur adresse https ; ils sont montrés sur l’aperçu, sans être enregistrés. Rappeler l’outil avec les réglages rendus, modifiés, pour affiner. Quand la personne est satisfaite, proposer creer_commerce avec les mêmes réglages.

NameRequiredDescriptionDefault
nomNoNom du commerce, imprimé en haut de la carte.
modeNotampons : une récompense à un seuil (le plus simple). paliers : plusieurs récompenses sur la même carte (ex. 5 et 10). points : le commerçant saisit un nombre de points à chaque passage (paniers variables).
encreNoCouleur du texte de la carte, en hexadécimal (défaut : choisie pour rester lisible sur le fond).
formeNoLe dessin de la carte, en un mot (remplace forme_points et forme_paliers). Modes points et paliers : medailles (une jauge et une grande médaille par récompense), vitrine (les récompenses côte à côte, chacune sa jauge), remplissage (la prochaine récompense en grand, qui se colore), chemin (une route en S, chaque passage fait avancer le curseur), anneau (une jauge ronde autour de la prochaine récompense). Modes tampons et paliers : la disposition des tampons, grille (défaut), libre (semés), objets (gros objets ombrés, idéal avec une photo), cercles. En paliers, une disposition garde les tampons et pose chaque récompense à la place du tampon de son seuil. Une des cinq formes sans mode donné passe la carte en mode paliers.
accentNoCouleur d’accent : les tampons posés, les jauges, les étiquettes, en hexadécimal (défaut : tirée de la collection).
metierNoType de commerce. Choisit un style, un tampon et une récompense de départ adaptés quand ils ne sont pas précisés. ongles : ongles et cils ; institut : esthétique ; barbier : barbiers et coiffeurs ; patisserie : pâtisserie et chocolaterie ; snack : kebab, burger ; sushi : sushi et poke ; vrac : épicerie vrac ; cordonnerie : cordonnerie et clés ; lavage : lavage auto ; toilettage : toilettage d’animaux ; sport : salle de sport ; loisirs : escape game, bowling, laser game. « autre » : tout ce qui n’a pas son métier.
tamponNoLe signe posé à chaque passage. « rond » : le point simple. Beauté : etincelle, eclat, goutte, main, pinceau, oeil, ciseaux, sechoir, fleur, lotus, coeur, etoile, diamant, couronne, soleil, lune, talon, robe, sac, serviette. Food : cafe, grain, the, cookie, gateau, pain, part, burger, glace, bol, plat, verre, biere, bulles, cocktail, cerises, orange, avocat, piment, oeuf, poisson, fromage, popcorn, couteau, carotte, bocal, esquimau. Divers : feuille, flamme, eclair, sourire, patte, chien, chat, cadeau, haltere, velo, livre, note, appareil, palette, dent, parapluie, ballon, tshirt, basket, tulipe, plante, os, cintre, lavelinge, voiture, cle, botte, montagne, trophee, des, camion.
couleurNoCouleur de fond libre, en hexadécimal. L’encre (texte) est choisie automatiquement pour rester lisible.
paletteNoPalette de la collection : 0, 1 ou 2 (chaque collection en propose trois ; pass en propose une quatrième, 3). Ignorée si « couleur » est donnée.
paliersNoLes récompenses et leurs seuils (modes paliers et points). Du plus petit au plus grand.
tamponsNoNombre de passages pour obtenir la récompense (mode tampons), de 2 à 30.
logo_urlNoLogo du commerce, par son adresse https (PNG, JPEG ou WebP, 5 Mo au plus) : sa photo de profil Instagram fait l’affaire. Détouré quand c’est possible, posé en haut de la carte ; sans couleur, palette, encre ni accent donnés, la carte prend les couleurs du logo.
variantesNotrue : rend aussi les trois palettes de la collection choisie, pour proposer un choix.
collectionNoStyle de la carte : original (sobre), cafe (cadre fin), botanique (italique, feuillages), trattoria (festonné), atelier (moderne), pass (comme un pass Apple Wallet : logo en grand, tampons en objets ombrés, fond franc).
recompenseNoLa récompense (mode tampons). Ignorée si « paliers » est donné.
forme_pointsNoMode points : le dessin de la carte. medailles (défaut) : une jauge épaisse et une grande médaille par récompense. vitrine : les récompenses côte à côte, chacune sa petite jauge. remplissage : la prochaine récompense en grand, qui se colore à mesure. chemin : une route en S, les récompenses en étapes. anneau : une jauge ronde autour de la prochaine récompense, la liste à côté. Les photos des récompenses se déposent dans l’application, page Carte.
forme_paliersNoMode paliers : le dessin de la carte. tampons (défaut) : les tampons en grille, chaque récompense à la place du tampon de son seuil. Ou l’une des cinq formes des points, qui compte alors des tampons : medailles (une jauge et une médaille par récompense), vitrine (les récompenses côte à côte, chacune sa jauge), remplissage (la prochaine récompense en grand, qui se colore), chemin (une route en S où chaque tampon fait avancer le curseur), anneau (une jauge ronde autour de la prochaine récompense). Les photos des récompenses se déposent dans l’application, page Carte.
tampons_posesNoTampons déjà posés sur l’aperçu, pour montrer une carte en cours (défaut : tampons de bienvenue + 2).
nom_des_pointsNoMode points : comment s’appellent les points (« points », « graines », « étoiles »…).
tampons_bienvenueNoTampons offerts à l’inscription du client (0 à 5). 1 par défaut : une carte entamée donne envie d’être finie.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior: nothing is persisted, logo and reward images are displayed in the preview but not stored, and all parameters are optional with business-adapted defaults. It does not describe what the preview response actually contains (image, link, structured data), which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and scope, then usage, then defaults, then iteration, then handoff — a logical order with no filler. It is dense but every sentence carries a distinct instruction; only the image-URL sentence is slightly redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 20-parameter, zero-required, no-output-schema tool, the description covers the workflow, the optionality, the image handling and the follow-up tool. The one omission is the return value: with no output schema, the agent is not told whether the preview comes back as an image, a URL, or a structured card, which matters for relaying results to the user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 and the schema already carries the enum and format semantics. The description still adds value by explaining the optionality contract ('sans eux, une carte adaptée au métier est proposée') and by clarifying that logo_url and paliers[].image_url are https addresses shown in the preview without being saved — behavior the schema does not state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Dessine une carte de fidélité StampyWallet') plus the crucial scope constraint ('sans compte et sans rien enregistrer'). It also implicitly separates itself from creer_commerce by naming that sibling as the next step, so an agent can distinguish preview from creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger conditions are given ('quand quelqu’un veut une carte de fidélité, fidéliser ses clients, ou voir à quoi ressemblerait sa carte'), plus an iteration loop ('Rappeler l’outil avec les réglages rendus, modifiés') and a handoff rule to creer_commerce when satisfied. This is when/when-next guidance, not just implied usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

creer_commerceMettre la carte de fidélité en serviceAInspect

Crée le commerce sur StampyWallet avec la carte conçue (mêmes paramètres que concevoir_carte), et rend un lien personnel pour en devenir propriétaire : la personne clique, se connecte avec son e-mail, et retrouve tout en place (carte, QR à imprimer, essai gratuit). Le logo (logo_url) et la photo de chaque récompense (paliers[].image_url), donnés par leur adresse https, sont posés sur la carte. Sans compte. Appeler d’abord avec confirmer=false pour montrer le récapitulatif, puis avec confirmer=true une fois que la personne a dit oui.

NameRequiredDescriptionDefault
nomYesNom du commerce, imprimé en haut de la carte.
modeNotampons : une récompense à un seuil (le plus simple). paliers : plusieurs récompenses sur la même carte (ex. 5 et 10). points : le commerçant saisit un nombre de points à chaque passage (paniers variables).
encreNoCouleur du texte de la carte, en hexadécimal (défaut : choisie pour rester lisible sur le fond).
formeNoLe dessin de la carte, en un mot (remplace forme_points et forme_paliers). Modes points et paliers : medailles (une jauge et une grande médaille par récompense), vitrine (les récompenses côte à côte, chacune sa jauge), remplissage (la prochaine récompense en grand, qui se colore), chemin (une route en S, chaque passage fait avancer le curseur), anneau (une jauge ronde autour de la prochaine récompense). Modes tampons et paliers : la disposition des tampons, grille (défaut), libre (semés), objets (gros objets ombrés, idéal avec une photo), cercles. En paliers, une disposition garde les tampons et pose chaque récompense à la place du tampon de son seuil. Une des cinq formes sans mode donné passe la carte en mode paliers.
accentNoCouleur d’accent : les tampons posés, les jauges, les étiquettes, en hexadécimal (défaut : tirée de la collection).
langueNoLangue des textes rendus. Par défaut, celle du commerce.
metierNoType de commerce. Choisit un style, un tampon et une récompense de départ adaptés quand ils ne sont pas précisés. ongles : ongles et cils ; institut : esthétique ; barbier : barbiers et coiffeurs ; patisserie : pâtisserie et chocolaterie ; snack : kebab, burger ; sushi : sushi et poke ; vrac : épicerie vrac ; cordonnerie : cordonnerie et clés ; lavage : lavage auto ; toilettage : toilettage d’animaux ; sport : salle de sport ; loisirs : escape game, bowling, laser game. « autre » : tout ce qui n’a pas son métier.
tamponNoLe signe posé à chaque passage. « rond » : le point simple. Beauté : etincelle, eclat, goutte, main, pinceau, oeil, ciseaux, sechoir, fleur, lotus, coeur, etoile, diamant, couronne, soleil, lune, talon, robe, sac, serviette. Food : cafe, grain, the, cookie, gateau, pain, part, burger, glace, bol, plat, verre, biere, bulles, cocktail, cerises, orange, avocat, piment, oeuf, poisson, fromage, popcorn, couteau, carotte, bocal, esquimau. Divers : feuille, flamme, eclair, sourire, patte, chien, chat, cadeau, haltere, velo, livre, note, appareil, palette, dent, parapluie, ballon, tshirt, basket, tulipe, plante, os, cintre, lavelinge, voiture, cle, botte, montagne, trophee, des, camion.
couleurNoCouleur de fond libre, en hexadécimal. L’encre (texte) est choisie automatiquement pour rester lisible.
paletteNoPalette de la collection : 0, 1 ou 2 (chaque collection en propose trois ; pass en propose une quatrième, 3). Ignorée si « couleur » est donnée.
paliersNoLes récompenses et leurs seuils (modes paliers et points). Du plus petit au plus grand.
tamponsNoNombre de passages pour obtenir la récompense (mode tampons), de 2 à 30.
logo_urlNoLogo du commerce, par son adresse https (PNG, JPEG ou WebP, 5 Mo au plus) : sa photo de profil Instagram fait l’affaire. Détouré quand c’est possible, posé en haut de la carte ; sans couleur, palette, encre ni accent donnés, la carte prend les couleurs du logo.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
collectionNoStyle de la carte : original (sobre), cafe (cadre fin), botanique (italique, feuillages), trattoria (festonné), atelier (moderne), pass (comme un pass Apple Wallet : logo en grand, tampons en objets ombrés, fond franc).
recompenseNoLa récompense (mode tampons). Ignorée si « paliers » est donné.
forme_pointsNoMode points : le dessin de la carte. medailles (défaut) : une jauge épaisse et une grande médaille par récompense. vitrine : les récompenses côte à côte, chacune sa petite jauge. remplissage : la prochaine récompense en grand, qui se colore à mesure. chemin : une route en S, les récompenses en étapes. anneau : une jauge ronde autour de la prochaine récompense, la liste à côté. Les photos des récompenses se déposent dans l’application, page Carte.
panier_moyenNoDépense moyenne d’un client, en euros (sert aux estimations du tableau de bord).
forme_paliersNoMode paliers : le dessin de la carte. tampons (défaut) : les tampons en grille, chaque récompense à la place du tampon de son seuil. Ou l’une des cinq formes des points, qui compte alors des tampons : medailles (une jauge et une médaille par récompense), vitrine (les récompenses côte à côte, chacune sa jauge), remplissage (la prochaine récompense en grand, qui se colore), chemin (une route en S où chaque tampon fait avancer le curseur), anneau (une jauge ronde autour de la prochaine récompense). Les photos des récompenses se déposent dans l’application, page Carte.
nom_des_pointsNoMode points : comment s’appellent les points (« points », « graines », « étoiles »…).
tampons_bienvenueNoTampons offerts à l’inscription du client (0 à 5). 1 par défaut : une carte entamée donne envie d’être finie.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the auth model ('Sans compte' — the recipient clicks and signs in with their e-mail), what the returned link unlocks (card, printable QR, free trial), and that logo/photo URLs are fetched and placed on the card. It also explains that confirmer=false produces a preview with no changes, which is the key side-effect distinction for a non-readOnly, non-idempotent creation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The creation action and its outcome come first, then image handling, then the confirmation workflow — a sensible order with no filler. The opening sentence is long and packs the link flow, QR and free trial into one clause, which slightly blurs the front-loading but wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 21-parameter creation tool with no output schema, the description compensates by describing the return value (the personal ownership link and what the recipient sees) and the preview/execute split. Combined with 100% schema coverage, an agent has everything needed to call it correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including the large enums (forme, tampon, metier, paliers) is already fully documented in the schema, and the confirmer semantics in the description merely restate the schema. The only added value is the note that parameters mirror 'concevoir_carte' and that logo_url/paliers[].image_url are fetched over https — useful but marginal. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Crée le commerce sur StampyWallet avec la carte conçue') plus the outcome ('rend un lien personnel pour en devenir propriétaire'). It explicitly anchors itself to the sibling 'concevoir_carte' ('mêmes paramètres que concevoir_carte'), so an agent can tell design-a-card apart from create-the-business without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit call sequence: call first with confirmer=false to show the recap, then with confirmer=true only after the person agrees. That is concrete operational guidance rather than implied usage. It stops short of stating when *not* to use this (e.g. when only a card design is wanted, use concevoir_carte) — that routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

envoyer_affichetteRecevoir l’affichette par e-mailA
Destructive
Inspect

Envoie l’affichette de comptoir (PDF A5 et A6, avec le QR d’inscription des clients) à l’adresse e-mail du compte StampyWallet connecté, pour l’imprimer depuis un autre appareil ou chez un imprimeur. Seulement à cette adresse, jamais à une autre. Appeler avec confirmer=false (défaut) pour annoncer l’envoi, puis confirmer=true après accord.

NameRequiredDescriptionDefault
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and openWorldHint=true, but the description adds what annotations cannot: nothing changes with confirmer=false, the recipient is restricted to the connected account's address (never arbitrary), and the announce-then-confirm protocol. It does not contradict the annotations — the 'destructive' flag is conservative for a self-addressed send, and the description makes the actual effect explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is sent and where, then the recipient constraint, then the confirmation protocol. Every sentence carries a distinct, actionable constraint; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation with no output schema, the description covers content, format, recipient restriction, and the mandatory confirmation sequence — enough to invoke correctly. It could say what the tool returns after a successful send (success message, delivery caveats), but that is a minor omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema property already spells out the confirmer preview/execute semantics, so the baseline is 3. The description reinforces the parameter's place in the workflow ("Appeler avec confirmer=false (défaut) pour annoncer l'envoi, puis confirmer=true après accord"), adding flow context rather than new syntax, so slightly above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Envoie l'affichette de comptoir") plus the exact content and channel (PDF A5/A6 with inscription QR, sent by e-mail). It is distinguishable from the sibling 'affichette' by the delivery channel, though the sibling is never named explicitly to make the contrast airtight.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear use case ("pour l'imprimer depuis un autre appareil ou chez un imprimeur") and a hard constraint ("Seulement à cette adresse, jamais à une autre"), plus the ordering of the two-step confirmation. It stops short of routing the agent to a named alternative (e.g. 'affichette' for on-screen preview).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

envoyer_messageEnvoyer un message aux clientsA
Destructive
Inspect

Envoie une notification sur l’écran verrouillé des clients (via leur carte Apple Wallet ou Google Wallet). À utiliser pour annoncer une nouveauté, une offre, un événement, ou faire revenir des clients. L’audience est paramétrable (tous, habitués, perdus de vue, presque à la récompense, nouveaux, récompense à retirer, inactifs) et se combine avec des filtres (jours sans passage, tampons sur la carte, passages, date d’inscription). Texte de 180 caractères au plus, envoyé tel quel. Un seul message par jour et par commerce. AVEC client_id (rendu par chercher_clients) : un message à CE client seul, par exemple « votre commande est prête » (pressing, cordonnerie, traiteur, fleuriste) : un modèle prêt (modele = pret, retrait, recu, attente), ou texte + modele=libre ; en option aussi_sms et aussi_email. Il ne compte pas dans le message du jour à tous ; deux par client et par jour au plus. Appeler d’abord avec confirmer=false : l’aperçu donne le texte exact, le nombre de destinataires et combien peuvent vraiment le recevoir, sans rien envoyer. N’appeler avec confirmer=true qu’après l’accord explicite de la personne : un message parti ne se reprend pas. Pour les messages automatiques (relance, anniversaire, rappels), utiliser regler_automatismes.

NameRequiredDescriptionDefault
texteNoLe texte exact de la notification, 180 caractères au plus. Il est précédé du nom du commerce sur le téléphone : inutile de le répéter. Obligatoire sans client_id ; avec client_id, seulement pour modele=libre.
langueNoAvec client_id et un modèle : la langue du texte prêt. Par défaut, celle du commerce.
modeleNoAvec client_id : pret = « Votre commande est prête… », retrait = « Votre article est prêt à être retiré… », recu = « Nous avons bien reçu votre commande… », attente = « Votre commande vous attend toujours… », libre = le texte donné. Par défaut : libre si texte est donné.
audienceNoQui reçoit le message. tous = tous les clients ; habitues = 4 passages ou plus sur 60 jours ; perdus = habitués dont l’absence dépasse une fois et demie leur rythme habituel, ou le délai du commerce sans assez d’historique (la définition de l’écran Clients) ; presque = il ne manque qu’un tampon avant la récompense ; nouveaux = inscrits depuis 30 jours (ou depuis inscrit_depuis) ; recompense_prete = une récompense gagnée, pas encore retirée ; inactifs = tout client sans passage depuis inactif_depuis_jours jours d’ouverture (par défaut le délai du commerce), habitué ou non. Toute audience autre que tous, ou tout filtre, demande la fonction « notifications ciblées ».tous
aussi_smsNoAvec client_id : aussi par SMS (formule Croissance, budget du mois, entre 8 h et 20 h, sinon à l’ouverture). Défaut false.
client_idNoIdentifiant (UUID) d’UN client, rendu par chercher_clients ou fiche_client : le message part à lui seul. Exclut audience et filtres.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
aussi_emailNoAvec client_id : aussi par e-mail, si le client en a laissé un. Défaut false.
tampons_maxNoFiltre : au plus N tampons sur la carte en cours.
tampons_minNoFiltre : au moins N tampons sur la carte en cours.
passages_minNoFiltre : au moins N passages au total depuis l’inscription.
inscrit_avantNoFiltre : inscrits avant ce jour-là (AAAA-MM-JJ, exclu).
inscrit_depuisNoFiltre : inscrits ce jour-là ou après (AAAA-MM-JJ).
actif_depuis_joursNoFiltre : au moins un passage dans les N derniers jours d’ouverture.
inactif_depuis_joursNoFiltre : pas de passage depuis au moins N jours d’OUVERTURE (les jours fermés et les congés ne comptent pas).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, it discloses critical behavioral traits: one message per day per commerce, two per client per day when using `client_id`, that single-client messages do not count toward the daily broadcast limit, that `confirmer=false` returns an exact preview with recipient counts, and that a sent message cannot be recalled ('un message parti ne se reprend pas'). These details materially affect safe invocation and align with the destructive/non-idempotent annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph that front-loads purpose and then layers audience, filters, client-specific mode, preview workflow, and alternatives. It is efficient for a 15-parameter tool, though it could be more scannable with structure; some audience definitions repeat schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (15 parameters, destructive mutation, no output schema), the description covers everything an agent needs: audience definitions, filter combinations, single-client flow, preview/confirmation requirements, daily limits, and the alternative for automated messages. No critical gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already defines each parameter thoroughly. The description adds cross-parameter semantics: `client_id` excludes `audience` and filters, `modele` applies only with `client_id`, and the confirmation flow. It does not add much new per-parameter detail beyond the schema, but the relational guidance is valuable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Envoie une notification sur l’écran verrouillé des clients (via leur carte Apple Wallet ou Google Wallet)'. It distinguishes the tool from siblings by naming `regler_automatismes` for automated messages and `chercher_clients` as the source of `client_id`, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use cases ('annoncer une nouveauté, une offre, un événement, ou faire revenir des clients') and clear when-not/alternatives ('Pour les messages automatiques… utiliser regler_automatismes'). It also specifies the two invocation modes (broadcast with audience/filters vs. single-client with `client_id`) and mandates a preview-first workflow with `confirmer=false` before `confirmer=true`.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fiche_clientFiche d’un clientA
Read-onlyIdempotent
Inspect

L’historique d’UN client : date d’inscription, wallet utilisé, nombre de passages et rythme de visite, passages mois par mois, carte en cours, récompenses gagnées, offertes et à offrir, derniers passages datés. Le retrouver par son identifiant (donné par chercher_clients) ou par son prénom, éventuellement suivi de l’initiale du nom (« Maëlle P. ») ; si plusieurs clients correspondent, la liste des candidats est rendue pour choisir. À utiliser pour « quand est venue Zoé pour la dernière fois ? », « combien de fois Louis est-il venu ? ». Ne donne ni e-mail ni téléphone.

NameRequiredDescriptionDefault
idNoIdentifiant du client (UUID), tel que rendu par chercher_clients. Prioritaire sur prenom.
moisNoNombre de mois dans la courbe des passages (défaut 12).
prenomNoPrénom du client, éventuellement suivi de l’initiale ou du nom (« Maëlle P. »). Accents et casse ignorés.
inclure_offertsNotrue : l’historique montre aussi les tampons offerts (bienvenue, avis), signalés comme tels. Défaut false : seulement les vrais passages.
historique_limiteNoNombre de passages récents à détailler (défaut 15).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive, and closed-world behavior, so the description only needs to add context. It does so by describing returned history fields, candidate-list behavior for ambiguous names, and the fact that contact details are excluded. It does not discuss errors or rate limits, but those are less critical here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core resource and remains information-dense without obvious filler. It is somewhat long and run-on due to field enumeration and multiple clauses, but nearly every sentence carries useful selection or return-value context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and read-only annotations, the description carries the burden of explaining return content, and it does: it lists the history fields, explains ambiguous-name candidate output, and notes the contact-detail exclusion. It is complete enough for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some lookup semantics beyond the schema, especially that the id comes from chercher_clients and that multiple name matches produce a candidate list, but it does not explain mois, inclure_offerts, or historique_limite beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: the history of ONE client, then enumerates the exact data returned (registration date, wallet, visit counts/rhythm, current card, rewards, recent visits). It clearly distinguishes this from the sibling search tool by noting that the identifier comes from chercher_clients and that ambiguous names return candidates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use examples such as “quand est venue Zoé pour la dernière fois ?” and “combien de fois Louis est-il venu ?”, explains lookup by id or first name/initial, and covers the ambiguity case by returning candidate clients. It also states a useful exclusion: no e-mail or phone is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fiche_commerceFiche du commerceA
Destructive
Inspect

Lit ou modifie la fiche du commerce : nom, type de commerce, panier moyen (sert aux estimations du tableau de bord), langue des clients, coordonnées imprimées au dos de la carte (adresse, téléphone, horaires, site web, message de bienvenue), lien public d’inscription des clients (stampywallet.com/rejoindre/, celui du QR), et les lieux où la carte se présente quand un client passe devant (jusqu’à 10 : boutique, marché, emplacement de food truck), avec leurs jours et horaires. Sans paramètre de changement : rend la fiche actuelle. Avec des changements : confirmer=false (défaut) montre l’avant/après, confirmer=true écrit après accord explicite. Un ancien lien public continue de fonctionner après un changement (les QR déjà imprimés restent bons).

NameRequiredDescriptionDefault
nomNoNom du commerce (aussi imprimé sur la carte).
lienNoLien public voulu, en clair (« Le Fournil de la Gare » devient « le-fournil-de-la-gare »), de 3 à 32 caractères. Un lien déjà pris par un autre commerce est refusé.
langueNoLangue du commerce : celle de la carte, des pages et des messages vus par les clients.
metierNoType de commerce, l’un des métiers de l’inscription. « autre » : tout ce qui n’a pas son métier.
adresseNoAdresse, au dos de la carte (160 caractères au plus).
effacerNoChamps à vider. « lien » : l’adresse publique redevient l’identifiant technique (le lien reste réservé à ce commerce).
horairesNoHoraires d’ouverture, en texte libre (ex. « Mar–sam 7 h–19 h »).
site_webNoSite web ou page Instagram.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
telephoneNoTéléphone, au dos de la carte.
panier_moyenNoDépense moyenne d’un client par passage, en euros.
lieux_ajouterNoLieux à ajouter pour l’alerte de proximité (la carte se présente quand un client passe devant) : marché, emplacement d’un food truck… 10 lieux au plus en tout, adresse principale comprise. Chacun avec une adresse ou des coordonnées.
lieux_retirerNoLieux à retirer, par identifiant. « principal » retire seulement le point de l’adresse (il revient si l’adresse change).
lieux_modifierNoLieux à renommer, déplacer (adresse ou coordonnées) ou replanifier (jours, plage). Les jours donnés remplacent les anciens ; sans jours ni heures, le planning ne change pas.
message_bienvenueNoPetit mot au dos de la carte, lu par le client en l’ajoutant.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, and the description earns extra credit by explaining the preview/confirm workflow that governs any destruction, plus the important non-obvious guarantee that an old public link keeps working after a change so already-printed QR codes stay valid. It also discloses that lieu addresses are geocoded (BAN/OSM) and shown in the preview, matching openWorldHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with scope, then the read/write semantics, then the link-persistence caveat — every sentence conveys something operationally useful. The first sentence is dense and long, partly restating field names that the schema already lists, which keeps it just short of ideal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter, no-required-parameter tool with no output schema, the description covers the critical unknowns: read vs. write mode, the mandatory preview-before-write protocol, and what changing the public link does not break. An agent has enough to call it correctly and safely without opening the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: why panier_moyen exists (dashboard estimations), the concrete shape of the public link (stampywallet.com/rejoindre/<lien>, used by the QR) and its persistence, and the 10-lieu cap including the main address. It does not re-explain field-level constraints already carried by the schema, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a precise verb pair and resource ('Lit ou modifie la fiche du commerce') and then enumerates every field class it governs, so an agent knows this is the shop-profile tool, not the loyalty-card design tool. It never names a sibling (modifier_carte, voir_carte, creer_commerce) explicitly, so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly states the two operating modes: with no change parameters it returns the current fiche, with change parameters it previews by default (confirmer=false) and only writes with confirmer=true after explicit human agreement. This is actionable guidance on when to call and how, but there is no comparison to sibling tools that might also read or alter shop data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

historique_messagesHistorique des messagesA
Read-onlyIdempotent
Inspect

Liste les messages déjà envoyés aux clients, du plus récent au plus ancien, avec leur bilan de remise : reçus, clients sans écran (injoignables), échecs, et encore en cours d’envoi. Résume aussi les messages automatiques partis sur la période (relances des perdus de vue, anniversaires) et dit si un message peut encore partir aujourd’hui. À utiliser pour savoir ce qui a été envoyé, vérifier qu’un envoi est bien arrivé, ou avant d’en écrire un nouveau.

NameRequiredDescriptionDefault
depuisNoSeulement les envois à partir de ce jour (AAAA-MM-JJ). Sert aussi de début de période pour le résumé des automatiques (30 derniers jours par défaut).
limiteNoNombre maximum de résultats.
decalageNoNombre de résultats à sauter (pagination).
jusqu_auNoSeulement les envois jusqu’à ce jour inclus (AAAA-MM-JJ).

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds real value by disclosing sort order, the four delivery-status buckets, the automatic-message summary over the period, and the 'can a message still go out today' signal. It does not mention pagination behavior or result size limits, which the schema only partially covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and result content, then closes with usage guidance. It is somewhat long, but each clause carries distinct information (ordering, status buckets, automatic summary, usage triggers) rather than restating the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must convey return content, and it does: per-message delivery status plus an aggregate summary of automatic messages and a same-day sendability indicator. Only pagination/truncation behavior and the shape of the summary are left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (depuis, jusqu_au, limite, decalage) are already documented, including the default 30-day window for the automatic summary. The description itself adds no parameter-level detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Liste les messages déjà envoyés aux clients') plus ordering (du plus récent au plus ancien) and the exact content of the result (bilan de remise: reçus, sans écran, échecs, en cours). This clearly separates it from envoyer_message and lister_messages_recurrents, which deal with composing or recurring templates rather than sent history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives three concrete use cases: knowing what was sent, verifying delivery, and checking before writing a new message. That last clause implicitly routes the agent to envoyer_message afterwards, but no sibling is named explicitly and no exclusion ('ne pas utiliser pour…') is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inviter_membreInviter un membre de l’équipeA
Destructive
Inspect

Crée une invitation personnelle valable 14 jours, comme employé (scanner seulement) ou responsable (chiffres, clients, messages, carte). Avec « email », elle part par e-mail à la personne ; sinon le lien est rendu pour être transmis. Nommer un propriétaire se fait dans l’application. Réservé au propriétaire. confirmer=false (défaut) rend un aperçu ; confirmer=true agit, après accord explicite de la personne.

NameRequiredDescriptionDefault
nomNoRepère pour s’y retrouver dans les invitations (ex. « Julie, le matin »).
roleNostaff (défaut) = employé, ne voit que le scanner ; manager = responsable, voit chiffres, clients, messages et règle la carte.
emailNoAdresse de la personne invitée : l’invitation lui est envoyée par e-mail. Sans adresse, le lien est rendu.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, destructive and open-world, so the description adds real value beyond that: the 14-day validity, e-mail versus returned link delivery, role-scoped visibility, owner-only authorisation, and the preview/confirm protocol with the requirement of explicit consent. These are traits an agent could not infer from the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the two role scopes are front-loaded, followed by delivery mode, ownership and the confirmation protocol. It is dense but well ordered; a few clauses duplicate what the schema fields already say, which keeps it just below top marks.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four well-documented params and no output schema, the description covers permissions, delivery, role semantics, expiry and the safety protocol. It never says what the preview contains or whether the returned link can be re-retrieved, which is a minor remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains nom, role, email and confirmer in detail; the description largely restates the same role and e-mail semantics. Baseline 3 applies, with only the owner-assignment aside as marginally new information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: creating a personal invitation valid for 14 days, with the two role options and the two delivery modes named. An agent can tell it apart from siblings such as annuler_invitation, changer_role_membre or lister_equipe without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the prerequisite (owner only), the out-of-scope case (naming an owner happens in the app), and the two-step workflow: preview with confirmer=false, then act with confirmer=true only after explicit consent. It does not point to the sibling used to cancel or list invitations, so the alternative routing is not complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lister_equipeVoir l’équipeA
Read-onlyIdempotent
Inspect

Liste l’équipe du commerce (nom, e-mail, rôle, tampons posés) et les invitations en attente avec leur lien. Ne change rien. Réservé au propriétaire.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish read-only, idempotent, non-destructive, and closed-world behavior, so the description does not need to repeat safety basics. It adds useful context beyond annotations by stating the owner-only access restriction and summarizing the returned data, though it does not discuss ordering, pagination, or link sensitivity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence with the main purpose front-loaded, followed by returned fields and access restrictions. Every clause contributes useful information without wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, rich annotations, and no output schema, the definition is complete enough for an agent to invoke it correctly. The description supplies the key operational context: what is returned and that access is owner-only.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there are no parameter semantics to explain. The baseline for a parameterless tool applies, and the description appropriately avoids unnecessary parameter discussion.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: listing the commerce team and pending invitations. It also enumerates returned fields (name, email, role, stamps, invitation link), which clearly distinguishes it from sibling mutation tools such as inviter_membre, changer_role_membre, and annuler_invitation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states an important access condition, “Réservé au propriétaire,” and reinforces that it is read-only with “Ne change rien.” However, it does not explicitly say when to use this tool instead of related siblings like fiche_commerce, tableau_de_bord, or the member-management tools, leaving usage largely implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lister_fermeturesVoir les congés et fermeturesA
Read-onlyIdempotent
Inspect

Liste les congés du commerce (à venir et des deux derniers mois, avec leur id) et les jours fermés chaque semaine. Ne change rien. Les jours fermés ne comptent pas dans l’absence d’un client : des congés bien déclarés évitent que des habitués passent pour « perdus de vue » et reçoivent une relance au retour.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the domain rule is the real contribution: closed days do not count toward a client's absence, which changes how the returned data should be interpreted downstream. 'Ne change rien' partly restates readOnlyHint, but the interpretive caveat about 'perdus de vue' clients is genuine context the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with what is listed, then the read-only reassurance, then the domain caveat. The final sentence is long and rationale-heavy, but it earns its space because it explains the business consequence of undeclared holidays.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, no output schema and safety already covered by annotations, the description covers what an agent needs: what is listed, the time window, that ids are included, and that nothing is mutated. The only gap is the shape of the response (fields per congé, representation of weekly closures), which an output schema would otherwise have supplied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters with a schema that forbids additional properties, so there is nothing for the description to disambiguate. Baseline of 4 applies; the mention that results carry an id is a small but relevant hint about the returned records.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Liste') and two concrete resources (congés du commerce, jours fermés chaque semaine) with a scope qualifier (upcoming plus the last two months, with their id). It is clearly distinguished from the mutating siblings ajouter_conges / supprimer_conges / regler_jours_fermes by the 'list' semantics, though it never names those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies clear situational context — read-only inspection of declared holidays and weekly closed days — and states 'Ne change rien' to keep an agent from confusing it with the write siblings. It stops short of explicitly saying when to choose this over e.g. fiche_commerce or tableau_de_bord, so there are no explicit exclusions or named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lister_messages_recurrentsVoir les messages récurrentsA
Read-onlyIdempotent
Inspect

Liste les messages récurrents du commerce (actifs et en pause), avec leur id, leur rythme, le groupe visé et le prochain envoi. Ne change rien.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so 'Ne change rien' largely restates structured data. The description does add value by naming the returned fields (id, rythme, groupe visé, prochain envoi), which matters since there is no output schema, but it says nothing about volume, pagination or ordering of the list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the resource and scope, then lists the payload, closed by a one-clause safety note. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no params, no output schema and rich annotations, the description covers the essentials, and the field enumeration substitutes for a missing output schema. It falls short only on list behavior (ordering, whether paused items are interleaved) and on routing to the mutation siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain; the baseline applies. The description correctly gives no parameter discussion, avoiding noise.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb+resource ('Liste les messages récurrents du commerce') and narrows the scope (actifs et en pause), then enumerates what each entry carries. It never names a sibling to contrast with, so an agent must infer the boundary with outils like historique_messages or modifier_message_recurrent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trailing 'Ne change rien' implies a read-only consultation context, but there is no explicit when-to-use or when-not-to-use guidance, and no pointer to the state-changing siblings (suspendre_message_recurrent, reprendre_message_recurrent, arreter_message_recurrent) that an agent would need when the user's intent is to modify rather than view.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

meilleurs_momentsMeilleurs jours et heuresA
Read-onlyIdempotent
Inspect

Montre quand les clients viennent : moyenne de passages par jour de la semaine, répartition par heure, ou les créneaux (jour + heure) les plus chargés, sur une période au choix et à l’heure locale du commerce. Peut aussi compter les inscriptions de nouveaux clients. À utiliser pour « quel est mon meilleur jour ? », « à quelle heure ai-je le plus de monde ? », « quand lancer une offre pour remplir un creux ? ».

NameRequiredDescriptionDefault
auNoDernier jour inclus (AAAA-MM-JJ). Défaut : aujourd’hui.
duNoPremier jour inclus (AAAA-MM-JJ). Le donner suffit : la période devient « personnalisee ».
parNojour_semaine (défaut) : moyenne par lundi, mardi… ; heure : total par heure de la journée ; creneau : les couples jour + heure les plus chargés.jour_semaine
joursNoPour par=heure ou creneau : ne garder que ces jours de la semaine (ex. ["samedi"]).
limiteNoPour par=creneau : nombre de créneaux rendus (défaut 10).
mesureNopassages (défaut) ou nouveaux_clients (inscriptions à la carte).passages
periodeNoPériode étudiée, en jours du fuseau du commerce, aujourd’hui inclus pour les périodes en cours (ce_mois = du 1er à aujourd’hui). « personnalisee » utilise du/au. Défaut derniers_90_jours.derniers_90_jours

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior, so safety is covered. The description adds valuable operational context: results are in the shop's local time, periods are configurable, and current periods include today. It does not explain how averages are computed or whether zero-visit days are included, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it opens with what the tool shows, then the aggregation modes, then the secondary measure, then usage examples. Every sentence carries information. Slightly dense with three example questions, but still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and seven optional parameters, the description explains what kinds of outputs to expect (weekday averages, hourly distribution, busiest slots) and the measures available. It omits detail on the result shape per mode, but for a read-only analytics tool it is largely sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter including the three enums is already documented in the schema. The description does not add syntax or format details beyond what the schema provides; it only restates the three aggregation modes at a high level. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific capability – showing when customers visit, broken down by weekday average, hour distribution, or busiest day+hour slots – and adds a secondary measure (new signups). The verb and resource are unambiguous, and it is clearly distinct from siblings like tableau_dashboard or rentabilite which deal with other analytics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool includes three concrete example questions ('quel est mon meilleur jour ?', 'à quelle heure ai-je le plus de monde ?', 'quand lancer une offre pour remplir un creux ?') that anchor when to use it. It lacks explicit when-not-to-use guidance or named alternatives (e.g., contrast with tableau_de_bord), which keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modifier_carteModifier ma carte de fidélitéA
Destructive
Inspect

Change un ou plusieurs réglages de la carte de fidélité du commerce, en un seul appel : nom imprimé, style (collection, palette ou couleur libre), tampon, règle de récompense (mode tampons/paliers/points, seuils, récompenses), tampons offerts à l’inscription, expiration des récompenses, en mode paliers la forme de la carte (forme_paliers : tampons ou l’une des cinq formes), et en mode points le nom des points, la forme de la carte (forme_points), la valeur par défaut d’un passage, les raccourcis et les points par euro. Seuls les réglages donnés changent ; lire d’abord la carte avec voir_carte. Appeler avec confirmer=false (défaut) pour montrer l’avant/après, puis avec confirmer=true après accord explicite. Un changement de règle s’applique aussi aux cartes déjà chez les clients. Les images (logo, fond, tampon en image) se changent dans l’application, page Carte.

NameRequiredDescriptionDefault
nomNoNom du commerce, imprimé en haut de la carte.
modeNotampons : une récompense à un seuil (le plus simple). paliers : plusieurs récompenses sur la même carte (ex. 5 et 10). points : le commerçant saisit un nombre de points à chaque passage (paniers variables).
tamponNoLe signe posé à chaque passage. « rond » : le point simple. Beauté : etincelle, eclat, goutte, main, pinceau, oeil, ciseaux, sechoir, fleur, lotus, coeur, etoile, diamant, couronne, soleil, lune, talon, robe, sac, serviette. Food : cafe, grain, the, cookie, gateau, pain, part, burger, glace, bol, plat, verre, biere, bulles, cocktail, cerises, orange, avocat, piment, oeuf, poisson, fromage, popcorn, couteau, carotte, bocal, esquimau. Divers : feuille, flamme, eclair, sourire, patte, chien, chat, cadeau, haltere, velo, livre, note, appareil, palette, dent, parapluie, ballon, tshirt, basket, tulipe, plante, os, cintre, lavelinge, voiture, cle, botte, montagne, trophee, des, camion.
couleurNoCouleur de fond libre, en hexadécimal. L’encre (texte) est choisie automatiquement pour rester lisible.
paletteNoPalette de la collection : 0, 1 ou 2 (chaque collection en propose trois ; pass en propose une quatrième, 3). Ignorée si « couleur » est donnée.
paliersNoLes récompenses et leurs seuils (modes paliers et points). Du plus petit au plus grand.
tamponsNoNombre de passages pour obtenir la récompense (mode tampons), de 2 à 30.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
collectionNoStyle de la carte : original (sobre), cafe (cadre fin), botanique (italique, feuillages), trattoria (festonné), atelier (moderne), pass (comme un pass Apple Wallet : logo en grand, tampons en objets ombrés, fond franc).
recompenseNoLa récompense (mode tampons). Ignorée si « paliers » est donné.
forme_pointsNoMode points : le dessin de la carte. medailles (défaut) : une jauge épaisse et une grande médaille par récompense. vitrine : les récompenses côte à côte, chacune sa petite jauge. remplissage : la prochaine récompense en grand, qui se colore à mesure. chemin : une route en S, les récompenses en étapes. anneau : une jauge ronde autour de la prochaine récompense, la liste à côté. Les photos des récompenses se déposent dans l’application, page Carte.
forme_paliersNoMode paliers : le dessin de la carte. tampons (défaut) : les tampons en grille, chaque récompense à la place du tampon de son seuil. Ou l’une des cinq formes des points, qui compte alors des tampons : medailles (une jauge et une médaille par récompense), vitrine (les récompenses côte à côte, chacune sa jauge), remplissage (la prochaine récompense en grand, qui se colore), chemin (une route en S où chaque tampon fait avancer le curseur), anneau (une jauge ronde autour de la prochaine récompense). Les photos des récompenses se déposent dans l’application, page Carte.
nom_des_pointsNoMode points : comment s’appellent les points (« points », « graines », « étoiles »…).
points_par_euroNoMode points : points par euro dépensé, repère affiché au commerçant (ex. 1 ou 0,5).
points_par_defautNoMode points : points posés par défaut à chaque passage (1 à 100 000).
points_raccourcisNoMode points : les valeurs proposées d’un geste au scan (jusqu’à 6, triées et dédoublonnées). Ex. [1, 2, 5, 10].
tampons_bienvenueNoTampons offerts à l’inscription du client (0 à 5). 1 par défaut : une carte entamée donne envie d’être finie.
expiration_recompense_joursNoJours pendant lesquels une récompense gagnée reste valable : 0, 30, 60, 90, 180, 365 (0 = n’expire pas).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true, idempotent=false and readOnly=false; the description adds important behavioral context beyond them: only supplied settings change, rule changes affect cards already held by customers, and changes should first be previewed. The preview/confirmation contract is especially valuable for a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized for a complex 18-parameter mutation and is front-loaded with purpose, prerequisites and confirmation workflow. However, it is a dense single paragraph rather than structured bullets, making the mode-specific parameter groups harder to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity, annotations and lack of output schema, the description covers what an agent needs: scope, preview-before-commit, read-first guidance, propagation to existing customer cards, and what is out of scope. No critical decision information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 18 parameters are already well documented in the input schema. The description restates the parameter groups and mode-specific forms, but adds little parameter meaning beyond the schema apart from saying that only provided settings change.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (modifier) and resource (carte de fidélité) plus the exact settings that can change, so the tool is clearly distinguishable from voir_carte and from unrelated siblings. It also explicitly frames this as a multi-setting modification in a single call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit workflow: read first with voir_carte, call with confirmer=false to show the before/after, then call with confirmer=true only after explicit agreement. It also says images must be changed elsewhere in the app, page Carte, which correctly excludes part of the resource from this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modifier_message_recurrentModifier un message récurrentA
Destructive
Inspect

Change le texte ou le rythme d’un message récurrent (id donné par lister_messages_recurrents). Seuls les champs donnés changent ; sans_fin=true retire la fin. Règles : un message par jour (un jour où un autre message part déjà, l’occurrence est sautée), jours de fermeture et congés sautés (ou décalés au jour ouvert suivant avec si_ferme=decaler), heures calmes respectées, premier envoi dans les 60 jours. confirmer=false (défaut) rend un aperçu ; confirmer=true l’exécute, après l’accord explicite de la personne.

NameRequiredDescriptionDefault
idYesLa règle visée, donnée par lister_messages_recurrents.
finNoDernier jour possible, inclus (AAAA-MM-JJ). Facultatif.
rangNoPour frequence=mois : « premier » lundi, …, « dernier » vendredi du mois (avec jour_rang).
debutNoPremier jour possible (AAAA-MM-JJ). Par défaut aujourd’hui.
heureNoL’heure du commerce, HH:MM, entre 07:00 et 21:45.
joursNoPour frequence=semaine : les jours d’envoi.
texteNoLe texte exact de la notification, 180 caractères au plus.
nombreNoOu : le nombre d’envois réellement partis après lequel la règle s’arrête.
sans_finNoPour modifier : retirer la date de fin ou le nombre d’envois.
si_fermeNoUn jour de fermeture ou de congés : sauter (défaut) ou décaler au jour ouvert suivant.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
frequenceNosemaine : avec jours. mois : avec jour_mois, ou rang et jour_rang.
jour_moisNoPour frequence=mois : le jour du mois (1 à 31 ; un 31 tombe le dernier jour d’un mois plus court).
jour_rangNoLe jour de la semaine qui va avec rang.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations declaring destructiveHint=true and non-idempotent, the description adds substantial context the annotations cannot: partial-update semantics ('seuls les champs donnés changent'), that sans_fin=true removes the end condition, the one-message-per-day rule, closure/holiday skipping or shifting, quiet hours, the 60-day first-send window, and the mandatory preview-before-execute gate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and the id provenance, then the mutation rule, then the confirmation protocol. The middle 'Règles :' run-on packs six constraints into one sentence, which is dense but each clause carries real operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter destructive mutation with no output schema, the description covers partial-update behavior, scheduling constraints and the safe two-step confirm flow. It stops short of describing what the preview returns or how validation failures surface, which would be the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-field meaning: sans_fin as the removal switch for either end date or send count, si_ferme=decaler shifting to the next open day, and the frequence↔jours / jour_mois / rang+jour_rang dependency. It still doesn't explain every parameter (e.g. heure bounds are only in the schema).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: changing the text or rhythm of an existing recurring message, with the id sourced from lister_messages_recurrents. That clearly separates it from creation (programmer_message_recurrent) and lifecycle siblings (arreter/suspendre/reprendre), though it never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an actionable usage protocol: call with confirmer=false to get a preview, show it to the person, then re-call with confirmer=true only after explicit agreement. What's missing is guidance on when to prefer this over programmer_message_recurrent or the suspend/stop siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

programmer_message_recurrentProgrammer un message récurrentA
Destructive
Inspect

Programme un message qui se répète tout seul sur l’écran verrouillé des clients : chaque semaine (un ou plusieurs jours), ou chaque mois (tel jour du mois, ou « le premier lundi », « le dernier vendredi »), à une heure du commerce entre 7 h et 21 h 45. Exemples : « chaque mardi 11 h, l’emplacement du food truck », « le 1er de chaque mois, aux anniversaires du mois ». Le groupe visé se recalcule à chaque envoi. Fin facultative : une date, ou un nombre d’envois. Règles : un message par jour (un jour où un autre message part déjà, l’occurrence est sautée), jours de fermeture et congés sautés (ou décalés au jour ouvert suivant avec si_ferme=decaler), heures calmes respectées, premier envoi dans les 60 jours. confirmer=false (défaut) rend un aperçu ; confirmer=true l’exécute, après l’accord explicite de la personne. Pour un envoi unique et immédiat, utiliser envoyer_message.

NameRequiredDescriptionDefault
finNoDernier jour possible, inclus (AAAA-MM-JJ). Facultatif.
rangNoPour frequence=mois : « premier » lundi, …, « dernier » vendredi du mois (avec jour_rang).
debutNoPremier jour possible (AAAA-MM-JJ). Par défaut aujourd’hui.
heureNoL’heure du commerce, HH:MM, entre 07:00 et 21:45.
joursNoPour frequence=semaine : les jours d’envoi.
texteYesLe texte exact de la notification, 180 caractères au plus.
groupeNoQui le reçoit, recalculé à chaque envoi : tous, inactifs_30/60/90 (pas venus depuis N jours), proches (à 1 ou 2 tampons de la récompense), anniversaires (nés ce mois-ci), meilleurs, nouveaux. Un groupe autre que tous demande les notifications ciblées. Pour programmer seulement (défaut tous).
nombreNoOu : le nombre d’envois réellement partis après lequel la règle s’arrête.
si_fermeNoUn jour de fermeture ou de congés : sauter (défaut) ou décaler au jour ouvert suivant.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
frequenceNosemaine : avec jours. mois : avec jour_mois, ou rang et jour_rang.
jour_moisNoPour frequence=mois : le jour du mois (1 à 31 ; un 31 tombe le dernier jour d’un mois plus court).
jour_rangNoLe jour de la semaine qui va avec rang.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond destructiveHint=true and openWorldHint=true, the description discloses non-obvious behavior: one message per day (colliding occurrences are skipped), closed days and vacations skipped or shifted via si_ferme, quiet hours respected, first send must fall within 60 days, and the target group is recomputed at each send. The preview/confirm safety path is spelled out, which the annotations alone would not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then cadence, examples, business rules, the confirmer workflow, and finally the sibling alternative — a deliberate ordering with no filler despite the density required by 13 parameters. Every sentence carries an operational constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter mutation tool with no output schema, the description supplies the missing pieces: collision rules, closure handling, the 60-day horizon, quiet hours, and the mandatory preview-then-confirm protocol. Nothing an agent needs to invoke it safely is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter, including enum meanings and defaults; that sets the baseline at 3. The description reinforces parameter meaning with worked examples ('chaque mardi 11 h', 'le 1er de chaque mois') and the 07:00–21:45 time window, but most of this restates what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Programme un message qui se répète... sur l'écran verrouillé des clients') and enumerates the two scheduling modes (weekly / monthly) with concrete examples. It explicitly contrasts itself with envoyer_message for one-off sends, so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (recurring weekly/monthly at a business hour) and when-not ('Pour un envoi unique et immédiat, utiliser envoyer_message'). It also prescribes the operational flow: run with confirmer=false for a preview, show it to the person, then re-run with confirmer=true only after explicit consent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

regler_automatismesMessages automatiquesA
Destructive
Inspect

Lit et règle les messages que StampyWallet envoie tout seul aux clients : la relance des habitués qui ne viennent plus (quand leur absence dépasse une fois et demie leur rythme habituel, ou, sans assez d’historique, le délai du commerce, proposé selon son métier et réglable), le message d’anniversaire, les rappels « plus qu’un tampon » et « récompense prête » (et leur délai), les heures calmes pendant lesquelles rien ne part ; montre aussi le bilan du lundi envoyé au commerçant. Sans paramètre de changement : rend l’état actuel, textes compris. Avec des changements : confirmer=false rend un aperçu avant → après sans rien modifier, confirmer=true enregistre. Seuls les champs fournis changent. Pour un message ponctuel, utiliser envoyer_message.

NameRequiredDescriptionDefault
effacerNoTextes à effacer. texte_relance revient au texte par défaut ; texte_anniversaire vide coupe de fait les envois d’anniversaire ; delai_relance revient au délai proposé pour le métier.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
canal_avisNoCanal de « demande d’avis » : auto (recommandé : un message important part d’abord par SMS sauf aux clients qui répondent aux notifications, un petit en notification et par SMS seulement aux clients qui répondent mieux aux SMS), notif, secours (SMS si la notification ne porte pas), sms (SMS d’abord), email (e-mail si la notification ne porte pas).
reserve_smsNoPart du budget SMS mensuel gardée pour les messages importants, en % : 0, 25, 50, 75, 100.
canal_rappelsNoCanal de « rappels » : auto (recommandé : un message important part d’abord par SMS sauf aux clients qui répondent aux notifications, un petit en notification et par SMS seulement aux clients qui répondent mieux aux SMS), notif, secours (SMS si la notification ne porte pas), sms (SMS d’abord).
canal_relanceNoCanal de « relance » : auto (recommandé : un message important part d’abord par SMS sauf aux clients qui répondent aux notifications, un petit en notification et par SMS seulement aux clients qui répondent mieux aux SMS), notif, secours (SMS si la notification ne porte pas), sms (SMS d’abord).
texte_relanceNoTexte de la relance, 180 caractères au plus. Pour revenir au texte par défaut, mettre "texte_relance" dans effacer.
canal_messagesNoCanal de « messages du commerçant » : auto (recommandé : un message important part d’abord par SMS sauf aux clients qui répondent aux notifications, un petit en notification et par SMS seulement aux clients qui répondent mieux aux SMS), notif, secours (SMS si la notification ne porte pas), sms (SMS d’abord).
rappel_presqueNoRappel « plus qu’un tampon » quand il ne manque qu’un passage.
relance_activeNoActive ou coupe la relance automatique des perdus de vue (une par client et par absence).
importance_avisNoImportance de « demande d’avis » : importante (passe avant dans le budget SMS) ou petite.
heures_calmes_finNoFin des heures calmes (heure de 0 à 23) : les envois reprennent à partir de cette heure.
rappel_recompenseNoRappel « votre récompense vous attend » quand elle est gagnée.
canal_anniversaireNoCanal de « anniversaire » : auto (recommandé : un message important part d’abord par SMS sauf aux clients qui répondent aux notifications, un petit en notification et par SMS seulement aux clients qui répondent mieux aux SMS), notif, secours (SMS si la notification ne porte pas), sms (SMS d’abord), email (e-mail si la notification ne porte pas).
importance_rappelsNoImportance de « rappels » : importante (passe avant dans le budget SMS) ou petite.
importance_relanceNoImportance de « relance » : importante (passe avant dans le budget SMS) ou petite.
texte_anniversaireNoTexte du message d’anniversaire, 180 caractères au plus, idéalement avec le cadeau offert. Sans texte, rien ne part.
anniversaire_activeNoActive ou coupe le message d’anniversaire (il ne part que si un texte existe et si la carte demande la date d’anniversaire).
cadeau_anniversaireNoLe cadeau d’anniversaire, valable 30 jours à partir du jour J : message (le texte seul), pourcent (une réduction sur chaque achat), un_offert (« 1 acheté, 1 offert », une fois), choix (le client choisit au comptoir entre la réduction et « 1 acheté, 1 offert »). Les cadeaux déjà ouverts ne changent pas.
delai_relance_joursNoDélai du commerce avant qu’un habitué soit « perdu de vue », en jours calendaires : une valeur parmi 14, 21, 28, 35, 42, 60, 90. Il sert aux clients sans assez d’historique et borne le rythme des autres (de la moitié au double). Pour revenir au délai proposé pour le métier, mettre "delai_relance" dans effacer.
heures_calmes_debutNoDébut des heures calmes (heure de 0 à 23) : aucune notification automatique n’arrive après.
importance_messagesNoImportance de « messages du commerçant » : importante (passe avant dans le budget SMS) ou petite.
delai_rappel_minutesNoDélai entre le passage et le rappel, en minutes : une valeur parmi 0, 30, 60, 180, 1440 (1440 = le lendemain).
pourcent_anniversaireNoLe pourcentage de la réduction d’anniversaire (pourcent et choix), de 1 à 90.
importance_anniversaireNoImportance de « anniversaire » : importante (passe avant dans le budget SMS) ou petite.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety bar is lower; the description nonetheless adds the crucial dual-mode semantics (no-param call is a pure read returning texts) and the preview-before-commit workflow that the annotations cannot express. It does not spell out what effacer actually destroys or that some effects (already-opened birthday gifts) are irreversible — that detail lives only in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and scope, then the mode semantics, then the sibling pointer — the right ordering. It is dense with nested parentheticals explaining the relance threshold rule, so a few clauses could be trimmed, but every sentence carries information the agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 25 optional parameters and no output schema, the description correctly covers the highest-risk gaps: read vs write mode, preview vs commit, partial updates, and the default/effacer path. Return values are only summarized ('rend l'état actuel, textes compris'), which is thin given the absence of an output schema, but adequate for an agent to decide and call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 25 parameters, including enum explanations and default/effacer semantics, so the schema does the heavy lifting. The description adds domain grouping (relance, anniversaire, rappels, heures calmes) but no per-parameter syntax or format detail beyond it, which is the correct baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource ('lit et règle les messages que StampyWallet envoie tout seul'), then enumerates the exact sub-domains covered: relance, anniversaire, rappels with delay, heures calmes, and the Monday summary. It explicitly routes the one-off case to the sibling `envoyer_message`, so the boundary is unambiguous without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit decision tree: no parameters → read current state; with changes → confirmer=false for a preview, confirmer=true to persist. It also states the partial-update rule ('seuls les champs fournis changent') and names the alternative tool for a one-off message, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

regler_jours_fermesRégler les jours fermés chaque semaineA
Destructive
Inspect

Remplace les jours fermés chaque semaine (par exemple fermé le dimanche et le lundi). Les jours fermés ne comptent pas dans l’absence d’un client : des congés bien déclarés évitent que des habitués passent pour « perdus de vue » et reçoivent une relance au retour. En option, prevenir_clients=true avec un texte prépare aussi une notification à tous les clients (mêmes règles qu’envoyer_message : un message par jour). confirmer=false (défaut) rend un aperçu ; confirmer=true enregistre (et envoie le message s’il est demandé), après accord explicite de la personne.

NameRequiredDescriptionDefault
texteNoTexte de la notification aux clients (180 caractères au plus), si prevenir_clients=true.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
jours_fermesYesLa liste COMPLÈTE des jours fermés chaque semaine (liste vide = ouvert tous les jours).
prevenir_clientsNotrue : envoie aussi une notification à tous les clients avec texte. Compte comme le message du jour.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond annotations: it discloses that this replaces the full weekly list, affects absence/lost-client tracking, optionally triggers a mass notification (governed by envoyer_message rules, one message/day), and that confirmer=true executes/sends. This meaningfully expands on destructiveHint and openWorldHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose and constraints. Slightly wordy with the 'habitués perdus de vue' explanation, but that sentence earns its place by justifying the absence-tracking effect. No critical redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world mutation tool with no output schema, the description covers the preview/confirm safety workflow, side effects, and cross-parameter coupling. Nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning: texte only applies when prevenir_clients=true, prevenir_clients counts as the day's message, and confirmer separates preview from execution. These interactions exceed the individual field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (remplace/règle) and resource (les jours fermés chaque semaine) with a concrete example. It is clearly distinguishable from lister_fermetures (which lists) by the explicit 'remplace' (replaces) semantics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the preview-then-confirm workflow clearly ('confirmer=false rend un aperçu ; confirmer=true enregistre... après accord explicite de la personne') and when notification applies. However it never explicitly names a sibling as an alternative (e.g. lister_fermetures to view current closures), leaving that inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rentabiliteCe que rapporte la carteA
Read-onlyIdempotent
Inspect

Dit si la carte de fidélité rapporte, sur une période au choix : part des clients qui reviennent, passages de retour et ce qu’ils représentent en euros (estimation : passages × panier moyen), rythme médian entre deux visites, récompenses offertes et leur coût si on le donne, récompenses encore à servir, et résultat de la relance automatique. Le panier moyen et le coût d’une récompense peuvent être ajustés pour refaire le calcul. À utiliser pour « est-ce que ça vaut le coup ? », « ça me rapporte combien ? », « mes clients reviennent-ils ? ». Pour les chiffres bruts d’une période, tableau_de_bord.

NameRequiredDescriptionDefault
auNoDernier jour inclus (AAAA-MM-JJ). Défaut : aujourd’hui.
duNoPremier jour inclus (AAAA-MM-JJ). Le donner suffit : la période devient « personnalisee ».
periodeNoPériode étudiée, en jours du fuseau du commerce, aujourd’hui inclus pour les périodes en cours (ce_mois = du 1er à aujourd’hui). « personnalisee » utilise du/au. Défaut derniers_90_jours.derniers_90_jours
comparerNoAjoute la période de même durée juste avant, pour voir si ça progresse.
panier_moyenNoPanier moyen en euros pour ce calcul. Défaut : celui déclaré dans les réglages du commerce.
cout_recompenseNoCe que coûte UNE récompense au commerçant (prix de revient), en euros. Sans lui, le coût des récompenses n’est pas chiffré.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety burden is covered; the description adds meaningful context beyond that by flagging that the euro figures are estimates (passages × panier moyen) and that reward cost is left unquantified when cout_recompense is omitted. It stops short of describing response shape or whether relaunch results depend on prior configuration, but the estimate caveat is genuinely useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The metrics list is long but every item is a distinct output the agent may care about, and the usage questions plus the tableau_de_bord exclusion are packed into the final two sentences. It is dense rather than padded, though the opening sentence runs on before the reader learns what is actually returned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so by naming each computed block, including the estimation method and the un-priced-reward edge case. For a zero-required-parameter analytics tool with six optional inputs, nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description lifts it by explaining the purpose of the two override parameters — panier_moyen and cout_recompense exist so the calculation can be re-run with different assumptions, and omitting cost means rewards aren't priced. That is business meaning the schema's per-field text only partially conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource — "Dit si la carte de fidélité rapporte" — then enumerates the exact metrics returned (retention share, return visits, euro value, median interval, rewards cost, pending rewards, relaunch outcome). It explicitly distinguishes itself from tableau_de_bord, which supplies raw figures instead of the profitability reading.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the concrete questions that select this tool ("est-ce que ça vaut le coup ?", "ça me rapporte combien ?", "mes clients reviennent-ils ?") and routes the agent elsewhere for plain period stats via "Pour les chiffres bruts d’une période, tableau_de_bord." The when-to-use and the alternative are both explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reprendre_message_recurrentReprendre un message récurrentAInspect

Relance un message récurrent en pause, à partir d’aujourd’hui, sans rattraper les jours de la pause. confirmer=false (défaut) rend un aperçu ; confirmer=true l’exécute, après l’accord explicite de la personne.

NameRequiredDescriptionDefault
idYesLa règle visée, donnée par lister_messages_recurrents.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description discloses a non-obvious behavioral rule: the pause days are not caught up, the restart begins today. It also spells out the two-phase preview/execute contract and the consent requirement, which annotations alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the effect and the no-catch-up rule, followed by the confirmation protocol. Nothing is padded and no sentence is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no output schema, the description covers the effect, the time semantics, and the safety protocol. It does not say what the preview contains or how failures (e.g., a rule that is not paused) are surfaced, a minor remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents both `id` (obtained from lister_messages_recurrents) and the `confirmer` preview/execute semantics. The description largely restates the confirm flag rather than adding syntax or format detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("relance ... en pause") and resource ("message récurrent"), plus the key scope detail that the restart begins today. This implicitly separates it from suspendre/arrêter/modifier_message_recurrent, but it never names a sibling, so the differentiation must be inferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operating context: this applies only to a paused recurring message, and it prescribes a preview-then-confirm workflow with explicit human approval. It does not state what to do if the message is not paused or when to prefer modifier_message_recurrent instead, so the exclusions are missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retirer_membreRetirer un membre de l’équipeA
Destructive
Inspect

Retire l’accès d’un membre au commerce et ferme ses sessions ouvertes. Les tampons qu’il a posés restent dans l’historique. Réservé au propriétaire. confirmer=false (défaut) rend un aperçu ; confirmer=true agit, après accord explicite de la personne.

NameRequiredDescriptionDefault
emailNoOu l’e-mail du membre, à la place de membre_id.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
membre_idNoIdentifiant du membre, lu avec lister_equipe.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the side effects (open sessions closed, past stamps preserved in history), the authorization constraint (owner only), and the exact two-phase semantics of confirmer. This is exactly the extra context destructiveHint=true alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the destructive outcome before the permission note and the confirmation protocol. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Strong for a destructive mutation with no output schema: impact, permissions, and the confirm flow are all covered. The one gap is that the schema marks all three parameters optional, and the description never states that either membre_id or email must be supplied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the confirmer semantics in the description largely restate the schema's own parameter description. It reinforces the human-consent workflow but adds no syntax or format details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Retire l'accès d'un membre au commerce') and immediately scopes the effect ('ferme ses sessions ouvertes', 'les tampons restent dans l'historique'), which clearly separates it from changer_role_membre or inviter_membre without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating context: owner-only ('Réservé au propriétaire') and a mandatory two-step preview→confirm flow with the requirement of the person's explicit consent. It stops short of naming sibling alternatives such as changer_role_membre when role reduction rather than removal is intended.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

simuler_fideliteSimuler le coût d’une carte de fidélitéA
Read-onlyIdempotent
Inspect

Estime ce que coûte une carte de fidélité à tampons (la récompense rapportée au panier) et combien de visites en plus la rentabilisent. À utiliser pour choisir une récompense et un nombre de passages, ou quand quelqu’un se demande si une carte vaut le coup. Sans compte.

NameRequiredDescriptionDefault
margeNoMarge brute sur un panier, en pourcentage (défaut 65 %, typique en restauration et services).
tamponsYesPassages pour obtenir la récompense.
comparerNoAutres nombres de passages à comparer (ex. [6, 10, 12]).
panier_moyenYesDépense moyenne d’un client par passage, en euros.
clients_fidelesNoClients qui prendraient la carte chaque mois (défaut 60).
cout_recompenseYesCe que coûte la récompense AU COMMERÇANT (prix de revient, pas prix de vente), en euros.
visites_par_moisNoVisites par mois d’un client fidèle aujourd’hui (défaut 2).
tampons_bienvenueNoTampons offerts à l’inscription.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds "Sans compte" (no account required), a genuine auth-context detail, but says nothing about the shape of the returned figures or precision assumptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: what is computed first, when to use it second, with no filler. Nothing is redundant with the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters at full schema coverage and no output schema, the description needs mainly to define scope and trigger conditions, which it does. It stops short of describing what the simulation returns, which would matter since there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including defaults and ranges is already documented. The description only alludes to reward-vs-basket cost and number of passages, adding no units, defaults, or interaction detail beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Estime") with a specific resource ("carte de fidélité à tampons") and names the two quantities computed: reward cost relative to the basket and the extra visits needed to break even. This clearly separates it from siblings like concevoir_carte or modifier_carte, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage contexts: choosing a reward and a stamp count, or answering 'is a card worth it?'. It does not state exclusions or point to alternatives such as rentabilite, which is the main gap for a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

supprimer_congesSupprimer des congésA
Destructive
Inspect

Supprime une période de fermeture par son id (donné par lister_fermetures). En option, prevenir_clients=true avec un texte prépare aussi une notification à tous les clients (mêmes règles qu’envoyer_message : un message par jour). confirmer=false (défaut) rend un aperçu ; confirmer=true enregistre (et envoie le message s’il est demandé), après accord explicite de la personne.

NameRequiredDescriptionDefault
idYesIdentifiant de la période à supprimer (donné par lister_fermetures).
texteNoTexte de la notification aux clients (180 caractères au plus), si prevenir_clients=true.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.
prevenir_clientsNotrue : envoie aussi une notification à tous les clients avec texte. Compte comme le message du jour.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive=true and idempotent=false, but the description adds what the annotations cannot: the two-phase preview/execute safety gate, the consent requirement, and the side effect that a client notification is queued and counts as the day's message (one per day). That is meaningful behavior beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler, and the identification source (id from lister_fermetures) plus the optional notification are front-loaded. Slightly packed, but every clause carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world mutation with four params and no output schema, the description covers the identifier source, the preview/confirm protocol, the consent requirement, and the notification side effect and rate rule. Nothing essential for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds cross-parameter meaning the schema does not, notably that texte is only relevant when prevenir_clients=true and that confirmer governs preview vs. execution. It stops short of describing the preview's contents or failure modes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: deleting a closure period by its id, and names lister_fermetures as the source of that id. An agent can distinguish it from ajouter_conges/lister_fermetures without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit operating procedure: call with confirmer=false for a preview, show it to the person, get explicit agreement, then re-call with confirmer=true. It also spells out the optional path (prevenir_clients=true + texte) and references envoyer_message for the notification rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suspendre_message_recurrentMettre en pause un message récurrentAInspect

Met en pause un message récurrent actif : plus rien ne part jusqu’à reprendre_message_recurrent. confirmer=false (défaut) rend un aperçu ; confirmer=true l’exécute, après l’accord explicite de la personne.

NameRequiredDescriptionDefault
idYesLa règle visée, donnée par lister_messages_recurrents.
confirmerNofalse (défaut) : rend seulement un aperçu de ce qui serait fait, sans rien changer. true : exécute. Toujours montrer l’aperçu à la personne et attendre son accord avant de repasser avec true.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a non-read-only, non-destructive operation. The description adds important behavior: active messages stop sending until resumed, and confirmer=false returns a preview while confirmer=true executes only after explicit human approval.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is two compact sentences, with the core effect and confirmation workflow front-loaded and no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with complete schema descriptions and annotations covering safety traits, the description supplies enough behavioral context to call it correctly, including the required preview-and-consent sequence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented in the schema. The description reinforces the confirmer preview/execute workflow but adds little semantic detail beyond what the schema descriptions already provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Met en pause un message récurrent actif') and defines the scope: nothing is sent until reprendre_message_recurrent. It is clearly distinguishable from resuming or stopping a recurring message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for use: the message must be active, and execution requires first showing the preview and obtaining explicit consent. It names reprendre_message_recurrent as the resumption path, though it does not explicitly contrast with arreter_message_recurrent for permanent stopping.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tableau_de_bordTableau de bord du commerceA
Read-onlyIdempotent
Inspect

Les chiffres de fidélité du commerce sur une période au choix : passages en caisse, clients venus, nouveaux clients, taux de retour, récompenses gagnées et offertes, chiffre estimé, avec une courbe par jour, semaine ou mois et, au besoin, la comparaison avec la période précédente de même durée. À utiliser pour « comment ça marche ce mois-ci ? », « combien de clients en août ? », « est-ce que ça monte ? ». Pour la liste des clients, utiliser chercher_clients ; pour savoir si la carte rapporte, rentabilite.

NameRequiredDescriptionDefault
auNoDernier jour inclus (AAAA-MM-JJ). Défaut : aujourd’hui.
duNoPremier jour inclus (AAAA-MM-JJ). Le donner suffit : la période devient « personnalisee ».
courbeNoCe que trace la courbe. Défaut passages.passages
periodeNoPériode étudiée, en jours du fuseau du commerce, aujourd’hui inclus pour les périodes en cours (ce_mois = du 1er à aujourd’hui). « personnalisee » utilise du/au. Défaut derniers_30_jours.derniers_30_jours
comparerNoAjoute la variation par rapport à la période de même durée juste avant (ex. 30 jours avant les 30 derniers jours).
granulariteNoPas de la courbe. auto (défaut) : jour jusqu’à 2 mois, semaine jusqu’à ~9 mois, mois au-delà.auto
indicateursNoIndicateurs à rendre, dans cet ordre. Défaut : tous. taux_retour = part des clients venus sur la période qui étaient déjà venus avant ; chiffre_estime = passages × panier moyen déclaré (une estimation, pas une caisse).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already state readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false. The description adds useful behavioral context beyond them: chiffre_estime is an estimate rather than register data, comparison uses the preceding equal-length period, and curve granularity has automatic thresholds. It does not discuss auth or rate limits, but those are less central for this annotated read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with scope and metrics, then usage examples, then sibling disambiguation. The first sentence is dense but every clause maps to a parameter or returned concept, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a seven-parameter analytics tool with no output schema, the description lists the main returned indicators and explains period, curve, comparison, and alternatives. It does not fully describe the response structure or every indicator, but the schema is complete for parameters and annotations cover the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself documents all seven parameters, including enum values, defaults, date formats, taux_retour, and chiffre_estime definitions. The description adds high-level context but little syntax or semantics beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (a commerce loyalty dashboard) and enumerates the metrics, period, curve, and comparison it returns. It also distinguishes the tool from chercher_clients and rentabilite, so an agent can identify it as an analytics query rather than a client lookup or profitability tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete user questions such as « comment ça marche ce mois-ci ? », « combien de clients en août ? », and « est-ce que ça monte ? ». It also explicitly redirects client lists to chercher_clients and card ROI to rentabilite, providing clear when-to-use and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

voir_carteVoir ma carte de fidélitéA
Read-onlyIdempotent
Inspect

Montre la carte de fidélité du commerce telle que les clients la voient dans Apple Wallet et Google Wallet, avec ses règles actuelles : mode (tampons, paliers ou points), récompenses et seuils, tampons offerts à l’inscription, expiration des récompenses, réglages des points, style, couleur, tampon, et le lien public d’inscription des clients. À utiliser avant toute modification (modifier_carte reprend les mêmes noms de réglages), ou quand le commerçant demande à quoi ressemble sa carte ou quelle est sa règle. Lecture seule.

NameRequiredDescriptionDefault
qrNotrue : joint le QR d’inscription des clients (celui de l’affichette), pour essayer la carte sur son téléphone.
variantesNotrue : montre aussi les trois palettes de la collection actuelle, pour proposer un changement de couleur (à passer ensuite en « palette » à modifier_carte).
tampons_posesNoTampons (ou points) posés sur l’aperçu, pour montrer une carte en cours (défaut : tampons de bienvenue + 2).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, and the description reinforces read-only while adding substantial context beyond annotations: it lists the exact rule data shown (mode, thresholds, welcome stamps, expiration, points settings, style, color, stamp, public signup link). With no output schema, this is exactly the disclosure an agent needs about the return content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and then the usage rule; the long enumeration of settings is informative rather than filler. The closing 'Lecture seule' repeats the readOnly annotation and is the only clearly redundant phrase.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must convey what is returned, and it does so thoroughly by listing the card preview and rule fields. Parameters are schema-documented and safety is annotation-documented, leaving nothing important for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the meaning of qr, variantes, and tampons_poses is fully documented in the schema. The description only adds the cross-tool note that modifier_carte uses the same setting names, which is useful but does not explain the parameters themselves, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — it shows the loyalty card as customers see it in Apple/Google Wallet — and enumerates the rule fields returned. It also explicitly contrasts with modifier_carte, so an agent can distinguish it from the sibling mutation tool without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use conditions: before any modification, because modifier_carte reuses the same setting names, or when the merchant asks what the card looks like or what its rule is. The alternative is named alongside the condition that selects it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 32 tool updates
    • First observedaffichette
    • First observedajouter_conges
    • First observedannuler_invitation
    • First observedarreter_message_recurrent
    • First observedavis_google
    • First observedchanger_role_membre
    • First observedchercher_clients
    • First observedconcevoir_carte
    • First observedcreer_commerce
    • First observedenvoyer_affichette
    • First observedenvoyer_message
    • First observedfiche_client
    • First observedfiche_commerce
    • First observedhistorique_messages
    • First observedinviter_membre
    • First observedlister_equipe
    • First observedlister_fermetures
    • First observedlister_messages_recurrents
    • First observedmeilleurs_moments
    • First observedmodifier_carte
    • First observedmodifier_message_recurrent
    • First observedprogrammer_message_recurrent
    • First observedregler_automatismes
    • First observedregler_jours_fermes
    • First observedrentabilite
    • First observedreprendre_message_recurrent
    • First observedretirer_membre
    • First observedsimuler_fidelite
    • First observedsupprimer_conges
    • First observedsuspendre_message_recurrent
    • First observedtableau_de_bord
    • First observedvoir_carte

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Remote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    18 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources