Cliniko MCP by usefulapi
Server Details
Hosted MCP server for Cliniko — patients, appointments, availability, and invoices for AI agents.
- Status
- Healthy
- Uptime
- 69.5% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 17 tools
Each tool targets a distinct resource-action pair such as patients, appointments, invoices, treatment notes, or availability. Even the two availability tools are clearly separated by description: list_available_times returns multiple slots while next_available_time returns one.
Tools consistently use the cliniko_ prefix with get_, list_, or create_ verbs before a resource name. The only notable deviation is cliniko_next_available_time, which lacks an explicit verb, but the overall pattern remains predictable and easy to navigate.
At 17 tools, the server is on the higher end but still reasonable for a practice-management API covering account info, businesses, practitioners, patients, appointments, invoices, treatment notes, products, and availability. Each tool maps to a meaningful endpoint, though next_available_time could be seen as partially redundant with list_available_times.
The core booking workflow is covered well: clients can look up availability and create appointments, and patient lookup is supported. However, there are no update, delete, or cancel operations for appointments or patients, and invoices and treatment notes are read-only, leaving notable lifecycle gaps.
Available Tools
17 toolscliniko_create_appointmentCreate an appointmentDestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Appointment notes. | |
| ends_at | No | End time, ISO 8601. Defaults from the appointment type if omitted. | |
| starts_at | Yes | Start time, ISO 8601 e.g. 2026-07-20T09:00:00Z (required). | |
| patient_id | Yes | Patient id (required). | |
| business_id | Yes | Business id (required). | |
| practitioner_id | Yes | Practitioner id (required). | |
| appointment_type_id | Yes | Appointment type id (required). |
cliniko_create_patientCreate a patientDestructiveInspect
WRITE — creates a REAL new patient record in the live Cliniko practice. Requires first_name + last_name. POST /patients.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City. | |
| No | Email address. | ||
| notes | No | Free-text notes. | |
| state | No | State / region. | |
| address_1 | No | Street address line 1. | |
| last_name | Yes | Patient last name (required). | |
| post_code | No | Post / ZIP code. | |
| first_name | Yes | Patient first name (required). | |
| country_code | No | ISO country code, e.g. AU. | |
| phone_number | No | A phone number (stored as a Mobile phone number). | |
| date_of_birth | No | Date of birth yyyy-mm-dd. |
cliniko_get_accountGet account detailsRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
cliniko_get_appointmentGet an appointmentRead-onlyInspect
Fetch a single individual appointment by id. GET /individual_appointments/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Individual appointment id. |
cliniko_get_invoiceGet an invoiceRead-onlyInspect
Fetch a single invoice by id. GET /invoices/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Invoice id. |
cliniko_get_patientGet a patientRead-onlyInspect
Fetch a single patient by id. GET /patients/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Patient id. |
cliniko_get_treatment_noteGet a treatment noteRead-onlyInspect
Fetch a single treatment note by id. NOTE: treatment notes are protected health information (PHI). Read-only. GET /treatment_notes/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Treatment note id. |
cliniko_list_appointmentsList appointmentsRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Default 1. | |
| sort | No | Field to sort by, e.g. created_at. | |
| order | No | Sort direction. asc | desc. | |
| per_page | No | Results per page (max 100). Default 50. | |
| starts_to | No | Only appointments starting before this ISO 8601 time (q[]=starts_at:<). | |
| patient_id | No | Filter by patient id (q[]=patient_id:=). | |
| business_id | No | Filter by business id. | |
| starts_from | No | Only appointments starting at/after this ISO 8601 time (q[]=starts_at:>). | |
| practitioner_id | No | Filter by practitioner id. | |
| appointment_type_id | No | Filter by appointment type id. |
cliniko_list_appointment_typesList appointment typesRead-onlyInspect
List appointment types (service definitions). GET /appointment_types.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Default 1. | |
| per_page | No | Results per page (max 100). Default 50. |
cliniko_list_available_timesList available timesRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Range end yyyy-mm-dd (cannot be more than 7 days after `from`). | |
| from | Yes | Range start yyyy-mm-dd (cannot be more than 7 days before `to`). | |
| business_id | Yes | Business id (path). | |
| practitioner_id | Yes | Practitioner id (path). | |
| appointment_type_id | Yes | Appointment type id (path). |
cliniko_list_businessesList businessesRead-onlyInspect
List businesses (practice locations) in the account. GET /businesses.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Default 1. | |
| per_page | No | Results per page (max 100). Default 50. |
cliniko_list_invoicesList invoicesRead-onlyInspect
List invoices, optionally filtered by patient. GET /invoices.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Default 1. | |
| sort | No | Field to sort by, e.g. created_at. | |
| order | No | Sort direction. asc | desc. | |
| per_page | No | Results per page (max 100). Default 50. | |
| patient_id | No | Filter by patient id (q[]=patient_id:=). |
cliniko_list_patientsList patientsRead-onlyInspect
Search/list patients. Name/email filters use Cliniko 'contains' matching (q[]=field:~value). GET /patients.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Default 1. | |
| sort | No | Field to sort by, e.g. created_at. | |
| No | Filter by email (contains match). | ||
| order | No | Sort direction. asc | desc. | |
| per_page | No | Results per page (max 100). Default 50. | |
| last_name | No | Filter by last name (contains match). | |
| first_name | No | Filter by first name (contains match). |
cliniko_list_practitionersList practitionersRead-onlyInspect
List practitioners in the account. GET /practitioners.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Default 1. | |
| per_page | No | Results per page (max 100). Default 50. |
cliniko_list_productsList productsRead-onlyInspect
List billable products/items. GET /products.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Default 1. | |
| per_page | No | Results per page (max 100). Default 50. |
cliniko_list_treatment_notesList treatment notesRead-onlyInspect
List treatment notes, optionally filtered by patient. NOTE: treatment notes are protected health information (PHI) — handle with care. Read-only. GET /treatment_notes.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Default 1. | |
| per_page | No | Results per page (max 100). Default 50. | |
| patient_id | No | Filter by patient id (q[]=patient_id:=). |
cliniko_next_available_timeNext available timeRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Optional earliest date yyyy-mm-dd to search from. | |
| business_id | Yes | Business id (path). | |
| practitioner_id | Yes | Practitioner id (path). | |
| appointment_type_id | Yes | Appointment type id (path). |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
- Changed
cliniko_create_appointment1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_create_patient1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_get_account1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_get_appointment1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_get_invoice1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_get_patient1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_get_treatment_note1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_list_appointment_types1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_list_appointments1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_list_available_times1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_list_businesses1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_list_invoices1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_list_patients1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_list_practitioners1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_list_products1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_list_treatment_notes1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
cliniko_next_available_time1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
17 tool updates
- First observed
cliniko_create_appointment - First observed
cliniko_create_patient - First observed
cliniko_get_account - First observed
cliniko_get_appointment - First observed
cliniko_get_invoice - First observed
cliniko_get_patient - First observed
cliniko_get_treatment_note - First observed
cliniko_list_appointment_types - First observed
cliniko_list_appointments - First observed
cliniko_list_available_times - First observed
cliniko_list_businesses - First observed
cliniko_list_invoices - First observed
cliniko_list_patients - First observed
cliniko_list_practitioners - First observed
cliniko_list_products - First observed
cliniko_list_treatment_notes - First observed
cliniko_next_available_time
Related MCP Connectors
Hosted MCP server for the Healthie EHR & telehealth API: patients, appointments, charting, tasks.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Related MCP Servers
- 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
- AlicenseNot gradedqualityBmaintenanceMCP 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

mcp-medprice-aiofficial
FlicenseNot gradedqualityBmaintenanceA hosted MCP server exposing US hospital chargemaster cost data to AI assistants.-- AlicenseNot gradedqualityDmaintenanceClinical decision-support MCP server that lets AI agents reason over live FHIR patient data for medication review, appointment scheduling, and care gap identification.8,040 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.