Skip to main content
Glama

Cliniko MCP by usefulapi

Server Details

Hosted MCP server for Cliniko — patients, appointments, availability, and invoices for AI agents.

Ownership verified

The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
77.3% over 76 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
m190/usefulapi-mcp
GitHub Stars
0

TDQS

A3.6/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct resource and action (create/get/list for appointments, patients, invoices, treatment notes, etc.), and the two slot tools are clearly separated by description: list_available_times returns multiple slots in a range while next_available_time returns the single earliest slot. No two tools appear to do the same thing.

Naming Consistency5/5

All 17 tools follow a strict cliniko_{verb}_{noun} snake_case pattern, with consistent verbs (create, get, list). The convention is predictable and readable throughout with no deviations.

Tool Count4/5

17 tools is slightly on the heavy side but each maps to a plausible read/booking operation for a practice-management domain, and there is little redundancy. It sits just above the ideal 3-15 band rather than being bloated.

Completeness3/5

The surface offers create+get+list for appointments and patients plus rich lookup coverage, but there is no update or delete/cancel operation anywhere (e.g. rescheduling or cancelling an appointment, editing a patient), which are core lifecycle needs. These are notable gaps an agent cannot work around with the current tools.

Available Tools

17 tools
cliniko_create_appointmentCreate an appointmentA
Destructive
Inspect

WRITE — books a REAL new individual appointment in the live Cliniko practice. Requires patient_id, practitioner_id, business_id, appointment_type_id, and starts_at (ISO 8601). ends_at defaults from the appointment type if omitted. POST /individual_appointments.

NameRequiredDescriptionDefault
notesNoAppointment notes.
ends_atNoEnd time, ISO 8601. Defaults from the appointment type if omitted.
starts_atYesStart time, ISO 8601 e.g. 2026-07-20T09:00:00Z (required).
patient_idYesPatient id (required).
business_idYesBusiness id (required).
practitioner_idYesPractitioner id (required).
appointment_type_idYesAppointment type id (required).

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only supply destructiveHint=true and a title, so the description usefully reinforces that this mutates live data ('REAL ... live practice', 'POST /individual_appointments') and notes the ends_at fallback. It does not disclose conflict/double-booking behavior, idempotency, or return payload, so it stops short of full transparency.

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

Conciseness4/5

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

Front-loads the critical WRITE/REAL warning, then lists requirements compactly in three sentences with little waste. The required-parameter enumeration is mildly redundant given the schema but does not bloat the text.

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

Completeness3/5

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

For a destructive write with no output schema, the definition covers inputs and the mutation warning but omits what the call returns (e.g. the created appointment id) and how failures such as slot conflicts are surfaced. Adequate but with clear gaps.

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

Parameters3/5

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

Schema coverage is 100%, and each parameter's meaning and required status is already documented in the schema. The description restates the five required fields (redundant) and repeats the ends_at default rule, adding no syntax or format detail beyond the schema — the baseline 3.

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

Purpose5/5

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

States a specific verb and resource — 'books a REAL new individual appointment' — and contrasts it with the read-oriented siblings (cliniko_get_appointment, cliniko_list_appointments) by naming it a WRITE. An agent can tell this is the creation tool without opening the schema.

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

Usage Guidelines3/5

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

The 'WRITE — books a REAL new ... live practice' framing implies when to use it (a real booking versus a lookup), but it never states prerequisites or alternatives, e.g. that cliniko_list_available_times or cliniko_next_available_time should be consulted first to find a valid slot. Usage is implied rather than explicit.

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

cliniko_create_patientCreate a patientA
Destructive
Inspect

WRITE — creates a REAL new patient record in the live Cliniko practice. Requires first_name + last_name. POST /patients.

NameRequiredDescriptionDefault
cityNoCity.
emailNoEmail address.
notesNoFree-text notes.
stateNoState / region.
address_1NoStreet address line 1.
last_nameYesPatient last name (required).
post_codeNoPost / ZIP code.
first_nameYesPatient first name (required).
country_codeNoISO country code, e.g. AU.
phone_numberNoA phone number (stored as a Mobile phone number).
date_of_birthNoDate of birth yyyy-mm-dd.

TDQS

A4/5.0
Behavior4/5

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

Annotations declare destructiveHint=true, and the description reinforces this with 'REAL' and 'live Cliniko practice', making it clear this writes to production and is not a sandbox/dry-run. It stops short of disclosing auth requirements, duplicate-handling or idempotency behavior, so it adds meaningful value but not a full behavioral picture.

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

Conciseness5/5

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

Three terse clauses, all front-loaded, with the write nature stated first and the required-field constraint second. Nothing is padded; the POST endpoint note is minor but harmless.

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

Completeness4/5

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

For a mutation tool with a destructive annotation and no output schema, the live-write warning and required-field callout cover the essentials for correct invocation. The one gap is the absence of any mention of the return value (e.g., the created patient ID), which matters since no output schema exists to document it.

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

Parameters3/5

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

Schema description coverage is 100% and both required fields are already encoded via the required array and minLength, so the schema does the heavy lifting. The description's 'Requires first_name + last_name' merely restates what the schema already specifies, adding no new detail about the 9 optional fields.

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

Purpose5/5

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

States a specific verb and resource ('creates a REAL new patient record') and a scope qualifier ('in the live Cliniko practice'). The 'WRITE' prefix and 'new patient record' cleanly distinguish it from get_patient and list_patients without needing to open any schema.

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

Usage Guidelines3/5

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

The 'WRITE' marker and live-practice framing imply this is the mutation path for adding patients, giving implied usage. However, no explicit when-to-use or when-not-to-use guidance is offered, and no sibling alternative (e.g., an update/upsert tool) is named, so the routing signal is only implicit.

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

cliniko_get_accountGet account detailsA
Read-only
Inspect

Get the Cliniko account and subscription details for the authenticated API key. A good first call to sanity-check auth, shard, and User-Agent. GET /account.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so the safety profile is already covered. The description adds real operational context: it identifies what the call returns (account and subscription details) and frames it as a diagnostic for auth, shard, and User-Agent correctness, which is beyond what the annotation conveys. It stops short of describing the response structure or failure modes.

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

Conciseness5/5

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

Three short sentences, front-loaded with the resource and purpose, followed by the usage hint and the endpoint. No repetition or filler; every sentence earns its place.

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

Completeness4/5

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

For a zero-parameter read tool with no output schema, the description covers intent, scope, and usage adequately. It could go slightly further in sketching the returned account/subscription fields, but nothing prevents an agent from calling it correctly.

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

Parameters4/5

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

Zero parameters, so the baseline is 4 and there is nothing for the description to disambiguate. The mention of the authenticated API key clarifies that credential context is implicit rather than a parameter, which is mild added value.

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

Purpose5/5

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

States a specific verb (Get) and resource (Cliniko account and subscription details), scoped to the authenticated API key. No sibling tool touches account/subscription data, so an agent can distinguish it immediately from the appointment/patient/invoice tools. The trailing 'GET /account' endpoint reference reinforces the exact target.

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

Usage Guidelines4/5

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

Explicitly recommends itself as 'a good first call to sanity-check auth, shard, and User-Agent,' which is clear usage context. There are no competing siblings to exclude, so the only missing piece is any statement of when not to call it (e.g., after auth is confirmed).

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

cliniko_get_appointmentGet an appointmentB
Read-only
Inspect

Fetch a single individual appointment by id. GET /individual_appointments/{id}.

NameRequiredDescriptionDefault
idYesIndividual appointment id.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safe-read profile is covered. The description adds the underlying endpoint (GET /individual_appointments/{id}) but says nothing about error behavior, tenant/workspace scoping, or whether the id must come from a prior list call.

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

Conciseness4/5

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

Two short sentences, purpose front-loaded with zero filler. The raw REST path is mildly redundant alongside the tool name but costs only a few words.

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

Completeness3/5

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

For a one-parameter read tool with full schema coverage and annotations, the definition is adequate to call correctly. However, with no output schema, it would be more complete if it hinted at what the call returns (an appointment object) rather than only the endpoint.

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

Parameters3/5

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

Schema description coverage is 100% and there is a single parameter already documented as 'Individual appointment id.', so the baseline is 3. The phrase 'by id' adds no format or type detail beyond what the schema supplies.

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

Purpose4/5

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

States a specific verb (Fetch) and resource (a single individual appointment) scoped by id, which implicitly separates it from cliniko_list_appointments. It never names a sibling outright, so it falls short of the 5 bar for differentiation.

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

Usage Guidelines3/5

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

Usage is only implied: 'by id' tells the agent a single-appointment identifier is required, but there is no statement of when to prefer this over list_appointments or what to do if the id is unknown. No exclusions or alternatives are given.

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

cliniko_get_invoiceGet an invoiceB
Read-only
Inspect

Fetch a single invoice by id. GET /invoices/{id}.

NameRequiredDescriptionDefault
idYesInvoice id.

TDQS

B3.1/5.0
Behavior2/5

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

The readOnlyHint=true annotation already declares this is a safe read, so the description's only addition is restating the REST verb/path. It says nothing about behavior on a missing id (e.g., 404), auth requirements, or error handling.

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

Conciseness5/5

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

Two short, front-loaded sentences with zero filler; the purpose is stated before the implementation detail.

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

Completeness3/5

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

For a one-parameter read tool with safety covered by annotations and no output schema, this is minimally adequate. It omits what an invoice response contains and how failures surface, leaving the agent with just enough to call it.

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

Parameters3/5

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

Schema description coverage is 100% and there is a single, self-explanatory parameter ('Invoice id.'). The description adds no format, type, or constraint detail beyond the schema, which is the expected baseline when the schema does the work.

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

Purpose4/5

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

States a specific verb (Fetch) and resource (a single invoice) plus the id-based scope, which distinguishes it from cliniko_list_invoices. It never names the sibling explicitly, but 'single' vs. the list tool is inferable.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance or routing to alternatives such as cliniko_list_invoices. The id-based retrieval is implied by the phrasing but nothing tells the agent when this tool is preferred over the list endpoint.

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

cliniko_get_patientGet a patientB
Read-only
Inspect

Fetch a single patient by id. GET /patients/{id}.

NameRequiredDescriptionDefault
idYesPatient id.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description only adds the raw REST endpoint (GET /patients/{id}) and says nothing about 404 behavior, auth scope, or what a missing patient returns – modest added value over the structured fields.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and resource, no filler. Every clause earns its place, even if the endpoint line is somewhat duplicative.

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

Completeness4/5

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

For a one-parameter read tool with annotations covering the safety profile, this is nearly complete. With no output schema, a brief note on the returned patient shape or error case would close the remaining gap.

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

Parameters3/5

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

There is a single required parameter, and schema description coverage is 100% ('Patient id.'), so the schema fully documents it. The description adds nothing beyond 'by id', matching the baseline of 3 when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource ('Fetch a single patient by id'), and the word 'single' implicitly contrasts with the list_patients sibling. It does not explicitly name alternatives, so it stops short of the top band.

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

Usage Guidelines2/5

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

No when-to-use guidance, no mention of prerequisites or alternatives. 'By id' hints that an id must be known first, but the agent is left to infer that list_patients is the way to obtain one.

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

cliniko_get_treatment_noteGet a treatment noteA
Read-only
Inspect

Fetch a single treatment note by id. NOTE: treatment notes are protected health information (PHI). Read-only. GET /treatment_notes/{id}.

NameRequiredDescriptionDefault
idYesTreatment note id.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and 'Read-only' is partly redundant with that. The PHI warning is genuine added context, telling the agent the returned payload is protected health information subject to handling rules, which goes 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.

Conciseness4/5

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

Three short sentences, front-loaded with the action and followed by the PHI caveat and the HTTP route. Only 'Read-only' is arguably redundant given the annotations, but nothing is padded.

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

Completeness4/5

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

For a one-parameter read tool with annotation-covered safety and no output schema, the description supplies what is needed: the identifier-based lookup, the safety profile, and the PHI sensitivity. Only explicit sibling routing is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'id' parameter is documented in-schema; the description's 'by id' adds no format, type, or constraint detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource ('Fetch a single treatment note by id'), and the word 'single' implicitly separates it from cliniko_list_treatment_notes. It stops short of naming that sibling explicitly, so 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.

Usage Guidelines2/5

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

No guidance on when to use this versus cliniko_list_treatment_notes or other getters; the agent must infer retrieval-by-id from the name alone. The PHI note is contextual but not usage guidance.

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

cliniko_list_appointmentsList appointmentsA
Read-only
Inspect

List individual appointments, optionally filtered by patient/practitioner/business/type and a starts_at date-time window (starts_from / starts_to, ISO 8601). GET /individual_appointments.

NameRequiredDescriptionDefault
pageNoPage number (1-based). Default 1.
sortNoField to sort by, e.g. created_at.
orderNoSort direction. asc | desc.
per_pageNoResults per page (max 100). Default 50.
starts_toNoOnly appointments starting before this ISO 8601 time (q[]=starts_at:<).
patient_idNoFilter by patient id (q[]=patient_id:=).
business_idNoFilter by business id.
starts_fromNoOnly appointments starting at/after this ISO 8601 time (q[]=starts_at:>).
practitioner_idNoFilter by practitioner id.
appointment_type_idNoFilter by appointment type id.

TDQS

A3.8/5.0
Behavior3/5

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 HTTP verb/resource and the half-open date-window semantics (starts_from inclusive, starts_to exclusive via the q[] operators shown in schema), which is modest extra context. It says nothing about pagination behaviour, result caps, or rate limits beyond what the schema fields imply.

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

Conciseness5/5

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

Two tight sentences: the operation and its filter surface come first, the endpoint follows as a compact anchor. No filler, no repetition, nothing that does not earn its place.

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

Completeness4/5

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

For a zero-required-parameter list tool with a fully described schema, a readOnly annotation and no output schema, the description covers operation, filters and endpoint adequately. The only real gap is pagination/ordering guidance, which is partially mitigated by the page/per_page/sort/order fields being self-describing in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented inline, including the ISO 8601 format and the q[] operator mappings. The description restates the filter set and the starts_from/starts_to pair but adds no syntax or semantics 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.

Purpose5/5

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

States a specific verb (List) and resource (individual appointments), enumerates the filter dimensions, and names the underlying REST resource GET /individual_appointments. An agent can distinguish this from cliniko_get_appointment (single fetch) and cliniko_create_appointment without opening any schema.

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

Usage Guidelines3/5

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

The description implies usage by listing optional filters (patient/practitioner/business/type, starts_at window), which tells the agent what this tool is for, but it never states when to prefer it over siblings such as cliniko_list_available_times or cliniko_next_available_time, nor any preconditions. Usage context is implied rather than explicit.

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

cliniko_list_appointment_typesList appointment typesB
Read-only
Inspect

List appointment types (service definitions). GET /appointment_types.

NameRequiredDescriptionDefault
pageNoPage number (1-based). Default 1.
per_pageNoResults per page (max 100). Default 50.

TDQS

B3.2/5.0
Behavior2/5

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

readOnlyHint=true already establishes this is a safe read. The description adds only the GET endpoint path and the 'service definitions' gloss, both of which are marginal; it discloses nothing about pagination behavior or result shape that the annotations and schema don't already imply.

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

Conciseness5/5

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

Two short fragments, no padding, purpose front-loaded before the endpoint reference. Every clause carries information.

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

Completeness4/5

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

For a parameterless read-only list with 100% schema coverage and annotations covering the safety profile, the definition is nearly sufficient; the only minor gap is that no output schema exists and the description doesn't hint at the returned fields.

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

Parameters3/5

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

Schema coverage is 100%, so both pagination parameters (page, per_page) are fully documented in the schema itself. The description adds no filtering, sorting, or format guidance beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb (List) and resource (appointment types), reinforced parenthetically as 'service definitions', which disambiguates the data type. It does not explicitly distinguish itself from the similarly named sibling cliniko_list_appointments, so it falls just short of a 5.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no named alternative. The agent must infer that this lists service definitions rather than scheduled appointments, with no explicit routing to cliniko_list_appointments vs this tool.

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

cliniko_list_available_timesList available timesB
Read-only
Inspect

List bookable appointment slots for a business + practitioner + appointment type within a date range (from/to, yyyy-mm-dd, span <= 7 days). High-value booking-slot lookup. GET /businesses/{business_id}/practitioners/{practitioner_id}/appointment_types/{appointment_type_id}/available_times.

NameRequiredDescriptionDefault
toYesRange end yyyy-mm-dd (cannot be more than 7 days after `from`).
fromYesRange start yyyy-mm-dd (cannot be more than 7 days before `to`).
business_idYesBusiness id (path).
practitioner_idYesPractitioner id (path).
appointment_type_idYesAppointment type id (path).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the 7-day span constraint and date format, but both already appear in the schema, and it says nothing about permissions, pagination, or return shape. Useful 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.

Conciseness4/5

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

Front-loaded and compact, with the resource and range constraint stated first. 'High-value booking-slot lookup' is filler and the raw endpoint path largely restates the already-documented parameters, so it is slightly padded.

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

Completeness3/5

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

For a read-only, fully-documented 5-param tool with no output schema, the essentials are present. The gap is the unaddressed cliniko_next_available_time sibling, which an agent would plausibly confuse with this tool when choosing a booking lookup.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented, including the yyyy-mm-dd pattern and 7-day span. The description only restates the from/to format and span, adding no new parameter meaning; baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('List bookable appointment slots') and scopes it precisely to business + practitioner + appointment type within a date range. However, it does not differentiate itself from the sibling cliniko_next_available_time, which is the obvious alternative for booking-slot lookup, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is implied by the scoping ('within a date range', span <= 7 days), but there is no explicit when-to-use guidance or exclusion. The sibling cliniko_next_available_time is never named, so an agent gets no help choosing between a range listing and a next-slot lookup.

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

cliniko_list_businessesList businessesB
Read-only
Inspect

List businesses (practice locations) in the account. GET /businesses.

NameRequiredDescriptionDefault
pageNoPage number (1-based). Default 1.
per_pageNoResults per page (max 100). Default 50.

TDQS

B3.2/5.0
Behavior3/5

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

The readOnlyHint annotation already declares this is a safe read, so the bar is lower. The description adds the underlying endpoint (GET /businesses) which reinforces read-only semantics, but it says nothing about pagination behavior, ordering, or result-set size — context that would be genuinely useful for a listing call.

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

Conciseness4/5

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

Two short sentences with the resource and scope front-loaded; nothing is padded. The trailing 'GET /businesses' is arguably redundant given the tool name, but it costs almost nothing.

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

Completeness4/5

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

For a simple, zero-required-parameter list tool with no output schema needed and annotations covering the safety profile, this is nearly complete. The only missing piece an agent would want is a note on pagination expectations, which is minor here.

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

Parameters3/5

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

Schema description coverage is 100%: both page and per_page are fully documented in the schema with defaults and maximums. The description adds no parameter syntax or meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (List) and resource (businesses) and adds the clarifying gloss '(practice locations),' which disambiguates the domain concept. It does not explicitly differentiate itself from the many other list_* siblings, but the resource name plus the clarifying gloss makes selection unambiguous.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no prerequisites, and no mention of alternatives such as get_account or the other list_* tools. 'In the account' weakly implies an unfiltered full listing, but nothing tells the agent when this tool is the right choice versus another endpoint.

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

cliniko_list_invoicesList invoicesB
Read-only
Inspect

List invoices, optionally filtered by patient. GET /invoices.

NameRequiredDescriptionDefault
pageNoPage number (1-based). Default 1.
sortNoField to sort by, e.g. created_at.
orderNoSort direction. asc | desc.
per_pageNoResults per page (max 100). Default 50.
patient_idNoFilter by patient id (q[]=patient_id:=).

TDQS

B3.3/5.0
Behavior2/5

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

readOnlyHint=true already declares this is a safe read, so the description's only behavioral claim ('GET /invoices') is redundant with the annotation. It adds nothing about pagination defaults, ordering behavior, or result shape, leaving no value beyond structured data.

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

Conciseness4/5

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

Two short sentences, front-loaded with the primary action and filter. The trailing 'GET /invoices' is redundant HTTP detail but does not bloat the definition meaningfully.

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

Completeness4/5

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

A simple read-only list tool whose five parameters are fully documented in the schema and whose safety profile is covered by annotations; no output schema exists so return values need not be described. It is nearly complete, only lacking explicit sibling routing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents page, per_page, sort, order, and patient_id with formats and defaults. The description's mention of the patient filter merely repeats schema content, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (list) and resource (invoices) plus the optional patient filter, which is enough to tell it apart from cliniko_get_invoice. It does not explicitly name a sibling or scope boundary (e.g., all invoices across the account), so it stops short of 5.

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

Usage Guidelines3/5

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

The phrase 'optionally filtered by patient' implies the use case of narrowing by patient, but there is no explicit when-to-use/when-not guidance or routing to alternatives like cliniko_get_invoice for a single record. Usage is only implied.

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

cliniko_list_patientsList patientsA
Read-only
Inspect

Search/list patients. Name/email filters use Cliniko 'contains' matching (q[]=field:~value). GET /patients.

NameRequiredDescriptionDefault
pageNoPage number (1-based). Default 1.
sortNoField to sort by, e.g. created_at.
emailNoFilter by email (contains match).
orderNoSort direction. asc | desc.
per_pageNoResults per page (max 100). Default 50.
last_nameNoFilter by last name (contains match).
first_nameNoFilter by first name (contains match).

TDQS

A3.5/5.0
Behavior4/5

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 real value beyond that by disclosing the matching semantics ('contains' matching via q[]=field:~value), which tells the agent filters are substring, not exact. It stops short of describing pagination behavior 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.

Conciseness4/5

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

Very short and front-loaded: purpose first, then filter semantics, then endpoint. No filler. The trailing 'GET /patients' fragment is somewhat telegraphic but still compact.

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

Completeness4/5

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

With all seven parameters schema-documented, no output schema, and a readOnly annotation, the essentials are covered. Pagination defaults and result format are left to the schema, which is acceptable, though a note on paging through results would have improved completeness for a list endpoint.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (page, per_page, sort, order, email, first_name, last_name) is already documented in the schema. The description's note about 'contains' matching largely repeats what the schema already states for the name/email fields, adding little beyond baseline.

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

Purpose4/5

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

States a specific verb and resource ('Search/list patients') and gives the underlying endpoint, so the agent knows this is a collection query. It does not explicitly contrast with the sibling cliniko_get_patient (single-record fetch), so differentiation is only implicit.

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

Usage Guidelines2/5

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

No when-to-use guidance, no exclusions, and no mention of the alternative cliniko_get_patient for fetching a known patient. The description only implies usage through the phrase 'Search/list patients', leaving the agent to infer context.

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

cliniko_list_practitionersList practitionersC
Read-only
Inspect

List practitioners in the account. GET /practitioners.

NameRequiredDescriptionDefault
pageNoPage number (1-based). Default 1.
per_pageNoResults per page (max 100). Default 50.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so the safe-read profile is covered structurally. The description adds nothing beyond restating the GET verb: no pagination behavior, no mention of ordering, account scoping, or what a returned practitioner contains.

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

Conciseness4/5

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

Two very short sentences, front-loaded with the action and resource, with zero filler. It is efficient, though the extreme brevity edges toward under-specification rather than polished conciseness.

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

Completeness3/5

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

For a simple read-only list tool with fully documented pagination parameters in the schema and readOnlyHint in annotations, the minimum is met. Still missing is any hint about the shape of results or pagination traversal, and there is no output schema to compensate.

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

Parameters3/5

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

Schema description coverage is 100% and both page/per_page parameters carry their own descriptions with bounds and defaults, so the schema does the heavy lifting. The description contributes no additional parameter meaning, which matches the baseline 3.

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

Purpose4/5

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

States a specific verb and resource: list practitioners, plus the underlying endpoint GET /practitioners. The resource is unambiguous and distinct from the other list_* siblings, but the description offers no explicit differentiation or scope qualifiers versus those siblings.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as retrieving a single practitioner or filtering. The agent must infer usage purely from the tool name.

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

cliniko_list_productsList productsC
Read-only
Inspect

List billable products/items. GET /products.

NameRequiredDescriptionDefault
pageNoPage number (1-based). Default 1.
per_pageNoResults per page (max 100). Default 50.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, covering the safety profile. The description adds only the 'billable' qualifier and the raw endpoint, neither of which meaningfully expands on behavior beyond what annotations and schema provide. It does not disclose return structure, pagination behavior, or any filtering notes.

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

Conciseness4/5

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

The description is short and front-loaded, with the core purpose stated immediately. The second sentence ('GET /products') is arguably redundant endpoint trivia rather than something that earns its place, but the overall brevity and structure are strong.

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

Completeness3/5

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

For a simple list tool with zero required parameters, 100% schema coverage, and annotations covering read safety, the description is minimally sufficient. However, it omits any usage context or note about what the returned products represent, leaving the definition adequate but not fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (page, per_page) are fully documented in the schema with defaults and limits. The description adds no parameter-level detail, so the baseline of 3 is appropriate.

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

Purpose4/5

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

States a specific verb (List) and resource (billable products/items), which is clear enough for an agent to identify the tool. No sibling tool covers products, so explicit differentiation is less necessary, though the trailing 'GET /products' is redundant REST detail that doesn't aid selection.

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

Usage Guidelines2/5

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

Provides no guidance on when to use this tool versus alternatives or under what conditions listing products is appropriate. It presumes the intent is already obvious and offers no exclusions or prerequisites.

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

cliniko_list_treatment_notesList treatment notesA
Read-only
Inspect

List treatment notes, optionally filtered by patient. NOTE: treatment notes are protected health information (PHI) — handle with care. Read-only. GET /treatment_notes.

NameRequiredDescriptionDefault
pageNoPage number (1-based). Default 1.
per_pageNoResults per page (max 100). Default 50.
patient_idNoFilter by patient id (q[]=patient_id:=).

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds genuinely useful context beyond that: the PHI handling warning, which is material for an agent dealing with protected health records. It also cites the underlying endpoint GET /treatment_notes. It doesn't disclose return shape or pagination behavior, but the PHI caution is real added value.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action and the important PHI caveat. Slight redundancy in restating "Read-only" (already in annotations) and the raw endpoint, but nothing is bloated.

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

Completeness4/5

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

For a simple 3-parameter list tool with no output schema, the description covers purpose, filter scope, safety and PHI handling. It omits any hint of return format or pagination, but the annotations and schema carry most of the remaining burden.

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

Parameters3/5

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

Schema description coverage is 100%, so page, per_page and patient_id are already documented in the schema. The description only restates the patient filter, adding no syntax or format detail beyond the structured data, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("List treatment notes") and notes the optional patient filter. It is distinguishable from the singular sibling cliniko_get_treatment_note, though it doesn't explicitly contrast with it.

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

Usage Guidelines3/5

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

Implies usage via "optionally filtered by patient," telling the agent it can scope the list. There is no explicit when-to-use vs alternative guidance (e.g. list-all vs get-one), leaving the sibling routing to inference.

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

cliniko_next_available_timeNext available timeA
Read-only
Inspect

Get the single next bookable slot for a business + practitioner + appointment type (optionally from a date). GET /businesses/{business_id}/practitioners/{practitioner_id}/appointment_types/{appointment_type_id}/next_available_time.

NameRequiredDescriptionDefault
fromNoOptional earliest date yyyy-mm-dd to search from.
business_idYesBusiness id (path).
practitioner_idYesPractitioner id (path).
appointment_type_idYesAppointment type id (path).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, covering the safety profile. The description adds that this is a GET endpoint returning one slot, but does not disclose return format, empty-result behavior, timezone handling, or auth requirements. With annotations present, this 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.

Conciseness5/5

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

Two sentences, no waste, and the core purpose is front-loaded before the raw endpoint. The endpoint path is compact and useful for API-aware agents.

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

Completeness4/5

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

For a read-only tool with complete parameter schema coverage and no output schema, the description establishes the inputs and the singular return nature ('single next bookable slot'). It only misses explicit handling for no-availability cases, which is a minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters including the optional 'from' date with its yyyy-mm-dd pattern. The description simply restates the required ids and optional date without adding 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.

Purpose5/5

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

States a specific verb (Get), resource (single next bookable slot), and required qualifiers (business + practitioner + appointment type). The word 'single' directly differentiates it from the sibling list_available_times, so an agent can tell them apart without opening schemas.

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

Usage Guidelines3/5

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

The phrase 'single next bookable slot' implies use when exactly one slot is needed, but the description never names list_available_times or explains when to prefer this over bulk-availability alternatives. Usage is inferable but not explicit.

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for the Semble practice-management API, enabling AI agents to search for patients, contacts, and users, as well as retrieve patient relationships via read-only tools.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Clinical decision-support MCP server that lets AI agents reason over live FHIR patient data for medication review, appointment scheduling, and care gap identification.
    8,431 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.