Use this gateway with an AI assistant
An assistant connected to Xona can search Canadian dental practices, send an appointment request to one, and — where a practice has connected its schedule — book a real open time, all without leaving the conversation.
POST https://book.xonark.com/mcp
Streamable HTTP. No account, no API key, no OAuth. Tool definitions: /mcp/llms.txt
POST https://book.xonark.com/api/public/dental-network/tools/{tool}
The same tools over plain HTTP: the tool's arguments as the JSON body, its result as the response. Every operation is in /openapi.json. Pages on this site also offer the same tools to a browser agent through WebMCP.
Connect it
Claude: open the + menu next to the message box, go to Connectors, choose Add custom connector, paste https://book.xonark.com/mcp, and leave authentication off.
ChatGPT: turn on Developer mode under Settings, Security and login. Then open Plugins, press +, paste https://book.xonark.com/mcp and choose No Auth. In a chat, press + and pick Xona Dental Gateway before you ask.
Any other agent: call the HTTP route above, or point an OpenAPI-aware tool at /openapi.json.
An assistant without any of these can still find a practice and hand the patient its booking page, but it cannot book inside the conversation.
Two routes, and the practice decides which
Call list_dental_practice_actions first. It marks the route a practice actually offers; a route it does not offer is not there to call.
Appointment request
Any listed practice with a working mailbox. Xona emails the request to the clinic; a person there answers it.
- The assistant asks for the patient's name, their own email, a service category and when they are free.
start_dental_requestthen emails the patient one link. Nothing has reached the clinic. - The link shows the exact request and the consent text the tool returned, with one button: Send this request. The patient's press sends it. If the link will not open, the patient types the email's code on the request page. No code is read back in the conversation.
confirm_dental_requestreports the status: waiting for the patient until the press, then the result. It never sends.
Ends as delivered, unknown or failed, or stopped by the patient, never as a confirmed appointment. The link and the request expire 20 minutes after it starts. The clinic replies to the patient.
Booking
A practice that claimed its page and connected its schedule to Xona. The time is written into the clinic's own book.
list_xona_booking_services, thenlist_xona_booking_slotsfor one service, a week at a time.- The assistant asks the patient for their mobile, name and date of birth in the conversation and reads the time and details back.
hold_xona_booking_slotthen holds that time and texts the patient one link. The patient taps it, checks the details and presses Book this appointment; that books it. No code is read back in the conversation. confirm_xona_bookingreturns the result once the patient has pressed the button; until then it says the link is waiting. Every step returnsbooking_steps: what is done, what the patient still has to do, and when the link expires.- At any step the patient can stop:
abandon_xona_bookingreleases the time at once. Or they can finish in a browser:continue_urlopens the practice's booking page on the held time.
Ends as a confirmed appointment in the clinic's book — or, where the practice confirms times itself, as a request the clinic answers. The outcome field says which. If Xona cannot tell whether the patient already has a chart there, it returns the practice's own booking page instead of guessing.
What the patient does themselves
Two things an assistant cannot do on the patient's behalf.
- Read back a code. Xona sends it to the patient's own email, and for a booking to their own mobile as well. An assistant that cannot produce the code cannot send the request or take the time.
- Agree to the consent text. The tool returns it verbatim — for a request, the same words the web form shows — and the confirming call has to echo its version. It is the patient's agreement, not the assistant's.
What leaves the conversation
Appointment booking, the same fields any booking takes. Nothing clinical.
- A request carries the patient's name, their email, a broad service category, when they are free in their own words, and an optional short note.
- A booking carries first and last name, date of birth, the patient's email and mobile, a guardian's name when the patient is under 16, and an optional short note.
- Xona does not ask for a diagnosis, symptoms, a treatment history, or insurance details, and keeps no clinical record. The optional note is the patient's own words and goes to the clinic as written.
- The gateway cannot be asked for a clinic's patients, its accounts, or any other practice's data. It reads public profiles and writes only the one request or booking the patient just authorised.
Every tool this endpoint serves
Generated from the running server, so this list is what is actually there.
search_canadian_dentistsSearch Canadian dentistsget_canadian_dental_practiceGet a Canadian dental practiceanswer_dental_practice_questionAnswer from dental practice evidencelist_dental_practice_actionsList dental practice actionsprepare_dental_practice_actionOpen one of a clinic's booking routes · confirm with the patientget_dental_action_statusGet dental action statuslist_public_booking_servicesList a clinic's public booking serviceslist_public_booking_slotsList a clinic's public booking slotschoose_public_booking_timeChoose a time to book at a clinic · confirm with the patientstart_dental_requestStart a dental appointment request · confirm with the patientconfirm_dental_requestCheck a dental appointment requestlist_xona_booking_servicesList a connected practice's booking serviceslist_xona_booking_slotsList a connected practice's open timeshold_xona_booking_slotHold an open time and text the patient a link · confirm with the patientconfirm_xona_bookingGet the booking's result · confirm with the patientabandon_xona_bookingGive up a booking that is not booked yet · confirm with the patientstart_xona_appointment_accessText the patient a link to show their appointments · confirm with the patientlist_xona_appointmentsList the patient's upcoming appointmentslist_xona_reschedule_timesList times an appointment can move tochange_xona_appointmentAsk to move or cancel an appointment · confirm with the patient
Reading the gateway without tools
Every public page has a Markdown twin at the same path with .md — /index.md, a locality page, a profile. /llms.txt is the guide to all of it, and /openapi.json describes the same reads as REST. Pages a crawler should not take in bulk are listed in /robots.txt, and the terms of use say what use is permitted.
Search by place and condition
For an assistant that can only open a URL. The same question the search tool answers, as one GET.
- Ask for practices by place and condition with one GET. As a page: https://book.xonark.com/?locality=<city>&province=<two-letter code>. As text: https://book.xonark.com/index.md with the same parameters. As JSON: https://book.xonark.com/api/public/dental-network/search with the same parameters.
- Scope, at least one: locality with province, postal_code, or q (a clinic name, 3 characters or more). A condition with no scope is refused, because it would scan the whole country.
- Conditions, any combination: open=saturday|sunday|weekend|evening (evening means the clinic closes at 18:00 or later on some day); booking=online|form|xona_request|call|any; service=<a word from the clinic's own service list, for example implants>; language=<a language the clinic says it speaks, for example Mandarin>; coverage=cdcp (the clinic says it accepts the Canadian Dental Care Plan).
- Any other parameter is not a filter. The JSON search refuses it with a 400 that names it; a page lists the results and says which parameter it did not apply. src, lang, page and order are accepted and do not filter.
- Soonest first: add order=soonest to the JSON search, with the locality (and province when the name is in more than one) of one place, or a postal_code such as M5V or M5V 1B3, and the service (cleaning, exam or emergency; cleaning when none is given). Practices whose live schedule Xona reads come first: those on the page you ask for are read then and ordered by their earliest open time, and each of those rows carries earliest (the time, its service_id and start_local), the clinic's services, and read (time, none, or not_read). Then come those open now, then by when each opens next by the hours on its own website; each row carries when (state, text, time_zone). Opening hours are not appointment times: a live_schedule row's next_step names the tools that read more times and book one, and live_unread counts the live clinics on later pages. A page lists one place soonest first for people on its own. Each earliest is only a first pick: the first service in the clinic's own list whose name holds the need's word, an adult's before a child's. Clinic service names often say more than that word: "New Patient Exam (No Cleaning)", a new-patient bundle of exam, x-rays and cleaning, a service for children only, a fee or insurance note. Read service_name against what the patient needs; when it does not fit, choose the service that does from services and read its times from https://book.xonark.com/api/public/dental-network/practices/<slug>/slots.
- Each row says why it matched, in the clinic's own words: the hours of the day you asked for, the matching services, the language, the booking route, and the day the source was read. New patients always reads "not yet verified": the gateway does not rank or guess it.
- Results come 10 to a page for an unverified client; follow the "Next page" link, or add page=2. A place's whole comparison is at https://book.xonark.com/dentists/<city>-<province>.md.
- Example, dentists in Burnaby, BC open on Saturday with online booking: https://book.xonark.com/?booking=online&locality=Burnaby&open=saturday&province=BC
Corrections and support
A practice's facts come from its own public website and from public directory records, each carrying the day it was read. Being listed is not a Xona membership. A practice can correct or claim its page, and anyone can reach a person, through contact. How patient data is handled is set out in Xonark's privacy policy.