Connecteur Muse de SkyTarget : documentation
SkyTarget (Technologies Sky Target Inc., Montréal) est une plateforme de gestion pour les cliniques de soins et de bien-être. Son connecteur Muse permet aux personnes qui utilisent Muse, l’agent de Meta, de prendre rendez-vous dans les cliniques SkyTarget qui ont activé Muse. Cette page décrit ce que fait chaque outil, ce qu’il reçoit, ce qu’il renvoie et ses limites.
En bref
- Réservation seulement. Trouver une clinique, voir ses soins et ses heures libres, recevoir un code par texto, réserver. Aucun outil n’annule ni ne déplace un rendez-vous : pour cela, on appelle la clinique, dont le numéro accompagne chaque réservation.
- Chaque clinique décide. Seules les cliniques qui ont activé Muse paraissent, et leur interrupteur est revérifié à chaque appel.
- Le code reçu par texto est la seule preuve d’identité. Aucune réservation sans lui ; Muse le demande toujours à la personne, sans jamais le deviner ni le réutiliser.
- Gratuit pour les personnes qui utilisent Muse. Le connecteur ne prend aucun paiement ; ce sont les cliniques qui paient à SkyTarget des frais pour chaque réservation faite par Muse.
- Région et langues. Cliniques situées au Québec et ailleurs au Canada ; en français et en anglais.
Connexion
- Adresse du serveur MCP :
https://muse.skytarget.ca/mcp— transport « Streamable HTTP » de MCP, sans session, requêtesPOST; le client envoieAccept: application/json, text/event-stream. - Authentification : une clé d’API, remise à Meta, dans l’en-tête
Authorization: Bearersuivi de la clé, sur chaque requête. Clé absente ou fausse : HTTP 401 (avecWWW-Authenticate) avant tout outil. La comparaison se fait à temps constant. - Classe Meta : celle de chaque outil est aussi publiée dans son
_meta, sous la cléca.skytarget/classe-meta, avec les annotations MCP. - Réponses : chaque outil rend un statut explicite dans
structuredContent(et le même JSON en texte) ; aucun outil ne remonte d’exception au protocole. Des entrées hors schéma sont refusées par la validation MCP, avant l’outil et sans aucun appel à la clinique. - Autres réponses HTTP : 405 pour une autre méthode, 413 pour un corps de plus de 256 Ko, 400 pour un JSON illisible, 404 pour un autre chemin. État du service :
GET /health→{"ok":true}. - Sécurité : le connecteur est un service à part, sans aucune clé de base de données. Il n’appelle que l’API publique de réservation de chaque clinique — la même que sa page de réservation en ligne —, chaque appel signé (HMAC-SHA256) ; la clinique revérifie la signature, son interrupteur Muse et le code. Délai de 10 secondes par appel sortant. Les journaux ne portent jamais de nom, de code ni de corps de requête ; un téléphone n’y paraît que par ses deux derniers chiffres.
- Langues : les phrases des outils sont écrites en français, et chaque description demande à Muse de répondre dans la langue de la personne ; l’entrée
languechoisit la langue des soins et des textos.
Le parcours
L’ordre habituel : trouver_clinique, soins, disponibilites, envoyer_code, puis reserver — après que Muse a montré à la personne la clinique, le soin, la praticienne, la date, l’heure et le prix, et obtenu son accord explicite.
Les cinq outils
| Outil | Classe Meta | Ce qu’il fait |
|---|---|---|
trouver_clinique | Read | Trouver une clinique |
soins | Read | Les soins d’une clinique |
disponibilites | Read | Les heures libres |
envoyer_code | Write | Envoyer un code par texto |
reserver | Sensitive write | Réserver le rendez-vous |
trouver_clinique — Trouver une clinique
Classe Meta : Read
Annotations MCP : readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: true
Trouver les cliniques SkyTarget qui prennent des rendez-vous par Muse. N’y paraissent que les cliniques actives qui prennent des rendez-vous en ligne et qui ont activé Muse.
Entrées
ville(facultatif) — la ville (80 caractères au plus).nom(facultatif) — une partie du nom de la clinique (120 caractères au plus).metier(facultatif) — le métier, l’un de :massage,aesthetics,barber,physio,chirooudental.
Sorties — liste fermée
statut—okouechec.message— en cas d’échec, la phrase à relayer.cliniques— 10 au plus, chacune avec :clinique_id— l’identifiant de la clinique, à passer aux autres outils ;nom— son nom ;ville— sa ville (ounull) ;adresse— son adresse (ounull) ;telephone— son numéro de téléphone (ounull) ;langues— les langues parlées à la clinique (codes de langue).
Effets de bord
- Aucun : lecture seule, rien n’est écrit.
Statuts et erreurs
- Aucune clinique ne correspond :
oket une liste vide. - Les erreurs communes, plus bas.
soins — Les soins d’une clinique
Classe Meta : Read
Annotations MCP : readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: true
Lister les soins qu’une clinique propose en ligne — nom, durée, prix, courte description rédigée par la clinique — avec les praticiennes qui donnent chaque soin et le prix de chacune.
Entrées
clinique_id(obligatoire) — l’identifiant rendu partrouver_clinique.langue(facultatif) —fr(par défaut) ouen: la langue des noms et des descriptions.
Sorties — liste fermée
statut—okouechec.message— en cas d’échec, la phrase à relayer.soins— 60 au plus, chacun avec :soin_id— l’identifiant du soin, pourdisponibilites;nom— son nom ;duree_minutes— sa durée en minutes (ounull) ;prix— son prix, ounullquand la clinique ne le publie pas (Muse le dit, sans le deviner) :montant_cad— le montant, en dollars canadiens ;a_partir_de—truequand le prix dépend de la praticienne (« à partir de ») ;taxes_incluses—truequand les taxes sont comprises.
description— sa description par la clinique, 300 caractères au plus (ounull) ;praticiennes— celles qui donnent ce soin, 20 au plus :praticienne_id— son identifiant, pourdisponibilites;nom— son nom ;prix— son prix pour ce soin (ounull) :montant_cad— le montant, en dollars canadiens ;taxes_incluses—truequand les taxes sont comprises.
Effets de bord
- Aucun : lecture seule, rien n’est écrit.
Statuts et erreurs
- Identifiant de clinique inconnu. « Clinique introuvable. Cherchez-la d'abord par son nom ou sa ville. »
- Les erreurs communes, plus bas.
disponibilites — Les heures libres
Classe Meta : Read
Annotations MCP : readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: true
Lister les heures libres pour un soin, avec une praticienne au choix, à partir d’une date.
Entrées
clinique_id(obligatoire) — l’identifiant rendu partrouver_clinique.soin_id(obligatoire) — le soin, rendu parsoins.praticienne_id(facultatif) — une praticienne, rendue parsoins.date_debut(facultatif) — le premier jour cherché,YYYY-MM-DD, à la date locale de la clinique ; aujourd’hui par défaut.jours(facultatif) — le nombre de jours cherchés, de 1 à 14 ; 7 par défaut.
Sorties — liste fermée
statut—okouechec.message— en cas d’échec, ou quand aucune heure n’est libre.creneaux— 20 au plus, du plus tôt au plus tard, chacun avec :creneau_id— un jeton opaque signé par SkyTarget, à rendre tel quel àreserver; il expire après environ une heure ;date—YYYY-MM-DD, date locale de la clinique ;heure—HH:MM, sur 24 heures, heure locale de la clinique ;praticienne— son nom — les deux noms pour une séance à deux praticiennes (ounull).
Effets de bord
- Aucun : lecture seule, rien n’est écrit.
Statuts et erreurs
- Aucune heure libre :
ok, une liste vide et la phrase : « Aucun créneau libre à ces dates. Essayez des dates plus tard. » - Date au-delà de ce que la clinique accepte :
ok, une liste vide et : « La clinique ne prend pas de rendez-vous aussi loin. Choisissez une date plus proche. » - Soin inconnu de la clinique. « Ce soin est introuvable dans cette clinique. Consultez d'abord la liste de ses soins. »
- Les erreurs communes, plus bas.
envoyer_code — Envoyer un code par texto
Classe Meta : Write
Annotations MCP : readOnlyHint: false · destructiveHint: false · idempotentHint: false · openWorldHint: true
Envoyer par texto (SMS) un code de vérification à 6 chiffres au mobile de la personne, pour une réservation dans cette clinique. Le code prouve que la personne détient ce numéro ; reserver l’exige.
Entrées
clinique_id(obligatoire) — l’identifiant rendu partrouver_clinique.telephone(obligatoire) — le numéro de mobile de la personne, tel qu’elle le donne (7 à 25 caractères : chiffres, espaces et+,(,),.,-).langue(facultatif) —fr(par défaut) ouen: la langue du texto.
Sorties — liste fermée
statut—envoyeouechec.message— la phrase à relayer, toujours présente.
Effets de bord
- Envoie UN texto à chaque appel (non idempotent) : Muse ne l’appelle que lorsque la personne est prête à réserver.
- Le code expire après 5 minutes et ne sert qu’une fois ; en demander un nouveau remplace le précédent.
- La réponse est la même, que le numéro soit connu de la clinique ou non :
envoyeet « Un code a été envoyé par texto s'il s'agit d'un numéro valide. »
Statuts et erreurs
- Numéro qui ne peut pas exister (plan de numérotation public — rien de la clinique n’est lu). « Ce numéro de téléphone n'est pas valide. Vérifiez-le et réessayez. »
- Le texto n’a pas pu partir (aucun code envoyé). « Le code n'a pas pu être envoyé pour le moment. Réessayez dans quelques minutes, ou appelez la clinique. »
- Les erreurs communes, plus bas.
reserver — Réserver le rendez-vous
Classe Meta : Sensitive write
Annotations MCP : readOnlyHint: false · destructiveHint: false · idempotentHint: false · openWorldHint: true
Réserver le rendez-vous choisi. Avant l’appel, Muse montre à la personne la clinique, le soin, la praticienne, la date, l’heure et le prix, et obtient son accord explicite — la description de l’outil le lui demande.
Entrées
clinique_id(obligatoire) — l’identifiant rendu partrouver_clinique.creneau_id(obligatoire) — le créneau rendu pardisponibilites, tel quel.telephone(obligatoire) — le numéro qui a reçu le code.code(obligatoire) — les 6 chiffres reçus par texto — toujours demandés à la personne, jamais devinés.prenom(obligatoire) — le prénom de la personne (1 à 60 caractères).nom(obligatoire) — son nom de famille (1 à 60 caractères).langue(facultatif) —fr(par défaut) ouen: la langue des textos de la clinique pour une nouvelle cliente.
Sorties — liste fermée
statut—confirmeouechec.message— en cas d’échec, la phrase à relayer telle quelle.date—YYYY-MM-DD, date locale de la clinique ;heure—HH:MM, heure locale de la clinique ;soin— le nom du soin ;praticienne— le nom de la praticienne ;prix— le prix de CE rendez-vous, ounullquand il n’est pas connu exactement (jamais deviné) :montant_cad— le montant, en dollars canadiens ;taxes_incluses—truequand les taxes sont comprises.
telephone_clinique— le numéro de la clinique — aussi en cas d’échec, quand il est connu ;rappel— « Pour annuler ou déplacer ce rendez-vous, appelez la clinique au … »
Effets de bord
- Vérifie le code auprès de SkyTarget ; un code vérifié ne sert qu’une fois.
- Écrit UN rendez-vous à l’agenda de la clinique, marqué comme venu de Muse. N’efface ni ne modifie aucun rendez-vous (non destructif).
- Si la clinique n’a aucune fiche pour ce numéro, crée la fiche de la personne à son dossier (prénom, nom, téléphone, langue) ; sinon, la fiche existante sert telle quelle.
- La personne reçoit ensuite le texto de confirmation de la clinique, comme pour toute réservation.
- La clinique doit à SkyTarget des frais pour cette réservation — jamais la personne.
- Un code, un rendez-vous : rejouer l’appel avec le même code ne crée jamais un deuxième rendez-vous.
Statuts et erreurs
- Code refusé, QUEL QU’EN SOIT LE MOTIF (faux, expiré, déjà vérifié, bloqué) — jamais le motif ni le nombre d’essais restants : « Ce code n'est pas valide. Vérifiez le texto, ou demandez un nouveau code. »
- Code qui n’a pas 6 chiffres. « Le code doit comporter 6 chiffres. »
- Numéro qui ne peut pas exister. « Ce numéro de téléphone n'est pas valide. Vérifiez-le et réessayez. »
- Créneau pris entre-temps — rien n’est écrit, et le même code reste bon quelques minutes pour une autre heure. « Ce créneau vient d'être pris. Choisissez une autre heure. »
- Créneau expiré. « Ce créneau a expiré. Demandez de nouvelles disponibilités. »
- Soin retiré de la réservation en ligne. « Ce soin n'est plus proposé en ligne. Choisissez-en un autre. »
- Date au-delà de ce que la clinique accepte. « La clinique ne prend pas de rendez-vous aussi loin. Choisissez une date plus proche. »
- Vérification du numéro périmée. « La vérification du numéro n'est plus valide. Demandez un nouveau code. »
- Code déjà utilisé pour une réservation — jamais « demandez un nouveau code », qui mènerait à un deuxième rendez-vous : « Ce code a déjà servi : une réservation a peut-être déjà été faite. Vérifiez le texto de confirmation, ou appelez la clinique au … »
- Issue incertaine (panne, délai dépassé pendant l’écriture) : on ne sait pas si le rendez-vous existe ; un nouvel essai avec le même code ne crée jamais un deuxième rendez-vous : « Nous n'avons pas pu confirmer la réservation. Vérifiez si vous recevez un texto de confirmation dans les prochaines minutes ; sinon, appelez la clinique au … »
- Tout autre refus — rien n’est écrit : « La réservation n'a pas été faite. Réessayez, ou appelez la clinique au … »
- Après
echec, Muse ne réessaie pas sans la personne (consigne de l’outil). Et les erreurs communes, plus bas.
Les erreurs communes
Chacun des cinq outils peut répondre echec avec l’une de ces phrases :
- Connecteur éteint, mal configuré, ou panne chez SkyTarget. « Service momentanément indisponible. Réessayez plus tard, ou appelez la clinique. »
- La clinique n’a pas répondu en 10 secondes. « La clinique ne répond pas pour le moment (délai dépassé). Réessayez dans un instant. »
- Clinique inconnue de l’annuaire de Muse. « Clinique introuvable. Cherchez-la d'abord par son nom ou sa ville. »
- La clinique a désactivé Muse (l’interrupteur est revérifié à chaque appel). « Cette clinique ne prend pas de rendez-vous par Muse pour le moment. Vous pouvez l'appeler directement. »
- Une limite de débit est atteinte (plus bas). « Trop de demandes en peu de temps. Réessayez dans quelques minutes. »
- Toute autre erreur — jamais le texte d’une exception. « La demande n'a pas pu aboutir. Réessayez, ou appelez la clinique. »
Les limites de débit
Comptées par SkyTarget pour le canal Muse — jamais par adresse IP, puisque toutes les demandes de Muse arrivent par le même connecteur. Au-delà d’une limite, l’outil répond echec et « Trop de demandes en peu de temps. Réessayez dans quelques minutes. »
Par clinique et par numéro de téléphone
- 5 codes envoyés par 15 minutes
- 10 vérifications de code par 15 minutes
Par clinique
- 30 codes envoyés par heure
- 30 réservations par heure
- 120 lectures des soins et des heures libres par 15 minutes
Pour tout le canal Muse, toutes cliniques confondues
- 300 codes envoyés par heure
- 1 200 lectures des soins et des heures libres par 15 minutes
- 300 recherches dans l’annuaire des cliniques par 15 minutes
Le code lui-même : 6 chiffres, valable 5 minutes, une seule fois, et bloqué après 5 codes faux — sans que la personne apprenne jamais le nombre d’essais restants.
Ce que nous ne faisons jamais
- Aucune annulation ni aucun déplacement de rendez-vous : on appelle la clinique.
- Aucun conseil de soin. Le connecteur décrit les soins tels que la clinique les présente ; il ne recommande jamais un soin pour un symptôme ou un état de santé, et chaque description d’outil le rappelle à Muse.
- Aucune donnée de client renvoyée à Muse : ni le nom au dossier, ni l’historique, ni le fait d’être déjà cliente de la clinique. La réponse de
reserverest la même pour une cliente connue et pour une nouvelle ; celle deenvoyer_codene dépend pas du numéro. - Aucun champ hors liste. Chaque sortie est construite champ par champ, et son schéma de sortie est strict : un champ en trop ferait refuser la réponse plutôt que de l’envoyer.
- Aucun paiement, aucune vente, aucune publicité, aucun entraînement de modèles d’IA et aucune autre réutilisation de ce que Muse nous transmet : il sert à la réservation, et à rien d’autre.
Les documents du connecteur
Nous joindre
Technologies Sky Target Inc. (« SkyTarget »), Montréal (Québec) — bonjour@skytarget.ca.
SkyTarget connector for Muse: documentation
SkyTarget (Technologies Sky Target Inc., Montréal) is a management platform for care and wellness clinics. Its Muse connector lets people who use Muse, Meta’s agent, book appointments at SkyTarget clinics that have turned Muse on. This page describes what each tool does, what it receives, what it returns and its limits.
At a glance
- Booking only. Find a clinic, see its services and open times, receive a code by text message, book. No tool cancels or reschedules an appointment: for that, people call the clinic, whose number comes with every booking.
- Each clinic decides. Only clinics that have turned Muse on are listed, and their switch is checked again on every call.
- The text-message code is the only proof of identity. No booking without it; Muse always asks the person for it, and never guesses or reuses one.
- Free for people who use Muse. The connector takes no payment; clinics pay SkyTarget a fee for each booking made through Muse.
- Region and languages. Clinics located in Québec and elsewhere in Canada; French and English.
Connection
- MCP server address:
https://muse.skytarget.ca/mcp— MCP “Streamable HTTP” transport, stateless,POSTrequests; the client sendsAccept: application/json, text/event-stream. - Authentication: an API key, given to Meta, in the
Authorization: Bearerheader followed by the key, on every request. Missing or wrong key: HTTP 401 (withWWW-Authenticate) before any tool runs. The comparison is constant-time. - Meta class: each tool’s class is also published in its
_meta, under the keyca.skytarget/classe-meta, along with the MCP annotations. - Responses: every tool returns an explicit status in
structuredContent(and the same JSON as text); no tool surfaces an exception to the protocol. Inputs outside the schema are rejected by MCP validation, before the tool runs and without any call to the clinic. - Other HTTP responses: 405 for another method, 413 for a body over 256 KB, 400 for unreadable JSON, 404 for another path. Health check:
GET /health→{"ok":true}. - Security: the connector is a separate service with no database key at all. It only calls each clinic’s public booking API — the same one as its online booking page —, every call signed (HMAC-SHA256); the clinic checks the signature, its Muse switch and the code again. Timeout of 10 seconds per outgoing call. Logs never hold a name, a code or a request body; a phone number appears only as its last two digits.
- Languages: the tools’ sentences are written in French, and every tool description asks Muse to answer in the person’s language; the
langueinput sets the language of services and text messages.
The flow
The usual order: trouver_clinique, soins, disponibilites, envoyer_code, then reserver — once Muse has shown the person the clinic, service, practitioner, date, time and price, and obtained their explicit approval.
The five tools
Tool and field names are the connector’s own (in French); the sentences quoted below are what the tools return, followed by their meaning in English.
| Tool | Meta class | What it does |
|---|---|---|
trouver_clinique | Read | Find a clinic |
soins | Read | List a clinic's services |
disponibilites | Read | List open appointment times |
envoyer_code | Write | Send a verification code by text message |
reserver | Sensitive write | Book the appointment |
trouver_clinique — Find a clinic
Meta class: Read
MCP annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: true
Find SkyTarget clinics that accept bookings through Muse. Only active clinics that take online bookings and have turned Muse on are listed.
Inputs
ville(optional) — the city (up to 80 characters).nom(optional) — part of the clinic’s name (up to 120 characters).metier(optional) — the profession, one of:massage,aesthetics,barber,physio,chiroordental.
Outputs — closed list
statut—okorechec.message— on failure, the sentence to relay.cliniques— up to 10, each with:clinique_id— the clinic’s identifier, to pass to the other tools;nom— its name;ville— its city (ornull);adresse— its address (ornull);telephone— its phone number (ornull);langues— the languages spoken at the clinic (language codes).
Side effects
- None: read only, nothing is written.
Statuses and errors
- No clinic matches:
okand an empty list. - The common errors, below.
soins — List a clinic's services
Meta class: Read
MCP annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: true
List the services a clinic offers online — name, duration, price, a short description written by the clinic — with the practitioners who give each service and each one’s price.
Inputs
clinique_id(required) — the identifier returned bytrouver_clinique.langue(optional) —fr(default) oren: the language of names and descriptions.
Outputs — closed list
statut—okorechec.message— on failure, the sentence to relay.soins— up to 60, each with:soin_id— the service’s identifier, fordisponibilites;nom— its name;duree_minutes— its duration in minutes (ornull);prix— its price, ornullwhen the clinic does not publish it (Muse says so, never guesses):montant_cad— the amount, in Canadian dollars;a_partir_de—truewhen the price depends on the practitioner (“from”);taxes_incluses—truewhen taxes are included.
description— the clinic’s description, up to 300 characters (ornull);praticiennes— the practitioners who give it, up to 20:praticienne_id— their identifier, fordisponibilites;nom— their name;prix— their price for this service (ornull):montant_cad— the amount, in Canadian dollars;taxes_incluses—truewhen taxes are included.
Side effects
- None: read only, nothing is written.
Statuses and errors
- Unknown clinic identifier. “Clinique introuvable. Cherchez-la d'abord par son nom ou sa ville.” — Clinic not found.
- The common errors, below.
disponibilites — List open appointment times
Meta class: Read
MCP annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: true
List open appointment times for one service, optionally with one practitioner, from a given date.
Inputs
clinique_id(required) — the identifier returned bytrouver_clinique.soin_id(required) — the service, returned bysoins.praticienne_id(optional) — one practitioner, returned bysoins.date_debut(optional) — first day to search,YYYY-MM-DD, in the clinic’s local date; today by default.jours(optional) — number of days to search, 1 to 14; 7 by default.
Outputs — closed list
statut—okorechec.message— on failure, or when no time is open.creneaux— up to 20, earliest first, each with:creneau_id— an opaque token signed by SkyTarget, to pass unchanged toreserver; it expires after about one hour;date—YYYY-MM-DD, the clinic’s local date;heure—HH:MM, 24-hour clock, the clinic’s local time;praticienne— their name — both names for a two-practitioner session (ornull).
Side effects
- None: read only, nothing is written.
Statuses and errors
- No open time:
ok, an empty list and the sentence: “Aucun créneau libre à ces dates. Essayez des dates plus tard.” — No open time on these dates. - Date beyond what the clinic accepts:
ok, an empty list and: “La clinique ne prend pas de rendez-vous aussi loin. Choisissez une date plus proche.” — The clinic does not book that far ahead. - Service unknown to the clinic. “Ce soin est introuvable dans cette clinique. Consultez d'abord la liste de ses soins.” — Service not found at this clinic.
- The common errors, below.
envoyer_code — Send a verification code by text message
Meta class: Write
MCP annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: false · openWorldHint: true
Send a 6-digit verification code by text message (SMS) to the person’s mobile phone, for a booking at this clinic. The code proves the person holds that number; reserver requires it.
Inputs
clinique_id(required) — the identifier returned bytrouver_clinique.telephone(required) — the person’s mobile number, as they give it (7 to 25 characters: digits, spaces and+,(,),.,-).langue(optional) —fr(default) oren: the language of the text message.
Outputs — closed list
statut—envoyeorechec.message— the sentence to relay, always present.
Side effects
- Sends ONE text message per call (not idempotent): Muse calls it only when the person is ready to book.
- The code expires after 5 minutes and works once; asking for a new one replaces the previous one.
- The answer is the same whether or not the clinic knows the number:
envoyeand “Un code a été envoyé par texto s'il s'agit d'un numéro valide.” (A code was sent by text message if the number is valid.)
Statuses and errors
- A number that cannot exist (public numbering plan — nothing about the clinic is read). “Ce numéro de téléphone n'est pas valide. Vérifiez-le et réessayez.” — This phone number is not valid.
- The text message could not be sent (no code sent). “Le code n'a pas pu être envoyé pour le moment. Réessayez dans quelques minutes, ou appelez la clinique.” — The code could not be sent right now.
- The common errors, below.
reserver — Book the appointment
Meta class: Sensitive write
MCP annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: false · openWorldHint: true
Book the chosen appointment. Before calling it, Muse shows the person the clinic, service, practitioner, date, time and price, and gets their explicit approval — the tool’s description requires it.
Inputs
clinique_id(required) — the identifier returned bytrouver_clinique.creneau_id(required) — the slot returned bydisponibilites, unchanged.telephone(required) — the number that received the code.code(required) — the 6 digits received by text message — always asked of the person, never guessed.prenom(required) — the person’s first name (1 to 60 characters).nom(required) — their last name (1 to 60 characters).langue(optional) —fr(default) oren: the language of the clinic’s text messages for a new client.
Outputs — closed list
statut—confirmeorechec.message— on failure, the sentence to relay as is.date—YYYY-MM-DD, the clinic’s local date;heure—HH:MM, the clinic’s local time;soin— the service’s name;praticienne— the practitioner’s name;prix— the price of THIS appointment, ornullwhen it is not known exactly (never guessed):montant_cad— the amount, in Canadian dollars;taxes_incluses—truewhen taxes are included.
telephone_clinique— the clinic’s phone number — also on failure, when known;rappel— “Pour annuler ou déplacer ce rendez-vous, appelez la clinique au …” (To cancel or reschedule this appointment, call the clinic at …)
Side effects
- Verifies the code with SkyTarget; a verified code works once.
- Writes ONE appointment in the clinic’s calendar, marked as coming from Muse. Deletes or changes no appointment (not destructive).
- If the clinic has no record for this number, creates the person’s client record (first name, last name, phone, language); otherwise the existing record is used as is.
- The person then receives the clinic’s confirmation text message, as for any booking.
- The clinic owes SkyTarget a fee for this booking — never the person.
- One code, one appointment: replaying the call with the same code never creates a second appointment.
Statuses and errors
- Code refused, WHATEVER THE REASON (wrong, expired, already verified, locked) — never the reason nor the attempts left: “Ce code n'est pas valide. Vérifiez le texto, ou demandez un nouveau code.” — This code is not valid.
- A code without 6 digits. “Le code doit comporter 6 chiffres.” — The code must have 6 digits.
- A number that cannot exist. “Ce numéro de téléphone n'est pas valide. Vérifiez-le et réessayez.” — This phone number is not valid.
- Slot taken in the meantime — nothing is written, and the same code stays good for a few minutes for another time. “Ce créneau vient d'être pris. Choisissez une autre heure.” — This time was just taken.
- Slot expired. “Ce créneau a expiré. Demandez de nouvelles disponibilités.” — This time slot has expired.
- Service withdrawn from online booking. “Ce soin n'est plus proposé en ligne. Choisissez-en un autre.” — This service is no longer offered online.
- Date beyond what the clinic accepts. “La clinique ne prend pas de rendez-vous aussi loin. Choisissez une date plus proche.” — The clinic does not book that far ahead.
- Phone verification expired. “La vérification du numéro n'est plus valide. Demandez un nouveau code.” — The phone verification has expired; ask for a new code.
- Code already used for a booking — never “ask for a new code”, which could lead to a second appointment: “Ce code a déjà servi : une réservation a peut-être déjà été faite. Vérifiez le texto de confirmation, ou appelez la clinique au …” — This code was already used: a booking may already have been made.
- Uncertain outcome (outage, timeout while writing): we do not know whether the appointment exists; a retry with the same code never creates a second one: “Nous n'avons pas pu confirmer la réservation. Vérifiez si vous recevez un texto de confirmation dans les prochaines minutes ; sinon, appelez la clinique au …” — We could not confirm the booking: watch for a confirmation text, otherwise call the clinic.
- Any other refusal — nothing is written: “La réservation n'a pas été faite. Réessayez, ou appelez la clinique au …” — The booking was not made.
- After
echec, Muse does not retry without the person (tool instruction). And the common errors, below.
Common errors
Any of the five tools can answer echec with one of these sentences:
- Connector turned off, misconfigured, or a SkyTarget outage. “Service momentanément indisponible. Réessayez plus tard, ou appelez la clinique.” — Service temporarily unavailable.
- The clinic did not answer within 10 seconds. “La clinique ne répond pas pour le moment (délai dépassé). Réessayez dans un instant.” — The clinic is not answering (timeout).
- Clinic unknown to the Muse directory. “Clinique introuvable. Cherchez-la d'abord par son nom ou sa ville.” — Clinic not found.
- The clinic has turned Muse off (the switch is checked again on every call). “Cette clinique ne prend pas de rendez-vous par Muse pour le moment. Vous pouvez l'appeler directement.” — This clinic does not take bookings through Muse right now.
- A rate limit is reached (below). “Trop de demandes en peu de temps. Réessayez dans quelques minutes.” — Too many requests; try again in a few minutes.
- Any other error — never the text of an exception. “La demande n'a pas pu aboutir. Réessayez, ou appelez la clinique.” — The request could not be completed.
Rate limits
Counted by SkyTarget for the Muse channel — never per IP address, since every Muse request arrives through the same connector. Beyond a limit, the tool answers echec and “Trop de demandes en peu de temps. Réessayez dans quelques minutes.” — Too many requests; try again in a few minutes.
Per clinic and per phone number
- 5 codes sent per 15 minutes
- 10 code checks per 15 minutes
Per clinic
- 30 codes sent per hour
- 30 bookings per hour
- 120 service and availability lookups per 15 minutes
For the whole Muse channel, all clinics combined
- 300 codes sent per hour
- 1,200 service and availability lookups per 15 minutes
- 300 clinic directory lookups per 15 minutes
The code itself: 6 digits, valid for 5 minutes, once, and locked after 5 wrong codes — without the person ever learning how many attempts are left.
What we never do
- No cancellation and no rescheduling of appointments: people call the clinic.
- No treatment advice. The connector describes services as the clinic presents them; it never recommends a service for a symptom or a health condition, and every tool description reminds Muse of this.
- No client data returned to Muse: not the name on file, not the history, not whether the person is already a client of the clinic.
reserveranswers the same for a known client and a new one;envoyer_codedoes not depend on the number. - No field outside the list. Every output is built field by field, and its output schema is strict: an extra field would make the response fail rather than be sent.
- No payment, no sale, no advertising, no AI model training and no other reuse of what Muse sends us: it serves the booking, and nothing else.
Connector documents
Contact
Technologies Sky Target Inc. (“SkyTarget”), Montréal, Québec — bonjour@skytarget.ca.