Skip to main content
Glama

Xona Dental Gateway

Search Canadian dentists

search_canadian_dentists
Read-onlyIdempotent

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.

Input Schema

NameRequiredDescriptionDefault
openNoPublished hours: open that day, or closing at/after 18:00 on some day
pageNoPage of results, from 1; each page holds limit rows
limitNo
orderNoroute (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.
queryNo
bookingNoA 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
serviceNoA service the clinic's own site lists: cleaning, implants, invisalign, emergency, kids, root canal, whitening …
coverageNoA 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
languageNoA language the clinic's own site lists
localityNo
provinceNo
postal_codeNo

Output Schema

NameRequiredDescriptionDefault
countYes
resultsYes
next_stepNo
projectionNo
live_unreadNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / order / description
      Previous value: -"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 and book one. A live row the search read also carries earliest (the time, its service_id, start_local and the id that books it; [] 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."New value: +"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."
  2. Changed4 schema fields changed
    • changedInput schema / properties / order / description
      Previous value: -"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, or a postal_code forward sortation area such as M5V: 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, time_zone and, for live_schedule, next_step naming the tools that give real times. Opening hours are not appointment times."New value: +"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 and book one. A live row the search read also carries earliest (the time, its service_id, start_local and the id that books it; [] 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."
    • addedInput schema / properties / page
      Added value: +{
      +  "description": "Page of results, from 1; each page holds limit rows",
      +  "maximum": 200,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / live_unread
      Added value: +{
      +  "type": "integer"
      +}
    • addedOutput schema / properties / next_step
      Added value: +{
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / order / description
      Previous value: -"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."New value: +"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, or a postal_code forward sortation area such as M5V: 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, time_zone and, for live_schedule, next_step naming the tools that give real times. Opening hours are not appointment times."
  4. Changed2 schema fields changed
    • addedInput schema / properties / coverage
      Added value: +{
      +  "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",
      +  "enum": [
      +    "cdcp"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / order
      Added value: +{
      +  "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.",
      +  "enum": [
      +    "route",
      +    "soonest"
      +  ],
      +  "type": "string"
      +}
  5. First observed

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds real context beyond them: freshness of live reads ('read_at says when its times were read, at most 5 minutes before'), that opening booking_url starts a booking with no call, that opening hours are not appointment times, and that no auth is needed. Some of this (live rows, earliest, next_step, booking_url) duplicates the huge schema description of the order parameter, which lowers the added value somewhat.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, but the body is a dense ~330-word wall mixing search semantics, ordering internals, service-matching heuristics and edge cases, with cryptic sentences such as 'Each earliest is only a first pick' and 'The tool a row's next_step names reads more times.' Several sentences repeat content already carried by the order parameter's schema description rather than earning their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained (the description explains them anyway). Given 12 optional parameters and complex ordering, the description covers the hard parts but leaves query, paging, and the locality/province/postal_code relationships largely unexplained outside the order context. Adequate but with visible gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 58% with 12 parameters, so the description must compensate. It does explain the semantics of order, open, booking, coverage and service matching (e.g. matching service_name against the patient's need), but much of that restates the already-verbose order field description in the schema, and query, page, limit, locality, province and postal_code get no additional meaning in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource ('Search evidence-backed public profiles in the Canadian dental directory') plus the filterable axes, which lets an agent separate it from retrieval tools like get_canadian_dental_practice. It also names a sibling (list_public_booking_slots) when the matched service doesn't fit. However, the purpose is buried under a large amount of order=soonest mechanics rather than stated crisply.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete usage conditions ('A search with order=soonest, the patient's postal code or city and the service returns live rows...') and routes the agent to an alternative when a service_name doesn't match the need. It also states 'no login or clinic membership is required'. It never states when NOT to use this tool (e.g. when the clinic is already known), so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources