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
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.
start_dental_requestwith the patient's name and their own email. Xona emails them a six-digit code. Nothing has reached the clinic.- The patient reads the code back, picks a service category, says when they are free, and agrees to the consent text the tool returned.
confirm_dental_requestsends it.
Ends as delivered, held, or failed — never as a confirmed appointment. 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.hold_xona_booking_slottakes the patient's email, mobile, name and date of birth together, holds that time and emails the patient a link. Tapping it texts the patient a second link; tapping that confirms their mobile. No code is read back in the conversation.confirm_xona_bookingbooks it once the patient has tapped both links and agrees to the consent text; until then it says which link is waiting. Every step returnsbooking_steps: what is done, what the patient still has to tap, and when each 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 a dental action for review · 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 slotsstart_dental_requestStart a dental appointment request · confirm with the patientconfirm_dental_requestSend a dental appointment request · confirm with the patientlist_xona_booking_servicesList a connected practice's booking serviceslist_xona_booking_slotsList a connected practice's open timeshold_xona_booking_slotHold an open time · confirm with the patientconfirm_xona_bookingBook the held time · confirm with the patientabandon_xona_bookingGive up a booking that is not booked yet · 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>.
- 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.