Halaxy MCP by usefulapi
Server Details
Read Halaxy patients, appointments, slots and invoices; create patients, appointments and notes.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 35 tools
Most tools are clearly separated by resource and action, especially the consistent get/list pairs and the few create/update operations. Some overlap remains around appointment availability versus slots/schedules, and appointment types versus fees may require reading descriptions carefully, but overall selection should be reliable.
Every tool uses the same halaxy_ prefix and a predictable snake_case verb_noun pattern such as halaxy_get_patient, halaxy_list_invoices, and halaxy_create_appointment. The convention is uniform across all 35 tools.
The server exposes 35 tools, which exceeds a practical surface for reliable agent selection despite covering a broad healthcare administration domain. Many resources have both get and list variants, creating substantial cognitive load even when individual tools are well named.
The server provides strong read coverage across patients, appointments, invoices, payments, referrals, schedules, and related resources, plus core writes for booking, patient creation, clinical notes, and appointment status. However, lifecycle gaps remain: there is no patient update, no invoice or payment creation, no clinical note update, and limited write support for many listed resources.
Available Tools
35 toolshalaxy_create_appointmentBook an appointmentAInspect
Writes to the live Halaxy account. Books an appointment for a patient with a practitioner at a clinic (the practitioner role). Halaxy also creates the invoice, clinical note and reminder. Use halaxy_find_available_appointments for free times. By default a double booking is refused (HTTP 409, nothing created). POST /main/Appointment/$book.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End with the time zone offset, e.g. 2027-06-15T16:00:00+10:00. | |
| start | Yes | Start with the time zone offset, e.g. 2027-06-15T15:00:00+10:00. | |
| status | No | Initial status (default booked). | |
| patient_id | Yes | The patient id. | |
| practitioner_role_id | Yes | The PractitionerRole id (practitioner at a clinic), e.g. PR-1234567. | |
| healthcare_service_id | No | The appointment type id (halaxy_list_healthcare_services). | |
| fail_on_double_booking | No | Refuse if the practitioner already has an appointment then (default true). | |
| charge_item_definition_id | No | The fee id (halaxy_list_fees) booked for the appointment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false; the description adds substantial context beyond that — it writes to the live account, it cascades into invoice, clinical note and reminder creation, and a conflict returns HTTP 409 with nothing created. That last point is the crucial behavioral guarantee (atomic failure) an agent needs before retrying.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, no filler. The write-to-live-account warning is front-loaded and each subsequent sentence adds a distinct fact: side effects, the discovery sibling alternative, and conflict behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers mutation risk, cascade side effects, error semantics and the prerequisite lookup tool — strong for an 8-parameter mutation tool with no output schema. The one gap is that it never says what the call returns (presumably the created appointment id), which matters since there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter already carries a description, including defaults for status and fail_on_double_booking, so the schema does the heavy lifting. The description's mention of practitioner role as practitioner-at-a-clinic and the default double-booking refusal reinforces but does not add syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Books an appointment') and names the three key entities (patient, practitioner role, clinic). It also distinguishes itself from the sibling that only reads availability, so an agent can route between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to halaxy_find_available_appointments 'for free times', which is the main prerequisite for booking. It stops short of stating when not to book (e.g. rescheduling an existing appointment, or using halaxy_update_appointment_status for status changes), leaving that 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.
halaxy_create_clinical_noteCreate a draft clinical noteAInspect
Writes to the live Halaxy account. Adds a clinical note to a patient's record as a DRAFT (preliminary); the practitioner reviews and publishes it in Halaxy. The author is a PractitionerRole (practitioner at a clinic). Only HTML text is supported. POST /main/DocumentReference.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | The note body as HTML. | |
| title | Yes | The note title. | |
| patient_id | Yes | The patient the note is for. | |
| practitioner_role_id | Yes | The PractitionerRole id of the author, e.g. PR-1234567. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds genuine context beyond the annotations: the write hits the live account, the note exists in a preliminary draft state pending practitioner review, and the author must be a practitioner at a clinic. It doesn't say what gets returned or whether the draft can be edited/deleted afterwards, which is the remaining gap for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the most important facts (live write, draft state). The trailing 'POST /main/DocumentReference' is protocol detail with little use to an agent, a minor bit of waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param mutation with no output schema, the description covers safety profile, write target, draft lifecycle and author constraints. The one omission is that with no output schema, nothing tells the agent what the call returns (e.g., a document ID), which would matter for follow-up steps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds value by clarifying the author semantics ('PractitionerRole (practitioner at a clinic)') for practitioner_role_id and by stating 'Only HTML text is supported' for the body. It doesn't clarify the title's role or length constraints, but the schema covers those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Adds a clinical note to a patient's record') with the key qualifier that the note is created as a DRAFT rather than published. No sibling tool creates clinical notes, so the distinction is unambiguous without further differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use — the practitioner must review and publish the note in Halaxy afterwards — and constrains authorship to a PractitionerRole. It doesn't state exclusions or prerequisites explicitly, but there is no competing sibling that would require routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_create_patientCreate a patientAInspect
Writes to the live Halaxy account. Creates a new patient record (always a new one: search with halaxy_list_patients first to avoid a duplicate). Pass managing_organization (the practice group id, e.g. PG-12345, from halaxy_list_organizations) if Halaxy asks for it. POST /main/Patient.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email address. | ||
| given | Yes | Legal given name. | |
| family | Yes | Legal family name (surname). | |
| gender | No | Gender as registered in government records. | |
| mobile | No | Mobile number as +{country code}{number}, no spaces. | |
| address | No | Mailing address. | |
| birth_date | No | Date of birth, YYYY-MM-DD. | |
| preferred_name | No | Preferred (usual) given name. | |
| managing_organization | No | The practice group id, e.g. PG-12345. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is clear. The description adds useful context: it writes to the live Halaxy account, always creates a new record, carries duplicate risk, and gives the underlying POST endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the key write/create behavior and duplicate-avoidance instruction. Every sentence adds actionable information, including the org parameter guidance and endpoint, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create mutation with rich schema coverage and annotations covering the safety profile, the description supplies the critical missing operational context: live-write warning, duplicate-avoidance workflow, and managing_organization guidance. It does not describe the response shape, but no output schema exists and the core invocation guidance is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so most parameter meaning is already documented. The description adds value for managing_organization by explaining it is the practice group id, giving an example (PG-12345), naming its source tool, and describing when to pass it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Creates a new patient record.' It also states that this always creates a new record, which distinguishes it from the sibling list/search tools such as halaxy_list_patients.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent to search with halaxy_list_patients first to avoid duplicates. It also gives a concrete condition for using managing_organization, sourced from halaxy_list_organizations, and clarifies that this tool is for creation rather than lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_find_available_appointmentsFind available appointment timesARead-onlyInspect
Find free appointment times between start and end for a given duration, respecting each practitioner's online booking preferences (buffer time, lead time, advance booking limit). Narrow it with practitioner, practitioner_role or organization. GET /main/Appointment/$find.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End of the search window, e.g. 2027-01-12T23:59:59. | |
| show | No | first-available = only the first available time. | |
| sort | No | start or -start. | |
| start | Yes | Start of the search window, e.g. 2027-01-12T00:00:00. | |
| duration | Yes | Appointment length in minutes. | |
| emergency | No | true ignores lead time, to show all times for emergency appointments. | |
| organization | No | Organization (clinic) id. | |
| practitioner | No | Practitioner id. | |
| apply_buffer_time | No | true applies buffer time to show all available times. | |
| practitioner_role | No | PractitionerRole id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, but the description adds real context: availability is filtered by each practitioner's online booking preferences (buffer time, lead time, advance booking limit), and it flags that the emergency flag bypasses lead time. What is missing is any hint about result volume, limits, or pagination for the search window.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences lead with the verb and the search window before moving to filters and booking-policy behavior. The trailing 'GET /main/Appointment/$find' is implementation detail of marginal use to an agent, but it's short and does not crowd out the substantive content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with fully documented params and 10 inputs, the description covers purpose, scoping, and the booking-policy behavior that explains why some times are absent. With no output schema, a note on what a result item contains or how many are returned would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including show, sort, emergency, and apply_buffer_time is already documented in the schema. The description connects the buffer-time and lead-time mechanics to the parameters conceptually, which adds some value, but it introduces no syntax or format detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find free appointment times') and adds the scoping constraint (between start and end for a given duration, respecting booking preferences). This is much more than a restatement of the title. It does not, however, distinguish itself from the nearest siblings in the list, halaxy_list_slots or halaxy_get_slot, so an agent must infer which availability tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence 'Narrow it with practitioner, practitioner_role or organization' gives filtering guidance, which is implied usage rather than selection guidance. It never says when to use this instead of halaxy_list_slots or halaxy_get_schedule, nor does it state any prerequisites (e.g. that a practitioner or organization id is needed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_appointmentGet an appointmentARead-onlyInspect
Fetch an appointment with its participants and statuses (HEALTH DATA) by id. GET /main/Appointment/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The Appointment id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile of this read is covered. The description adds real value by tagging the payload as HEALTH DATA and by stating that participants and statuses are embedded, which tells the agent to expect a sensitive, nested payload. It stops short of describing not-found/error behavior or the shape of the returned status values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the verb and resource, followed by the endpoint. Nothing is padded and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-record read with one required parameter, no output schema, and a permissive readOnly annotation, the description covers what is fetched and roughly what comes back. The main omission is error/empty behavior for an invalid id, which is minor at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, and the schema already explains that the id comes from the matching list tool. The description's 'by id' restates the schema without adding format, sourcing, or validation guidance (the regex pattern is only in the schema).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch'), a specific resource ('an appointment with its participants and statuses') and a lookup key ('by id'), plus the underlying endpoint. This is clearly the single-record counterpart to halaxy_list_appointments, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'by id' implies this is for retrieving one known appointment rather than browsing, which is enough to route an agent away from the list tool in most cases. However, no alternative is named and no preconditions (e.g. you must already have the id from a list call) are stated in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_coverageGet patient coverageBRead-onlyInspect
Fetch a patient's coverage (claim details) record by id. GET /main/Coverage/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The Coverage id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, and the description is consistent with that. It adds the underlying endpoint (GET /main/Coverage/{id}), which is minor operational context, but says nothing about error behavior for missing ids or what the returned claim-detail fields contain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action and scope front-loaded; nothing is redundant. The second sentence is a raw endpoint path of limited use to an agent, but it is cheap and does not dilute the lead sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the definition is adequate but thin: it never describes what a coverage/claim-detail record actually returns or whether missing records error out. Annotations cover the safety profile, so the remaining gap is modest rather than fatal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single id parameter is documented with its format pattern and provenance, so the schema carries the burden. The description only restates that lookup is by id, adding no format or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch') and resource ('a patient's coverage (claim details) record') scoped 'by id', which implicitly separates it from halaxy_list_coverage. It clarifies what 'coverage' means with the parenthetical 'claim details', though it does not name the sibling list tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'by id' phrasing implies this is the single-record lookup counterpart to the list tool, but there is no explicit when-to-use or when-not-to-use statement. The routing hint ('from the matching list tool') lives in the schema, not the description, so an agent must read the schema to know where ids come from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_feeGet a feeBRead-onlyInspect
Fetch a fee (ChargeItemDefinition) by id. GET /main/ChargeItemDefinition/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ChargeItemDefinition id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds only the HTTP path 'GET /main/ChargeItemDefinition/{id}', which is a transport detail rather than behavioral context (no error semantics, no not-found behavior, no field coverage).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core purpose front-loaded; nothing is padded. The trailing endpoint path is redundant filler but costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter lookup this is close to adequate, but with no output schema the description could say what a fee record contains or what happens on an unknown id. As written, it leaves the agent to infer both.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the id parameter already documents its origin ('from the matching list tool'). The description contributes nothing additional about the identifier beyond what the schema states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch a fee') and disambiguates the underlying object as a ChargeItemDefinition. The 'by id' qualifier implicitly separates it from halaxy_list_fees, though it never names 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'by id' suggests this is the single-record counterpart to the list tool, but the description never says when to prefer this over halaxy_list_fees or where ids come from (that hint lives only in the schema, not the description).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_healthcare_serviceGet an appointment typeBRead-onlyInspect
Fetch an appointment type by id. GET /main/HealthcareService/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The HealthcareService id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds nothing beyond restating the HTTP path – no note on what a missing id does, whether the response is a single resource, or any other behavioral context. With the annotation bar lower, this still contributes almost no new information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action. The trailing endpoint path is partly redundant with the tool name but is compact enough not to be wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read with full schema coverage and a readOnly annotation, the description is functional. However, with no output schema, it says nothing about what an appointment type record contains or what a failed lookup yields, leaving a modest gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, including a pattern and a hint pointing at the list tool. The description's "by id" aligns with the schema but adds no format or sourcing detail beyond it, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Fetch an appointment type by id"), so an agent can distinguish it from halaxy_list_healthcare_services without opening the schema. It does not explicitly name the list sibling as its counterpart, but the lookup-by-id framing makes the relationship obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: you call this when you already have an id. There is no explicit statement of when to prefer this over halaxy_list_healthcare_services, nor any prerequisite or failure guidance. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_invoiceGet an invoiceCRead-onlyInspect
Fetch an invoice by id. GET /main/Invoice/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The Invoice id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds only the raw HTTP path (GET /main/Invoice/{id}), which conveys nothing behavioral beyond the annotations — no mention of what happens on an unknown id, whether the response is a single object or wrapped, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The second sentence restates the resource in path form rather than adding information, a small redundancy but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with annotations covering safety, this is roughly adequate, but there is no output schema, so the agent has no idea what an invoice record contains or how errors surface. A brief note on the returned shape or a pointer to related tools would close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single id parameter is documented with format and origin ('from the matching list tool'), so the schema carries the load. The description adds no parameter-level meaning, which is acceptable at full coverage but earns only the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Fetch an invoice by id'), which is unambiguous. It does not distinguish the tool from its obvious sibling halaxy_list_invoices or explain why one would retrieve a single invoice instead of listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this tool versus halaxy_list_invoices or halaxy_get_invoice_line, and no prerequisites such as needing an id obtained elsewhere. The only hint at usage comes from the schema description ('from the matching list tool'), not the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_invoice_lineGet an invoice lineCRead-onlyInspect
Fetch an invoice line by id. GET /main/InvoiceLine/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The InvoiceLine id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint: true already declares the safety profile, lowering the bar, but the description adds no behavioral context: no error behavior for a missing id, no note on what the line object contains. The REST endpoint string restates implementation detail rather than disclosing anything an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action. The second sentence (the raw endpoint) is borderline redundant with the tool name and could be dropped, but overall it is not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple single-param read tool where annotations cover safety and the schema covers the parameter, so the burden is light. However, with no output schema, the definition offers no hint of what a fetched invoice line returns, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single required id param that already documents its source and pattern. The description's 'by id' adds nothing beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (invoice line) scoped by id, which clearly separates it from the plural halaxy_list_invoice_lines sibling. It does not explicitly name that alternative, but the singular 'by id' framing makes the distinction inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this versus halaxy_list_invoice_lines or halaxy_get_invoice. The only contextual hint ('from the matching list tool') lives in the schema, not the description, so the description itself leaves usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_organizationGet an organizationARead-onlyInspect
Fetch a practice group, clinic, funder or external practice by id. GET /main/Organization/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The Organization id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful confirmation via the GET endpoint and clarifies the range of entity types returned, but it does not mention not-found behavior, permissions, or response characteristics; with annotations present, this is an adequate but modest contribution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with no wasted words. The core action and scope are front-loaded, and the endpoint path is a useful secondary detail rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only lookup with full schema coverage and an explicit readOnlyHint annotation, the definition is nearly complete. Minor omission: it says nothing about what happens when the id does not resolve, but for this simple tool that gap is small.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains that the id comes from the matching list tool and provides a pattern constraint. The description adds only the general notion of fetching by id, so baseline 3 is appropriate when the schema carries the detailed parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Fetch") and resource ("organization"), and it enumerates the concrete entity subtypes covered: practice group, clinic, funder, external practice. Combined with "by id" and the endpoint path, an agent can readily distinguish this from the sibling list tool halaxy_list_organizations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "by id" implies this is for direct lookup when an identifier is already known, and the schema notes the id comes from the matching list tool. However, the description itself does not explicitly state when to use this instead of halaxy_list_organizations or what to do if the id is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_patientGet a patientBRead-onlyInspect
Fetch a patient record (HEALTH DATA) by id. GET /main/Patient/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The Patient id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the bar is lower. The description does add value by labeling the payload HEALTH DATA, flagging sensitivity that the annotation doesn't convey, but it says nothing about permissions, missing-record behavior, or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the resource and scope stated first and the endpoint as supporting detail. Nothing here is redundant with the title alone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple one-parameter getter with no output schema, so the agent cannot learn what the returned record contains from anywhere. Minimal context is adequate for a read, but the absence of any return-shape hint leaves a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single fully documented id parameter, so the schema carries the semantics and the baseline of 3 applies. The description adds no format or sourcing guidance beyond what is already structured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch a patient record by id') plus the underlying endpoint, which pins down exactly what is retrieved. It implicitly separates itself from halaxy_list_patients via the single-id scope, but never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance and no alternatives; the only routing hint ('from the matching list tool') lives in the schema's parameter text, not the description. An agent must infer that this follows a list call to resolve an id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_payment_transactionGet a payment transactionBRead-onlyInspect
Fetch a payment transaction by id. GET /main/PaymentTransaction/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The PaymentTransaction id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true is already declared, and the description is consistent with a safe read. The GET path adds a little traceability context, but nothing is said about not-found behavior, permission scope, or rate limits that would help an agent recover from failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the verb+resource front-loaded and no filler. The REST path is arguably redundant but small and aids traceability to the underlying API.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool this is close to adequate, and the annotations carry the safety profile. However, with no output schema, the description says nothing about what a payment transaction object contains, which leaves the agent unable to reason about the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single id parameter already carries its own description including the pattern and provenance. The description adds no format, prefix, or validation detail beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (payment transaction) with the selector (by id), plus the underlying REST path, which pins down exactly what entity is returned. It does not explicitly name halaxy_list_payment_transactions as the sibling it is not, but 'by id' makes the single-record scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the single-record lookup used after the list tool, and the schema's 'from the matching list tool' hints at that flow. There is no explicit statement of when to use this versus the list tool, nor what happens when the id does not exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_practitionerGet a practitionerBRead-onlyInspect
Fetch a practitioner or administrator by id. GET /main/Practitioner/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The Practitioner id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read. The description adds the underlying endpoint (GET /main/Practitioner/{id}), which is mild context, but says nothing about not-found behavior, permissions, or what happens with invalid ids. Moderate value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no padding, and the verb/resource statement is front-loaded before the endpoint detail. Appropriately sized for a single-parameter lookup.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only single-id lookup with full schema coverage and a readOnlyHint annotation, the definition covers what an agent needs to call it. Output shape is unspecified but no output schema exists either, so the gap is modest rather than disqualifying.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the id pattern and guidance are already documented in the schema; this sets the baseline at 3. The description's only extra semantic content is that the id may resolve to either a practitioner or an administrator record.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch a practitioner or administrator by id') and adds the useful nuance that administrator records come from the same lookup. It does not explicitly name halaxy_list_practitioners as the sibling it complements, though the get-vs-list distinction is inferable from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of the alternative list tool, and no stated prerequisites such as needing a valid id from a prior lookup. The only hint ('by id') is a restatement of the required parameter, and the 'from the matching list tool' cue lives in the schema rather than the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_practitioner_roleGet a practitioner roleARead-onlyInspect
Fetch a practitioner role at a clinic location by id. GET /main/PractitionerRole/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The PractitionerRole id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with readOnlyHint=true, and the raw endpoint (GET /main/PractitionerRole/{id}) confirms it is a single-resource read. Beyond that it adds little: nothing about error behavior for unknown ids, permissions, or what the response contains. With annotations already declaring the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, purpose first, endpoint second, with zero filler. Every element is front-loaded and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read this covers the mechanics, but with no output schema the agent has no idea what a practitioner role object contains or how it relates to practitioners/organizations. A brief note on the returned shape would have closed the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'id' parameter is already documented with a format pattern and a note about sourcing it from the matching list tool. The description's 'by id' adds nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Fetch a practitioner role') plus scope ('at a clinic location by id'), which cleanly separates it from the plural sibling halaxy_list_practitioner_roles. It stops short of naming that sibling explicitly, so it falls just below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by id' implies this tool is for retrieving a known PractitionerRole rather than searching, but the description never states when to use it versus halaxy_list_practitioner_roles or how to obtain the id (that hint lives only in the schema). Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_referralGet a referralARead-onlyInspect
Fetch a referral (HEALTH DATA) by id. GET /main/Referral/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The Referral id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes the safety profile, so the description only needs to add context. It does add a useful sensitivity flag by labeling the return as HEALTH DATA and cites the underlying endpoint GET /main/Referral/{id}, but says nothing about permissions, error behavior when the id is unknown, or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, both front-loaded with the operation and the data-sensitivity warning; nothing redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema and readOnly annotations already present, this covers the essentials: what it returns at a high level (a referral), that it is sensitive health data, and how to scope it. Missing only failure/not-found behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a pattern and a source hint for the single id parameter, so the schema carries the load. The description's 'by id' merely restates the parameter rather than adding format or sourcing detail beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (a referral) plus the scoping key (by id), which separates it from the sibling halaxy_list_referrals. It does not explicitly name the sibling, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use statement or named alternative; the id requirement implies you already have a referral id from a list call, but that routing lives in the schema parameter text ('from the matching list tool'), not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_referral_definitionGet a referral templateBRead-onlyInspect
Fetch a referral template by id. GET /main/ReferralDefinition/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ReferralDefinition id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered and not contradicted. The description adds only the raw REST path and says nothing about behavior on a missing id, permission scope, or what the template contains, so its incremental value is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler; the action and target come first. The endpoint string is marginally redundant but does confirm the underlying resource path, so it still earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with no output schema, the essentials are present and the read-only annotation covers safety. Gaps remain around what a referral template returns and what happens on an invalid or unknown id, which an agent would have to discover empirically.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single id parameter is fully documented with a pattern and provenance note. The description adds no syntax, format, or sourcing detail beyond 'by id', so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch a referral template') and scopes it to a single record by id, which implicitly contrasts with the sibling list tool halaxy_list_referral_definitions. It does not explicitly name that sibling, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'by id' signals this is a follow-up to a list/search call, and the schema hint ('from the matching list tool') reinforces it. There is no explicit when-to-use, when-not-to-use, or named alternative in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_scheduleGet a scheduleARead-onlyInspect
Fetch a practitioner schedule by id. GET /main/Schedule/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The Schedule id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the underlying HTTP path, which is minor context, but says nothing about error behavior for invalid ids or what a schedule object contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core action is front-loaded ahead of the endpoint reference. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A one-parameter read tool with annotations and full schema coverage needs little, but with no output schema the description should hint at what a returned schedule contains, and it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents both type and format ('The Schedule id (from the matching list tool)'). The description adds no meaning beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch') and resource ('practitioner schedule by id'), which cleanly separates it from halaxy_list_schedules. It never names the sibling explicitly, so the differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'by id' phrasing implies this is the follow-up to a list call, but the description gives no explicit when-to-use or when-not-to-use guidance and never mentions halaxy_list_schedules as the source of the id (only the schema note does).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_get_slotGet a time slotCRead-onlyInspect
Fetch a time slot by id. GET /main/Slot/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The Slot id (from the matching list tool). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the read-only nature, and the description's 'GET /main/Slot/{id}' merely restates it in REST form. Nothing is said about not-found/error behavior or what a slot record contains, so the description adds almost no behavioral value beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the resource named first and the endpoint appended; no filler. The raw endpoint path is of marginal use to an agent but is cheap and occasionally useful for debugging.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read with no output schema, the minimum is met: the agent knows what to pass and that the call is safe. It doesn't describe the returned slot shape or failure modes, leaving the agent to discover the payload at call time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single id parameter that is already fully described, including its pattern and provenance. The description's 'by id' adds nothing beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Fetch a time slot by id'. An agent can tell this is a single-record retrieval. It does not, however, explicitly differentiate itself from the sibling halaxy_list_slots, which an agent must infer from the 'by id' phrasing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus halaxy_list_slots, no stated prerequisites, and no mention of how the id is obtained. The only hint ('from the matching list tool') lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_appointmentsList appointmentsARead-onlyInspect
List or search appointments (HEALTH DATA: names the patient). Filters combine with AND. Paged: pass next_page as page. GET /main/Appointment.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| date | No | Appointment date/time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| sort | No | Sort order: date, -date ("-" = descending). | |
| count | No | Results per page, 1-100 (default 30). | |
| created | No | Created (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| include | No | Also return related resources in "included": any of Appointment:patient, Appointment:practitioner-role. | |
| patient | No | Patient id. | |
| part_status | No | The patient's participation status, e.g. booked, arrived, cancelled. | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| organization | No | The clinic (Organization) id including its prefix. | |
| practitioner | No | Practitioner id, e.g. PR-123. | |
| include_iterate | No | Also return resources related to an included one (needs the matching include): any of PractitionerRole:practitioner, PractitionerRole:organization. | |
| practitioner_role | No | PractitionerRole id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=true, so the description's additions matter: filters combine with AND, the result set is paged and you pass next_page as page, and the call returns PHI (patient names). That last point is real operational context an agent should know before logging or echoing output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short clauses, front-loaded with purpose, followed by the combining rule, pagination, and the data-sensitivity warning. The trailing "GET /main/Appointment" is a raw endpoint fragment of marginal value but costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter search tool with no output schema, the description covers filtering and paging behavior but never describes the response shape — in particular the "included" block produced by include/include_iterate, which is the least self-evident part of the return. Adequate, but an agent must infer result structure from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 14 parameters is already documented, including the page/next_page relationship the description restates. The description adds only the cross-parameter AND semantics, which is a small but genuine increment over per-field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"List or search appointments" names a specific verb and resource, which cleanly separates it from halaxy_get_appointment, halaxy_create_appointment, and halaxy_find_available_appointments. It stops short of naming those siblings explicitly, so the differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the read/search use case but gives no explicit when-to-use or when-not-to-use guidance — notably it never says how this differs from halaxy_find_available_appointments (availability search) or halaxy_get_appointment (single-record fetch). Usage is implied by the verb only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_coverageList patient coverage (claim details)ARead-onlyInspect
List or search patients' health fund membership and claim details (HEALTH DATA). Filters combine with AND. Paged: pass next_page as page. GET /main/Coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| sort | No | Sort order: _lastUpdated, created, -_lastUpdated, -created ("-" = descending). | |
| count | No | Results per page, 1-100 (default 30). | |
| payor | No | The funder. | |
| created | No | Created (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| include | No | Also return related resources in "included": any of Coverage:beneficiary, Coverage:subscriber, Coverage:payor. | |
| subscriber | No | The subscriber to the policy. | |
| beneficiary | No | The primary beneficiary (a Patient id). | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| subscriber_id | No | Subscriber (membership) number. | |
| coverage_organization | No | The coverage organization. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety burden is light; the description still adds value by disclosing that filters are conjunctive and that continuation reuses the page parameter rather than a cursor. It also flags the record set as health data, which is meaningful behavioural context for an agent handling the results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the resource and scope, followed by filter semantics and pagination. Nothing is wasted and the endpoint reference is compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter list tool with no output schema, the description covers scope, filter semantics, pagination and data sensitivity, and the schema covers every parameter. Only a hint about what a coverage record contains or the default sort would improve it further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all 12 parameters are documented in the schema itself, including the next_page-to-page hint and the sort enum. The description only adds the AND-combination rule for filters, which is useful but marginal over an already complete schema — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List or search') and resource ('patients' health fund membership and claim details'), and the 'HEALTH DATA' tag flags sensitivity, which no sibling does. It implicitly separates itself from halaxy_get_coverage by being plural/searchable, but never names the single-record alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Filters combine with AND' and 'Paged: pass next_page as page' give real usage mechanics for querying and paging. However, there is no guidance on when to use this list tool versus halaxy_get_coverage for a known id, nor any prerequisite or exclusion information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_feesList feesARead-onlyInspect
List or search fees (ChargeItemDefinition): the services and products a practice charges for. Filters combine with AND. Paged: pass next_page as page. GET /main/ChargeItemDefinition.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| code | No | Fee item number. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| count | No | Results per page, 1-100 (default 30). | |
| title | No | Fee name. | |
| created | No | Created (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| publisher | No | Funder name. | |
| context_type | No | Fee type: 0 = appointment, 1 = item, 2 = pro-rata. | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| property_group_status | No | Fee pricing status: 1 = current, 2 = archived. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds real context beyond them: filter combination is AND, results are paged via next_page, and the backing endpoint is GET /main/ChargeItemDefinition. It stops short of stating defaults or what a page response contains, but the safety profile is already covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: what it lists, how filters behave, how to page, plus the endpoint. Scope is front-loaded and no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema the description should carry some return-shape burden; it names the paging mechanism (next_page) but not the response envelope or the default page size, which an agent must infer. Otherwise complete for a 10-parameter, all-optional read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so per-parameter meaning is already documented (baseline 3). The description adds cross-parameter semantics the schema cannot express — that filters are combined with AND — plus how pagination is driven by reusing next_page as page, which is genuine value beyond the field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List or search fees (ChargeItemDefinition)') and defines the domain object as 'the services and products a practice charges for', which an agent can immediately distinguish from halaxy_get_fee (single-fee retrieval) in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'List or search' implies the two modes, and the pagination instruction gives procedural guidance, but it never states when to prefer this over halaxy_get_fee or when a search vs. a full listing is appropriate. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_healthcare_servicesList appointment typesARead-onlyInspect
List or search appointment types used by the practice group, clinics and practitioners. Filters combine with AND. Paged: pass next_page as page. GET /main/HealthcareService.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| name | No | Appointment type name. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| count | No | Results per page, 1-100 (default 30). | |
| active | No | Only active (true) or inactive appointment types. | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful behavioral context beyond that: AND-combination of filters, paging mechanics, and the underlying GET /main/HealthcareService endpoint. It stops short of describing result shape or default ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the core purpose is front-loaded ahead of the filter and paging mechanics. Every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no required parameters, the description covers what matters: scope, filter combination semantics, and pagination. It could mention defaults for count/page or note that results are appointment-type records, but nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters and the baseline would be 3. The description adds value by explaining that filters are ANDed together and by clarifying that the previous reply's next_page should be passed as the page parameter, which reinforces the schema's own note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("List or search appointment types") and scopes it to the practice group, clinics and practitioners. It is clearly distinct from the singular halaxy_get_healthcare_service, but it does not name that sibling explicitly, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Filters combine with AND" and the paging hint imply how to use the tool, but there is no explicit guidance on when to choose this over halaxy_get_healthcare_service or halaxy_find_available_appointments. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_invoice_linesList invoice linesARead-onlyInspect
List or search invoice lines: single fees on invoices. Filters combine with AND. Paged: pass next_page as page. GET /main/InvoiceLine.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| count | No | Results per page, 1-100 (default 30). | |
| amount | No | The line amount, optionally with a prefix such as gt100. | |
| funder | No | The funder. | |
| created | No | Created (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| include | No | Also return related resources in "included": any of InvoiceLine:subject, InvoiceLine:performer, InvoiceLine:invoice. | |
| invoice | No | The invoice the line belongs to. | |
| subject | No | The patient the line is for. | |
| coverage | No | The coverage (claim details). | |
| referral | No | The referral. | |
| performer | No | The performer of the service. | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read; the description adds the AND-combination rule for filters and the pagination continuation mechanic, which are real behavioral facts. However, the pagination note largely restates what the page parameter's own description already says, and nothing is said about result volume, ordering, or what 'included' resources look like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the resource definition before the filter and paging rules. The trailing 'GET /main/InvoiceLine' is low-value for an agent but harmless and short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% parameter coverage, zero required params, and a readOnly annotation, the agent has nearly everything needed. The remaining gap is small: no output schema and no mention of the response shape (e.g., that related resources land in an 'included' array when the include param is used).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 13 parameters are already documented (prefix operators for amount/created/last_updated, comma-separated ids, enum for include). The description adds only the cross-parameter AND semantics, which is genuine but minor value over the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List or search invoice lines') and even defines the resource as 'single fees on invoices'. It implicitly distinguishes itself from the getter sibling (halaxy_get_invoice_line) and from halaxy_list_invoices, but never names either alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Filters combine with AND' and 'Paged: pass next_page as page' give operational context, but there is no statement of when to prefer this over halaxy_get_invoice_line for a known id or halaxy_list_invoices for invoice-level data. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_invoicesList invoicesBRead-onlyInspect
List or search invoices of the practice group. Filters combine with AND. Paged: pass next_page as page. GET /main/Invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| count | No | Results per page, 1-100 (default 30). | |
| status | No | Invoice status. | |
| created | No | Created (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| include | No | Also return related resources in "included": any of Invoice:recipient, Invoice:practitioner. | |
| recipient | No | The invoice recipient (a Patient or Organization id). | |
| total_paid | No | Total paid amount, optionally with a prefix such as gt0. | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| organization | No | The clinic the invoice was created at. | |
| practitioner | No | Practitioner id. | |
| total_balance | No | Balance owing, optionally with a prefix such as gt0 (finds unpaid invoices). | |
| include_iterate | No | Also return resources related to an included one (needs the matching include): any of PractitionerRole:practitioner, PractitionerRole:organization. | |
| practitioner_role | No | PractitionerRole id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true the safety profile is already covered. The description adds real behavioral value by stating filters combine with AND and that pagination uses next_page passed as page, but it never says the reply actually contains next_page or what the payload looks like, leaving the pagination loop half-described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose before the filtering and paging mechanics. The trailing 'GET /main/Invoice' endpoint is slightly gratuitous for an agent but costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, zero-required list tool with no output schema, the description covers filtering and paging but omits the response shape (items vs. 'included' array, presence of next_page). The 'include'/'include_iterate' expansion behavior is only explained in the schema, not in prose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 14 parameters are already documented in the schema; baseline is 3. The description adds only the next_page-to-page mapping, which is a convenience pointer rather than new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List or search invoices') plus scope ('of the practice group'), which distinguishes it from the singular halaxy_get_invoice. It does not explicitly separate itself from halaxy_list_invoice_lines, but the resource noun makes the boundary inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the filter list and the 'Paged' note, so an agent can infer search vs. paginate flows. However, there is no explicit guidance on when to prefer this over halaxy_get_invoice or halaxy_list_invoice_lines, and no prerequisite information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_organizationsList organizations and clinicsARead-onlyInspect
List or search the practice group, its clinic locations, funders and external practices (practice group ids look like PG-12345). Filters combine with AND. Paged: pass next_page as page. GET /main/Organization.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| name | No | Organization name. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| count | No | Results per page, 1-100 (default 30). | |
| profile | No | Only one kind of organization. | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds real behavioral detail beyond that: filters are conjoined (not OR-ed), results are paged and the next_page token is fed back into the page parameter, and the underlying endpoint is disclosed. Missing are auth requirements and default ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the resource coverage and followed by filter and paging rules; every sentence carries information. The trailing 'GET /main/Organization' is near-redundant with the schema and could be dropped without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description could say more about what an organization record contains or the default result ordering. Still, for a read-only, all-optional-parameter list tool it covers coverage, filtering semantics, id format, and pagination well enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description earns a bump by mapping the profile enum values to plain-language categories (practice group, clinic, funder, external practice) and by explaining how next_page relates to the page parameter, adding meaning beyond the raw schema strings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List or search') and enumerates the exact resource kinds covered (practice group, clinic locations, funders, external practices), plus the id shape PG-12345. It does not explicitly contrast itself with halaxy_get_organization or other list siblings, but the list/search framing is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Filters combine with AND' and the paging instruction give useful operational context, but there is no explicit when-to-use guidance: nothing says when to prefer halaxy_get_organization for a known id, or what happens when zero filters are supplied (full listing vs. error). Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_patientsList or search patientsARead-onlyInspect
List or search patient records (demographics and contact details; HEALTH DATA). Filters combine with AND. Paged: pass next_page as page. GET /main/Patient.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| name | No | Search the family, given or preferred name (matches the start of the name). | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| sort | No | Sort order: _lastUpdated, name, created, -_lastUpdated, -name, -created ("-" = descending). | |
| count | No | Results per page, 1-100 (default 30). | |
| No | An email address. | ||
| given | No | Start of the given name. | |
| phone | No | A phone number, local or E.164 (+61412345678). | |
| family | No | Start of the family name. | |
| status | No | Patient status, e.g. active. | |
| created | No | Created (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| include | No | Also return related resources in "included": any of Patient:general-practitioner. | |
| birthdate | No | Date of birth (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| general_practitioner | No | A Practitioner/PractitionerRole the patient has records with. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful context beyond annotations: HEALTH DATA sensitivity, AND semantics for combining filters, paging behavior, and the GET /main/Patient endpoint. It still does not describe permissions, rate limits, or the full response envelope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short, front-loaded sentences with no wasted wording. Purpose, health-data sensitivity, filter combination, paging, and endpoint are all stated efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter list/search tool with no output schema, the description is largely complete: it states the purpose, the kind of records returned, health-data sensitivity, filter combination semantics, and paging. It could be slightly richer about the response envelope, but the schema documents all parameters fully and the annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by stating 'Filters combine with AND,' which is important for interpreting the 15 optional filter parameters, and by reiterating the next_page-to-page paging mapping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'List or search patient records.' It also states the record content (demographics and contact details) and flags it as HEALTH DATA, making clear how it differs from sibling single-record tools like halaxy_get_patient and mutation tools like halaxy_create_patient.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'List or search patient records' implies the use case, and the description adds that filters combine with AND and that paging uses next_page as page. However, it does not explicitly say when to use this tool versus alternatives such as halaxy_get_patient for a single patient or halaxy_create_patient for creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_payment_transactionsList payment transactionsARead-onlyInspect
List or search payment transactions recorded on invoices. Filters combine with AND. Paged: pass next_page as page. GET /main/PaymentTransaction.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| count | No | Results per page, 1-100 (default 30). | |
| created | No | Created (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile. The description adds genuinely new information — that filters are conjunctive and how pagination continues via next_page — plus the underlying endpoint. It doesn't disclose default ordering or result shape, so it adds value but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying distinct information: purpose, filter composition, pagination. Front-loaded with the core action and zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, fully-documented, read-only list tool with five optional parameters, the description covers purpose, filtering semantics and pagination. With no output schema, a brief note on what the response contains (or that next_page is returned) would close the last gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema by stating that filters combine with AND — something an agent cannot infer from the individual parameter definitions. The paging note on next_page is somewhat redundant with the schema's page description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('List or search') and resource ('payment transactions recorded on invoices'), which is clearly distinguishable from the singular sibling halaxy_get_payment_transaction. It doesn't explicitly name that sibling, but the scope of the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the search context ('filters combine with AND') and the paging contract ('pass next_page as page'), which tells an agent how to chain calls. It stops short of explicit exclusions or naming halaxy_get_payment_transaction as the single-record alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_practitioner_rolesList practitioner roles (clinic locations)ARead-onlyInspect
List or search practitioner roles: a practitioner's association with one clinic location (the id used when booking and for clinical notes). Filters combine with AND. Paged: pass next_page as page. GET /main/PractitionerRole.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| count | No | Results per page, 1-100 (default 30). | |
| include | No | Also return related resources in "included": any of PractitionerRole:practitioner, PractitionerRole:organization. | |
| profile | No | Staff roles or external professional-contact roles. | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| organization | No | Organization (clinic) id. | |
| practitioner | No | Practitioner id, e.g. PR-123. | |
| provider_number | No | Provider number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety, and the description adds useful behavioral context: filters combine with AND, pagination uses next_page as page, and the role id is the identifier used for booking and clinical notes. It does not describe authentication, rate limits, or response shape, but the annotation lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core definition of a practitioner role before mentioning filtering, pagination, and the endpoint. The pagination sentence is slightly redundant with the schema, but overall it is efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides enough context to invoke the tool correctly: it defines the resource, explains filtering semantics, and covers pagination. It could say more about what the returned records contain or how included related resources appear, but the essential invocation details are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are already documented in the input schema. The description adds only general filter behavior ('Filters combine with AND') and repeats the next_page-to-page pagination convention, which is already stated in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'List or search practitioner roles,' and clarifies that a role is a practitioner's association with one clinic location. It is clear what the tool does, though it does not explicitly contrast itself with the sibling get_practitioner_role tool for single-record retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by 'List or search' and by noting that filters combine with AND, but there is no explicit guidance on when to use this instead of get_practitioner_role or other list tools. The agent must infer the selection context from the tool name and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_practitionersList practitionersARead-onlyInspect
List or search practitioners and administrators of the practice group (ids look like PR-12345). Filters combine with AND. Paged: pass next_page as page. GET /main/Practitioner.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| name | No | Family, given or preferred name. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| sort | No | Sort order: name, -name ("-" = descending). | |
| count | No | Results per page, 1-100 (default 30). | |
| No | An email address. | ||
| given | No | Given name. | |
| active | No | Only active (true) or inactive (false) practitioners. | |
| family | No | Family name. | |
| profile | No | hx-practitioner = staff, hx-external-practitioner = professional contacts. | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, so the description's job is to add behavior — and it does add pagination mechanics (next_page -> page) and AND filter combination. It says nothing about result ordering defaults, rate limits, or what a returned record contains, so the added context is useful but shallow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short, front-loaded sentences that each carry information: scope, ID shape, filter logic, pagination. The trailing 'GET /main/Practitioner' endpoint reference is marginal filler for a tool-selection decision but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 optional parameters, a 100%-documented schema, and an existing readOnly annotation, the description supplies the missing cross-parameter semantics (AND) and paging protocol. Absent an output schema, it could say more about what fields a practitioner record exposes, but nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3; the description earns above baseline by explaining that all filter parameters intersect with AND and by pinning down the ID format (PR-12345) and the page/next_page mapping. These are semantic facts not stated in the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List or search') against a specific resource ('practitioners and administrators of the practice group') and even gives the ID shape (PR-12345), so the agent knows exactly what this returns. It doesn't explicitly contrast itself with the sibling halaxy_get_practitioner, leaving the single-vs-list boundary to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Filters combine with AND' and 'Paged: pass next_page as page' give operational usage, but there is no statement of when to prefer this over halaxy_get_practitioner or halaxy_list_practitioner_roles. The usage context is implied by the verb 'list', not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_referral_definitionsList referral templatesARead-onlyInspect
List or search referral templates with preset properties. Filters combine with AND. Paged: pass next_page as page. GET /main/ReferralDefinition.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| count | No | Results per page, 1-100 (default 30). | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| funding_organization | No | The funder. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds genuinely useful behavior beyond that: filters are ANDed, and pagination is done by feeding next_page back as page. It does not describe what a template record contains or response envelope, which matters somewhat since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler: purpose first, then filter semantics, then pagination mechanics and endpoint. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter list tool this covers invocation adequately, but with no output schema the description gives no sense of what a referral template record looks like or what the paging envelope returns, leaving the agent to discover that at call time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description earns a bump by explaining that all supplied filters combine with AND — semantics the schema does not state. The pagination sentence largely repeats the schema's own note on the page parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List or search referral templates with preset properties'), which is distinguishable from the singular halaxy_get_referral_definition and from halaxy_list_referrals. It stops short of explicitly contrasting with those siblings, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'List or search' implies when to use it, and the filter note implies narrowing, but there is no explicit guidance on when to prefer this over halaxy_get_referral_definition (fetch one known template) or halaxy_list_referrals (actual referral instances). Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_referralsList referralsARead-onlyInspect
List or search referrals from one healthcare provider to another (HEALTH DATA). Filters combine with AND. Paged: pass next_page as page. GET /main/Referral.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| sort | No | Sort order: _lastUpdated, created, -_lastUpdated, -created ("-" = descending). | |
| count | No | Results per page, 1-100 (default 30). | |
| created | No | Created (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| include | No | Also return related resources in "included": any of Referral:subject, Referral:coverage. | |
| subject | No | The patient the referral is for. | |
| coverage | No | The coverage (claim details) of the referral. | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint already declares the safety profile, and the description adds genuinely new context: the HEALTH DATA sensitivity flag, the AND-combination semantics of filters, and the pagination contract (consume next_page, feed back as page). It stops short of describing what the response contains beyond paging, but with no output schema that is a modest gap rather than a serious one.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct information: resource scope, filter logic, paging behavior, endpoint. Everything an agent needs is front-loaded with no restatement of the title or schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, zero-required read tool with full schema coverage and only readOnlyHint for annotations, the description covers the non-obvious operational concerns (AND semantics, paging, health-data sensitivity). Only the return payload shape is unspecified, and the next_page reference partially compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so per the rubric the baseline is 3; the description earns above that by adding the cross-parameter rule that filters combine with AND, which the schema cannot express per-field. It also clarifies paging mechanics, tying the opaque 'page' parameter to a next_page value an agent would not otherwise know exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with scope: 'List or search referrals from one healthcare provider to another,' which tells an agent exactly what domain object is returned. It does not explicitly distinguish itself from halaxy_get_referral or halaxy_list_referral_definitions, but 'list or search' vs. the singular 'get' sibling makes the split reasonably inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives actionable usage facts — 'Filters combine with AND' and 'Paged: pass next_page as page' — which guide invocation behavior. However, it never states when to use this tool rather than halaxy_get_referral (single lookup) or halaxy_list_referral_definitions, leaving sibling selection implied by naming convention only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_schedulesList practitioner schedulesARead-onlyInspect
List or search schedules: containers of bookable time slots per practitioner. Filters combine with AND. Paged: pass next_page as page. GET /main/Schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| actor | No | The practitioner/role the schedule belongs to. | |
| count | No | Results per page, 1-100 (default 30). | |
| active | No | Only active (true) or inactive schedules. | |
| include | No | Also return related resources in "included": any of Schedule:actor. | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safety profile, so the description needn't restate it. It does add value with the filter-combination logic and the next_page->page pagination contract. It omits default page size behavior (only in schema), sort order, and whether inactive schedules are included by default — a notable gap for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose and ending with the concrete pagination mechanic. The trailing 'GET /main/Schedule.' is mostly redundant with the readOnly annotation and could be dropped, but it costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param, fully-documented, annotation-covered list tool with no output schema, the description covers purpose, filter semantics and pagination. The remaining gap is return-shape and default-inclusion behavior for inactive schedules, which an agent calling this cold would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The only semantic addition is 'Filters combine with AND', which is genuinely useful cross-parameter behavior not expressible in the schema. Nothing is said about the meaning or trade-offs of 'active', 'include', or 'actor' beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List or search schedules') and goes further by defining what a schedule is ('containers of bookable time slots per practitioner'). Sibling tools like halaxy_get_schedule and halaxy_list_slots are never mentioned, so the agent gets no help distinguishing list vs get vs slot enumeration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'List or search' implies free-text/filter usage and 'Filters combine with AND' is a real usability hint. But there is no statement of when to prefer this over halaxy_get_schedule (single fetch) or halaxy_find_available_appointments (availability lookup), which is exactly the ambiguity an agent faces here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_list_slotsList time slotsBRead-onlyInspect
List or search time slots of practitioner schedules (free or busy). Filters combine with AND. Paged: pass next_page as page. GET /main/Slot.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | One id or several separated by commas, for example 1,2,3. | |
| end | No | Slot end (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| page | No | Page number, 1-based (default 1). Use next_page from the previous reply. | |
| count | No | Results per page, 1-100 (default 30). | |
| start | No | Slot start (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| status | No | free or busy. | |
| include | No | Also return related resources in "included": any of Slot:practitioner, Slot:organization, Slot:practitioner-role. | |
| duration | No | Slot duration in minutes. | |
| schedule | No | Schedule id. | |
| last_updated | No | Only records last updated at this time (ISO date or date-time, optional prefix eq/ne/gt/lt/ge/le). | |
| organization | No | Organization (clinic) id. | |
| practitioner | No | Practitioner id. | |
| practitioner_role | No | PractitionerRole id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already tells the agent this is a safe read operation. The description adds useful behavioral context—that filters combine with AND and that pagination uses next_page as the page parameter. It does not disclose return shape, default/max page sizes, or rate/auth considerations beyond what the schema provides, so it is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with zero waste, and the core purpose is front-loaded. The trailing 'GET /main/Slot' is arguably unnecessary for an agent that does not issue raw HTTP, but it is harmless and does not bury the key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 13 optional parameters fully documented in the schema and a readOnlyHint annotation, the description covers what is listed, filter combination, and pagination. It omits routing guidance to alternatives such as halaxy_find_available_appointments and does not mention the include expansion behavior, though the schema covers the latter. Complete enough to call correctly, but selection guidance is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the 13 parameters documented in detail, including ISO date prefixes and page defaults. The description adds little parameter-specific meaning beyond noting free/busy status and the pagination pattern, both of which are already covered by the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List or search time slots of practitioner schedules (free or busy).' This clearly distinguishes the tool from halaxy_get_slot (singular fetch) by its listing/search scope. However, it does not explicitly mention the closest alternative, halaxy_find_available_appointments, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives some usage guidance: 'Filters combine with AND' and 'Paged: pass next_page as page.' But it offers no explicit when-to-use or when-not-to-use guidance relative to siblings like halaxy_find_available_appointments or halaxy_get_slot. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
halaxy_update_appointment_statusUpdate an appointment statusADestructiveIdempotentInspect
Writes to the live Halaxy account. Sets the patient's status on an appointment (shown in the Halaxy calendar), for example arrived, attended, confirmed or cancelled. "cancelled (no charge)" also sets the invoice to $0. For a group appointment pass patient_id to say whose status changes. PATCH /main/Appointment/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | The new status. | |
| patient_id | No | The patient whose status changes (needed only when the appointment has several patients). | |
| appointment_id | Yes | The appointment id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: it warns that this writes to the live account and discloses a cross-resource side effect ('cancelled (no charge)' also sets the invoice to $0), which annotations alone could not convey. It leaves out error behavior and what happens on an invalid transition, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences that front-load the most important fact (live account write) before the mechanics; the trailing PATCH endpoint is mildly redundant but not wasteful. No filler or tautology.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the essentials for a destructive live-write status mutation with no output schema: where writes land, the side effect on invoices, and the multi-patient case. The absence of any statement about the response or about invalid status transitions is the only meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3; the description earns an extra point by explaining the operational consequence of one enum value (invoice zeroing) and the conditional need for patient_id, which the schema field descriptions do not capture.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Sets the patient's status on an appointment') plus concrete example values, which makes it trivially distinguishable from sibling getters/creators like halaxy_get_appointment and halaxy_create_appointment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete conditional for the optional parameter ('For a group appointment pass patient_id to say whose status changes') and flags the special 'cancelled (no charge)' variant. It does not explicitly say when to prefer this over alternatives such as recreating or cancelling an appointment, so it stops short of full routing guidance.
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.
35 tool updates
- First observed
halaxy_create_appointment - First observed
halaxy_create_clinical_note - First observed
halaxy_create_patient - First observed
halaxy_find_available_appointments - First observed
halaxy_get_appointment - First observed
halaxy_get_coverage - First observed
halaxy_get_fee - First observed
halaxy_get_healthcare_service - First observed
halaxy_get_invoice - First observed
halaxy_get_invoice_line - First observed
halaxy_get_organization - First observed
halaxy_get_patient - First observed
halaxy_get_payment_transaction - First observed
halaxy_get_practitioner - First observed
halaxy_get_practitioner_role - First observed
halaxy_get_referral - First observed
halaxy_get_referral_definition - First observed
halaxy_get_schedule - First observed
halaxy_get_slot - First observed
halaxy_list_appointments - First observed
halaxy_list_coverage - First observed
halaxy_list_fees - First observed
halaxy_list_healthcare_services - First observed
halaxy_list_invoice_lines - First observed
halaxy_list_invoices - First observed
halaxy_list_organizations - First observed
halaxy_list_patients - First observed
halaxy_list_payment_transactions - First observed
halaxy_list_practitioner_roles - First observed
halaxy_list_practitioners - First observed
halaxy_list_referral_definitions - First observed
halaxy_list_referrals - First observed
halaxy_list_schedules - First observed
halaxy_list_slots - First observed
halaxy_update_appointment_status
Related MCP Connectors
Read splose patients, appointments, invoices, cases; book and cancel appointments, record payments.
Read Nookal locations, practitioners, availability, appointments, clients, cases and invoices.
Read and write DrChrono patients, appointments, offices and clinical notes.
Read and write NexHealth appointments, patients, providers and locations.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables a desktop AI agent to read from and write to a single Halaxy practice account, turning intake material like referral PDFs, emails and form photos into patient, referrer and referral records, and checking availability and booking appointments. Every write is gated by a prepare/approve/commit flow with duplicate checks, masking and read-only mode.1MIT
- AlicenseBqualityDmaintenanceProvides integration with the Cliniko API for healthcare practice management, enabling patient, appointment, invoice, and payment operations via natural language.27MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that lets AI assistants query your Halaxy practice-management data—appointments, invoices, referrals, and practitioners—via natural language, exposing read-only tools for daily schedules, billing status, and session limits.GPL 3.0
- AlicenseBqualityCmaintenanceEnables Claude, ChatGPT and other MCP clients to read practice-management data including organization, clinicians, diaries, availability, bookings, patients, invoices, payments, staff tasks, services, and locations, and optionally create staff tasks, create bookings, and cancel bookings.15MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.