_ registry / mcp streamable-http · checked 3h ago

stampywallet

https://app.stampywallet.com

Registry code: 4fe98cc675fb83b8

api record

StampyWallet crée et gère des cartes de fidélité à tampons pour les commerces de proximité (cafés, boulangeries, restaurants, instituts, fleuristes…). La carte vit dans Apple Wallet et Google Wallet, sans application.

Sans compte : concevoir_carte dessine une carte à l'image du commerce et simuler_fidelite chiffre ce qu'elle coûte ; creer_commerce la met en service et rend un lien pour en devenir propriétaire.

endpoint
https://app.stampywallet.com/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is stampywallet live?
Yes — it answered the hub's last check (checked 3h ago). It answered 100% of checks over the last 30 days.
Is stampywallet free to use?
Yes — the hub reached it with no key and no payment.
What tools does stampywallet have?
32 tools: fiche_client, modifier_message_recurrent, suspendre_message_recurrent, arreter_message_recurrent, regler_automatismes, fiche_commerce, affichette, chercher_clients, ….
Is stampywallet safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
343ms

last good check

priced tools
0

of 32 tools

_ answered our checks, 90 days 3 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 32 tools
1 open 31 never probed 1 of 32 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • concevoir_carte open 2d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "nom": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Nom du commerce, imprimé en haut de la carte."
        },
        "mode": {
          "enum": [
            "tampons",
            "paliers",
            "points"
          ],
          "type": "string",
          "description": "tampons : 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)."
        },
        "encre": {
          "type": "string",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "examples": [
            "#1f1a14"
          ],
          "description": "Couleur du texte de la carte, en hexadécimal (défaut : choisie pour rester lisible sur le fond)."
        },
        "forme": {
          "enum": [
            "medailles",
            "vitrine",
            "remplissage",
            "chemin",
            "anneau",
            "grille",
            "libre",
            "objets",
            "cercles"
          ],
          "type": "string",
          "description": "Le 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."
        },
        "accent": {
          "type": "string",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "examples": [
            "#c2185b"
          ],
          "description": "Couleur d’accent : les tampons posés, les jauges, les étiquettes, en hexadécimal (défaut : tirée de la collection)."
        },
        "metier": {
          "enum": [
            "cafe",
            "boulangerie",
            "patisserie",
            "glacier",
            "restaurant",
            "creperie",
            "sushi",
            "snack",
            "foodtruck",
            "boucherie",
            "fromagerie",
            "primeur",
            "vrac",
            "ongles",
            "institut",
            "barbier",
            "boutique",
            "fleuriste",
            "librairie",
            "animalerie",
            "pressing",
            "cordonnerie",
            "laverie",
            "lavage",
            "toilettage",
            "sport",
            "escalade",
            "loisirs",
            "autre"
          ],
          "type": "string",
          "description": "Type 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."
        },
        "tampon": {
          "enum": [
            "rond",
            "etincelle",
            "eclat",
            "goutte",
            "main",
            "pinceau",
            "oeil",
            "ciseaux",
            "sechoir",
            "fleur",
            "lotus",
            "coeur",
            "etoile",
            "diamant",
            "couronne",
            "soleil",
            "lune",
            "talon",
            "robe",
            "sac",
            "serviette",
            "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",
            "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",
            "croissant"
          ],
          "type": "string",
          "description": "Le 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."
        },
        "couleur": {
          "type": "string",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "examples": [
            "#2b4431"
          ],
          "description": "Couleur de fond libre, en hexadécimal. L’encre (texte) est choisie automatiquement pour rester lisible."
        },
        "palette": {
          "type": "integer",
          "maximum": 3,
          "minimum": 0,
          "description": "Palette 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."
        },
        "paliers": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "a",
              "recompense"
            ],
            "properties": {
              "a": {
                "type": "integer",
                "maximum": 1000000,
                "minimum": 1,
                "description": "Seuil : nombre de tampons (ou de points en mode points) pour obtenir ce palier."
              },
              "icone": {
                "enum": [
                  "etincelle",
                  "eclat",
                  "goutte",
                  "main",
                  "pinceau",
                  "oeil",
                  "ciseaux",
                  "sechoir",
                  "fleur",
                  "lotus",
                  "coeur",
                  "etoile",
                  "diamant",
                  "couronne",
                  "soleil",
                  "lune",
                  "talon",
                  "robe",
                  "sac",
                  "serviette",
                  "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",
                  "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",
                  "croissant"
                ],
                "type": "string",
                "description": "Icône du palier (défaut : cadeau)."
              },
              "image_url": {
                "type": "string",
                "pattern": "^https://\\S+$",
                "examples": [
                  "https://exemple.com/croissant.jpg"
                ],
                "maxLength": 2000,
                "description": "Photo de la récompense, par son adresse https (PNG, JPEG ou WebP, 5 Mo au plus, 64 px de côté au moins). Détourée quand c’est possible, elle prend la place de l’icône sur la carte : en gris avant d’être gagnée, en couleur après. Dessinée en modes paliers et points."
              },
              "recompense": {
                "type": "string",
                "maxLength": 120,
                "minLength": 1,
                "description": "Ce que le client reçoit, tel qu’imprimé sur la carte. Ex. « Un café offert »."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 6,
          "minItems": 1,
          "description": "Les récompenses et leurs seuils (modes paliers et points). Du plus petit au plus grand."
        },
        "tampons": {
          "type": "integer",
          "maximum": 30,
          "minimum": 2,
          "description": "Nombre de passages pour obtenir la récompense (mode tampons), de 2 à 30."
        },
        "logo_url": {
          "type": "string",
          "pattern": "^https://\\S+$",
          "examples": [
            "https://exemple.com/logo.png"
          ],
          "maxLength": 2000,
          "description": "Logo 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."
        },
        "variantes": {
          "type": "boolean",
          "default": false,
          "description": "true : rend aussi les trois palettes de la collection choisie, pour proposer un choix."
        },
        "collection": {
          "enum": [
            "original",
            "cafe",
            "botanique",
            "trattoria",
            "atelier",
            "pass"
          ],
          "type": "string",
          "description": "Style 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)."
        },
        "recompense": {
          "type": "string",
          "maxLength": 120,
          "description": "La récompense (mode tampons). Ignorée si « paliers » est donné."
        },
        "forme_points": {
          "enum": [
            "medailles",
            "vitrine",
            "remplissage",
            "chemin",
            "anneau"
          ],
          "type": "string",
          "description": "Mode 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_paliers": {
          "enum": [
            "tampons",
            "medailles",
            "vitrine",
            "remplissage",
            "chemin",
            "anneau"
          ],
          "type": "string",
          "description": "Mode 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_poses": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Tampons déjà posés sur l’aperçu, pour montrer une carte en cours (défaut : tampons de bienvenue + 2)."
        },
        "nom_des_points": {
          "type": "string",
          "maxLength": 20,
          "description": "Mode points : comment s’appellent les points (« points », « graines », « étoiles »…)."
        },
        "tampons_bienvenue": {
          "type": "integer",
          "maximum": 5,
          "minimum": 0,
          "description": "Tampons offerts à l’inscription du client (0 à 5). 1 par défaut : une carte entamée donne envie d’être finie."
        }
      },
      "additionalProperties": false
    }
    arguments 386 lines
  • fiche_client unknown 30h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Identifiant du client (UUID), tel que rendu par chercher_clients. Prioritaire sur prenom."
        },
        "mois": {
          "type": "integer",
          "default": 12,
          "maximum": 36,
          "minimum": 1,
          "description": "Nombre de mois dans la courbe des passages (défaut 12)."
        },
        "prenom": {
          "type": "string",
          "maxLength": 60,
          "minLength": 1,
          "description": "Prénom du client, éventuellement suivi de l’initiale ou du nom (« Maëlle P. »). Accents et casse ignorés."
        },
        "inclure_offerts": {
          "type": "boolean",
          "default": false,
          "description": "true : l’historique montre aussi les tampons offerts (bienvenue, avis), signalés comme tels. Défaut false : seulement les vrais passages."
        },
        "historique_limite": {
          "type": "integer",
          "default": 15,
          "maximum": 200,
          "minimum": 0,
          "description": "Nombre de passages récents à détailler (défaut 15)."
        }
      },
      "additionalProperties": false
    }
    arguments 35 lines
  • modifier_message_recurrent unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "minimum": 1,
          "description": "La règle visée, donnée par lister_messages_recurrents."
        },
        "fin": {
          "type": "string",
          "format": "date",
          "description": "Dernier jour possible, inclus (AAAA-MM-JJ). Facultatif."
        },
        "rang": {
          "enum": [
            "premier",
            "deuxieme",
            "troisieme",
            "quatrieme",
            "dernier"
          ],
          "type": "string",
          "description": "Pour frequence=mois : « premier » lundi, …, « dernier » vendredi du mois (avec jour_rang)."
        },
        "debut": {
          "type": "string",
          "format": "date",
          "description": "Premier jour possible (AAAA-MM-JJ). Par défaut aujourd’hui."
        },
        "heure": {
          "type": "string",
          "pattern": "^\\d{1,2}:\\d{2}$",
          "description": "L’heure du commerce, HH:MM, entre 07:00 et 21:45."
        },
        "jours": {
          "type": "array",
          "items": {
            "enum": [
              "dimanche",
              "lundi",
              "mardi",
              "mercredi",
              "jeudi",
              "vendredi",
              "samedi"
            ],
            "type": "string"
          },
          "maxItems": 7,
          "description": "Pour frequence=semaine : les jours d’envoi."
        },
        "texte": {
          "type": "string",
          "maxLength": 180,
          "minLength": 1,
          "description": "Le texte exact de la notification, 180 caractères au plus."
        },
        "nombre": {
          "type": "integer",
          "maximum": 366,
          "minimum": 1,
          "description": "Ou : le nombre d’envois réellement partis après lequel la règle s’arrête."
        },
        "sans_fin": {
          "type": "boolean",
          "description": "Pour modifier : retirer la date de fin ou le nombre d’envois."
        },
        "si_ferme": {
          "enum": [
            "sauter",
            "decaler"
          ],
          "type": "string",
          "description": "Un jour de fermeture ou de congés : sauter (défaut) ou décaler au jour ouvert suivant."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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."
        },
        "frequence": {
          "enum": [
            "semaine",
            "mois"
          ],
          "type": "string",
          "description": "semaine : avec jours. mois : avec jour_mois, ou rang et jour_rang."
        },
        "jour_mois": {
          "type": "integer",
          "maximum": 31,
          "minimum": 1,
          "description": "Pour frequence=mois : le jour du mois (1 à 31 ; un 31 tombe le dernier jour d’un mois plus court)."
        },
        "jour_rang": {
          "enum": [
            "dimanche",
            "lundi",
            "mardi",
            "mercredi",
            "jeudi",
            "vendredi",
            "samedi"
          ],
          "type": "string",
          "description": "Le jour de la semaine qui va avec rang."
        }
      },
      "additionalProperties": false
    }
    arguments 113 lines
  • suspendre_message_recurrent unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "minimum": 1,
          "description": "La règle visée, donnée par lister_messages_recurrents."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • arreter_message_recurrent unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "minimum": 1,
          "description": "La règle visée, donnée par lister_messages_recurrents."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • regler_automatismes unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "effacer": {
          "type": "array",
          "items": {
            "enum": [
              "texte_relance",
              "texte_anniversaire",
              "delai_relance"
            ],
            "type": "string"
          },
          "description": "Textes à 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."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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_avis": {
          "enum": [
            "auto",
            "notif",
            "secours",
            "sms",
            "email"
          ],
          "type": "string",
          "description": "Canal 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_sms": {
          "type": "integer",
          "maximum": 100,
          "minimum": 0,
          "description": "Part du budget SMS mensuel gardée pour les messages importants, en % : 0, 25, 50, 75, 100."
        },
        "canal_rappels": {
          "enum": [
            "auto",
            "notif",
            "secours",
            "sms"
          ],
          "type": "string",
          "description": "Canal 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_relance": {
          "enum": [
            "auto",
            "notif",
            "secours",
            "sms"
          ],
          "type": "string",
          "description": "Canal 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_relance": {
          "type": "string",
          "maxLength": 180,
          "minLength": 1,
          "description": "Texte de la relance, 180 caractères au plus. Pour revenir au texte par défaut, mettre \"texte_relance\" dans effacer."
        },
        "canal_messages": {
          "enum": [
            "auto",
            "notif",
            "secours",
            "sms"
          ],
          "type": "string",
          "description": "Canal 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_presque": {
          "type": "boolean",
          "description": "Rappel « plus qu’un tampon » quand il ne manque qu’un passage."
        },
        "relance_active": {
          "type": "boolean",
          "description": "Active ou coupe la relance automatique des perdus de vue (une par client et par absence)."
        },
        "importance_avis": {
          "enum": [
            "importante",
            "petite"
          ],
          "type": "string",
          "description": "Importance de « demande d’avis » : importante (passe avant dans le budget SMS) ou petite."
        },
        "heures_calmes_fin": {
          "type": "integer",
          "maximum": 23,
          "minimum": 0,
          "description": "Fin des heures calmes (heure de 0 à 23) : les envois reprennent à partir de cette heure."
        },
        "rappel_recompense": {
          "type": "boolean",
          "description": "Rappel « votre récompense vous attend » quand elle est gagnée."
        },
        "canal_anniversaire": {
          "enum": [
            "auto",
            "notif",
            "secours",
            "sms",
            "email"
          ],
          "type": "string",
          "description": "Canal 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_rappels": {
          "enum": [
            "importante",
            "petite"
          ],
          "type": "string",
          "description": "Importance de « rappels » : importante (passe avant dans le budget SMS) ou petite."
        },
        "importance_relance": {
          "enum": [
            "importante",
            "petite"
          ],
          "type": "string",
          "description": "Importance de « relance » : importante (passe avant dans le budget SMS) ou petite."
        },
        "texte_anniversaire": {
          "type": "string",
          "maxLength": 180,
          "minLength": 1,
          "description": "Texte du message d’anniversaire, 180 caractères au plus, idéalement avec le cadeau offert. Sans texte, rien ne part."
        },
        "anniversaire_active": {
          "type": "boolean",
          "description": "Active ou coupe le message d’anniversaire (il ne part que si un texte existe et si la carte demande la date d’anniversaire)."
        },
        "cadeau_anniversaire": {
          "enum": [
            "message",
            "pourcent",
            "un_offert",
            "choix"
          ],
          "type": "string",
          "description": "Le 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_jours": {
          "type": "integer",
          "description": "Dé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_debut": {
          "type": "integer",
          "maximum": 23,
          "minimum": 0,
          "description": "Début des heures calmes (heure de 0 à 23) : aucune notification automatique n’arrive après."
        },
        "importance_messages": {
          "enum": [
            "importante",
            "petite"
          ],
          "type": "string",
          "description": "Importance de « messages du commerçant » : importante (passe avant dans le budget SMS) ou petite."
        },
        "delai_rappel_minutes": {
          "type": "integer",
          "description": "Délai entre le passage et le rappel, en minutes : une valeur parmi 0, 30, 60, 180, 1440 (1440 = le lendemain)."
        },
        "pourcent_anniversaire": {
          "type": "integer",
          "maximum": 90,
          "minimum": 1,
          "description": "Le pourcentage de la réduction d’anniversaire (pourcent et choix), de 1 à 90."
        },
        "importance_anniversaire": {
          "enum": [
            "importante",
            "petite"
          ],
          "type": "string",
          "description": "Importance de « anniversaire » : importante (passe avant dans le budget SMS) ou petite."
        }
      },
      "additionalProperties": false
    }
    arguments 185 lines
  • fiche_commerce unknown never probed

    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/<lien>, 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).

    mcp-tool

    {
      "type": "object",
      "properties": {
        "nom": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Nom du commerce (aussi imprimé sur la carte)."
        },
        "lien": {
          "type": "string",
          "maxLength": 120,
          "description": "Lien 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é."
        },
        "langue": {
          "enum": [
            "fr",
            "en",
            "es"
          ],
          "type": "string",
          "description": "Langue du commerce : celle de la carte, des pages et des messages vus par les clients."
        },
        "metier": {
          "enum": [
            "cafe",
            "boulangerie",
            "patisserie",
            "glacier",
            "restaurant",
            "creperie",
            "sushi",
            "snack",
            "foodtruck",
            "boucherie",
            "fromagerie",
            "primeur",
            "vrac",
            "ongles",
            "institut",
            "barbier",
            "boutique",
            "fleuriste",
            "librairie",
            "animalerie",
            "pressing",
            "cordonnerie",
            "laverie",
            "lavage",
            "toilettage",
            "sport",
            "escalade",
            "loisirs",
            "autre"
          ],
          "type": "string",
          "description": "Type de commerce, l’un des métiers de l’inscription. « autre » : tout ce qui n’a pas son métier."
        },
        "adresse": {
          "type": "string",
          "maxLength": 160,
          "description": "Adresse, au dos de la carte (160 caractères au plus)."
        },
        "effacer": {
          "type": "array",
          "items": {
            "enum": [
              "adresse",
              "telephone",
              "horaires",
              "site_web",
              "message_bienvenue",
              "lien"
            ],
            "type": "string"
          },
          "maxItems": 6,
          "description": "Champs à vider. « lien » : l’adresse publique redevient l’identifiant technique (le lien reste réservé à ce commerce)."
        },
        "horaires": {
          "type": "string",
          "maxLength": 120,
          "description": "Horaires d’ouverture, en texte libre (ex. « Mar–sam 7 h–19 h »)."
        },
        "site_web": {
          "type": "string",
          "maxLength": 160,
          "description": "Site web ou page Instagram."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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."
        },
        "telephone": {
          "type": "string",
          "maxLength": 30,
          "description": "Téléphone, au dos de la carte."
        },
        "panier_moyen": {
          "type": "number",
          "maximum": 100000,
          "minimum": 0.01,
          "description": "Dépense moyenne d’un client par passage, en euros."
        },
        "lieux_ajouter": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "nom"
            ],
            "properties": {
              "nom": {
                "type": "string",
                "maxLength": 40,
                "description": "Nom court du lieu (« Boutique », « Marché du dimanche »), 40 caractères au plus."
              },
              "jours": {
                "type": "array",
                "items": {
                  "enum": [
                    "dimanche",
                    "lundi",
                    "mardi",
                    "mercredi",
                    "jeudi",
                    "vendredi",
                    "samedi",
                    "tous"
                  ],
                  "type": "string"
                },
                "maxItems": 7,
                "description": "Jours où le lieu est actif. Absent ou « tous » : tous les jours."
              },
              "adresse": {
                "type": "string",
                "maxLength": 160,
                "description": "Adresse à chercher pour placer le point (géocodée par la Base Adresse Nationale ou OpenStreetMap ; l’aperçu montre ce qui a été trouvé)."
              },
              "heure_fin": {
                "type": "string",
                "pattern": "^\\d{1,2}[:h]\\d{2}$",
                "examples": [
                  "14:00"
                ],
                "description": "Fin de la plage horaire, « HH:MM »."
              },
              "coordonnees": {
                "type": "string",
                "maxLength": 400,
                "description": "Ou des coordonnées « 45.7640, 4.8357 », ou un lien Google Maps / OpenStreetMap."
              },
              "heure_debut": {
                "type": "string",
                "pattern": "^\\d{1,2}[:h]\\d{2}$",
                "examples": [
                  "11:30"
                ],
                "description": "Début de la plage horaire, « HH:MM » (facultatif, écrit au dos de la carte : les téléphones n’allument un lieu que pour la journée)."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 10,
          "description": "Lieux à 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_retirer": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "maxItems": 10,
          "description": "Lieux à retirer, par identifiant. « principal » retire seulement le point de l’adresse (il revient si l’adresse change)."
        },
        "lieux_modifier": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "lieu"
            ],
            "properties": {
              "nom": {
                "type": "string",
                "maxLength": 40,
                "description": "Nom court du lieu (« Boutique », « Marché du dimanche »), 40 caractères au plus."
              },
              "lieu": {
                "type": "string",
                "maxLength": 40,
                "description": "Le lieu à modifier : son identifiant (rendu par la lecture de la fiche) ou « principal » (celui de l’adresse au dos de la carte)."
              },
              "jours": {
                "type": "array",
                "items": {
                  "enum": [
                    "dimanche",
                    "lundi",
                    "mardi",
                    "mercredi",
                    "jeudi",
                    "vendredi",
                    "samedi",
                    "tous"
                  ],
                  "type": "string"
                },
                "maxItems": 7,
                "description": "Jours où le lieu est actif. Absent ou « tous » : tous les jours."
              },
              "adresse": {
                "type": "string",
                "maxLength": 160,
                "description": "Adresse à chercher pour placer le point (géocodée par la Base Adresse Nationale ou OpenStreetMap ; l’aperçu montre ce qui a été trouvé)."
              },
              "heure_fin": {
                "type": "string",
                "pattern": "^\\d{1,2}[:h]\\d{2}$",
                "examples": [
                  "14:00"
                ],
                "description": "Fin de la plage horaire, « HH:MM »."
              },
              "coordonnees": {
                "type": "string",
                "maxLength": 400,
                "description": "Ou des coordonnées « 45.7640, 4.8357 », ou un lien Google Maps / OpenStreetMap."
              },
              "heure_debut": {
                "type": "string",
                "pattern": "^\\d{1,2}[:h]\\d{2}$",
                "examples": [
                  "11:30"
                ],
                "description": "Début de la plage horaire, « HH:MM » (facultatif, écrit au dos de la carte : les téléphones n’allument un lieu que pour la journée)."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 10,
          "description": "Lieux à 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_bienvenue": {
          "type": "string",
          "maxLength": 180,
          "description": "Petit mot au dos de la carte, lu par le client en l’ajoutant."
        }
      },
      "additionalProperties": false
    }
    arguments 253 lines
  • affichette unknown 2d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "format": {
          "enum": [
            "a5",
            "a6"
          ],
          "type": "string",
          "default": "a5",
          "description": "Format du PDF mis en avant : a5 (demi-feuille, affiche de comptoir) ou a6 (quart de feuille, chevalet ou porte-carte)."
        }
      },
      "additionalProperties": false
    }
    arguments 15 lines
  • chercher_clients unknown 2d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "tri": {
          "enum": [
            "derniere_visite",
            "visites",
            "visites_90j",
            "tampons",
            "recompenses",
            "inscription",
            "prenom"
          ],
          "type": "string",
          "default": "derniere_visite",
          "description": "Ordre des résultats. Défaut derniere_visite (les plus récents d’abord)."
        },
        "ordre": {
          "enum": [
            "auto",
            "asc",
            "desc"
          ],
          "type": "string",
          "default": "auto",
          "description": "auto (défaut) : décroissant, sauf prenom (A→Z)."
        },
        "limite": {
          "type": "integer",
          "default": 25,
          "maximum": 100,
          "minimum": 1,
          "description": "Nombre maximum de résultats."
        },
        "wallet": {
          "enum": [
            "tous",
            "apple",
            "google",
            "aucun"
          ],
          "type": "string",
          "default": "tous",
          "description": "Où le client garde sa carte. aucun = page web, sans wallet."
        },
        "segment": {
          "enum": [
            "tous",
            "habitues",
            "perdus",
            "presque",
            "recompense_prete",
            "nouveaux",
            "inactifs",
            "un_seul_passage"
          ],
          "type": "string",
          "default": "tous",
          "description": "Groupe 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."
        },
        "decalage": {
          "type": "integer",
          "default": 0,
          "minimum": 0,
          "description": "Nombre de résultats à sauter (pagination)."
        },
        "recherche": {
          "type": "string",
          "maxLength": 60,
          "minLength": 1,
          "description": "Morceau du prénom ou du nom (accents et casse ignorés)."
        },
        "tampons_max": {
          "type": "integer",
          "minimum": 0,
          "description": "Tampons au plus sur la carte en cours."
        },
        "tampons_min": {
          "type": "integer",
          "minimum": 0,
          "description": "Tampons au moins sur la carte en cours."
        },
        "visites_max": {
          "type": "integer",
          "minimum": 0,
          "description": "Passages au plus depuis l’inscription."
        },
        "visites_min": {
          "type": "integer",
          "minimum": 0,
          "description": "Passages au moins depuis l’inscription (tampons de bienvenue exclus)."
        },
        "inscrit_avant": {
          "type": "string",
          "format": "date",
          "description": "Inscrit ce jour-là ou avant (AAAA-MM-JJ)."
        },
        "inscrit_depuis": {
          "type": "string",
          "format": "date",
          "description": "Inscrit ce jour-là ou après (AAAA-MM-JJ)."
        },
        "actif_depuis_jours": {
          "type": "integer",
          "maximum": 3650,
          "minimum": 1,
          "description": "Au moins un passage dans les N derniers jours."
        },
        "inactif_depuis_jours": {
          "type": "integer",
          "maximum": 3650,
          "minimum": 1,
          "description": "Aucun passage depuis au moins N jours calendaires (un client jamais venu compte depuis son inscription)."
        },
        "derniere_visite_avant": {
          "type": "string",
          "format": "date",
          "description": "Dernier passage ce jour-là ou avant (AAAA-MM-JJ). Exclut ceux jamais venus."
        },
        "derniere_visite_depuis": {
          "type": "string",
          "format": "date",
          "description": "Dernier passage ce jour-là ou après (AAAA-MM-JJ)."
        }
      },
      "additionalProperties": false
    }
    arguments 127 lines
  • envoyer_message unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "texte": {
          "type": "string",
          "maxLength": 180,
          "minLength": 1,
          "description": "Le 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."
        },
        "langue": {
          "enum": [
            "fr",
            "en",
            "es"
          ],
          "type": "string",
          "description": "Avec client_id et un modèle : la langue du texte prêt. Par défaut, celle du commerce."
        },
        "modele": {
          "enum": [
            "pret",
            "retrait",
            "recu",
            "attente",
            "libre"
          ],
          "type": "string",
          "description": "Avec 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é."
        },
        "audience": {
          "enum": [
            "tous",
            "habitues",
            "perdus",
            "presque",
            "nouveaux",
            "recompense_prete",
            "inactifs"
          ],
          "type": "string",
          "default": "tous",
          "description": "Qui 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 »."
        },
        "aussi_sms": {
          "type": "boolean",
          "default": false,
          "description": "Avec client_id : aussi par SMS (formule Croissance, budget du mois, entre 8 h et 20 h, sinon à l’ouverture). Défaut false."
        },
        "client_id": {
          "type": "string",
          "description": "Identifiant (UUID) d’UN client, rendu par chercher_clients ou fiche_client : le message part à lui seul. Exclut audience et filtres."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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_email": {
          "type": "boolean",
          "default": false,
          "description": "Avec client_id : aussi par e-mail, si le client en a laissé un. Défaut false."
        },
        "tampons_max": {
          "type": "integer",
          "maximum": 500,
          "minimum": 0,
          "description": "Filtre : au plus N tampons sur la carte en cours."
        },
        "tampons_min": {
          "type": "integer",
          "maximum": 500,
          "minimum": 0,
          "description": "Filtre : au moins N tampons sur la carte en cours."
        },
        "passages_min": {
          "type": "integer",
          "maximum": 10000,
          "minimum": 1,
          "description": "Filtre : au moins N passages au total depuis l’inscription."
        },
        "inscrit_avant": {
          "type": "string",
          "format": "date",
          "description": "Filtre : inscrits avant ce jour-là (AAAA-MM-JJ, exclu)."
        },
        "inscrit_depuis": {
          "type": "string",
          "format": "date",
          "description": "Filtre : inscrits ce jour-là ou après (AAAA-MM-JJ)."
        },
        "actif_depuis_jours": {
          "type": "integer",
          "maximum": 730,
          "minimum": 1,
          "description": "Filtre : au moins un passage dans les N derniers jours d’ouverture."
        },
        "inactif_depuis_jours": {
          "type": "integer",
          "maximum": 730,
          "minimum": 1,
          "description": "Filtre : pas de passage depuis au moins N jours d’OUVERTURE (les jours fermés et les congés ne comptent pas)."
        }
      },
      "additionalProperties": false
    }
    arguments 105 lines
  • modifier_carte unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "nom": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Nom du commerce, imprimé en haut de la carte."
        },
        "mode": {
          "enum": [
            "tampons",
            "paliers",
            "points"
          ],
          "type": "string",
          "description": "tampons : 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)."
        },
        "tampon": {
          "enum": [
            "rond",
            "etincelle",
            "eclat",
            "goutte",
            "main",
            "pinceau",
            "oeil",
            "ciseaux",
            "sechoir",
            "fleur",
            "lotus",
            "coeur",
            "etoile",
            "diamant",
            "couronne",
            "soleil",
            "lune",
            "talon",
            "robe",
            "sac",
            "serviette",
            "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",
            "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",
            "croissant"
          ],
          "type": "string",
          "description": "Le 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."
        },
        "couleur": {
          "type": "string",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "examples": [
            "#2b4431"
          ],
          "description": "Couleur de fond libre, en hexadécimal. L’encre (texte) est choisie automatiquement pour rester lisible."
        },
        "palette": {
          "type": "integer",
          "maximum": 3,
          "minimum": 0,
          "description": "Palette 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."
        },
        "paliers": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "a",
              "recompense"
            ],
            "properties": {
              "a": {
                "type": "integer",
                "maximum": 1000000,
                "minimum": 1,
                "description": "Seuil : nombre de tampons (ou de points en mode points) pour obtenir ce palier."
              },
              "icone": {
                "enum": [
                  "etincelle",
                  "eclat",
                  "goutte",
                  "main",
                  "pinceau",
                  "oeil",
                  "ciseaux",
                  "sechoir",
                  "fleur",
                  "lotus",
                  "coeur",
                  "etoile",
                  "diamant",
                  "couronne",
                  "soleil",
                  "lune",
                  "talon",
                  "robe",
                  "sac",
                  "serviette",
                  "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",
                  "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",
                  "croissant"
                ],
                "type": "string",
                "description": "Icône du palier (défaut : cadeau)."
              },
              "recompense": {
                "type": "string",
                "maxLength": 120,
                "minLength": 1,
                "description": "Ce que le client reçoit, tel qu’imprimé sur la carte. Ex. « Un café offert »."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 6,
          "minItems": 1,
          "description": "Les récompenses et leurs seuils (modes paliers et points). Du plus petit au plus grand."
        },
        "tampons": {
          "type": "integer",
          "maximum": 30,
          "minimum": 2,
          "description": "Nombre de passages pour obtenir la récompense (mode tampons), de 2 à 30."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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."
        },
        "collection": {
          "enum": [
            "original",
            "cafe",
            "botanique",
            "trattoria",
            "atelier",
            "pass"
          ],
          "type": "string",
          "description": "Style 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)."
        },
        "recompense": {
          "type": "string",
          "maxLength": 120,
          "description": "La récompense (mode tampons). Ignorée si « paliers » est donné."
        },
        "forme_points": {
          "enum": [
            "medailles",
            "vitrine",
            "remplissage",
            "chemin",
            "anneau"
          ],
          "type": "string",
          "description": "Mode 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_paliers": {
          "enum": [
            "tampons",
            "medailles",
            "vitrine",
            "remplissage",
            "chemin",
            "anneau"
          ],
          "type": "string",
          "description": "Mode 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_points": {
          "type": "string",
          "maxLength": 20,
          "description": "Mode points : comment s’appellent les points (« points », « graines », « étoiles »…)."
        },
        "points_par_euro": {
          "type": "number",
          "maximum": 10000,
          "minimum": 0.01,
          "description": "Mode points : points par euro dépensé, repère affiché au commerçant (ex. 1 ou 0,5)."
        },
        "points_par_defaut": {
          "type": "integer",
          "maximum": 100000,
          "minimum": 1,
          "description": "Mode points : points posés par défaut à chaque passage (1 à 100 000)."
        },
        "points_raccourcis": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 100000,
            "minimum": 1
          },
          "maxItems": 12,
          "minItems": 1,
          "description": "Mode points : les valeurs proposées d’un geste au scan (jusqu’à 6, triées et dédoublonnées). Ex. [1, 2, 5, 10]."
        },
        "tampons_bienvenue": {
          "type": "integer",
          "maximum": 5,
          "minimum": 0,
          "description": "Tampons offerts à l’inscription du client (0 à 5). 1 par défaut : une carte entamée donne envie d’être finie."
        },
        "expiration_recompense_jours": {
          "type": "integer",
          "maximum": 365,
          "minimum": 0,
          "description": "Jours pendant lesquels une récompense gagnée reste valable : 0, 30, 60, 90, 180, 365 (0 = n’expire pas)."
        }
      },
      "additionalProperties": false
    }
    arguments 325 lines
  • annuler_invitation unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "invitation"
      ],
      "properties": {
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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."
        },
        "invitation": {
          "type": "string",
          "maxLength": 300,
          "description": "Le lien d’invitation ou son jeton, lus avec lister_equipe."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • lister_messages_recurrents unknown 3h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • meilleurs_moments unknown 3h ago

    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 ? ».

    mcp-tool

    {
      "type": "object",
      "properties": {
        "au": {
          "type": "string",
          "format": "date",
          "description": "Dernier jour inclus (AAAA-MM-JJ). Défaut : aujourd’hui."
        },
        "du": {
          "type": "string",
          "format": "date",
          "description": "Premier jour inclus (AAAA-MM-JJ). Le donner suffit : la période devient « personnalisee »."
        },
        "par": {
          "enum": [
            "jour_semaine",
            "heure",
            "creneau"
          ],
          "type": "string",
          "default": "jour_semaine",
          "description": "jour_semaine (défaut) : moyenne par lundi, mardi… ; heure : total par heure de la journée ; creneau : les couples jour + heure les plus chargés."
        },
        "jours": {
          "type": "array",
          "items": {
            "enum": [
              "lundi",
              "mardi",
              "mercredi",
              "jeudi",
              "vendredi",
              "samedi",
              "dimanche"
            ],
            "type": "string"
          },
          "maxItems": 7,
          "description": "Pour par=heure ou creneau : ne garder que ces jours de la semaine (ex. [\"samedi\"])."
        },
        "limite": {
          "type": "integer",
          "default": 10,
          "maximum": 50,
          "minimum": 1,
          "description": "Pour par=creneau : nombre de créneaux rendus (défaut 10)."
        },
        "mesure": {
          "enum": [
            "passages",
            "nouveaux_clients"
          ],
          "type": "string",
          "default": "passages",
          "description": "passages (défaut) ou nouveaux_clients (inscriptions à la carte)."
        },
        "periode": {
          "enum": [
            "aujourdhui",
            "hier",
            "derniers_7_jours",
            "derniers_30_jours",
            "derniers_90_jours",
            "derniers_12_mois",
            "cette_semaine",
            "semaine_derniere",
            "ce_mois",
            "mois_dernier",
            "cette_annee",
            "annee_derniere",
            "depuis_le_debut",
            "personnalisee"
          ],
          "type": "string",
          "default": "derniers_90_jours",
          "description": "Pé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."
        }
      },
      "additionalProperties": false
    }
    arguments 80 lines
  • lister_equipe unknown 30h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • voir_carte unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "qr": {
          "type": "boolean",
          "default": false,
          "description": "true : joint le QR d’inscription des clients (celui de l’affichette), pour essayer la carte sur son téléphone."
        },
        "variantes": {
          "type": "boolean",
          "default": false,
          "description": "true : montre aussi les trois palettes de la collection actuelle, pour proposer un changement de couleur (à passer ensuite en « palette » à modifier_carte)."
        },
        "tampons_poses": {
          "type": "integer",
          "maximum": 1000000,
          "minimum": 0,
          "description": "Tampons (ou points) posés sur l’aperçu, pour montrer une carte en cours (défaut : tampons de bienvenue + 2)."
        }
      },
      "additionalProperties": false
    }
    arguments 22 lines
  • envoyer_affichette unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • inviter_membre unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "nom": {
          "type": "string",
          "maxLength": 60,
          "description": "Repère pour s’y retrouver dans les invitations (ex. « Julie, le matin »)."
        },
        "role": {
          "enum": [
            "staff",
            "manager"
          ],
          "type": "string",
          "description": "staff (défaut) = employé, ne voit que le scanner ; manager = responsable, voit chiffres, clients, messages et règle la carte."
        },
        "email": {
          "type": "string",
          "maxLength": 254,
          "description": "Adresse de la personne invitée : l’invitation lui est envoyée par e-mail. Sans adresse, le lien est rendu."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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."
        }
      },
      "additionalProperties": false
    }
    arguments 29 lines
  • retirer_membre unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "maxLength": 254,
          "description": "Ou l’e-mail du membre, à la place de membre_id."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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_id": {
          "type": "string",
          "maxLength": 36,
          "description": "Identifiant du membre, lu avec lister_equipe."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • tableau_de_bord unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "au": {
          "type": "string",
          "format": "date",
          "description": "Dernier jour inclus (AAAA-MM-JJ). Défaut : aujourd’hui."
        },
        "du": {
          "type": "string",
          "format": "date",
          "description": "Premier jour inclus (AAAA-MM-JJ). Le donner suffit : la période devient « personnalisee »."
        },
        "courbe": {
          "enum": [
            "passages",
            "clients_venus",
            "nouveaux_clients",
            "recompenses_gagnees",
            "recompenses_offertes",
            "aucune"
          ],
          "type": "string",
          "default": "passages",
          "description": "Ce que trace la courbe. Défaut passages."
        },
        "periode": {
          "enum": [
            "aujourdhui",
            "hier",
            "derniers_7_jours",
            "derniers_30_jours",
            "derniers_90_jours",
            "derniers_12_mois",
            "cette_semaine",
            "semaine_derniere",
            "ce_mois",
            "mois_dernier",
            "cette_annee",
            "annee_derniere",
            "depuis_le_debut",
            "personnalisee"
          ],
          "type": "string",
          "default": "derniers_30_jours",
          "description": "Pé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."
        },
        "comparer": {
          "type": "boolean",
          "default": true,
          "description": "Ajoute la variation par rapport à la période de même durée juste avant (ex. 30 jours avant les 30 derniers jours)."
        },
        "granularite": {
          "enum": [
            "auto",
            "jour",
            "semaine",
            "mois"
          ],
          "type": "string",
          "default": "auto",
          "description": "Pas de la courbe. auto (défaut) : jour jusqu’à 2 mois, semaine jusqu’à ~9 mois, mois au-delà."
        },
        "indicateurs": {
          "type": "array",
          "items": {
            "enum": [
              "passages",
              "clients_venus",
              "nouveaux_clients",
              "taux_retour",
              "passages_par_client",
              "recompenses_gagnees",
              "recompenses_offertes",
              "chiffre_estime",
              "total_clients"
            ],
            "type": "string"
          },
          "maxItems": 9,
          "minItems": 1,
          "description": "Indicateurs à 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)."
        }
      },
      "additionalProperties": false
    }
    arguments 86 lines
  • programmer_message_recurrent unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "texte"
      ],
      "properties": {
        "fin": {
          "type": "string",
          "format": "date",
          "description": "Dernier jour possible, inclus (AAAA-MM-JJ). Facultatif."
        },
        "rang": {
          "enum": [
            "premier",
            "deuxieme",
            "troisieme",
            "quatrieme",
            "dernier"
          ],
          "type": "string",
          "description": "Pour frequence=mois : « premier » lundi, …, « dernier » vendredi du mois (avec jour_rang)."
        },
        "debut": {
          "type": "string",
          "format": "date",
          "description": "Premier jour possible (AAAA-MM-JJ). Par défaut aujourd’hui."
        },
        "heure": {
          "type": "string",
          "pattern": "^\\d{1,2}:\\d{2}$",
          "description": "L’heure du commerce, HH:MM, entre 07:00 et 21:45."
        },
        "jours": {
          "type": "array",
          "items": {
            "enum": [
              "dimanche",
              "lundi",
              "mardi",
              "mercredi",
              "jeudi",
              "vendredi",
              "samedi"
            ],
            "type": "string"
          },
          "maxItems": 7,
          "description": "Pour frequence=semaine : les jours d’envoi."
        },
        "texte": {
          "type": "string",
          "maxLength": 180,
          "minLength": 1,
          "description": "Le texte exact de la notification, 180 caractères au plus."
        },
        "groupe": {
          "enum": [
            "tous",
            "inactifs_30",
            "inactifs_60",
            "inactifs_90",
            "proches",
            "anniversaires",
            "meilleurs",
            "nouveaux"
          ],
          "type": "string",
          "description": "Qui 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)."
        },
        "nombre": {
          "type": "integer",
          "maximum": 366,
          "minimum": 1,
          "description": "Ou : le nombre d’envois réellement partis après lequel la règle s’arrête."
        },
        "si_ferme": {
          "enum": [
            "sauter",
            "decaler"
          ],
          "type": "string",
          "description": "Un jour de fermeture ou de congés : sauter (défaut) ou décaler au jour ouvert suivant."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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."
        },
        "frequence": {
          "enum": [
            "semaine",
            "mois"
          ],
          "type": "string",
          "description": "semaine : avec jours. mois : avec jour_mois, ou rang et jour_rang."
        },
        "jour_mois": {
          "type": "integer",
          "maximum": 31,
          "minimum": 1,
          "description": "Pour frequence=mois : le jour du mois (1 à 31 ; un 31 tombe le dernier jour d’un mois plus court)."
        },
        "jour_rang": {
          "enum": [
            "dimanche",
            "lundi",
            "mardi",
            "mercredi",
            "jeudi",
            "vendredi",
            "samedi"
          ],
          "type": "string",
          "description": "Le jour de la semaine qui va avec rang."
        }
      },
      "additionalProperties": false
    }
    arguments 118 lines
  • reprendre_message_recurrent unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "minimum": 1,
          "description": "La règle visée, donnée par lister_messages_recurrents."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • historique_messages unknown 30h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "depuis": {
          "type": "string",
          "format": "date",
          "description": "Seulement 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)."
        },
        "limite": {
          "type": "integer",
          "default": 10,
          "maximum": 50,
          "minimum": 1,
          "description": "Nombre maximum de résultats."
        },
        "decalage": {
          "type": "integer",
          "default": 0,
          "minimum": 0,
          "description": "Nombre de résultats à sauter (pagination)."
        },
        "jusqu_au": {
          "type": "string",
          "format": "date",
          "description": "Seulement les envois jusqu’à ce jour inclus (AAAA-MM-JJ)."
        }
      },
      "additionalProperties": false
    }
    arguments 29 lines
  • lister_fermetures unknown 3h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • ajouter_conges unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "du"
      ],
      "properties": {
        "au": {
          "type": "string",
          "format": "date",
          "description": "Dernier jour fermé, inclus (AAAA-MM-JJ). Par défaut, le même jour que du."
        },
        "du": {
          "type": "string",
          "format": "date",
          "description": "Premier jour fermé (AAAA-MM-JJ)."
        },
        "texte": {
          "type": "string",
          "maxLength": 180,
          "minLength": 1,
          "description": "Texte de la notification aux clients (180 caractères au plus), si prevenir_clients=true."
        },
        "libelle": {
          "type": "string",
          "maxLength": 80,
          "description": "Nom de la période, pour s’y retrouver (« Congés d’été »)."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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_clients": {
          "type": "boolean",
          "default": false,
          "description": "true : envoie aussi une notification à tous les clients avec texte. Compte comme le message du jour."
        }
      },
      "additionalProperties": false
    }
    arguments 40 lines
  • supprimer_conges unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Identifiant de la période à supprimer (donné par lister_fermetures)."
        },
        "texte": {
          "type": "string",
          "maxLength": 180,
          "minLength": 1,
          "description": "Texte de la notification aux clients (180 caractères au plus), si prevenir_clients=true."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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_clients": {
          "type": "boolean",
          "default": false,
          "description": "true : envoie aussi une notification à tous les clients avec texte. Compte comme le message du jour."
        }
      },
      "additionalProperties": false
    }
    arguments 29 lines
  • simuler_fidelite unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "panier_moyen",
        "cout_recompense",
        "tampons"
      ],
      "properties": {
        "marge": {
          "type": "number",
          "default": 65,
          "maximum": 100,
          "minimum": 1,
          "description": "Marge brute sur un panier, en pourcentage (défaut 65 %, typique en restauration et services)."
        },
        "tampons": {
          "type": "integer",
          "maximum": 30,
          "minimum": 2,
          "description": "Passages pour obtenir la récompense."
        },
        "comparer": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 30,
            "minimum": 2
          },
          "maxItems": 5,
          "description": "Autres nombres de passages à comparer (ex. [6, 10, 12])."
        },
        "panier_moyen": {
          "type": "number",
          "maximum": 10000,
          "minimum": 0.5,
          "description": "Dépense moyenne d’un client par passage, en euros."
        },
        "clients_fideles": {
          "type": "integer",
          "default": 60,
          "maximum": 100000,
          "minimum": 1,
          "description": "Clients qui prendraient la carte chaque mois (défaut 60)."
        },
        "cout_recompense": {
          "type": "number",
          "maximum": 10000,
          "minimum": 0,
          "description": "Ce que coûte la récompense AU COMMERÇANT (prix de revient, pas prix de vente), en euros."
        },
        "visites_par_mois": {
          "type": "number",
          "default": 2,
          "maximum": 60,
          "minimum": 0.1,
          "description": "Visites par mois d’un client fidèle aujourd’hui (défaut 2)."
        },
        "tampons_bienvenue": {
          "type": "integer",
          "default": 1,
          "maximum": 5,
          "minimum": 0,
          "description": "Tampons offerts à l’inscription."
        }
      },
      "additionalProperties": false
    }
    arguments 67 lines
  • creer_commerce unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "nom"
      ],
      "properties": {
        "nom": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Nom du commerce, imprimé en haut de la carte."
        },
        "mode": {
          "enum": [
            "tampons",
            "paliers",
            "points"
          ],
          "type": "string",
          "description": "tampons : 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)."
        },
        "encre": {
          "type": "string",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "examples": [
            "#1f1a14"
          ],
          "description": "Couleur du texte de la carte, en hexadécimal (défaut : choisie pour rester lisible sur le fond)."
        },
        "forme": {
          "enum": [
            "medailles",
            "vitrine",
            "remplissage",
            "chemin",
            "anneau",
            "grille",
            "libre",
            "objets",
            "cercles"
          ],
          "type": "string",
          "description": "Le 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."
        },
        "accent": {
          "type": "string",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "examples": [
            "#c2185b"
          ],
          "description": "Couleur d’accent : les tampons posés, les jauges, les étiquettes, en hexadécimal (défaut : tirée de la collection)."
        },
        "langue": {
          "enum": [
            "fr",
            "en",
            "es"
          ],
          "type": "string",
          "description": "Langue des textes rendus. Par défaut, celle du commerce."
        },
        "metier": {
          "enum": [
            "cafe",
            "boulangerie",
            "patisserie",
            "glacier",
            "restaurant",
            "creperie",
            "sushi",
            "snack",
            "foodtruck",
            "boucherie",
            "fromagerie",
            "primeur",
            "vrac",
            "ongles",
            "institut",
            "barbier",
            "boutique",
            "fleuriste",
            "librairie",
            "animalerie",
            "pressing",
            "cordonnerie",
            "laverie",
            "lavage",
            "toilettage",
            "sport",
            "escalade",
            "loisirs",
            "autre"
          ],
          "type": "string",
          "description": "Type 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."
        },
        "tampon": {
          "enum": [
            "rond",
            "etincelle",
            "eclat",
            "goutte",
            "main",
            "pinceau",
            "oeil",
            "ciseaux",
            "sechoir",
            "fleur",
            "lotus",
            "coeur",
            "etoile",
            "diamant",
            "couronne",
            "soleil",
            "lune",
            "talon",
            "robe",
            "sac",
            "serviette",
            "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",
            "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",
            "croissant"
          ],
          "type": "string",
          "description": "Le 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."
        },
        "couleur": {
          "type": "string",
          "pattern": "^#[0-9a-fA-F]{6}$",
          "examples": [
            "#2b4431"
          ],
          "description": "Couleur de fond libre, en hexadécimal. L’encre (texte) est choisie automatiquement pour rester lisible."
        },
        "palette": {
          "type": "integer",
          "maximum": 3,
          "minimum": 0,
          "description": "Palette 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."
        },
        "paliers": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "a",
              "recompense"
            ],
            "properties": {
              "a": {
                "type": "integer",
                "maximum": 1000000,
                "minimum": 1,
                "description": "Seuil : nombre de tampons (ou de points en mode points) pour obtenir ce palier."
              },
              "icone": {
                "enum": [
                  "etincelle",
                  "eclat",
                  "goutte",
                  "main",
                  "pinceau",
                  "oeil",
                  "ciseaux",
                  "sechoir",
                  "fleur",
                  "lotus",
                  "coeur",
                  "etoile",
                  "diamant",
                  "couronne",
                  "soleil",
                  "lune",
                  "talon",
                  "robe",
                  "sac",
                  "serviette",
                  "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",
                  "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",
                  "croissant"
                ],
                "type": "string",
                "description": "Icône du palier (défaut : cadeau)."
              },
              "image_url": {
                "type": "string",
                "pattern": "^https://\\S+$",
                "examples": [
                  "https://exemple.com/croissant.jpg"
                ],
                "maxLength": 2000,
                "description": "Photo de la récompense, par son adresse https (PNG, JPEG ou WebP, 5 Mo au plus, 64 px de côté au moins). Détourée quand c’est possible, elle prend la place de l’icône sur la carte : en gris avant d’être gagnée, en couleur après. Dessinée en modes paliers et points."
              },
              "recompense": {
                "type": "string",
                "maxLength": 120,
                "minLength": 1,
                "description": "Ce que le client reçoit, tel qu’imprimé sur la carte. Ex. « Un café offert »."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 6,
          "minItems": 1,
          "description": "Les récompenses et leurs seuils (modes paliers et points). Du plus petit au plus grand."
        },
        "tampons": {
          "type": "integer",
          "maximum": 30,
          "minimum": 2,
          "description": "Nombre de passages pour obtenir la récompense (mode tampons), de 2 à 30."
        },
        "logo_url": {
          "type": "string",
          "pattern": "^https://\\S+$",
          "examples": [
            "https://exemple.com/logo.png"
          ],
          "maxLength": 2000,
          "description": "Logo 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."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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."
        },
        "collection": {
          "enum": [
            "original",
            "cafe",
            "botanique",
            "trattoria",
            "atelier",
            "pass"
          ],
          "type": "string",
          "description": "Style 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)."
        },
        "recompense": {
          "type": "string",
          "maxLength": 120,
          "description": "La récompense (mode tampons). Ignorée si « paliers » est donné."
        },
        "forme_points": {
          "enum": [
            "medailles",
            "vitrine",
            "remplissage",
            "chemin",
            "anneau"
          ],
          "type": "string",
          "description": "Mode 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_moyen": {
          "type": "number",
          "maximum": 10000,
          "minimum": 0.5,
          "description": "Dépense moyenne d’un client, en euros (sert aux estimations du tableau de bord)."
        },
        "forme_paliers": {
          "enum": [
            "tampons",
            "medailles",
            "vitrine",
            "remplissage",
            "chemin",
            "anneau"
          ],
          "type": "string",
          "description": "Mode 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_points": {
          "type": "string",
          "maxLength": 20,
          "description": "Mode points : comment s’appellent les points (« points », « graines », « étoiles »…)."
        },
        "tampons_bienvenue": {
          "type": "integer",
          "maximum": 5,
          "minimum": 0,
          "description": "Tampons offerts à l’inscription du client (0 à 5). 1 par défaut : une carte entamée donne envie d’être finie."
        }
      },
      "additionalProperties": false
    }
    arguments 398 lines
  • rentabilite unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "au": {
          "type": "string",
          "format": "date",
          "description": "Dernier jour inclus (AAAA-MM-JJ). Défaut : aujourd’hui."
        },
        "du": {
          "type": "string",
          "format": "date",
          "description": "Premier jour inclus (AAAA-MM-JJ). Le donner suffit : la période devient « personnalisee »."
        },
        "periode": {
          "enum": [
            "aujourdhui",
            "hier",
            "derniers_7_jours",
            "derniers_30_jours",
            "derniers_90_jours",
            "derniers_12_mois",
            "cette_semaine",
            "semaine_derniere",
            "ce_mois",
            "mois_dernier",
            "cette_annee",
            "annee_derniere",
            "depuis_le_debut",
            "personnalisee"
          ],
          "type": "string",
          "default": "derniers_90_jours",
          "description": "Pé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."
        },
        "comparer": {
          "type": "boolean",
          "default": false,
          "description": "Ajoute la période de même durée juste avant, pour voir si ça progresse."
        },
        "panier_moyen": {
          "type": "number",
          "maximum": 10000,
          "minimum": 0.1,
          "description": "Panier moyen en euros pour ce calcul. Défaut : celui déclaré dans les réglages du commerce."
        },
        "cout_recompense": {
          "type": "number",
          "maximum": 10000,
          "minimum": 0,
          "description": "Ce 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é."
        }
      },
      "additionalProperties": false
    }
    arguments 54 lines
  • regler_jours_fermes unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "jours_fermes"
      ],
      "properties": {
        "texte": {
          "type": "string",
          "maxLength": 180,
          "minLength": 1,
          "description": "Texte de la notification aux clients (180 caractères au plus), si prevenir_clients=true."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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_fermes": {
          "type": "array",
          "items": {
            "enum": [
              "dimanche",
              "lundi",
              "mardi",
              "mercredi",
              "jeudi",
              "vendredi",
              "samedi"
            ],
            "type": "string"
          },
          "maxItems": 7,
          "description": "La liste COMPLÈTE des jours fermés chaque semaine (liste vide = ouvert tous les jours)."
        },
        "prevenir_clients": {
          "type": "boolean",
          "default": false,
          "description": "true : envoie aussi une notification à tous les clients avec texte. Compte comme le message du jour."
        }
      },
      "additionalProperties": false
    }
    arguments 42 lines
  • avis_google unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "lien": {
          "type": "string",
          "maxLength": 2000,
          "description": "Lien « écrire un avis » de la fiche Google (g.page/r/…/review, search.google.com/local/writereview?placeid=…). Sans lui, aucune demande ne part."
        },
        "moment": {
          "enum": [
            "recompense",
            "passages"
          ],
          "type": "string",
          "description": "Quand demander : recompense = à la première récompense ; passages = après N passages (voir passages)."
        },
        "effacer": {
          "type": "array",
          "items": {
            "enum": [
              "texte_demande"
            ],
            "type": "string"
          },
          "description": "Champs texte à vider. texte_demande revient au texte par défaut."
        },
        "passages": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1,
          "description": "Nombre de passages avant la demande, si moment=passages."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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_lien": {
          "type": "boolean",
          "description": "true : retire le lien de la fiche (coupe de fait toutes les demandes)."
        },
        "delai_minutes": {
          "type": "integer",
          "description": "Délai entre le passage et la demande, en minutes : 0, 30, 60, 180, 1440 (1440 = le lendemain)."
        },
        "texte_demande": {
          "type": "string",
          "maxLength": 300,
          "minLength": 1,
          "description": "Texte de la demande, 300 caractères au plus. Le lien vers la fiche Google est ajouté après."
        },
        "demande_active": {
          "type": "boolean",
          "description": "Envoyer ou non la demande d’avis aux clients."
        }
      },
      "additionalProperties": false
    }
    arguments 58 lines
  • changer_role_membre unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "role"
      ],
      "properties": {
        "role": {
          "enum": [
            "staff",
            "manager"
          ],
          "type": "string",
          "description": "staff = employé, ne voit que le scanner ; manager = responsable, voit chiffres, clients, messages et règle la carte, sans toucher à l’équipe."
        },
        "email": {
          "type": "string",
          "maxLength": 254,
          "description": "Ou l’e-mail du membre, à la place de membre_id."
        },
        "confirmer": {
          "type": "boolean",
          "default": false,
          "description": "false (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_id": {
          "type": "string",
          "maxLength": 36,
          "description": "Identifiant du membre, lu avec lister_equipe."
        }
      },
      "additionalProperties": false
    }
    arguments 32 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 4fe98cc675fb83b8.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/4fe98cc675fb83b8/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/4fe98cc675fb83b8/badge.svg)](https://brick.blue/agent/4fe98cc675fb83b8?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.