Xona Dental Gateway
Registry code: 06d8f29509b43212
A search with order=soonest, the patient's postal code or city and the service returns live rows that already carry each clinic's earliest time, its services and booking_url, the page where the patient books that time; opening it starts the booking there, with no call in the conversation. A row's read.read_at says when its times were read, at most 5 minutes before. The tool a row's next_step names reads more times. 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…
- endpoint
- https://book.xonark.com/mcp
- protocol
- streamable-http ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is Xona Dental Gateway live?
- Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
- Is Xona Dental Gateway free to use?
- Yes — the hub reached it with no key and no payment.
- What tools does Xona Dental Gateway have?
- 20 tools: get_dental_action_status, list_dental_practice_actions, list_public_booking_services, start_dental_request, hold_xona_booking_slot, list_public_booking_slots, list_xona_reschedule_times, choose_public_booking_time, ….
- Is Xona Dental Gateway safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99.4%· all time 99.4%
last good check
of 20 tools
- degraded → live
- degraded → live
- live → degraded· timeout after 20000ms
- degraded → live
- live → degraded· timeout after 20000ms
- used for
- find a dentist in canada
- list open dental appointment slots
- book a dental appointment
- reschedule or cancel a dental appointment
- takes → gives
- text, data → data
- tools
- 12 reads5 changes data3 sends messages
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Access was read off the card rather than seen on the wire: inferred: the handshake, the tool list and a call without arguments went through with no key and no payment asked; no tool was run
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
get_dental_action_status reads unknown 17h ago
Read the exact outcome of an expiring dental action. Handoff, request, and confirmed booking outcomes remain distinct.
{ "type": "object", "required": [ "action_id" ], "properties": { "action_id": { "type": "string", "maxLength": 128, "minLength": 16 } }, "additionalProperties": false }arguments 14 lineslist_dental_practice_actions reads unknown 13h ago
List current public booking, request, form, call, and website actions for a dental practice in preference order.
{ "type": "object", "required": [ "practice_slug" ], "properties": { "practice_slug": { "type": "string", "maxLength": 140, "minLength": 1 } }, "additionalProperties": false }arguments 14 lineslist_public_booking_services reads unknown never probed
Read the services a clinic's own online scheduler offers, by practice_slug: a clinic whose search row is live_schedule, or whose action option has reads_times. The answer carries booking_url, the page where the patient books this clinic; a clinic whose scheduler can't be read answers readable false with that booking_url. An answer may be up to 5 minutes old: read_at says when the clinic's scheduler was read and age_seconds how long ago; fresh: true reads this clinic again (twice a minute per clinic; past that the answer says when it next can). Provider locators remain server-owned.
{ "type": "object", "required": [ "practice_slug" ], "properties": { "fresh": { "type": "boolean", "description": "Read this clinic's scheduler now rather than from a read up to 5 minutes old" }, "practice_slug": { "type": "string", "maxLength": 140, "minLength": 1 } }, "additionalProperties": false }arguments 18 linesstart_dental_request sends messages unknown never probed
Start an appointment request for Xona to send to the selected clinic (by email, or through the clinic's own website form). It takes the patient's details and preferred times. Xona emails the patient a link that shows the exact request; the request goes to the clinic only when the patient presses "Send this request" there, or enters the email's code on continue_url. The result carries consent_text and continue_url; confirm_dental_request reports the status. Use it where list_dental_practice_actions marks xona_email_appointment_request as completes_in_conversation.
{ "type": "object", "required": [ "practice_slug", "patient_name", "patient_email", "service_category", "preferred_window" ], "properties": { "note": { "type": "string", "maxLength": 500 }, "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 link to send the request goes there" }, "patient_phone": { "type": "string", "maxLength": 32, "description": "The patient's phone as they typed it; required when the clinic's website form needs one" }, "practice_slug": { "type": "string", "maxLength": 140, "minLength": 1 }, "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" } }, "additionalProperties": false }arguments 59 lineshold_xona_booking_slot changes data unknown never probed
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.
{ "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 }arguments 69 lineslist_public_booking_slots reads unknown never probed
Read open times from a clinic's own online scheduler, by practice_slug, for one service_id between date_from and date_to (the clinic's dates, both included, at most 14 days). Each time carries starts_at, start_local (the time at the clinic), time_zone and booking_url, the page where the patient books that time (Xona's page on that service and day where Xona books the clinic's scheduler, else the clinic's own booking page); earliest is the first one; preferred_time puts the closest times first. An answer may be up to 5 minutes old: read_at says when the clinic's scheduler was read and age_seconds how long ago; fresh: true reads this clinic again (twice a minute per clinic; past that the answer says when it next can).
{ "type": "object", "required": [ "practice_slug", "service_id", "date_from", "date_to" ], "properties": { "fresh": { "type": "boolean", "description": "Read this clinic's scheduler now rather than from a read up to 5 minutes old" }, "date_to": { "type": "string", "format": "date", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "description": "Last day to read (inclusive), at most 13 days after date_from" }, "date_from": { "type": "string", "format": "date", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "description": "First day to read, in the clinic's time zone; today or later" }, "service_id": { "type": "string", "maxLength": 160, "minLength": 1, "description": "A service_id from list_public_booking_services, or from a soonest search row's services" }, "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; the closest times come first" } }, "description": "Read at most 14 days of availability, starting no more than 180 days ahead.", "additionalProperties": false }arguments 45 lineslist_xona_reschedule_times reads unknown 9h ago
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.
{ "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 }arguments 34 lineschoose_public_booking_time changes data unknown never probed
For a public_provider_booking action: keeps one time from list_public_booking_slots (or a soonest search row's earliest) and returns continue_url, Xona's page where the patient enters their own details and presses Book. Xona then books that time in the clinic's own scheduler. It takes the action and the time (service_id, slot_id, starts_at) only, reads that time again and keeps it only if it is still open; the page collects the patient's details.
{ "type": "object", "required": [ "action_id", "service_id", "slot_id", "starts_at" ], "properties": { "slot_id": { "type": "string", "maxLength": 256, "minLength": 1, "description": "The chosen time's id from list_public_booking_slots (slot_id on a soonest row's earliest)." }, "action_id": { "type": "string", "maxLength": 128, "minLength": 16 }, "starts_at": { "type": "string", "format": "date-time", "maxLength": 64, "description": "The chosen time's starts_at, exactly as returned." }, "service_id": { "type": "string", "maxLength": 160, "minLength": 1, "description": "The chosen time's service_id." } }, "additionalProperties": false }arguments 35 linesconfirm_dental_request sends messages unknown 13h ago
Report a started request's status. It never sends: waiting_for_patient until the patient presses "Send this request" on Xona's page, then the stored result: sent, delivery unknown or failed, expired, or stopped by the patient. A sent request is never a confirmed booking.
{ "type": "object", "required": [ "action_id" ], "properties": { "action_id": { "type": "string", "maxLength": 128, "minLength": 16 } }, "additionalProperties": false }arguments 14 lineslist_xona_booking_services reads unknown never probed
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.
{ "type": "object", "required": [ "practice_slug" ], "properties": { "practice_slug": { "type": "string", "maxLength": 140, "minLength": 1 } }, "additionalProperties": false }arguments 14 lineslist_xona_booking_slots reads unknown never probed
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.
{ "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 }arguments 44 linesconfirm_xona_booking reads unknown never probed
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.
{ "type": "object", "required": [ "action_id" ], "properties": { "action_id": { "type": "string", "maxLength": 128, "minLength": 16 } }, "additionalProperties": false }arguments 14 linesabandon_xona_booking changes data unknown never probed
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.
{ "type": "object", "required": [ "action_id" ], "properties": { "action_id": { "type": "string", "maxLength": 128, "minLength": 16 } }, "additionalProperties": false }arguments 14 linesstart_xona_appointment_access sends messages unknown never probed
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.
{ "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 }arguments 39 lineslist_xona_appointments reads unknown 9h ago
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.
{ "type": "object", "required": [ "action_id" ], "properties": { "action_id": { "type": "string", "maxLength": 128, "minLength": 16 } }, "additionalProperties": false }arguments 14 lineschange_xona_appointment changes data unknown never probed
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.
{ "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 }arguments 39 linessearch_canadian_dentists reads unknown 13h ago
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. A search with order=soonest, the patient's postal code or city and the service returns live rows that already carry each clinic's earliest time, its services and booking_url, the page where the patient books that time; opening it starts the booking there, with no call in the conversation. A row's read.read_at says when its times were read, at most 5 minutes before. The tool a row's next_step names reads more times. 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 with list_public_booking_slots. No login or clinic membership is required.
{ "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" }, "page": { "type": "integer", "maximum": 200, "minimum": 1, "description": "Page of results, from 1; each page holds limit rows" }, "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: its locality (and province when the name is in more than one), or a postal_code such as M5V or M5V 1B3. Practices whose live schedule Xona reads come first, each page's read now and ordered by their earliest open time for the search's service (cleaning, exam or emergency; cleaning when none is given), 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, time_zone and, for live_schedule, next_step naming the tools that read more times. Every row carries booking_url, the page where the patient books that clinic. A live row the search read also carries earliest (the time, its service_id, start_local, the id that books it and its own booking_url; [] when none in the next 7 days), services (the clinic's own list) and read (outcome time, none or not_read). live_unread counts the live clinics on later pages. Opening hours are not appointment 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 }arguments 79 linesget_canadian_dental_practice reads unknown 17h ago
Get one public dental practice profile, fact evidence, citations, and current public actions.
{ "type": "object", "required": [ "practice_slug" ], "properties": { "practice_slug": { "type": "string", "maxLength": 140, "minLength": 1 } }, "additionalProperties": false }arguments 14 linesanswer_dental_practice_question reads unknown 17h ago
Answer a bounded factual question from the selected practices' evidence. Unknown is returned explicitly; missing data is never inferred as no.
{ "type": "object", "required": [ "practice_slugs", "topic" ], "properties": { "topic": { "enum": [ "identity", "location", "hours", "services", "languages", "new_patients", "coverage", "accessibility", "emergency", "booking", "patient_mentions" ], "type": "string" }, "practice_slugs": { "type": "array", "items": { "type": "string", "maxLength": 140, "minLength": 1 }, "maxItems": 10, "minItems": 1 } }, "additionalProperties": false }arguments 36 linesprepare_dental_practice_action changes data unknown never probed
Creates a short-lived action for one capability the clinic's action options list (its scheduler page, a Xona request, a request form, a call or its website) and returns the URL of the page for it. A capability the clinic does not list is refused. A connected practice's time from list_xona_booking_slots is held with hold_xona_booking_slot, not through this tool.
{ "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 }arguments 26 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id06d8f29509b43212.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/06d8f29509b43212/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/06d8f29509b43212?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.