Skip to content

Cliniko MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi

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

Deletes · 2

17 tools: 2 can delete or cancel things and 15 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http cliniko https://cliniko.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

17 tools

Deletes or cancels 2Claude Code: deny
  • cliniko_create_appointmentWRITE — books a REAL new individual appointment in the live Cliniko practice.No findings

    Why it is in this group

    • The name "cliniko_create_appointment" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Create an appointment
    • destructiveHint: true
  • cliniko_create_patientWRITE — creates a REAL new patient record in the live Cliniko practice.No findings

    Why it is in this group

    • The name "cliniko_create_patient" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE — creates a REAL new patient record in the live Cliniko practice. Requires first_name + last_name. POST /patients.

    Annotations the server declares

    • title: Create a patient
    • destructiveHint: true
Only reads 15Claude Code: allow
  • cliniko_get_accountGet the Cliniko account and subscription details for the authenticated API key.No findings

    Why it is in this group

    • The name "cliniko_get_account" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get account details
    • readOnlyHint: true
  • cliniko_get_appointmentFetch a single individual appointment by id.No findings

    Why it is in this group

    • The name "cliniko_get_appointment" says "get": a word for reading.
    Description, as the server wrote it
    Fetch a single individual appointment by id. GET /individual_appointments/{id}.

    Annotations the server declares

    • title: Get an appointment
    • readOnlyHint: true
  • cliniko_get_invoiceFetch a single invoice by id.No findings

    Why it is in this group

    • The name "cliniko_get_invoice" says "get": a word for reading.
    Description, as the server wrote it
    Fetch a single invoice by id. GET /invoices/{id}.

    Annotations the server declares

    • title: Get an invoice
    • readOnlyHint: true
  • cliniko_get_patientFetch a single patient by id.No findings

    Why it is in this group

    • The name "cliniko_get_patient" says "get": a word for reading.
    Description, as the server wrote it
    Fetch a single patient by id. GET /patients/{id}.

    Annotations the server declares

    • title: Get a patient
    • readOnlyHint: true
  • cliniko_get_treatment_noteFetch a single treatment note by id.No findings

    Why it is in this group

    • The name "cliniko_get_treatment_note" says "get": a word for reading.
    Description, as the server wrote it
    Fetch a single treatment note by id. NOTE: treatment notes are protected health information (PHI). Read-only. GET /treatment_notes/{id}.

    Annotations the server declares

    • title: Get a treatment note
    • readOnlyHint: true
  • cliniko_list_appointment_typesList appointment types (service definitions).No findings

    Why it is in this group

    • The name "cliniko_list_appointment_types" says "list": a word for reading.
    Description, as the server wrote it
    List appointment types (service definitions). GET /appointment_types.

    Annotations the server declares

    • title: List appointment types
    • readOnlyHint: true
  • cliniko_list_appointmentsList individual appointments, optionally filtered by patient/practitioner/business/type and a starts_at date-time window (starts_from / starts_to, ISO 8601).No findings

    Why it is in this group

    • The name "cliniko_list_appointments" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List appointments
    • readOnlyHint: true
  • cliniko_list_available_timesList bookable appointment slots for a business + practitioner + appointment type within a date range (from/to, yyyy-mm-dd, span <= 7 days).No findings

    Why it is in this group

    • The name "cliniko_list_available_times" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List available times
    • readOnlyHint: true
  • cliniko_list_businessesList businesses (practice locations) in the account.No findings

    Why it is in this group

    • The name "cliniko_list_businesses" says "list": a word for reading.
    Description, as the server wrote it
    List businesses (practice locations) in the account. GET /businesses.

    Annotations the server declares

    • title: List businesses
    • readOnlyHint: true
  • cliniko_list_invoicesList invoices, optionally filtered by patient.No findings

    Why it is in this group

    • The name "cliniko_list_invoices" says "list": a word for reading.
    Description, as the server wrote it
    List invoices, optionally filtered by patient. GET /invoices.

    Annotations the server declares

    • title: List invoices
    • readOnlyHint: true
  • cliniko_list_patientsSearch/list patients.No findings

    Why it is in this group

    • The name "cliniko_list_patients" says "list": a word for reading.
    Description, as the server wrote it
    Search/list patients. Name/email filters use Cliniko 'contains' matching (q[]=field:~value). GET /patients.

    Annotations the server declares

    • title: List patients
    • readOnlyHint: true
  • cliniko_list_practitionersList practitioners in the account.No findings

    Why it is in this group

    • The name "cliniko_list_practitioners" says "list": a word for reading.
    Description, as the server wrote it
    List practitioners in the account. GET /practitioners.

    Annotations the server declares

    • title: List practitioners
    • readOnlyHint: true
  • cliniko_list_productsList billable products/items.No findings

    Why it is in this group

    • The name "cliniko_list_products" says "list": a word for reading.
    Description, as the server wrote it
    List billable products/items. GET /products.

    Annotations the server declares

    • title: List products
    • readOnlyHint: true
  • cliniko_list_treatment_notesList treatment notes, optionally filtered by patient.No findings

    Why it is in this group

    • The name "cliniko_list_treatment_notes" says "list": a word for reading.
    Description, as the server wrote it
    List treatment notes, optionally filtered by patient. NOTE: treatment notes are protected health information (PHI) — handle with care. Read-only. GET /treatment_notes.

    Annotations the server declares

    • title: List treatment notes
    • readOnlyHint: true
  • cliniko_next_available_timeGet the single next bookable slot for a business + practitioner + appointment type (optionally from a date).No findings

    Why it is in this group

    • The description's first verb is "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Next available time
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.16.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http cliniko https://cliniko.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__cliniko__cliniko_get_account",
      "mcp__cliniko__cliniko_list_patients",
      "mcp__cliniko__cliniko_get_patient",
      "mcp__cliniko__cliniko_list_appointments",
      "mcp__cliniko__cliniko_get_appointment",
      "mcp__cliniko__cliniko_list_practitioners",
      "mcp__cliniko__cliniko_list_businesses",
      "mcp__cliniko__cliniko_list_appointment_types",
      "mcp__cliniko__cliniko_list_products",
      "mcp__cliniko__cliniko_list_invoices",
      "mcp__cliniko__cliniko_get_invoice",
      "mcp__cliniko__cliniko_list_treatment_notes",
      "mcp__cliniko__cliniko_get_treatment_note",
      "mcp__cliniko__cliniko_list_available_times",
      "mcp__cliniko__cliniko_next_available_time"
    ],
    "ask": [],
    "deny": [
      "mcp__cliniko__cliniko_create_patient",
      "mcp__cliniko__cliniko_create_appointment"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as cliniko. Review it before you use it.