Serveur MCP

Xona Dental Gateway

com.xonark/dental-gateway
Santé Public et accessible MCP 2026-07-28

Ce que fait ce MCP

Finds Canadian dental practices and services, answers evidence-based practice questions, and supports appointment requests or bookings with confirmation workflows.

abandon_xona_booking
Give up a booking that is not booked yet
Release the held time and drop the patient's details when the patient no longer wants it, at any step before it is booked. It never cancels a booked appointment. Calling again returns the same result.
Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['action_id'], 'properties': {'action_id': {'type': 'string', 'maxLength': 128, 'minLength': 16}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['action_id', 'practice', 'outcome', 'next_step'], 'properties': {'reason': {'type': 'string'}, 'outcome': {'type': 'string'}, 'practice': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'action_id': {'type': 'string'}, 'next_step': {'type': 'string'}, 'booking_url': {'type': 'string'}, 'continue_url': {'type': 'string'}, 'booking_steps': {'type': 'array', 'items': {'type': 'object', 'required': ['step', 'status'], 'properties': {'step': {'type': 'integer'}, 'tool': {'type': 'string'}, 'status': {'enum': ['done', 'waiting_for_patient', 'not_started'], 'type': 'string'}, 'xona_sends': {'type': 'object', 'required': ['channel'], 'properties': {'to': {'type': 'string'}, 'channel': {'type': 'string'}, 'contains': {'type': 'string'}, 'link_expires_at': {'type': 'string', 'format': 'date-time'}}}, 'patient_does': {'type': 'string'}, 'patient_provides': {'type': 'array', 'items': {'type': 'string'}}}}}, 'consent_version': {'type': 'string'}, 'link_expires_at': {'type': 'string', 'format': 'date-time'}, 'confirmation_sms': {'type': 'string'}, 'appointment_start': {'type': 'string', 'format': 'date-time'}, 'appointment_start_local': {'type': 'string'}}}
answer_dental_practice_question
Answer from dental practice evidence
Answer a bounded factual question from the selected practices' evidence. Unknown is returned explicitly; missing data is never inferred as no.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['practice_slugs', 'topic'], 'properties': {'topic': {'enum': ['identity', 'location', 'hours', 'services', 'languages', 'new_patients', 'coverage', 'accessibility', 'emergency', 'booking'], 'type': 'string'}, 'practice_slugs': {'type': 'array', 'items': {'type': 'string', 'maxLength': 140, 'minLength': 1}, 'maxItems': 10, 'minItems': 1}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['answers'], 'properties': {'answers': {'type': 'array', 'items': {'type': 'object'}}}}
change_xona_appointment
Ask to move or cancel an appointment
Move or cancel one of the patient's appointments. Xona texts the patient a link to a page that shows the exact change. When they press its button (or type the code from the text on book.xonark.com/code) the practice's schedule changes, or, at a practice that confirms changes itself, the practice receives the request. Calling again with the same arguments returns the result, read live from the practice's schedule.
Schéma d’entrée
{'type': 'object', 'required': ['action_id', 'appointment_ref', 'kind'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$', 'description': "For a reschedule: the new time's date exactly as list_xona_reschedule_times returned it"}, 'kind': {'enum': ['cancel', 'reschedule'], 'type': 'string'}, 'action_id': {'type': 'string', 'maxLength': 128, 'minLength': 16}, 'appointment_ref': {'type': 'string', 'maxLength': 64, 'minLength': 8}, 'slot_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{32}$', 'description': "For a reschedule: the new time's slot_fingerprint from list_xona_reschedule_times"}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['action_id', 'practice', 'appointment_ref', 'state', 'next_step'], 'properties': {'kind': {'type': 'string'}, 'state': {'type': 'string'}, 'practice': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'action_id': {'type': 'string'}, 'next_step': {'type': 'string'}, 'appointment_ref': {'type': 'string'}, 'link_expires_at': {'type': 'string', 'format': 'date-time'}, 'requested_start_local': {'type': 'string'}, 'appointment_start_local': {'type': 'string'}}}
confirm_dental_request
Send a dental appointment request
Send the started request to the clinic. It takes the 6-digit code Xona emailed the patient and the consent_version of the consent_text the patient agreed to. The outcome is a delivered, held or failed request, never a confirmed booking. Calling again with the same action_id returns the same outcome.
Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['action_id', 'verification_code', 'service_category', 'preferred_window', 'consent_version'], 'properties': {'note': {'type': 'string', 'maxLength': 500}, 'action_id': {'type': 'string', 'maxLength': 128, 'minLength': 16}, 'consent_version': {'enum': ['gateway-2026-09-11'], 'type': 'string'}, 'preferred_window': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'When the patient is free, in their words'}, 'service_category': {'enum': ['checkup_cleaning', 'children', 'cosmetic', 'implants', 'new_patient', 'orthodontics', 'other', 'tooth_pain'], 'type': 'string'}, 'verification_code': {'type': 'string', 'pattern': '^[0-9]{6}$'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['action', 'outcome', 'next_step'], 'properties': {'action': {'type': 'object'}, 'outcome': {'type': 'string'}, 'next_step': {'type': 'string'}, 'receipt_url': {'type': 'string'}}}
confirm_xona_booking
Get the booking's result
Get the result once the patient has tapped the text link and pressed Book this appointment. Until then it returns waiting_for_patient. Xona finds an existing patient itself; when it cannot tell, it returns the practice's booking page instead of guessing. If the booking stopped before it was written, the first call tries it once more. Calling again returns the same outcome.
Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['action_id'], 'properties': {'action_id': {'type': 'string', 'maxLength': 128, 'minLength': 16}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['action_id', 'practice', 'outcome', 'next_step'], 'properties': {'reason': {'type': 'string'}, 'outcome': {'type': 'string'}, 'practice': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'action_id': {'type': 'string'}, 'next_step': {'type': 'string'}, 'booking_url': {'type': 'string'}, 'continue_url': {'type': 'string'}, 'booking_steps': {'type': 'array', 'items': {'type': 'object', 'required': ['step', 'status'], 'properties': {'step': {'type': 'integer'}, 'tool': {'type': 'string'}, 'status': {'enum': ['done', 'waiting_for_patient', 'not_started'], 'type': 'string'}, 'xona_sends': {'type': 'object', 'required': ['channel'], 'properties': {'to': {'type': 'string'}, 'channel': {'type': 'string'}, 'contains': {'type': 'string'}, 'link_expires_at': {'type': 'string', 'format': 'date-time'}}}, 'patient_does': {'type': 'string'}, 'patient_provides': {'type': 'array', 'items': {'type': 'string'}}}}}, 'consent_version': {'type': 'string'}, 'link_expires_at': {'type': 'string', 'format': 'date-time'}, 'confirmation_sms': {'type': 'string'}, 'appointment_start': {'type': 'string', 'format': 'date-time'}, 'appointment_start_local': {'type': 'string'}}}
get_canadian_dental_practice
Get a Canadian dental practice
Get one public dental practice profile, fact evidence, citations, and current public actions.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['practice_slug'], 'properties': {'practice_slug': {'type': 'string', 'maxLength': 140, 'minLength': 1}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['practice', 'actions'], 'properties': {'actions': {'type': 'array', 'items': {'type': 'object'}}, 'practice': {'type': 'object'}}}
get_dental_action_status
Get dental action status
Read the exact outcome of an expiring dental action. Handoff, request, and confirmed booking outcomes remain distinct.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['action_id'], 'properties': {'action_id': {'type': 'string', 'maxLength': 128, 'minLength': 16}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['action'], 'properties': {'action': {'type': 'object'}}}
hold_xona_booking_slot
Hold an open time and text the patient a link
Hold one open time and text the patient a link to it. The page the link opens shows the time and the details above a Book this appointment button. When the patient presses it the appointment is booked, or, at a practice that confirms bookings itself, sent to the practice as a request.
Schéma d’entrée
{'type': 'object', 'required': ['practice_slug', 'service_id', 'slot_fingerprint', 'date', 'patient_phone', 'first_name', 'last_name', 'date_of_birth'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$', 'description': "The chosen slot's date exactly as list_xona_booking_slots returned it"}, 'note': {'type': 'string', 'maxLength': 500}, 'last_name': {'type': 'string', 'maxLength': 60, 'minLength': 1, 'description': "The patient's last name, as the patient gave it in this conversation"}, 'first_name': {'type': 'string', 'maxLength': 60, 'minLength': 1, 'description': "The patient's first name, as the patient gave it in this conversation"}, 'service_id': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'date_of_birth': {'type': 'string', 'format': 'date', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$', 'description': "The patient's date of birth, as the patient gave it in this conversation"}, 'guardian_name': {'type': 'string', 'maxLength': 120, 'description': 'Required when the patient is under 16'}, 'patient_phone': {'type': 'string', 'maxLength': 32, 'minLength': 7, 'description': "The patient's own Canadian or US mobile number, as the patient gave it in this conversation; the booking link is texted there"}, 'practice_slug': {'type': 'string', 'maxLength': 140, 'minLength': 1}, 'slot_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{32}$'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['action_id', 'practice', 'next_step'], 'properties': {'reason': {'type': 'string'}, 'outcome': {'type': 'string'}, 'practice': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'action_id': {'type': 'string'}, 'next_step': {'type': 'string'}, 'booking_url': {'type': 'string'}, 'continue_url': {'type': 'string'}, 'verification': {'type': 'string'}, 'booking_steps': {'type': 'array', 'items': {'type': 'object', 'required': ['step', 'status'], 'properties': {'step': {'type': 'integer'}, 'tool': {'type': 'string'}, 'status': {'enum': ['done', 'waiting_for_patient', 'not_started'], 'type': 'string'}, 'xona_sends': {'type': 'object', 'required': ['channel'], 'properties': {'to': {'type': 'string'}, 'channel': {'type': 'string'}, 'contains': {'type': 'string'}, 'link_expires_at': {'type': 'string', 'format': 'date-time'}}}, 'patient_does': {'type': 'string'}, 'patient_provides': {'type': 'array', 'items': {'type': 'string'}}}}}, 'hold_expires_at': {'type': 'string', 'format': 'date-time'}, 'link_expires_at': {'type': 'string', 'format': 'date-time'}}}
list_dental_practice_actions
List dental practice actions
List current public booking, request, form, call, and website actions for a dental practice in preference order.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['practice_slug'], 'properties': {'practice_slug': {'type': 'string', 'maxLength': 140, 'minLength': 1}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['practice_slug', 'actions'], 'properties': {'actions': {'type': 'array', 'items': {'type': 'object'}}, 'practice_slug': {'type': 'string'}}}
list_public_booking_services
List a clinic's public booking services
Read services from a clinic's already-prepared supported public booking widget. Provider locators remain server-owned.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['action_id'], 'properties': {'action_id': {'type': 'string', 'maxLength': 128, 'minLength': 16}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['services'], 'properties': {'services': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'duration_minutes': {'type': 'integer'}}}}}}
list_public_booking_slots
List a clinic's public booking slots
Read public availability from a supported clinic widget for one service and UTC window.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['action_id', 'service_id', 'start', 'end'], 'properties': {'end': {'type': 'string', 'format': 'date-time', 'maxLength': 64}, 'start': {'type': 'string', 'format': 'date-time', 'maxLength': 64}, 'action_id': {'type': 'string', 'maxLength': 128, 'minLength': 16}, 'service_id': {'type': 'string', 'maxLength': 160, 'minLength': 1}}, 'description': 'Read at most 14 days of availability, starting no more than 180 days ahead.', 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['slots'], 'properties': {'slots': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'service_id', 'starts_at', 'ends_at'], 'properties': {'id': {'type': 'string'}, 'ends_at': {'type': 'string', 'format': 'date-time'}, 'starts_at': {'type': 'string', 'format': 'date-time'}, 'service_id': {'type': 'string'}, 'provider_name': {'type': 'string'}}}}, 'use_tool': {'type': 'string'}, 'action_id': {'type': 'string'}, 'practice_slug': {'type': 'string'}}}
list_xona_appointments
List the patient's upcoming appointments
Read the named patient's upcoming appointments at the practice, live from its schedule, after the patient tapped the text link. Works with the action_id of a booking made in this conversation (for 30 minutes after the tap, and for that appointment until its day) or of start_xona_appointment_access. Before the tap it says it is still waiting.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['action_id'], 'properties': {'action_id': {'type': 'string', 'maxLength': 128, 'minLength': 16}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['action_id', 'practice', 'status', 'next_step'], 'properties': {'status': {'type': 'string'}, 'changes': {'type': 'array', 'items': {'type': 'object', 'required': ['appointment_ref', 'kind', 'state'], 'properties': {'kind': {'type': 'string'}, 'state': {'type': 'string'}, 'next_step': {'type': 'string'}, 'appointment_ref': {'type': 'string'}}}}, 'practice': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'action_id': {'type': 'string'}, 'next_step': {'type': 'string'}, 'time_zone': {'type': 'string'}, 'appointments': {'type': 'array', 'items': {'type': 'object', 'required': ['appointment_ref', 'start', 'start_local', 'cancel', 'reschedule'], 'properties': {'start': {'type': 'string', 'format': 'date-time'}, 'cancel': {'type': 'string'}, 'service': {'type': 'string'}, 'provider': {'type': 'string'}, 'reschedule': {'type': 'string'}, 'change_note': {'type': 'string'}, 'start_local': {'type': 'string'}, 'appointment_ref': {'type': 'string'}}}}, 'booked_until': {'type': 'string', 'format': 'date-time'}, 'pending_requests': {'type': 'array', 'items': {'type': 'object', 'required': ['status'], 'properties': {'status': {'type': 'string'}, 'appointment_ref': {'type': 'string'}}}}, 'access_expires_at': {'type': 'string', 'format': 'date-time'}}}
list_xona_booking_services
List a connected practice's booking services
List the services a practice that connected its schedule to Xona books online. Use it where list_dental_practice_actions marks the Xona booking route as completes_in_conversation.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['practice_slug'], 'properties': {'practice_slug': {'type': 'string', 'maxLength': 140, 'minLength': 1}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['practice', 'services', 'next_step'], 'properties': {'practice': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'services': {'type': 'array', 'items': {'type': 'object', 'required': ['service_id', 'name'], 'properties': {'name': {'type': 'string'}, 'service_id': {'type': 'string'}}}}, 'next_step': {'type': 'string'}}}
list_xona_booking_slots
List a connected practice's open times
List open times at a connected practice for one service between date_from and date_to (inclusive, at most 8 weeks out). Returns the closest ten to preferred_time (else a balanced spread) plus the earliest open time, with a reason when empty. Each slot has a slot_fingerprint and date for hold_xona_booking_slot.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['practice_slug', 'service_id', 'date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'format': 'date', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$', 'description': 'Last day to search (inclusive); at most 56 days after date_from and 8 weeks from today'}, 'date_from': {'type': 'string', 'format': 'date', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$', 'description': "First day to search, in the practice's time zone"}, 'doctor_id': {'type': 'string', 'maxLength': 160, 'description': 'Restrict to one provider, using a doctor_id a previous slot listing returned'}, 'service_id': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'practice_slug': {'type': 'string', 'maxLength': 140, 'minLength': 1}, 'preferred_time': {'type': 'string', 'pattern': '^([01][0-9]|2[0-3]):[0-5][0-9]$', 'description': "The patient's preferred local start time, 24-hour HH:MM; slots closest to it come first"}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['practice', 'service_id', 'effective_from', 'effective_to', 'time_zone', 'slots', 'next_step'], 'properties': {'slots': {'type': 'array', 'items': {'type': 'object', 'required': ['slot_fingerprint', 'date', 'time', 'display', 'start', 'end'], 'properties': {'end': {'type': 'string', 'format': 'date-time'}, 'date': {'type': 'string'}, 'time': {'type': 'string'}, 'start': {'type': 'string', 'format': 'date-time'}, 'display': {'type': 'string'}, 'provider': {'type': 'string'}, 'doctor_id': {'type': 'string'}, 'slot_fingerprint': {'type': 'string'}}}}, 'reason': {'type': 'string'}, 'earliest': {'type': 'object', 'required': ['slot_fingerprint', 'date', 'time', 'display', 'start', 'end'], 'properties': {'end': {'type': 'string', 'format': 'date-time'}, 'date': {'type': 'string'}, 'time': {'type': 'string'}, 'start': {'type': 'string', 'format': 'date-time'}, 'display': {'type': 'string'}, 'provider': {'type': 'string'}, 'doctor_id': {'type': 'string'}, 'slot_fingerprint': {'type': 'string'}}}, 'practice': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'next_step': {'type': 'string'}, 'time_zone': {'type': 'string'}, 'service_id': {'type': 'string'}, 'booking_url': {'type': 'string'}, 'effective_to': {'type': 'string'}, 'instructions': {'type': 'string'}, 'effective_from': {'type': 'string'}, 'date_correction': {'type': 'object', 'required': None, 'properties': {'today': {'type': 'string'}, 'swapped': {'type': 'boolean'}, 'effective_to': {'type': 'string'}, 'requested_to': {'type': 'string'}, 'effective_from': {'type': 'string'}, 'past_corrected': {'type': 'boolean'}, 'requested_from': {'type': 'string'}}}}}
list_xona_reschedule_times
List times an appointment can move to
List open times one of the patient's appointments can move to, for its own service and provider, between date_from and date_to. appointment_ref comes from list_xona_appointments.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['action_id', 'appointment_ref', 'date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'format': 'date', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$', 'description': 'Last day to search (inclusive); at most 56 days after date_from and 8 weeks from today'}, 'action_id': {'type': 'string', 'maxLength': 128, 'minLength': 16}, 'date_from': {'type': 'string', 'format': 'date', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$', 'description': "First day to search, in the practice's time zone"}, 'appointment_ref': {'type': 'string', 'maxLength': 64, 'minLength': 8}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['action_id', 'practice', 'appointment_ref', 'time_zone', 'slots', 'next_step'], 'properties': {'slots': {'type': 'array', 'items': {'type': 'object', 'required': ['slot_fingerprint', 'date', 'display', 'start', 'end'], 'properties': {'end': {'type': 'string', 'format': 'date-time'}, 'date': {'type': 'string'}, 'start': {'type': 'string', 'format': 'date-time'}, 'display': {'type': 'string'}, 'provider': {'type': 'string'}, 'slot_fingerprint': {'type': 'string'}}}}, 'practice': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'action_id': {'type': 'string'}, 'next_step': {'type': 'string'}, 'time_zone': {'type': 'string'}, 'appointment_ref': {'type': 'string'}}}
prepare_dental_practice_action
Open a dental action for review
Prepare an expiring, attributed dental action and return the patient review URL where the patient sees the action and continues.
Schéma d’entrée
{'type': 'object', 'required': ['practice_slug', 'capability'], 'properties': {'capability': {'enum': ['public_provider_booking', 'public_booking_handoff', 'xona_email_appointment_request', 'external_request_form', 'call_clinic', 'visit_clinic_website'], 'type': 'string'}, 'practice_slug': {'type': 'string', 'maxLength': 140, 'minLength': 1}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['action', 'manual_review_required', 'next_step'], 'properties': {'action': {'type': 'object'}, 'next_step': {'type': 'string'}, 'manual_review_required': {'type': 'boolean'}, 'conversational_next_tool': {'type': 'string'}}}
search_canadian_dentists
Search Canadian dentists
Search evidence-backed public profiles in the Canadian dental directory by name or place, and filter by a service, a language, published weekend or evening hours, a booking route you can use now, and a payment plan the clinic says it accepts (the Canadian Dental Care Plan). Each row says which published fact matched and when it was read. No login or clinic membership is required.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'properties': {'open': {'enum': ['saturday', 'sunday', 'weekend', 'evening'], 'type': 'string', 'description': 'Published hours: open that day, or closing at/after 18:00 on some day'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1}, 'order': {'enum': ['route', 'soonest'], 'type': 'string', 'description': "route (default) orders by booking route; soonest orders one place's practices by when they can be seen, and needs that place's locality and province: practices whose live schedule Xona reads first, then open now, then by when each opens by its own website's hours. Each row then carries when: state (live_schedule, open_now, opens_today, opens_later, unknown), text and time_zone. Opening hours are not appointment times; for a live_schedule practice, list_xona_booking_slots gives real times."}, 'query': {'type': 'string', 'maxLength': 160}, 'booking': {'enum': ['online', 'form', 'xona_request', 'call', 'any'], 'type': 'string', 'description': "A route the agent can use now: the clinic's online booking page, its request form, an appointment request Xona delivers, a phone number, or any of these"}, 'service': {'type': 'string', 'maxLength': 60, 'description': "A service the clinic's own site lists: cleaning, implants, invisalign, emergency, kids, root canal, whitening …"}, 'coverage': {'enum': ['cdcp'], 'type': 'string', 'description': "A payment plan the clinic says it accepts, on its own website or in a correction its owner made: cdcp is the Canadian Dental Care Plan. Each row quotes the clinic's own words and the day they were read"}, 'language': {'type': 'string', 'maxLength': 40, 'description': "A language the clinic's own site lists"}, 'locality': {'type': 'string', 'maxLength': 100}, 'province': {'type': 'string', 'maxLength': 40}, 'postal_code': {'type': 'string', 'maxLength': 12}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['results', 'count'], 'properties': {'count': {'type': 'integer'}, 'results': {'type': 'array', 'items': {'type': 'object'}}, 'projection': {'enum': ['row'], 'type': 'string'}}}
start_dental_request
Start a dental appointment request
Start an appointment request that Xona emails to the selected clinic, without leaving the conversation. Xona first emails the patient a code that confirms their address; confirm_dental_request then sends the request. Use it where list_dental_practice_actions marks xona_email_appointment_request as completes_in_conversation.
Schéma d’entrée
{'type': 'object', 'required': ['practice_slug', 'patient_name', 'patient_email'], 'properties': {'patient_name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': "The patient's name as they typed it"}, 'patient_email': {'type': 'string', 'format': 'email', 'maxLength': 254, 'minLength': 3, 'description': "The patient's own email; the code goes there"}, 'practice_slug': {'type': 'string', 'maxLength': 140, 'minLength': 1}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['action', 'practice', 'verification', 'consent_version', 'consent_text', 'next_step'], 'properties': {'action': {'type': 'object'}, 'practice': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'next_step': {'type': 'string'}, 'consent_text': {'type': 'string'}, 'verification': {'type': 'string'}, 'consent_version': {'type': 'string'}}}
start_xona_appointment_access
Text the patient a link to show their appointments
Text a patient one link to see, move or cancel the appointments they already have at a practice connected to Xona, for a conversation with no booking action_id that still works. If the mobile number, name and date of birth match a patient there, Xona texts them the link; after they tap it and press Show my appointments, list_xona_appointments reads their appointments. The answer is the same whether or not the details match.
Schéma d’entrée
{'type': 'object', 'required': ['practice_slug', 'patient_phone', 'first_name', 'last_name', 'date_of_birth'], 'properties': {'last_name': {'type': 'string', 'maxLength': 60, 'minLength': 1}, 'first_name': {'type': 'string', 'maxLength': 60, 'minLength': 1}, 'date_of_birth': {'type': 'string', 'format': 'date', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'}, 'patient_phone': {'type': 'string', 'maxLength': 32, 'minLength': 7, 'description': "The patient's own Canadian or US mobile number, as the practice has it on file"}, 'practice_slug': {'type': 'string', 'maxLength': 140, 'minLength': 1}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['action_id', 'practice', 'status', 'link_expires_at', 'next_step'], 'properties': {'status': {'type': 'string'}, 'practice': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'action_id': {'type': 'string'}, 'next_step': {'type': 'string'}, 'link_expires_at': {'type': 'string', 'format': 'date-time'}}}
Modifié
change_xona_appointment
28 September 2026 02:41
Modifié
list_xona_reschedule_times
28 September 2026 02:41
Modifié
start_xona_appointment_access
28 September 2026 02:41
Modifié
confirm_xona_booking
28 September 2026 02:41
Modifié
hold_xona_booking_slot
28 September 2026 02:41
Modifié
list_xona_booking_slots
28 September 2026 02:41
Modifié
confirm_dental_request
28 September 2026 02:41
Modifié
start_dental_request
28 September 2026 02:41
Modifié
list_public_booking_slots
28 September 2026 02:41
Modifié
prepare_dental_practice_action
28 September 2026 02:41
Modifié
search_canadian_dentists
28 September 2026 02:41
Ajouté
change_xona_appointment
26 September 2026 02:40
Ajouté
list_xona_reschedule_times
26 September 2026 02:40
Ajouté
list_xona_appointments
26 September 2026 02:40
Ajouté
start_xona_appointment_access
26 September 2026 02:40
Modifié
abandon_xona_booking
24 September 2026 02:40
Modifié
confirm_xona_booking
24 September 2026 02:40
Modifié
hold_xona_booking_slot
24 September 2026 02:40
Ajouté
abandon_xona_booking
20 September 2026 02:40
Ajouté
confirm_xona_booking
20 September 2026 02:40
Ajouté
hold_xona_booking_slot
20 September 2026 02:40
Ajouté
list_xona_booking_slots
20 September 2026 02:40
Ajouté
list_xona_booking_services
20 September 2026 02:40
Ajouté
confirm_dental_request
20 September 2026 02:40
Ajouté
start_dental_request
20 September 2026 02:40
Ajouté
list_public_booking_slots
20 September 2026 02:40
Ajouté
list_public_booking_services
20 September 2026 02:40
Ajouté
get_dental_action_status
20 September 2026 02:40
Ajouté
prepare_dental_practice_action
20 September 2026 02:40
Ajouté
list_dental_practice_actions
20 September 2026 02:40