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êtes POST ; le client envoie Accept: application/json, text/event-stream.
  • Authentification : une clé d’API, remise à Meta, dans l’en-tête Authorization: Bearer suivi de la clé, sur chaque requête. Clé absente ou fausse : HTTP 401 (avec WWW-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 langue choisit 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

OutilClasse MetaCe qu’il fait
trouver_cliniqueReadTrouver une clinique
soinsReadLes soins d’une clinique
disponibilitesReadLes heures libres
envoyer_codeWriteEnvoyer un code par texto
reserverSensitive writeRé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, chiro ou dental.

Sorties — liste fermée

  • statut — ok ou echec.
  • 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 (ou null) ;
    • adresse — son adresse (ou null) ;
    • telephone — son numéro de téléphone (ou null) ;
    • 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 : ok et 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 par trouver_clinique.
  • langue (facultatif) — fr (par défaut) ou en : la langue des noms et des descriptions.

Sorties — liste fermée

  • statut — ok ou echec.
  • message — en cas d’échec, la phrase à relayer.
  • soins — 60 au plus, chacun avec :
    • soin_id — l’identifiant du soin, pour disponibilites ;
    • nom — son nom ;
    • duree_minutes — sa durée en minutes (ou null) ;
    • prix — son prix, ou null quand la clinique ne le publie pas (Muse le dit, sans le deviner) :
      • montant_cad — le montant, en dollars canadiens ;
      • a_partir_de — true quand le prix dépend de la praticienne (« à partir de ») ;
      • taxes_incluses — true quand les taxes sont comprises.
    • description — sa description par la clinique, 300 caractères au plus (ou null) ;
    • praticiennes — celles qui donnent ce soin, 20 au plus :
      • praticienne_id — son identifiant, pour disponibilites ;
      • nom — son nom ;
      • prix — son prix pour ce soin (ou null) :
        • montant_cad — le montant, en dollars canadiens ;
        • taxes_incluses — true quand 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 par trouver_clinique.
  • soin_id (obligatoire) — le soin, rendu par soins.
  • praticienne_id (facultatif) — une praticienne, rendue par soins.
  • 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 — ok ou echec.
  • 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 (ou null).

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 par trouver_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) ou en : la langue du texto.

Sorties — liste fermée

  • statut — envoye ou echec.
  • 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 : envoye et « 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 par trouver_clinique.
  • creneau_id (obligatoire) — le créneau rendu par disponibilites, 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) ou en : la langue des textos de la clinique pour une nouvelle cliente.

Sorties — liste fermée

  • statut — confirme ou echec.
  • 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, ou null quand il n’est pas connu exactement (jamais deviné) :
    • montant_cad — le montant, en dollars canadiens ;
    • taxes_incluses — true quand 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 reserver est la même pour une cliente connue et pour une nouvelle ; celle de envoyer_code ne 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.

Dernière mise à jour : 25 octobre 2026 · v1.0

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, POST requests; the client sends Accept: application/json, text/event-stream.
  • Authentication: an API key, given to Meta, in the Authorization: Bearer header followed by the key, on every request. Missing or wrong key: HTTP 401 (with WWW-Authenticate) before any tool runs. The comparison is constant-time.
  • Meta class: each tool’s class is also published in its _meta, under the key ca.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 langue input 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.

ToolMeta classWhat it does
trouver_cliniqueReadFind a clinic
soinsReadList a clinic's services
disponibilitesReadList open appointment times
envoyer_codeWriteSend a verification code by text message
reserverSensitive writeBook 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, chiro or dental.

Outputs — closed list

  • statut — ok or echec.
  • 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 (or null);
    • adresse — its address (or null);
    • telephone — its phone number (or null);
    • langues — the languages spoken at the clinic (language codes).

Side effects

  • None: read only, nothing is written.

Statuses and errors

  • No clinic matches: ok and 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 by trouver_clinique.
  • langue (optional) — fr (default) or en: the language of names and descriptions.

Outputs — closed list

  • statut — ok or echec.
  • message — on failure, the sentence to relay.
  • soins — up to 60, each with:
    • soin_id — the service’s identifier, for disponibilites;
    • nom — its name;
    • duree_minutes — its duration in minutes (or null);
    • prix — its price, or null when the clinic does not publish it (Muse says so, never guesses):
      • montant_cad — the amount, in Canadian dollars;
      • a_partir_de — true when the price depends on the practitioner (“from”);
      • taxes_incluses — true when taxes are included.
    • description — the clinic’s description, up to 300 characters (or null);
    • praticiennes — the practitioners who give it, up to 20:
      • praticienne_id — their identifier, for disponibilites;
      • nom — their name;
      • prix — their price for this service (or null):
        • montant_cad — the amount, in Canadian dollars;
        • taxes_incluses — true when 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 by trouver_clinique.
  • soin_id (required) — the service, returned by soins.
  • praticienne_id (optional) — one practitioner, returned by soins.
  • 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 — ok or echec.
  • 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 to reserver; 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 (or null).

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 by trouver_clinique.
  • telephone (required) — the person’s mobile number, as they give it (7 to 25 characters: digits, spaces and +, (, ), ., -).
  • langue (optional) — fr (default) or en: the language of the text message.

Outputs — closed list

  • statut — envoye or echec.
  • 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: envoye and “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 by trouver_clinique.
  • creneau_id (required) — the slot returned by disponibilites, 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) or en: the language of the clinic’s text messages for a new client.

Outputs — closed list

  • statut — confirme or echec.
  • 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, or null when it is not known exactly (never guessed):
    • montant_cad — the amount, in Canadian dollars;
    • taxes_incluses — true when 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. reserver answers the same for a known client and a new one; envoyer_code does 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.

Last updated: October 25, 2026 · v1.0