Skip to main content
Glama

Xona Dental Gateway

Server Details

Find Canadian dentists; send an appointment request or book with a connected practice.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A3.6/5.0

Scored across 20 tools

Disambiguation3/5

The set has two parallel booking paths (xona_* vs public_*), producing near-twin tools like list_xona_booking_slots/list_public_booking_slots and list_xona_booking_services/list_public_booking_services, plus several confirm/status tools (confirm_xona_booking, confirm_dental_request, get_dental_action_status). Descriptions do a decent job disambiguating via routing keys (completes_in_conversation, public_provider_booking), but the overlapping pairs and multi-step booking flows still invite misselection.

Naming Consistency5/5

Every tool follows a consistent snake_case verb_noun pattern (list_*, get_*, confirm_*, start_*, hold_*, change_*, search_*), with predictable resource sub-naming like xona_/public_/dental_ prefixes. No camelCase or mixed conventions appear.

Tool Count4/5

At 20 tools the surface is on the heavy side, but each tool maps to a distinct step (directory search, service/slot discovery, hold, book, confirm, abandon, reschedule, patient access). The near-duplicate xona/public pairs add bulk that could potentially be consolidated.

Completeness4/5

The lifecycle is broadly covered: discovery (search/get/answers), services and slots, hold/book/confirm/abandon, request flow, reschedule/change, and patient appointment access. Minor gaps remain (e.g. no standalone cancel of a booked appointment, limited explicit error/status surfaces), but core workflows are closed.

Available Tools

20 tools
abandon_xona_bookingGive up a booking that is not booked yetA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
action_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
reasonNo
outcomeYes
practiceYes
action_idYes
next_stepYes
booking_urlNo
continue_urlNo
booking_stepsNo
consent_versionNo
link_expires_atNo
confirmation_smsNo
appointment_startNo
appointment_start_localNo

TDQS

A3.8/5.0
Behavior4/5

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

The description adds behavioral detail beyond the annotations: it reveals that the tool releases a hold and drops patient details, and that it is safe to call repeatedly ('Calling again returns the same result'), which enriches the idempotentHint annotation. It also clarifies scope with 'never cancels a booked appointment', aligning with destructiveHint false.

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

Conciseness5/5

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

The description is three short sentences with no filler. The primary action and scope are front-loaded, the exclusion is stated clearly, and the idempotency note is concise. Every sentence earns its 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?

For a single-parameter tool with an output schema and idempotency annotation, the description covers the main behavior, scope, and repeated-call behavior. However, it leaves out the crucial meaning of action_id and does not say it should be the identifier returned by a prior hold action, which an agent needs to invoke the tool correctly.

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

Parameters1/5

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

The schema has a single required parameter, action_id, with 0% schema description coverage. The description never explains what action_id refers to, how to obtain it, or what format is expected beyond the schema constraints. Since the schema coverage is low, the description was responsible for compensating and it does not.

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

Purpose5/5

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

The description uses specific verbs ('Release', 'drop') tied to a clear resource ('the held time', 'the patient's details') and states exactly when it applies ('at any step before it is booked'). It also distinguishes itself from cancellation by explicitly saying 'It never cancels a booked appointment', separating it from any cancellation sibling.

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?

The description clearly states when to use the tool: when the patient no longer wants the held time before it is booked. It also provides a strong exclusion: it is not for booked appointments. It does not name an explicit alternative tool, but the context and exclusion are enough for an agent to select it appropriately.

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

answer_dental_practice_questionAnswer from dental practice evidenceA
Read-onlyIdempotent
Inspect

Answer a bounded factual question from the selected practices' evidence. Unknown is returned explicitly; missing data is never inferred as no.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYes
practice_slugsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
answersYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already provide readOnlyHint and idempotentHint, covering safety. The description adds valuable behavioral context: 'Unknown is returned explicitly; missing data is never inferred as no.' This clarifies handling of missing data, which is not in annotations, so it adds real value.

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

Conciseness5/5

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

Two sentences with zero waste. The main purpose is front-loaded, and the behavioral caveat follows. No redundancy or filler.

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

Completeness4/5

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

Given the output schema exists and the input schema defines the topic enum, the description is fairly complete. It explains the unknown-handling behavior but does not elaborate on practice_slugs or topic categories, though those are largely covered by the schema. Minor gap on usage guidance, but not critical for a read-only QA tool.

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

Parameters2/5

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

Schema description coverage is 0% – the description does not mention the two parameters at all. The topic parameter has an enum but no descriptions, and practice_slugs is self-explanatory, yet the description provides no guidance on how to populate them. Since coverage is low, the description should compensate but only weakly implies a bounded question set.

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?

States a clear verb+resource: 'Answer a bounded factual question from the selected practices' evidence.' It differentiates from siblings like search_canadian_dentists and get_canadian_dental_practice by focusing on evidence-based QA. Not a tautology and not vague.

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

Usage Guidelines3/5

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

The description implies when to use it (answering factual questions about selected practices) but gives no explicit alternatives or exclusions. Among many booking/action siblings, this tool is clearly distinct, but the description does not name them or state when not to use it.

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

change_xona_appointmentAsk to move or cancel an appointmentAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoFor a reschedule: the new time's date exactly as list_xona_reschedule_times returned it
kindYes
action_idYes
appointment_refYes
slot_fingerprintNoFor a reschedule: the new time's slot_fingerprint from list_xona_reschedule_times

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNo
stateYes
practiceYes
action_idYes
next_stepYes
appointment_refYes
link_expires_atNo
requested_start_localNo
appointment_start_localNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations state the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false), and the description adds real context beyond them: the change is asynchronous and patient-mediated (a texted link/button or code), the practice either updates automatically or receives a request, and re-calling returns a live result. That retry/status behavior also explains the non-idempotent annotation. Only auth/permission and failure behavior are left unstated.

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

Conciseness4/5

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

Four sentences, front-loaded with the purpose and then the behavioral details, with essentially no filler. It is slightly dense but every sentence carries information an agent needs about how the change actually happens.

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

Completeness4/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 need not be described, and the description covers the async, patient-driven workflow well for a genuinely complex tool. The gaps are the missing origin/prerequisites for action_id and any failure handling, which keep it from being fully complete.

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

Parameters2/5

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

Schema description coverage is only 40% (date and slot_fingerprint are documented, with helpful cross-references to list_xona_reschedule_times), yet the description itself says nothing about any parameter. With three parameters (kind, action_id, appointment_ref) undocumented in both places, the description fails to compensate for the coverage gap.

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 pair and resource: 'Move or cancel one of the patient's appointments,' which maps cleanly to the cancel/reschedule enum. It is clear enough to act on, but it does not explicitly distinguish itself from adjacent siblings such as list_xona_reschedule_times or the booking-confirmation tools, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is implied by the purpose (use it when a patient wants an appointment moved or cancelled) and the description sketches the downstream flow, but it never states prerequisites (e.g., where action_id/appointment_ref come from) or when to prefer a sibling tool. There is no explicit when/when-not guidance, so this is minimum-viable rather than strong.

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

choose_public_booking_timeChoose a time to book at a clinicAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
slot_idYesThe chosen time's id from list_public_booking_slots (slot_id on a soonest row's earliest).
action_idYes
starts_atYesThe chosen time's starts_at, exactly as returned.
service_idYesThe chosen time's service_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
bookingYes
next_stepYes
continue_urlYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=false), and the description adds genuinely useful behavior beyond that: it re-reads the slot and keeps it only if still open, and it discloses that Xona performs the actual booking while the patient enters details on the returned page. This is the kind of state/flow detail annotations cannot convey.

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

Conciseness3/5

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

Two long, clause-heavy sentences that are front-loaded with the flow but include redundancy ('the page collects the patient's details' is stated twice in substance) and a run-on structure that slows parsing.

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

Completeness4/5

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

For a step in a multi-tool booking workflow with an output schema present, the description covers the key context: input source, re-validation behavior, and what continue_url is for. Return-value details are correctly left to the output schema.

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

Parameters4/5

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

Schema coverage is 75%, so most parameters are already documented, but the description adds meaning by grouping service_id/slot_id/starts_at as 'the time' and including action_id in the call shape, plus stressing starts_at must match the returned value exactly. It adds value over the schema without fully substituting for the undocumented action_id semantics.

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 description states a specific verb (keeps a chosen time) and resource (a public booking slot), and explicitly frames it as the step following list_public_booking_slots. It distinguishes itself from that sibling by noting it selects rather than lists, though the phrasing is dense enough that the core action takes a second read.

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 clearly scopes usage to a 'public_provider_booking action' and names the upstream source of the time (list_public_booking_slots or a soonest search row's earliest). No explicit when-not or exclusions are given, but the sequencing context is clear.

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

confirm_dental_requestSend a dental appointment requestA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
action_idYes
consent_versionYes
preferred_windowYesWhen the patient is free, in their words
service_categoryYes
verification_codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
actionYes
outcomeYes
next_stepYes
receipt_urlNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover safety and idempotency, but the description adds substantive context beyond them: the outcome is delivered/held/failed rather than a confirmed booking, and the consent_version/verification_code inputs encode an authorization step. The idempotency sentence largely restates idempotentHint=true.

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

Conciseness4/5

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

Three tight sentences, front-loaded with the core action and the outcome disclaimer before the retry rule. Only the final idempotency sentence is arguably redundant with the annotation.

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

Completeness4/5

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

With an output schema present, return values need minimal explanation, yet the description still summarizes the possible outcomes usefully. The main gap is not stating where action_id comes from (presumably start_dental_request), which an agent must infer.

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 description coverage is only 17%, so the description must carry the load. It explains verification_code ('the 6-digit code Xona emailed the patient') and consent_version ('the consent_text the patient agreed to'), but action_id, service_category, and note are left undocumented in both schema and 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?

States a specific verb (send) and resource (the started dental request to the clinic), and the phrase 'the started request' implies it operates on something created by start_dental_request, distinguishing it from that sibling. It is clear, though it does not name the sibling explicitly.

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

Usage Guidelines3/5

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

Usage is implied by 'the started request' (i.e., call this after start_dental_request has produced an action_id), and the retry rule is stated. However, no alternative tool is named and there is no explicit when-not guidance versus confirm_xona_booking or hold_xona_booking_slot.

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

confirm_xona_bookingGet the booking's resultA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
action_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
reasonNo
outcomeYes
practiceYes
action_idYes
next_stepYes
booking_urlNo
continue_urlNo
booking_stepsNo
consent_versionNo
link_expires_atNo
confirmation_smsNo
appointment_startNo
appointment_start_localNo

TDQS

A3.8/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations: it explains the waiting_for_patient interim state, the fallback to the practice booking page when Xona cannot identify the patient, a one-time retry if the booking stopped before it was written, and idempotent repeated calls. These details are directly relevant to safely interpreting and retrying the tool.

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

Conciseness4/5

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

The description is four focused sentences, front-loaded with the core action and followed by relevant edge-case behavior. It is informative without padding, though slightly long for a one-parameter tool.

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 need not be detailed, and the description covers important behavioral edge cases well. However, for a required action_id with no schema description and no mention in the description, the definition is incomplete on how to supply or obtain that parameter.

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

Parameters2/5

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

There is one required action_id parameter with 0% schema description coverage, and the description never mentions it or explains its origin, format, or relationship to the booking. The parameter semantics are left entirely to the caller's inference from the parameter name.

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 description clearly states the tool gets the booking result and gives the triggering condition: the patient has tapped the text link and pressed Book this appointment. It distinguishes itself from generic status tools by focusing on the final booking outcome, but it does not explicitly name or rule out siblings like get_dental_action_status.

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 a clear condition for calling: after the patient acts, and notes that until then it returns waiting_for_patient. It does not state when not to use it or name alternatives such as get_dental_action_status, so it falls just short of full alternative guidance.

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

get_canadian_dental_practiceGet a Canadian dental practiceA
Read-onlyIdempotent
Inspect

Get one public dental practice profile, fact evidence, citations, and current public actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
practice_slugYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
actionsYes
practiceYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds that it returns fact evidence, citations, and current public actions, which is useful behavioral context beyond the annotations. No contradiction found.

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

Conciseness5/5

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

One concise sentence that front-loads the core action ('Get one public dental practice profile') and then lists the included components. No unnecessary words; structure is optimal.

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

Completeness4/5

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

Given the single parameter, the presence of an output schema, and annotations that cover safety, the description provides adequate context. It enumerates the return content (profile, evidence, citations, actions) and implies the identifier. It does not explain error handling, but for a simple get operation with schema available, this is sufficient.

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 description coverage is 0%, and the description does not explicitly mention practice_slug. However, the single parameter is clearly the identifier implied by 'Get one public dental practice profile.' The description adds no explicit parameter guidance, but the parameter's purpose is self-evident from its name and the tool's purpose, so it is marginally sufficient.

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

Purpose5/5

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

States a specific verb 'Get' with a resource 'public dental practice profile' and enumerates the content (fact evidence, citations, current public actions). This clearly distinguishes from sibling tools like search_canadian_dentists (search) and list_dental_practice_actions (list actions), so an agent knows exactly what this tool returns.

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

Usage Guidelines3/5

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

The description implies usage for retrieving a single practice by slug, but does not explicitly state when to use it versus alternatives like search or list tools. It lacks exclusions or conditions, so an agent must infer from context. This is adequate but not explicit.

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

get_dental_action_statusGet dental action statusB
Read-onlyIdempotent
Inspect

Read the exact outcome of an expiring dental action. Handoff, request, and confirmed booking outcomes remain distinct.

ParametersJSON Schema
NameRequiredDescriptionDefault
action_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
actionYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful behavioral nuance ('exact outcome', distinct outcome categories), but does not elaborate on lifecycle behavior or failure cases. It does not contradict the annotations.

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

Conciseness5/5

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

Two short sentences, front-loaded with the primary verb and resource. Every phrase adds value, especially the second sentence clarifying that outcome types remain distinct.

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

Completeness4/5

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

For a simple one-parameter, read-only, idempotent tool with an output schema and strong annotations, the description is mostly complete. It could better define 'expiring dental action' or explicitly state that it applies only to such actions, but an agent can likely proceed with minimal ambiguity.

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

Parameters2/5

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

Schema description coverage is 0%, so the description needed to compensate by explaining action_id and how it relates to the outcome. It does not mention the parameter at all; only the schema's name and length constraints provide any meaning, leaving the parameter semantics mostly implicit.

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 description clearly identifies a specific verb ('Read') and resource ('outcome of an expiring dental action'), and adds useful scope by saying handoff, request, and confirmed booking outcomes remain distinct. It does not explicitly name a sibling alternative, but the purpose is unambiguous among the listed siblings.

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

Usage Guidelines3/5

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

The description implies when to use the tool: when the exact outcome of an expiring dental action is needed. However, it gives no explicit when-not-to-use guidance or alternatives, leaving some inference to the agent.

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

hold_xona_booking_slotHold an open time and text the patient a linkBInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe chosen slot's date exactly as list_xona_booking_slots returned it
noteNo
last_nameYesThe patient's last name, as the patient gave it in this conversation
first_nameYesThe patient's first name, as the patient gave it in this conversation
service_idYes
date_of_birthYesThe patient's date of birth, as the patient gave it in this conversation
guardian_nameNoRequired when the patient is under 16
patient_phoneYesThe patient's own Canadian or US mobile number, as the patient gave it in this conversation; the booking link is texted there
practice_slugYes
slot_fingerprintYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
reasonNo
outcomeNo
practiceYes
action_idYes
next_stepYes
booking_urlNo
continue_urlNo
verificationNo
booking_stepsNo
hold_expires_atNo
link_expires_atNo

TDQS

B3.2/5.0
Behavior4/5

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

The description adds substantial behavioral context beyond the annotations: it texts the patient, opens a page with a Book this appointment button, and either books directly or sends a request depending on the practice. It does not mention hold expiry, idempotency, or auth requirements, but the annotations already cover basic read/write and destructive hints.

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

Conciseness4/5

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

The description is front-loaded with the core action and uses three sentences without obvious repetition. The middle sentence about the link page is somewhat detailed but useful for understanding the downstream flow.

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?

For a 10-parameter mutation tool with an output schema and 60% schema coverage, the description covers the patient-facing flow well but omits prerequisites, parameter sourcing, and operational constraints like hold expiry or idempotency. It is minimally adequate rather than complete.

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

Parameters2/5

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

Schema description coverage is 60%, with several important parameters such as service_id, practice_slug, slot_fingerprint, and note lacking schema descriptions. The tool description adds no parameter-level meaning at all, so it fails to compensate for the coverage gap.

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 description states a specific verb and resource: hold one open time and text the patient a link. It clearly implies a pre-booking hold step, but it does not explicitly distinguish itself from siblings such as confirm_xona_booking or abandon_xona_booking.

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

Usage Guidelines2/5

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

The description explains what happens after the patient receives the link, but gives no explicit guidance on when to call this tool versus list_xona_booking_slots, confirm_xona_booking, or abandon_xona_booking. It also does not state prerequisites such as needing a slot_fingerprint from a prior list operation.

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

list_dental_practice_actionsList dental practice actionsA
Read-onlyIdempotent
Inspect

List current public booking, request, form, call, and website actions for a dental practice in preference order.

ParametersJSON Schema
NameRequiredDescriptionDefault
practice_slugYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
actionsYes
practice_slugYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds no extra behavioral context such as authentication needs, rate limits, or data freshness guarantees beyond the word 'current'. It does not contradict annotations, but it adds minimal value over the structured hints.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the action ('List') and then specifies the resource and ordering. Every word contributes to understanding the tool's purpose. No fluff or redundancy.

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?

Given there is an output schema, return values are covered. The description states what is listed and the ordering, which is useful. However, it lacks any usage context, prerequisites (e.g., a valid practice_slug), or alternative guidance. For a simple list operation, the absence of these details is acceptable, but the parameter explanation gap makes it incomplete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the sole parameter, practice_slug. However, the description does not mention or explain this parameter at all. While the parameter name is self-explanatory, there is no guidance on how to obtain or format the slug, nor any indication of required format beyond the schema constraints. The description fails to compensate for the low schema coverage.

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

Purpose5/5

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

The description clearly states a specific verb ('List') and resource ('current public booking, request, form, call, and website actions for a dental practice'). It enumerates the action types and specifies the ordering ('preference order'), making it distinct from siblings that focus on services or slots. An agent can easily tell this from list_public_booking_services or list_xona_booking_slots.

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

Usage Guidelines3/5

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

The description does not explicitly mention when to use this tool versus alternatives or provide exclusions. The purpose itself implies usage for listing actions, but no alternatives are named or conditions given. An agent must infer from the resource type, which is adequate but not explicit.

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

list_public_booking_servicesList a clinic's public booking services
Read-onlyIdempotent
Inspect

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. Provider locators remain server-owned.

ParametersJSON Schema
NameRequiredDescriptionDefault
practice_slugYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
readableYes
servicesYes
use_toolNo
next_stepYes
booking_urlNo
practice_slugYes
list_public_booking_slotsList a clinic's public booking slots
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_toYesLast day to read (inclusive), at most 13 days after date_from
date_fromYesFirst day to read, in the clinic's time zone; today or later
service_idYesA service_id from list_public_booking_services, or from a soonest search row's services
practice_slugYes
preferred_timeNoThe patient's preferred local start time, 24-hour HH:MM; the closest times come first

Output Schema

ParametersJSON Schema
NameRequiredDescription
slotsYes
date_toNo
earliestNo
readableYes
use_toolNo
date_fromNo
next_stepYes
time_zoneNo
service_idNo
booking_urlNo
practice_slugYes
list_xona_appointmentsList the patient's upcoming appointmentsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
action_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
changesNo
practiceYes
action_idYes
next_stepYes
time_zoneNo
appointmentsNo
booked_untilNo
pending_requestsNo
access_expires_atNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering safety. The description adds valuable behavioral context beyond that: it is live from the schedule, has temporal validity (30 minutes after tap, and for the appointment until its day), and returns a waiting state if called before the tap. These details are not derivable from annotations or schema.

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

Conciseness5/5

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

The description is three sentences with no fluff. It front-loads the core purpose ('Read the named patient's upcoming appointments...') followed by necessary context about the action_id and the waiting behavior. Every sentence earns its place, and the structure is logical.

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

Completeness5/5

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

With an output schema present, return values are covered externally. The description covers the tool's purpose, input semantics, temporal constraints, and the waiting state, making it complete for an agent to decide when and how to call it. No critical information appears missing.

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

Parameters4/5

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

Schema description coverage is 0%, but the description explains that action_id must come from a booking made in this conversation or from start_xona_appointment_access. It also clarifies the context of the patient tapping the text link. This adds meaning beyond the schema's minimal type/length constraints, although it does not describe the exact format or value pattern beyond its origin.

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

Purpose5/5

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

The description clearly states the action: 'Read the named patient's upcoming appointments at the practice, live from its schedule.' It specifies the resource (appointments), the scope (named patient), and the source (live schedule). It also differentiates from siblings by mentioning the specific trigger condition ('after the patient tapped the text link') and the required action_id types, which are unique to this tool.

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?

The description provides explicit context for when to use the tool: it works with the action_id of a booking made in this conversation (with time constraints) or of start_xona_appointment_access. It also warns that before the tap, the tool reports a waiting state, implying it should not be called prematurely. However, it does not explicitly mention alternative tools or state when not to use this tool, leaving some inference to the agent.

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

list_xona_booking_servicesList a connected practice's booking servicesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
practice_slugYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
practiceYes
servicesYes
next_stepYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is established. The description adds useful behavioral context by defining a precondition: the practice must have connected its schedule to Xona, and the tool is tied to a specific route state from list_dental_practice_actions. No contradiction with annotations exists.

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

Conciseness5/5

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

The description is two sentences with no filler. It fronts the core action and resource, then adds the precise triggering condition, making it immediately scannable.

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

Completeness5/5

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

For a single-parameter, read-only list tool with an output schema and strong annotations, the description provides the essential trigger context and scope. Nothing critical is missing for an agent to invoke it correctly.

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 description coverage is 0%, but there is only one parameter, practice_slug, whose meaning is implied by the title and description referencing 'a practice'. The description does not explicitly document the slug format or that it identifies the connected practice, so it provides only minimal compensation for the missing schema description.

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

Purpose5/5

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

The description uses a specific verb ('List') and a specific resource ('the services a practice that connected its schedule to Xona books online'), and it distinguishes this tool from the sibling list_public_booking_services by scoping to connected practices. The title reinforces the same distinction.

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?

The description gives an explicit trigger: use this tool where list_dental_practice_actions marks the Xona booking route as completes_in_conversation. It does not explicitly name alternatives or exclusions, so it stops just short of a full 5.

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

list_xona_booking_slotsList a connected practice's open timesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_toYesLast day to search (inclusive); at most 56 days after date_from and 8 weeks from today
date_fromYesFirst day to search, in the practice's time zone
doctor_idNoRestrict to one provider, using a doctor_id a previous slot listing returned
service_idYes
practice_slugYes
preferred_timeNoThe patient's preferred local start time, 24-hour HH:MM; slots closest to it come first

Output Schema

ParametersJSON Schema
NameRequiredDescription
slotsYes
reasonNo
earliestNo
practiceYes
next_stepYes
time_zoneYes
service_idYes
booking_urlNo
effective_toYes
instructionsNo
effective_fromYes
date_correctionNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real behavioral detail beyond that: how results are ranked (closest ten to preferred_time, else balanced spread, plus earliest open time) and that an empty result carries a reason.

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

Conciseness4/5

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

Two sentences, front-loaded with what the tool returns and immediately followed by the range constraint and the handoff token (slot_fingerprint). Dense but every clause carries information; no filler.

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

Completeness4/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 need not be explained, yet the description usefully signals ranking behavior and the empty-case reason. Combined with annotation coverage of the safety profile, an agent has enough to call this correctly; the only gap is guidance on choosing it over the public slot listing.

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 67%, so the schema already documents date_to, date_from, doctor_id and preferred_time in detail. The description reinforces the date semantics ('inclusive, at most 8 weeks out') but says nothing about practice_slug, service_id or doctor_id, so it only partially compensates for the coverage gap.

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?

States a specific verb and resource ('List open times at a connected practice for one service') with an explicit date-range scope, which separates it from the service-listing and public-slot siblings. It stops short of naming an alternative tool the way a 5 would.

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

Usage Guidelines3/5

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

It gives boundary conditions (inclusive range, at most 8 weeks out, at most 56 days) and forward-routes to hold_xona_booking_slot, so usage is implied and partially guided. There is no explicit 'use this instead of list_public_booking_slots when...' statement, leaving the connected-vs-public choice to inference.

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

list_xona_reschedule_timesList times an appointment can move toA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_toYesLast day to search (inclusive); at most 56 days after date_from and 8 weeks from today
action_idYes
date_fromYesFirst day to search, in the practice's time zone
appointment_refYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
slotsYes
practiceYes
action_idYes
next_stepYes
time_zoneYes
appointment_refYes

TDQS

A4.3/5.0
Behavior4/5

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

With readOnlyHint/idempotentHint already declaring the safe-read profile, the description adds real behavioral context: results are restricted to the appointment's own service and provider, and the range is bounded by date_from/date_to. It omits pagination/result-size behavior, but the output schema covers return shape.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the action and scope, followed by the one piece of provenance an agent needs. No filler or restated schema text.

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

Completeness5/5

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

For a read-only lookup with an output schema, the description supplies the essential scoping rule, the date-range bound, and the source of appointment_ref; return values need not be explained. Only action_id is left implicit, a minor omission.

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 50%: date_from/date_to are already documented in the schema, and the description only re-frames them as a range. It does add provenance for appointment_ref, but the required action_id parameter remains unexplained in both schema and description, which is a meaningful gap.

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

Purpose5/5

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

Specific verb (List) plus precise resource (open times an appointment can move to), with the scoping rule 'for its own service and provider' that separates it from generic slot-listing siblings like list_xona_booking_slots. An agent can tell what it returns without opening the schema.

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?

Gives clear context for use (finding reschedule options for an existing appointment) and even states where appointment_ref comes from (list_xona_appointments). It does not, however, name a contrasting sibling such as list_xona_booking_slots for brand-new bookings, nor state prerequisites about appointment status.

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

prepare_dental_practice_actionOpen one of a clinic's booking routesInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
capabilityYes
practice_slugYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
actionYes
next_stepYes
manual_review_requiredYes
conversational_next_toolNo
search_canadian_dentistsSearch Canadian dentists
Read-onlyIdempotent
Inspect

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. The tool a row's next_step names reads more times. No login or clinic membership is required.

ParametersJSON 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

ParametersJSON Schema
NameRequiredDescription
countYes
resultsYes
next_stepNo
projectionNo
live_unreadNo
start_dental_requestStart a dental appointment requestAInspect

Start an appointment request that Xona sends to the selected clinic (by email, or through the clinic's own website form), 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
patient_nameYesThe patient's name as they typed it
patient_emailYesThe patient's own email; the code goes there
practice_slugYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
actionYes
practiceYes
next_stepYes
consent_textYes
verificationYes
consent_versionYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare it is not read-only, not destructive, not idempotent and closed-world, so the safety profile is already covered. The description adds genuinely new behavior: a verification code is emailed to the patient first and the request is only sent after confirmation, and the request may go out by email or the clinic's web form. It stops short of stating failure modes (e.g., invalid code, repeat invocation).

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

Conciseness4/5

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

Three dense sentences with no filler, front-loading what the tool does before the two-step flow and the routing condition. The parenthetical delivery detail is somewhat heavy but earns its place.

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

Completeness4/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 need not be explained. For a non-idempotent mutation that triggers email sends, the description covers the side-effect sequence and the routing rule well; only edge-case behavior and re-invocation semantics are unaddressed.

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 67%, so most parameters are already documented; the description reinforces that patient_email is where the code goes and implies practice_slug is 'the selected clinic'. It adds no format or constraint detail beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Start an appointment request') and clarifies the delivery mechanism (email or the clinic's own website form). It also distinguishes itself from the sibling confirm_dental_request by describing the two-step flow, so an agent can tell the two apart without opening schemas.

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

Usage Guidelines5/5

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

Gives an explicit activation condition ('Use it where list_dental_practice_actions marks xona_email_appointment_request as completes_in_conversation') and names the follow-up tool confirm_dental_request. The when-to-use rule and the next step are both stated rather than inferred.

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

start_xona_appointment_accessText the patient a link to show their appointmentsAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
last_nameYes
first_nameYes
date_of_birthYes
patient_phoneYesThe patient's own Canadian or US mobile number, as the practice has it on file
practice_slugYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
practiceYes
action_idYes
next_stepYes
link_expires_atYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the description earns credit by adding real behavior: the SMS delivery, the identity-match requirement, and the enumeration-safety disclosure that 'the answer is the same whether or not the details match.' It could go further on error/rate-limit behavior, but the match-invariance note is genuinely useful beyond structured fields.

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

Conciseness3/5

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

The purpose is front-loaded, but the first sentence is tangled ('for a conversation with no booking action_id that still works') and the valuable enumeration-safety point is buried at the end. Roughly the right length, but not optimally structured.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and annotations cover the safety profile. The description supplies the matching logic, the SMS flow, and the match-invariance behavior, leaving only minor gaps like practice_slug meaning and failure modes.

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 description coverage is only 20% (only patient_phone is documented), so the description carries more burden. It does map the matching inputs ('the mobile number, name and date of birth') to parameters and implies all must match, but practice_slug is never explained and format expectations aren't clarified. Partial compensation only.

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 description uses a specific verb+resource ('Text a patient one link to see, move or cancel the appointments they already have') and names the sibling it hands off to (list_xona_appointments). An agent can identify this as the SMS-link entry point distinct from list/change tools. The phrase 'for a conversation with no booking action_id that still works' is murky, which keeps it short of a 5.

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 a clear triggering condition ('a conversation with no booking action_id') and describes the downstream sequence (patient taps link, presses Show my appointments, then list_xona_appointments reads). It does not state when NOT to use it versus siblings, so it stops short of a 5.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • Changedlist_public_booking_services1 field changed
      • addedOutput schema / properties / booking_url
        Added value: +{
        +  "type": "string"
        +}
    • Changedlist_public_booking_slots3 fields changed
      • addedOutput schema / properties / booking_url
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / earliest / properties / booking_url
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / slots / items / properties / booking_url
        Added value: +{
        +  "type": "string"
        +}
    • Changedsearch_canadian_dentists1 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. 4 tool updates
    • Changedchoose_public_booking_time5 fields changed
      • addedInput schema / properties / service_id
        Added value: +{
        +  "description": "The chosen time's service_id.",
        +  "maxLength": 160,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / slot_id / description
        Previous value: -"The id of one time from this action's latest list_public_booking_slots result."New value: +"The chosen time's id from list_public_booking_slots (slot_id on a soonest row's earliest)."
      • changedInput schema / properties / slot_id / maxLength
        Previous value: -160New value: +256
      • addedInput schema / properties / starts_at
        Added value: +{
        +  "description": "The chosen time's starts_at, exactly as returned.",
        +  "format": "date-time",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "action_id",
        -  "slot_id"
        -]New value: +[
        +  "action_id",
        +  "service_id",
        +  "slot_id",
        +  "starts_at"
        +]
    • Changedlist_public_booking_services8 fields changed
      • removedInput schema / properties / action_id
        Removed value: -{
        -  "maxLength": 128,
        -  "minLength": 16,
        -  "type": "string"
        -}
      • addedInput schema / properties / practice_slug
        Added value: +{
        +  "maxLength": 140,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "action_id"
        -]New value: +[
        +  "practice_slug"
        +]
      • addedOutput schema / properties / next_step
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / practice_slug
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / readable
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / use_tool
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "services"
        -]New value: +[
        +  "practice_slug",
        +  "readable",
        +  "services",
        +  "next_step"
        +]
    • Changedlist_public_booking_slots18 fields changed
      • removedInput schema / properties / action_id
        Removed value: -{
        -  "maxLength": 128,
        -  "minLength": 16,
        -  "type": "string"
        -}
      • addedInput schema / properties / date_from
        Added value: +{
        +  "description": "First day to read, in the clinic's time zone; today or later",
        +  "format": "date",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / date_to
        Added value: +{
        +  "description": "Last day to read (inclusive), at most 13 days after date_from",
        +  "format": "date",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • removedInput schema / properties / end
        Removed value: -{
        -  "format": "date-time",
        -  "maxLength": 64,
        -  "type": "string"
        -}
      • addedInput schema / properties / practice_slug
        Added value: +{
        +  "maxLength": 140,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / preferred_time
        Added value: +{
        +  "description": "The patient's preferred local start time, 24-hour HH:MM; the closest times come first",
        +  "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
        +  "type": "string"
        +}
      • addedInput schema / properties / service_id / description
        Added value: +"A service_id from list_public_booking_services, or from a soonest search row's services"
      • removedInput schema / properties / start
        Removed value: -{
        -  "format": "date-time",
        -  "maxLength": 64,
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "action_id",
        -  "service_id",
        -  "start",
        -  "end"
        -]New value: +[
        +  "practice_slug",
        +  "service_id",
        +  "date_from",
        +  "date_to"
        +]
      • removedOutput schema / properties / action_id
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / date_from
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / date_to
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / earliest
        Added value: +{
        +  "properties": {
        +    "ends_at": {
        +      "format": "date-time",
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "provider_id": {
        +      "type": "string"
        +    },
        +    "provider_name": {
        +      "type": "string"
        +    },
        +    "service_id": {
        +      "type": "string"
        +    },
        +    "start_local": {
        +      "type": "string"
        +    },
        +    "starts_at": {
        +      "format": "date-time",
        +      "type": "string"
        +    },
        +    "time_zone": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "service_id",
        +    "starts_at",
        +    "ends_at"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / next_step
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / readable
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / service_id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / time_zone
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "slots"
        -]New value: +[
        +  "practice_slug",
        +  "readable",
        +  "slots",
        +  "next_step"
        +]
    • Changedsearch_canadian_dentists4 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. 1 tool update
    • Changedsearch_canadian_dentists1 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. 2 tool updates
    • Addedchoose_public_booking_time
    • Changedlist_public_booking_slots3 fields changed
      • addedOutput schema / properties / slots / items / properties / provider_id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / slots / items / properties / start_local
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / slots / items / properties / time_zone
        Added value: +{
        +  "type": "string"
        +}
  5. 2 tool updates
    • Changedhold_xona_booking_slot4 fields changed
      • addedInput schema / properties / date_of_birth / description
        Added value: +"The patient's date of birth, as the patient gave it in this conversation"
      • addedInput schema / properties / first_name / description
        Added value: +"The patient's first name, as the patient gave it in this conversation"
      • addedInput schema / properties / last_name / description
        Added value: +"The patient's last name, as the patient gave it in this conversation"
      • changedInput schema / properties / patient_phone / description
        Previous value: -"The patient's own Canadian or US mobile number; the booking link is texted there"New value: +"The patient's own Canadian or US mobile number, as the patient gave it in this conversation; the booking link is texted there"
    • Changedsearch_canadian_dentists2 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"
        +}
  6. 4 tool updates
    • Addedchange_xona_appointment
    • Addedlist_xona_appointments
    • Addedlist_xona_reschedule_times
    • Addedstart_xona_appointment_access
  7. 3 tool updates
    • Changedabandon_xona_booking4 fields changed
      • addedOutput schema / properties / booking_steps
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "patient_does": {
        +        "type": "string"
        +      },
        +      "patient_provides": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "status": {
        +        "enum": [
        +          "done",
        +          "waiting_for_patient",
        +          "not_started"
        +        ],
        +        "type": "string"
        +      },
        +      "step": {
        +        "type": "integer"
        +      },
        +      "tool": {
        +        "type": "string"
        +      },
        +      "xona_sends": {
        +        "properties": {
        +          "channel": {
        +            "type": "string"
        +          },
        +          "contains": {
        +            "type": "string"
        +          },
        +          "link_expires_at": {
        +            "format": "date-time",
        +            "type": "string"
        +          },
        +          "to": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "channel"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "step",
        +      "status"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / consent_version
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / link_expires_at
        Added value: +{
        +  "format": "date-time",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "action_id",
        -  "practice",
        -  "next_step"
        -]New value: +[
        +  "action_id",
        +  "practice",
        +  "outcome",
        +  "next_step"
        +]
    • Changedconfirm_xona_booking4 fields changed
      • removedInput schema / properties / consent_version
        Removed value: -{
        -  "enum": [
        -    "gateway-booking-2026-09-14"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "action_id",
        -  "consent_version"
        -]New value: +[
        +  "action_id"
        +]
      • addedOutput schema / properties / consent_version
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / link_expires_at
        Added value: +{
        +  "format": "date-time",
        +  "type": "string"
        +}
    • Changedhold_xona_booking_slot10 fields changed
      • removedInput schema / properties / patient_email
        Removed value: -{
        -  "description": "The patient's own email; the first link goes there",
        -  "format": "email",
        -  "maxLength": 254,
        -  "minLength": 3,
        -  "type": "string"
        -}
      • changedInput schema / properties / patient_phone / description
        Previous value: -"The patient's mobile number; the second link is texted there once the email link is tapped"New value: +"The patient's own Canadian or US mobile number; the booking link is texted there"
      • changedInput schema / required
        Previous value: -[
        -  "practice_slug",
        -  "service_id",
        -  "slot_fingerprint",
        -  "date",
        -  "patient_email",
        -  "patient_phone",
        -  "first_name",
        -  "last_name",
        -  "date_of_birth"
        -]New value: +[
        +  "practice_slug",
        +  "service_id",
        +  "slot_fingerprint",
        +  "date",
        +  "patient_phone",
        +  "first_name",
        +  "last_name",
        +  "date_of_birth"
        +]
      • addedOutput schema / properties / booking_url
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / consent_text
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / consent_version
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / link_expires_at
        Added value: +{
        +  "format": "date-time",
        +  "type": "string"
        +}
      • addedOutput schema / properties / outcome
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / reason
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "action_id",
        -  "practice",
        -  "hold_expires_at",
        -  "verification",
        -  "consent_version",
        -  "consent_text",
        -  "booking_steps",
        -  "next_step"
        -]New value: +[
        +  "action_id",
        +  "practice",
        +  "next_step"
        +]
  8. 15 tool updates
    • First observedabandon_xona_booking
    • First observedanswer_dental_practice_question
    • First observedconfirm_dental_request
    • First observedconfirm_xona_booking
    • First observedget_canadian_dental_practice
    • First observedget_dental_action_status
    • First observedhold_xona_booking_slot
    • First observedlist_dental_practice_actions
    • First observedlist_public_booking_services
    • First observedlist_public_booking_slots
    • First observedlist_xona_booking_services
    • First observedlist_xona_booking_slots
    • First observedprepare_dental_practice_action
    • First observedsearch_canadian_dentists
    • First observedstart_dental_request

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources