MCP Cliniko Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Cliniko Serverfind the patient record for John Smith"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Cliniko Server
A Model Context Protocol (MCP) server that provides integration with the Cliniko API for healthcare practice management.
Features
Tools (Actions)
Patient Management
list_patients- Search and list patientsget_patient- Get patient by IDcreate_patient- Create new patientupdate_patient- Update patient detailsdelete_patient- Archive patient
Appointment Management
list_appointments- Search and list appointmentsget_appointment- Get appointment by IDcreate_appointment- Book new appointmentupdate_appointment- Modify appointmentcancel_appointment- Cancel appointmentdelete_appointment- Delete appointmentget_available_times- Get practitioner availability
Invoice Management
list_invoices- List and filter invoicesget_invoice- Get invoice detailscreate_invoice- Create new invoiceupdate_invoice- Update invoice status or detailsdelete_invoice- Delete draft invoice
Invoice Items
list_invoice_items- List items on an invoiceadd_invoice_item- Add item to invoiceupdate_invoice_item- Modify invoice itemdelete_invoice_item- Remove item from invoice
Payment Processing
list_payments- List payments with filteringcreate_payment- Record a paymentdelete_payment- Delete payment record
Products & Services
list_products- List billable products/servicesget_product- Get product detailscreate_product- Create new product/service
Tax Configuration
list_taxes- List available tax ratesget_tax- Get tax details
Complex Workflows
create_invoice_from_appointments- Generate invoices from appointmentsbulk_invoice_generation- Bulk create invoices for date rangelist_patient_cases- List patient caseslist_invoices_for_case- Get invoices for a case
Supporting Tools
list_practitioners- List all practitionerslist_appointment_types- List appointment typeslist_businesses- List businesses
Test Data
generate_test_data- Generate synthetic Australian healthcare datacleanup_test_data- Remove test patients
Resources (Data Access)
patient://{id}- Individual patient datapatients://list- All patientsappointment://{id}- Individual appointmentappointments://list- All appointmentsappointments://today- Today's appointmentspractitioners://list- All practitionersbusinesses://list- All businessesappointment-types://list- All appointment typesopenapi://spec- Cliniko API OpenAPI specification (YAML format)
Related MCP server: Ecuro Light API MCP Server
Installation
Clone the repository:
git clone https://github.com/yourusername/mcp-cliniko.git
cd mcp-clinikoInstall dependencies:
npm installSet up your Cliniko API key:
cp .env.example .env
# Edit .env and add your Cliniko API keyBuild the project:
npm run buildConfiguration
Environment Variables
CLINIKO_API_KEY- Your Cliniko API key (required)
Getting a Cliniko API Key
Log into your Cliniko account
Go to Settings → Integrations → API Keys
Create a new API key
Copy the key to your
.envfile
Usage
Development Mode
npm run devProduction Mode
npm startTesting with MCP Inspector
npm run inspectIntegration with Claude Desktop
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"cliniko": {
"command": "node",
"args": ["/path/to/mcp-cliniko/dist/index.js"],
"env": {
"CLINIKO_API_KEY": "your-api-key-here"
}
}
}
}Examples
Using Tools
List Patients:
{
"tool": "list_patients",
"arguments": {
"q": "Smith",
"per_page": 10
}
}Create Patient:
{
"tool": "create_patient",
"arguments": {
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone_number": "0412345678",
"date_of_birth": "1980-01-15",
"medicare_number": "1234567890"
}
}Book Appointment:
{
"tool": "create_appointment",
"arguments": {
"starts_at": "2024-01-20T10:00:00Z",
"patient_id": 123,
"practitioner_id": 456,
"appointment_type_id": 789,
"business_id": 101
}
}Generate Test Data:
{
"tool": "generate_test_data",
"arguments": {
"num_patients": 5,
"num_appointments": 10,
"days_ahead": 7
}
}Using Resources
Resources provide read-only access to Cliniko data:
patient://123- Get patient with ID 123patients://list- List all patientsappointments://today- Get today's appointments
API Rate Limits
Cliniko API has a rate limit of 200 requests per minute. The server does not implement rate limiting internally, so be mindful of this limit when making bulk operations.
Error Handling
The server uses standard HTTP error conventions:
400 - Bad Request
401 - Unauthorized (check API key)
404 - Resource not found
429 - Rate limit exceeded
500 - Internal server error
Development
Project Structure
mcp-cliniko/
├── src/
│ ├── index.ts # Main server
│ ├── cliniko-client.ts # API client
│ ├── types.ts # TypeScript types
│ ├── tools/ # MCP tools
│ │ ├── patients.ts
│ │ ├── appointments.ts
│ │ └── synthetic-data.ts
│ └── resources/ # MCP resources
│ └── index.ts
├── dist/ # Compiled JavaScript
├── package.json
├── tsconfig.json
└── .envBuilding
npm run buildType Checking
npx tsc --noEmitLicense
MIT
Support
For Cliniko API documentation, visit: https://docs.api.cliniko.com/
For MCP documentation, visit: https://modelcontextprotocol.io/# mcp-cliniko
Available Tools
27 toolscancel_appointmentC
Cancel an appointment
| Name | Required | Description | Default |
|---|---|---|---|
| appointment_id | Yes | Appointment ID | |
| cancellation_reason | No | Reason for cancellation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Cancel' implies a mutation operation, it doesn't specify whether this requires special permissions, if the action is reversible, what happens to associated data (e.g., invoices), or if there are rate limits. This is inadequate for a mutation tool with zero annotation 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?
The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a simple tool and front-loads the essential information ('Cancel an appointment'), making it easy to parse quickly.
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 mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what the tool returns (e.g., success confirmation, error details), side effects, or how it differs from similar tools like 'delete_appointment'. Given the complexity of appointment management, more context is needed.
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?
The input schema has 100% description coverage, clearly documenting both parameters (appointment_id and cancellation_reason) and their types. The description adds no additional parameter information beyond what's in the schema, so it meets the baseline score of 3 for high schema coverage.
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 clearly states the action ('Cancel') and resource ('an appointment'), making the tool's purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'delete_appointment', which appears to serve a similar function, preventing a perfect score.
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 provides no guidance on when to use this tool versus alternatives like 'delete_appointment' or 'update_appointment'. It also doesn't mention prerequisites (e.g., needing an existing appointment) or contextual constraints, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cleanup_comprehensive_test_dataC
Clean up all test data with granular control and dry-run option
| Name | Required | Description | Default |
|---|---|---|---|
| delete_patients | No | ||
| delete_appointments | No | ||
| delete_invoices | No | ||
| delete_products | No | ||
| delete_all_test_data | No | ||
| test_domain | No | test.cliniko.com | |
| dry_run | No | Preview what would be deleted without actually deleting |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'clean up' (implying deletion) and a 'dry-run option', but fails to specify critical details such as whether this operation is reversible, what permissions are required, if there are rate limits, or what happens to related data. For a destructive tool with 7 parameters, this is a significant gap in transparency.
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 a single, efficient sentence that front-loads the core purpose ('clean up all test data') and adds key features ('granular control and dry-run option') without any wasted words. Every element earns its place, making it highly concise and well-structured.
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?
Given the tool's complexity (7 parameters, no annotations, no output schema, and low schema coverage), the description is insufficient. It lacks details on behavioral aspects like safety, permissions, and output format, and doesn't fully explain parameter semantics or usage context. For a comprehensive cleanup tool, this leaves too many gaps for effective agent use.
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 low at 14%, with only the 'dry_run' parameter having a description. The tool description mentions 'granular control' and 'dry-run option', which loosely map to some parameters, but it doesn't explain the meaning of parameters like 'delete_patients', 'test_domain', or the interaction between 'delete_all_test_data' and other boolean flags. This doesn't adequately compensate for the low schema coverage.
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 clearly states the tool's purpose with the verb 'clean up' and resource 'all test data', and it adds 'granular control' and 'dry-run option' which provide useful context. However, it doesn't explicitly distinguish this tool from its sibling 'cleanup_test_data', which appears to be a similar tool, so it misses full sibling 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?
The description provides no guidance on when to use this tool versus alternatives like 'cleanup_test_data' or 'delete_patient'/'delete_appointment'. It mentions 'granular control' and 'dry-run option' but doesn't explain when these features are beneficial or when to prefer this over other deletion tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cleanup_test_dataA
Delete all test patients (patients with emails ending in @gmail.com, @outlook.com, etc)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the destructive action ('Delete') and target criteria, but lacks details on permissions needed, whether deletion is reversible, rate limits, or what happens on success/failure. For a destructive tool with zero annotation coverage, this is insufficient.
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 a single, efficient sentence with zero waste—it directly states the action, target, and criteria without unnecessary words. It is appropriately sized and front-loaded for quick understanding.
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?
Given the destructive nature and lack of annotations/output schema, the description is minimally adequate but incomplete. It specifies what gets deleted but omits critical behavioral context like safety warnings, confirmation steps, or response format. For a high-stakes deletion tool, more completeness is warranted.
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?
The tool has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description appropriately focuses on behavior rather than inputs, meeting the baseline for parameterless tools.
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 clearly states the specific action ('Delete') and target resource ('all test patients'), with precise criteria defining test patients (emails ending in @gmail.com, @outlook.com, etc.). It distinguishes from siblings like 'delete_patient' by specifying bulk deletion of test data only.
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 usage context for cleaning up test data, but does not explicitly state when to use this vs. alternatives like 'cleanup_comprehensive_test_data' or 'delete_patient'. It provides clear scope (test patients by email domain) but lacks explicit exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_appointmentC
Create a new appointment
| Name | Required | Description | Default |
|---|---|---|---|
| starts_at | Yes | Appointment start time (ISO 8601) | |
| patient_id | No | Patient ID (optional for walk-ins) | |
| practitioner_id | Yes | Practitioner ID | |
| appointment_type_id | Yes | Appointment type ID | |
| business_id | Yes | Business ID | |
| notes | No | Appointment notes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. 'Create a new appointment' implies a write operation but doesn't disclose behavioral traits such as authentication needs, side effects (e.g., calendar updates), error handling, or response format. It lacks details on what happens if constraints are violated (e.g., overlapping appointments), making it insufficient for a mutation tool with zero annotation 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?
The description is a single, efficient sentence with zero waste—'Create a new appointment' is front-loaded and appropriately sized for the tool's purpose. Every word earns its place, making it highly concise and well-structured without unnecessary elaboration.
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?
Given the complexity (a mutation tool with 6 parameters, no annotations, and no output schema), the description is incomplete. It doesn't address return values, error conditions, or system-specific behaviors. For a tool that creates appointments in a medical context, more context on constraints or outcomes is needed, making it inadequate despite the concise structure.
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 schema already documents all 6 parameters thoroughly (e.g., 'starts_at' as ISO 8601, 'patient_id' as optional). The description adds no meaning beyond this, not explaining relationships between parameters or business rules. With high schema coverage, the baseline is 3, as the description doesn't compensate but doesn't detract either.
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 'Create a new appointment' states the basic action and resource, which is clear but minimal. It distinguishes from siblings like 'update_appointment' or 'cancel_appointment' by specifying 'new', but lacks detail on what constitutes an appointment in this context. It's not tautological but remains vague about scope or system specifics.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., patient must exist), exclusions, or comparisons to siblings like 'update_appointment' or 'get_available_times'. Usage is implied only by the tool name, with no explicit context or alternatives stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_patientC
Create a new patient
| Name | Required | Description | Default |
|---|---|---|---|
| first_name | Yes | Patient first name | |
| last_name | Yes | Patient last name | |
| title | No | Title (Mr, Ms, Dr, etc) | |
| preferred_name | No | Preferred name | |
| date_of_birth | No | Date of birth (YYYY-MM-DD) | |
| sex | No | Biological sex | |
| No | Email address | ||
| phone_number | No | Primary phone number | |
| address_line_1 | No | Address line 1 | |
| address_line_2 | No | Address line 2 | |
| suburb | No | Suburb/City | |
| postcode | No | Postcode | |
| state | No | State/Province | |
| country | No | Country | |
| medicare_number | No | Medicare number | |
| medicare_reference_number | No | Medicare reference number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Create a new patient' implies a write operation, but it doesn't specify permissions needed, whether the operation is idempotent, what happens on duplicate data, or the response format. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
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 a single, efficient sentence ('Create a new patient') with zero waste. It's appropriately sized and front-loaded, though it could benefit from more detail given the tool's complexity.
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?
Given the tool's complexity (16 parameters, mutation operation) and lack of annotations or output schema, the description is incomplete. It doesn't explain return values, error handling, or behavioral aspects like data validation, leaving the agent with insufficient context for reliable use.
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?
The input schema has 100% description coverage, with each parameter clearly documented (e.g., 'first_name' as 'Patient first name', 'date_of_birth' with format 'YYYY-MM-DD'). The description adds no additional parameter information beyond the schema, so it meets the baseline of 3 where the schema does the heavy lifting.
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 'Create a new patient' clearly states the verb ('Create') and resource ('patient'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'update_patient' or 'delete_patient' beyond the basic action, nor does it specify what constitutes a 'patient' in this context (e.g., medical record vs. contact).
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 provides no guidance on when to use this tool versus alternatives like 'update_patient' or 'get_patient', nor does it mention prerequisites (e.g., required fields, authentication needs) or context for creation. It's a bare statement without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_appointmentC
Delete an appointment completely
| Name | Required | Description | Default |
|---|---|---|---|
| appointment_id | Yes | Appointment ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action is to 'Delete an appointment completely', implying a destructive, irreversible operation, but doesn't specify permissions needed, side effects, error conditions, or response format. This is inadequate for a mutation tool with zero annotation 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?
The description is a single, direct sentence with no wasted words, making it highly concise and front-loaded. Every word contributes to the core purpose without unnecessary elaboration.
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?
Given the complexity of a deletion operation, no annotations, and no output schema, the description is incomplete. It fails to address critical aspects like what 'completely' entails, confirmation steps, return values, or error handling, leaving significant gaps for the agent.
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?
The input schema has 100% description coverage, fully documenting the 'appointment_id' parameter. The description adds no additional meaning beyond what the schema provides, such as format details or examples, so it meets the baseline score 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and resource ('appointment'), making the purpose unambiguous. However, it doesn't differentiate from the sibling tool 'cancel_appointment', which might have similar functionality, so it doesn't reach the highest score.
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 provides no guidance on when to use this tool versus alternatives like 'cancel_appointment' or other deletion-related tools. It lacks context about prerequisites, consequences, or typical use cases, leaving the agent with minimal direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_patientB
Delete (archive) a patient
| Name | Required | Description | Default |
|---|---|---|---|
| patient_id | Yes | Patient ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions archiving (implying soft deletion rather than permanent removal), which adds some context beyond just 'delete.' However, it lacks critical details like whether this requires special permissions, if deletion is reversible, what happens to associated data (e.g., appointments, invoices), or error conditions. For a destructive operation with zero annotation coverage, this is insufficient.
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 extremely concise—a single phrase with zero wasted words. It's front-loaded with the core action and resource, making it easy to parse. Every word earns its place by clarifying the action (archive vs. delete) and target.
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?
Given the tool's complexity (a destructive mutation on a key resource like a patient), the lack of annotations, and no output schema, the description is incomplete. It doesn't cover behavioral nuances (e.g., archiving effects, dependencies), error handling, or return values. For a high-stakes operation in a medical context, more context is warranted.
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?
The input schema has 100% description coverage, with the single parameter 'patient_id' clearly documented. The description doesn't add any parameter-specific information beyond what the schema provides, but with only one well-documented parameter and high schema coverage, the baseline is strong. No additional parameter semantics are needed.
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 clearly states the action ('Delete (archive)') and resource ('a patient'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this tool from other patient-related tools like 'update_patient' or 'get_patient' beyond the obvious deletion action.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., patient must exist), consequences of deletion, or when to choose this over similar tools like 'cleanup_test_data' for test patients. The agent must infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
demo_invoice_generationA
Demo: Generate test patients and appointments, then show how to create invoices. NOTE: Cliniko API is READ-ONLY for invoices - they must be created via the web interface.
| Name | Required | Description | Default |
|---|---|---|---|
| target_date | No | Target date for appointments (YYYY-MM-DD format). Defaults to today | |
| num_patients | No | Number of test patients to generate (max 10 for rate limits) | |
| num_appointments | No | Number of appointments to generate (max 20 for rate limits) | |
| clear_existing | No | Clear existing test data before generating new data | |
| display_format | No | How to display the results | detailed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates that this is a demo tool (not for production use), mentions the read-only limitation for invoices via API, and implies data generation and cleanup behaviors. However, it doesn't explicitly mention rate limits or potential side effects of 'clear_existing' beyond what the parameter description covers.
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 extremely concise and front-loaded with essential information. The first sentence states the core purpose, and the second provides the critical limitation. Every word earns its place, with no redundant information or unnecessary elaboration.
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 demo tool with comprehensive parameter documentation (100% schema coverage) but no output schema, the description provides excellent context about the tool's purpose, limitations, and appropriate usage. The only minor gap is the lack of information about what the tool returns (though as a demo tool, this is less critical). The description compensates well for the absence of annotations.
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 schema already documents all 5 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, but it provides context about the overall workflow that helps understand how parameters fit together. This meets the baseline expectation when schema coverage is complete.
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 clearly states the tool's purpose: generating test patients and appointments, then demonstrating invoice creation. It specifies the exact sequence of actions (generate test data first, then show invoice creation) and distinguishes itself from siblings by focusing on a demo workflow rather than individual operations like create_patient or get_invoice.
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 provides explicit guidance on when to use this tool: for demonstration purposes to show how invoices are created. It also gives a critical 'when-not' warning: 'Cliniko API is READ-ONLY for invoices - they must be created via the web interface,' which clearly distinguishes it from actual invoice creation tools and explains the demo nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
display_invoices_for_dateA
Display all existing invoices for a specific date (READ-ONLY). Invoices must be created manually in Cliniko.
| Name | Required | Description | Default |
|---|---|---|---|
| target_date | Yes | Date to display invoices for (YYYY-MM-DD format) | |
| display_format | No | How to display the invoices | detailed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the read-only nature and manual creation requirement, which are useful behavioral traits. However, it doesn't cover aspects like error handling, rate limits, or response format details, leaving gaps that lower the score to 3.
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 sentences with zero waste: the first states the purpose and scope, and the second adds crucial context about manual creation. It's front-loaded and appropriately sized, earning a perfect score for efficiency.
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?
Given no annotations and no output schema, the description provides basic purpose and constraints but lacks details on return values, error cases, or integration with sibling tools. For a read-only tool with 2 parameters, it's minimally adequate but has clear gaps, resulting in a score of 3.
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 schema fully documents both parameters. The description adds no additional parameter semantics beyond what the schema provides, such as explaining the impact of 'display_format' choices. Thus, it meets the baseline of 3 without compensating further.
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 clearly states the verb 'display' and resource 'invoices for a specific date', with the parenthetical '(READ-ONLY)' reinforcing the action. However, it doesn't explicitly differentiate from sibling tools like 'list_invoices' or 'get_invoice', which limits the score to 4 rather than 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 implies usage context by noting invoices 'must be created manually in Cliniko', suggesting this tool is for viewing existing data. However, it lacks explicit guidance on when to use this versus alternatives like 'list_invoices' or 'get_invoice', and doesn't specify prerequisites or exclusions, resulting in a score of 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_comprehensive_test_dataC
Generate comprehensive synthetic test data across all Cliniko categories
| Name | Required | Description | Default |
|---|---|---|---|
| num_patients | No | ||
| num_contacts | No | ||
| num_relationships | No | ||
| num_appointments | No | ||
| num_past_appointments | No | ||
| num_group_appointments | No | ||
| num_treatment_notes | No | ||
| num_medical_alerts | No | ||
| num_patient_cases | No | ||
| num_invoices | No | ||
| num_products | No | ||
| num_payments | No | ||
| days_ahead | No | ||
| days_past | No | ||
| test_domain | No | test.cliniko.com |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but only states what the tool does, not how it behaves. It doesn't mention whether this creates persistent data, requires specific permissions, has side effects, or what the output format looks like. For a data generation tool with 15 parameters and no annotations, this is a significant gap.
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 a single, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized for a tool with this level of complexity and gets straight to the point with zero wasted text.
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 complex data generation tool with 15 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what 'comprehensive' means, how the synthetic data relates to real data, what happens to existing data, or what the tool returns. The agent would struggle to use this tool effectively without additional context.
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?
With 0% schema description coverage for all 15 parameters, the description doesn't compensate by explaining any parameters. However, the description does imply that parameters control generation across 'all Cliniko categories', which provides some high-level context about what the parameters likely represent. This earns the baseline score despite the complete lack of parameter-specific information.
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 clearly states the verb 'generate' and the resource 'comprehensive synthetic test data across all Cliniko categories', which is specific and actionable. However, it doesn't explicitly differentiate from the sibling tool 'generate_test_data', leaving some ambiguity about when to choose one over the other.
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 provides no guidance on when to use this tool versus alternatives like 'generate_test_data' or 'cleanup_comprehensive_test_data'. There's no mention of prerequisites, dependencies, or typical use cases, leaving the agent with insufficient context for proper tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_test_dataC
Generate synthetic test data for Cliniko (Australian healthcare data)
| Name | Required | Description | Default |
|---|---|---|---|
| num_patients | No | Number of patients to create (max 50) | |
| num_appointments | No | Number of appointments to create (max 100) | |
| days_ahead | No | Days ahead to schedule appointments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'Generate synthetic test data' implies a write operation (creation of data), the description doesn't specify whether this affects production data, requires special permissions, has side effects, or what the output looks like. For a tool that creates data with no annotation coverage, this lack of behavioral context is a significant gap.
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 a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized for a simple tool and front-loaded with the core functionality. Every part of the sentence earns its place by specifying what, for whom, and the domain context.
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?
Given the tool creates synthetic data (a write operation) with no annotations and no output schema, the description is incomplete. It doesn't address critical context like whether this is for testing environments only, what data gets generated, authentication requirements, or potential impacts. For a data generation tool with zero structured behavioral information, the description should provide more operational guidance.
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 all three parameters well-documented in the schema (num_patients, num_appointments, days_ahead). The description adds no additional parameter information beyond what's in the schema, so it doesn't enhance parameter understanding. According to the rules, with high schema coverage (>80%), the baseline score is 3 even without param info in the 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 clearly states the tool's purpose: 'Generate synthetic test data for Cliniko (Australian healthcare data)'. It specifies the verb ('Generate'), resource ('test data'), and domain context ('Cliniko', 'Australian healthcare data'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'generate_comprehensive_test_data', which is a missed opportunity for sibling distinction.
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 provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, when this tool is appropriate, or how it differs from similar tools like 'generate_comprehensive_test_data' or 'cleanup_test_data'. Without this context, an agent might struggle to choose between these tools effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_appointmentB
Get a specific appointment by ID
| Name | Required | Description | Default |
|---|---|---|---|
| appointment_id | Yes | Appointment ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic operation. It doesn't disclose behavioral traits such as error handling (e.g., what happens if ID is invalid), authentication needs, rate limits, or whether it's a read-only operation (implied but not stated).
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 a single, clear sentence with zero waste—front-loaded and efficiently communicates the core purpose without unnecessary details. Every word 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 simple read operation with one parameter and no output schema, the description is minimally adequate. However, given no annotations and missing output details, it lacks completeness for informed agent use, such as error cases or return format.
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 parameter 'appointment_id' is fully documented in the schema. The description adds no additional meaning beyond implying ID-based retrieval, meeting the baseline for high schema coverage without extra value.
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 clearly states the action ('Get') and resource ('appointment'), specifying retrieval by ID. It distinguishes from sibling 'list_appointments' by focusing on single-item retrieval rather than listing multiple items, though it doesn't explicitly name the sibling for comparison.
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 guidance is provided on when to use this tool versus alternatives like 'list_appointments' or 'get_patient'. The description implies usage when you have a specific appointment ID, but lacks explicit context, prerequisites, or exclusions for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_appointment_invoicesB
Get invoices for a specific appointment (READ-ONLY)
| Name | Required | Description | Default |
|---|---|---|---|
| appointment_id | Yes | Appointment ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'READ-ONLY', which clarifies that this is a safe, non-destructive operation. However, it does not cover other behavioral aspects like rate limits, authentication needs, error handling, or response format, leaving gaps in transparency.
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 a single, efficient sentence that is front-loaded with the core purpose ('Get invoices for a specific appointment') and includes a key behavioral note ('READ-ONLY'). There is no wasted text, making it highly concise and well-structured.
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?
Given the tool's low complexity (1 parameter, no nested objects) and the absence of an output schema, the description is minimally adequate. It covers the basic operation and safety but lacks details on return values, error cases, or integration with sibling tools, which would enhance completeness for agent use.
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?
The input schema has 100% description coverage, with the single parameter 'appointment_id' clearly documented. The description does not add any additional semantic information beyond what the schema provides, such as format examples or constraints, so it meets the baseline of 3 for high schema coverage.
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 clearly states the verb ('Get') and resource ('invoices for a specific appointment'), making the purpose explicit. However, it does not distinguish this tool from sibling tools like 'get_invoice', 'get_patient_invoices', or 'display_invoices_for_date', which limits its score to 4 instead of 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 provides no guidance on when to use this tool versus alternatives such as 'get_patient_invoices' or 'display_invoices_for_date'. It lacks any mention of prerequisites, exclusions, or specific contexts, offering only a basic functional statement without usage differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_available_timesC
Get available appointment times for a practitioner
| Name | Required | Description | Default |
|---|---|---|---|
| business_id | Yes | Business ID | |
| practitioner_id | Yes | Practitioner ID | |
| from | Yes | Start date for availability check (YYYY-MM-DD) | |
| to | Yes | End date for availability check (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states a read operation ('Get'), implying it's likely non-destructive, but doesn't disclose any behavioral traits such as authentication needs, rate limits, return format, or whether it's a real-time check versus cached data. This is a significant gap for a tool with no annotation 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?
The description is a single, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It's appropriately sized and front-loaded, making it easy for an agent to parse quickly.
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?
Given the complexity of appointment scheduling and no output schema, the description is incomplete. It lacks details on return values (e.g., time slots, duration), error handling, or dependencies on other tools. With no annotations and a read operation that likely involves business logic, more context is needed for effective use.
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 schema fully documents all 4 parameters. The description adds no additional meaning beyond what's in the schema, such as explaining relationships between parameters or usage nuances. Baseline 3 is appropriate 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'available appointment times for a practitioner', making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'list_appointments' or 'get_appointment', which might also involve appointment scheduling, so it misses full sibling distinction.
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 provides no guidance on when to use this tool versus alternatives. With siblings like 'list_appointments' and 'get_appointment', there's no indication of context, prerequisites, or exclusions, leaving the agent to guess based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoiceB
Get details of a specific invoice (READ-ONLY)
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'READ-ONLY', which is helpful for safety, but doesn't mention other traits like error handling, response format, or whether it requires authentication. It adds basic value but misses key operational details.
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 a single, efficient sentence that front-loads the core purpose ('Get details of a specific invoice') and includes a key behavioral note ('READ-ONLY'). There is no wasted verbiage, making it easy for an agent to parse quickly.
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?
Given the tool's simplicity (one parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic operation and safety but lacks details on return values, error cases, or integration with sibling tools. For a read-only retrieval tool, this is passable but leaves gaps in full contextual understanding.
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?
The input schema has 100% description coverage, with the 'invoice_id' parameter clearly documented. The description doesn't add any semantic details beyond what the schema provides (e.g., format examples or ID sourcing). This meets the baseline for high schema coverage but doesn't enhance parameter understanding.
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 clearly states the verb ('Get') and resource ('details of a specific invoice'), making the purpose understandable. It distinguishes from siblings like 'list_invoices' by specifying retrieval of a single invoice. However, it doesn't explicitly contrast with 'get_appointment_invoices' or 'get_patient_invoices', which might retrieve related invoice subsets.
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 provides no guidance on when to use this tool versus alternatives like 'list_invoices' or 'get_patient_invoices'. It lacks context about prerequisites (e.g., needing an invoice ID) or exclusions, leaving the agent to infer usage from the name and parameters alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_patientC
Get a specific patient by ID
| Name | Required | Description | Default |
|---|---|---|---|
| patient_id | Yes | Patient ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states a read operation ('Get'), but doesn't disclose behavioral traits such as error handling for invalid IDs, authentication needs, or rate limits. The description is minimal and lacks critical context for safe invocation.
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 a single, efficient sentence with zero waste. It is appropriately sized and front-loaded, clearly stating the tool's purpose without unnecessary elaboration.
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?
Given no annotations and no output schema, the description is incomplete. It lacks details on return values, error conditions, or operational constraints, making it inadequate for a tool that retrieves sensitive data like patient records.
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 schema fully documents the 'patient_id' parameter. The description adds no additional meaning beyond implying ID-based retrieval, meeting the baseline for high schema coverage without extra value.
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 clearly states the verb ('Get') and resource ('a specific patient'), specifying retrieval by ID. It distinguishes from siblings like 'list_patients' by focusing on a single record, though it doesn't explicitly name alternatives.
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 guidance is provided on when to use this tool versus alternatives like 'list_patients' or 'get_patient_invoices'. The description implies usage for retrieving a single patient by ID, but lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_patient_invoicesB
Get invoices for a specific patient (READ-ONLY)
| Name | Required | Description | Default |
|---|---|---|---|
| patient_id | Yes | Patient ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds 'READ-ONLY' to indicate safety, which is helpful, but fails to cover other aspects like permissions needed, rate limits, or what the return format looks like (e.g., list of invoices, error handling). This leaves significant gaps for a tool with potential complexity.
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 a single, efficient sentence with zero waste—it states the action, target, and a key behavioral trait ('READ-ONLY') without redundancy. It is appropriately sized and front-loaded.
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?
Given the tool's moderate complexity (retrieving invoices for a patient) and lack of annotations or output schema, the description is minimally adequate. It covers the basic purpose and safety but misses details like return values or error cases, making it incomplete for full agent understanding.
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?
The schema description coverage is 100%, so the input schema already documents the 'patient_id' parameter fully. The description does not add any meaning beyond what the schema provides (e.g., no details on ID format or constraints), warranting the baseline score of 3.
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 clearly states the verb ('Get') and resource ('invoices for a specific patient'), making the purpose unambiguous. However, it does not differentiate from sibling tools like 'get_invoice' or 'display_invoices_for_date', which limits it to a 4 instead 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 provides no guidance on when to use this tool versus alternatives like 'get_invoice' or 'list_invoices'. It lacks explicit when/when-not instructions or prerequisites, leaving usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
how_to_create_invoicesB
Get instructions on how to create invoices in Cliniko (manual process)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool provides 'instructions' (implying read-only, informational output), but doesn't clarify format (e.g., text, steps, links), potential side effects, or authentication needs. For a tool with zero annotation coverage, this leaves significant behavioral gaps, though it's not misleading.
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 a single, efficient sentence: 'Get instructions on how to create invoices in Cliniko (manual process)'. It's front-loaded with the core purpose, includes clarifying scope in parentheses, and has zero wasted words. Every element 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?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate. It explains what the tool does but lacks details on output format or behavioral context. For a purely informational tool, this is passable but leaves room for improvement in guiding the agent on what to expect.
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?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on the tool's purpose. A baseline of 4 is applied since the schema fully handles parameters, and the description doesn't add unnecessary param details.
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 clearly states the tool's purpose: 'Get instructions on how to create invoices in Cliniko (manual process)'. It specifies the action ('Get instructions'), resource ('invoices in Cliniko'), and scope ('manual process'), which distinguishes it from automated invoice creation tools. However, it doesn't explicitly differentiate from sibling tools like 'demo_invoice_generation' or 'display_invoices_for_date', preventing a perfect score.
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 provides minimal usage guidance. It implies this tool is for learning about manual invoice creation, but doesn't specify when to use it versus alternatives like 'demo_invoice_generation' or 'create_invoice' (if it existed). No explicit when-not-to-use scenarios or prerequisites are mentioned, leaving the agent with little contextual direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appointmentsC
List or search for appointments
| Name | Required | Description | Default |
|---|---|---|---|
| patient_id | No | Filter by patient ID | |
| practitioner_id | No | Filter by practitioner ID | |
| business_id | No | Filter by business ID | |
| starts_at | No | Filter appointments starting from (ISO 8601) | |
| ends_at | No | Filter appointments ending before (ISO 8601) | |
| status | No | Filter by status (Active, Cancelled, Did not arrive) | |
| page | No | Page number | |
| per_page | No | Results per page (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. 'List or search for appointments' implies a read-only operation but doesn't specify pagination behavior (implied by 'page'/'per_page' parameters), rate limits, authentication requirements, or what happens with no filters (e.g., returns all appointments). For a tool with 8 parameters and no annotation coverage, this is inadequate.
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 a single, efficient phrase ('List or search for appointments') that front-loads the core purpose with zero wasted words. Every element earns its place by covering both listing and filtering aspects concisely.
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?
Given 8 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain the tool's scope (e.g., whether it returns past/future appointments), pagination defaults, error conditions, or relationship to sibling tools. For a complex filtering tool in a crowded namespace, more contextual guidance is needed.
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 8 parameters are documented in the schema. The description adds no parameter-specific information beyond implying filtering capability ('search for'). This meets the baseline of 3 when the schema does the heavy lifting, but the description doesn't enhance understanding of parameter interactions or default behaviors.
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 'List or search for appointments' clearly states the verb ('list'/'search') and resource ('appointments'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'get_appointment' (singular retrieval) or 'list_appointment_types' (different resource), which prevents a perfect score.
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 provides no guidance on when to use this tool versus alternatives. With siblings like 'get_appointment' (for single appointments), 'list_patients' (different resource), and 'get_available_times' (related but distinct), the agent receives no help in choosing between them. The description merely restates the tool's function without contextual boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appointment_typesC
List all appointment types
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'List all appointment types' implies a read-only operation, but it doesn't specify if this requires authentication, how results are ordered, whether it's paginated (though schema hints at pagination), or what the output format is. For a tool with no annotation coverage, this is a significant gap in transparency.
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 a single, efficient sentence with zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy for an agent to parse quickly.
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?
Given no annotations and no output schema, the description is incomplete for a tool with parameters. It doesn't explain the return values (e.g., what fields appointment types include), error conditions, or authentication needs, leaving the agent with insufficient context to use the tool effectively beyond basic 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 description coverage is 100%, with clear descriptions for 'page' and 'per_page' parameters. The description doesn't add any meaning beyond what the schema provides (e.g., it doesn't explain default values or constraints), so it meets the baseline of 3 where the schema does the heavy lifting.
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 'List all appointment types' clearly states the verb ('List') and resource ('appointment types'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'list_appointments' or 'list_patients' beyond the resource name, which keeps it from a perfect score.
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 provides no guidance on when to use this tool versus alternatives. With siblings like 'get_appointment' or 'list_appointments', there's no indication of whether this is for administrative setup, patient scheduling, or other contexts, leaving the agent to guess based on naming alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_businessesB
List all businesses
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'List all businesses' implies a read-only operation but doesn't specify permissions, pagination, rate limits, or what 'all' entails (e.g., scope, limits). This is inadequate for a tool with zero annotation 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?
The description is a single, efficient sentence with zero waste. It's front-loaded and appropriately sized for a simple list operation, earning its place by stating the core action clearly.
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?
Given no annotations, no output schema, and a simple purpose, the description is incomplete. It lacks behavioral details (e.g., what 'list' returns, any constraints) that would help an agent use it correctly, making it insufficient for even a basic 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?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add param info, but that's fine here—baseline 4 is appropriate for zero-param tools as there's nothing to compensate for.
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 'List all businesses' clearly states the verb ('List') and resource ('businesses'), making the purpose immediately understandable. It doesn't differentiate from sibling tools (like list_appointments, list_patients, etc.), but it's not vague or tautological.
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 provides no guidance on when to use this tool versus alternatives. There's no mention of context, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invoice_itemsB
List items in an invoice (READ-ONLY)
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds value by explicitly stating 'READ-ONLY', which informs the agent that this is a safe, non-destructive operation. However, it lacks details on permissions, rate limits, or return format, leaving gaps in 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?
The description is a single, efficient sentence that front-loads the core purpose ('List items in an invoice') and includes a key behavioral note ('READ-ONLY') without any wasted words, making it highly concise and well-structured.
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?
Given the tool's low complexity (1 parameter, no output schema) and the description's inclusion of 'READ-ONLY', it provides adequate context for a basic read operation. However, without annotations or output details, it lacks completeness for more advanced use cases, such as error handling or pagination.
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?
The input schema has 100% description coverage, with the 'invoice_id' parameter clearly documented. The description does not add any meaning beyond what the schema provides, such as format examples or constraints, so it meets the baseline score of 3.
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 clearly states the verb 'List' and the resource 'items in an invoice', making the purpose specific and understandable. However, it does not differentiate from sibling tools like 'list_invoices' or 'get_invoice', which reduces the score from a perfect 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 provides no guidance on when to use this tool versus alternatives such as 'list_invoices' or 'get_invoice'. It lacks context on prerequisites or exclusions, leaving the agent without clear usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invoicesB
List invoices with filtering options (READ-ONLY - invoices must be created in Cliniko web interface)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page | |
| patient_id | No | Filter by patient ID | |
| practitioner_id | No | Filter by practitioner ID | |
| issued_at_from | No | Filter from date (YYYY-MM-DD) | |
| issued_at_to | No | Filter to date (YYYY-MM-DD) | |
| status | No | Filter by status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it's read-only (explicitly stated) and that invoices must be pre-created in the web interface (a constraint). However, it doesn't cover other important aspects like pagination behavior (implied by page/per_page parameters but not explained), rate limits, or authentication needs, leaving gaps for a mutation-free 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?
The description is a single, efficient sentence that front-loads the core purpose ('List invoices with filtering options') and adds a critical constraint. There's no wasted text, but it could be slightly more structured (e.g., separating purpose from constraints) for optimal clarity.
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?
Given the tool's complexity (7 parameters, no output schema, no annotations), the description is moderately complete. It covers the read-only nature and creation constraint but lacks details on output format, pagination behavior, or error handling. For a list tool with filtering, this leaves some gaps, though the high schema coverage mitigates this somewhat.
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 schema fully documents all 7 parameters (e.g., page, patient_id, status with enum). The description adds no additional parameter semantics beyond mentioning 'filtering options,' which is already evident from the schema. This meets the baseline score of 3 when schema coverage is high.
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 clearly states the action ('List invoices') and resource ('invoices'), specifying it's a read-only operation with filtering capabilities. However, it doesn't explicitly differentiate from sibling tools like 'get_invoice' (singular) or 'display_invoices_for_date' (date-specific), which would be needed for a perfect score.
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 usage context by mentioning 'invoices must be created in Cliniko web interface,' suggesting this tool is for viewing existing invoices, not creating them. However, it lacks explicit guidance on when to use this tool versus alternatives like 'get_invoice' (for single invoices) or 'display_invoices_for_date' (for date-specific displays), leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_patientsC
List or search for patients
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search query (searches name, email, phone) | |
| page | No | Page number | |
| per_page | No | Results per page (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'list or search' but doesn't disclose behavioral traits like pagination behavior (implied by parameters but not stated), rate limits, authentication requirements, whether it returns active/inactive patients, or what happens when no parameters are provided. The description is minimal and leaves key behaviors unspecified.
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?
Extremely concise at just 4 words - 'List or search for patients'. It's front-loaded with the core functionality. However, this conciseness comes at the cost of completeness, making it somewhat under-specified rather than optimally efficient.
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?
Given no annotations, no output schema, and a list/search tool with pagination parameters, the description is incomplete. It doesn't explain what the tool returns (patient objects? just IDs?), how pagination works, search capabilities beyond the 'q' parameter, or how it differs from related tools. For a tool with 3 parameters in a medical context, this is inadequate.
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 schema already documents all three parameters with good descriptions. The description adds no additional parameter semantics beyond what's in the schema - it mentions 'search' which aligns with the 'q' parameter but provides no extra context about search syntax, ranking, or default behaviors.
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 'List or search for patients' clearly states the verb ('list/search') and resource ('patients'), but it's vague about scope and doesn't distinguish from siblings like 'get_patient' or 'list_appointments'. It doesn't specify whether this returns all patients or has implicit filtering.
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 guidance on when to use this tool versus alternatives like 'get_patient' (for single patient) or 'list_appointments' (for appointments). The description implies it can both list and search, but doesn't clarify when to use search versus list functionality or how it relates to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_practitionersC
List all practitioners
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('List all practitioners') but fails to describe key behaviors such as pagination handling, response format, error conditions, or any limitations (e.g., rate limits or authentication needs). This leaves significant gaps in understanding how the tool operates beyond its basic purpose.
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 extremely concise with just three words, making it front-loaded and easy to parse. However, this brevity borders on under-specification, as it omits necessary context and details that would enhance usability, slightly reducing its effectiveness despite the efficient structure.
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?
Given the lack of annotations and output schema, the description is incomplete for effective tool use. It does not explain what the tool returns, how results are structured, or any behavioral traits like pagination or error handling. For a list operation with two parameters and no structured output, more context is needed to ensure the agent can invoke it correctly and interpret results.
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?
The input schema has 100% description coverage, with parameters 'page' and 'per_page' clearly documented. The description does not add any semantic details beyond what the schema provides, such as default values or usage examples. Given the high schema coverage, a baseline score of 3 is appropriate, as the schema adequately handles parameter documentation without additional input from the 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 'List all practitioners' clearly states the verb ('List') and resource ('practitioners'), providing a basic understanding of the tool's function. However, it lacks specificity about what constitutes a 'practitioner' and does not differentiate this tool from similar sibling tools like 'list_patients' or 'list_businesses', leaving ambiguity about scope and distinctions.
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 provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, context for usage, or comparisons to sibling tools such as 'list_patients' or 'list_businesses', leaving the agent to infer usage based on the name alone without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_appointmentC
Update an existing appointment
| Name | Required | Description | Default |
|---|---|---|---|
| appointment_id | Yes | Appointment ID | |
| starts_at | No | New start time (ISO 8601) | |
| notes | No | Updated notes | |
| patient_id | No | New patient ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is an update operation, implying mutation, but doesn't mention permissions required, whether changes are reversible, error handling, or what happens to unspecified fields. This leaves significant gaps for a mutation 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?
The description is extremely concise with just four words, front-loading the core purpose without any wasted words. It's efficiently structured for quick comprehension, though this conciseness comes at the cost of completeness.
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 mutation tool with 4 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what happens when updating (e.g., partial updates allowed?), error scenarios, or return values. The high schema coverage helps but doesn't compensate for missing behavioral context.
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 schema fully documents all 4 parameters. The description doesn't add any parameter-specific information beyond implying that parameters update fields, which is already clear from the tool name. This meets the baseline for high schema coverage.
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 'Update an existing appointment' clearly states the verb (update) and resource (appointment), but it's quite generic and doesn't differentiate from sibling tools like 'update_patient' or specify what aspects can be updated. It's a basic but accurate statement of purpose without distinguishing features.
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 provides no guidance on when to use this tool versus alternatives like 'create_appointment' or 'cancel_appointment', nor does it mention prerequisites such as needing an existing appointment ID. It's a bare statement with no contextual usage information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_patientC
Update an existing patient
| Name | Required | Description | Default |
|---|---|---|---|
| patient_id | Yes | Patient ID | |
| first_name | No | Patient first name | |
| last_name | No | Patient last name | |
| title | No | Title (Mr, Ms, Dr, etc) | |
| preferred_name | No | Preferred name | |
| date_of_birth | No | Date of birth (YYYY-MM-DD) | |
| sex | No | Biological sex | |
| No | Email address | ||
| phone_number | No | Primary phone number | |
| address_line_1 | No | Address line 1 | |
| address_line_2 | No | Address line 2 | |
| suburb | No | Suburb/City | |
| postcode | No | Postcode | |
| state | No | State/Province | |
| country | No | Country | |
| medicare_number | No | Medicare number | |
| medicare_reference_number | No | Medicare reference number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action ('update') without disclosing behavioral traits like permission requirements, whether updates are partial or full, side effects on related data, or error handling. This is inadequate for a mutation tool with complex parameters.
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 a single, efficient sentence with no wasted words, making it easy to parse. It is front-loaded with the core action, though it could benefit from more detail given the tool's complexity.
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 mutation tool with 17 parameters, no annotations, and no output schema, the description is insufficient. It lacks details on behavior, return values, error cases, and how it differs from siblings, leaving significant gaps for an AI agent to operate effectively.
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 schema fully documents all 17 parameters. The description adds no additional meaning beyond implying that parameters correspond to patient attributes, which the schema already covers. This meets the baseline for high schema coverage.
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 clearly states the action ('update') and resource ('existing patient'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'create_patient' or 'get_patient' beyond the verb choice, missing explicit distinction about modifying versus creating or retrieving.
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 guidance is provided on when to use this tool versus alternatives such as 'create_patient' for new patients or 'get_patient' for retrieval. The description lacks context about prerequisites, error conditions, or typical use cases, leaving the agent without usage direction.
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. Dates show when Glama detected each change.
27 tool updates
v1.0.0- First observed
cancel_appointment - First observed
cleanup_comprehensive_test_data - First observed
cleanup_test_data - First observed
create_appointment - First observed
create_patient - First observed
delete_appointment - First observed
delete_patient - First observed
demo_invoice_generation - First observed
display_invoices_for_date - First observed
generate_comprehensive_test_data - First observed
generate_test_data - First observed
get_appointment - First observed
get_appointment_invoices - First observed
get_available_times - First observed
get_invoice - First observed
get_patient - First observed
get_patient_invoices - First observed
how_to_create_invoices - First observed
list_appointment_types - First observed
list_appointments - First observed
list_businesses - First observed
list_invoice_items - First observed
list_invoices - First observed
list_patients - First observed
list_practitioners - First observed
update_appointment - First observed
update_patient
TDQS
Most tools have distinct purposes targeting specific resources (appointments, patients, invoices, test data) and actions, but there is some overlap between cleanup_test_data and cleanup_comprehensive_test_data, as well as generate_test_data and generate_comprehensive_test_data, which could cause confusion about which to use for test data management. The descriptions help clarify, but the boundaries are not perfectly clear.
Tool names follow a highly consistent verb_noun pattern throughout, such as create_appointment, get_patient, list_invoices, and update_appointment. All tools use snake_case with clear, descriptive verbs, making the naming predictable and easy to understand across the entire set.
With 27 tools, the count is on the high side for a typical MCP server, feeling somewhat heavy for the Cliniko domain. While it covers many aspects, it includes multiple test data and invoice-related tools that might be redundant or over-scoped, pushing it into the borderline range where efficiency could be impacted.
The tool set provides strong coverage for core Cliniko operations like CRUD on appointments and patients, listing resources, and handling invoices (though read-only). Minor gaps exist, such as no delete for invoice items or practitioners, and the invoice creation limitation is noted, but agents can work around these with the provided instructions and other tools.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server for Cliniko — patients, appointments, availability, and invoices for AI agents.
Read appointments, types, calendars and availability; create, cancel or reschedule bookings.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
- PlixanaOAuthcom.plixana
Operate the Plixana CRM from any AI: contacts, deals, quotes, WhatsApp and metrics.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables integration with the Cliniko practice management system through MCP tools and resources. Supports patient management, appointment scheduling, and practice data access through natural language interactions.-
- FlicenseNot gradedqualityCmaintenanceExposes tools from the Ecuro Light API for managing clinical appointments, patient records, and clinic availability. It enables users to perform healthcare management tasks such as scheduling, patient search, and report generation through MCP-compatible clients.-
- FlicenseBqualityDmaintenanceProvides integration with the Cliniko API for healthcare practice management, enabling patient, appointment, invoice, and payment operations via natural language.27-

Medplum MCP Serverofficial
FlicenseNot gradedqualityFmaintenanceEnables interaction with Medplum's FHIR data through the Model Context Protocol, allowing LLMs to access and manage healthcare data.5-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/BoabAI/mcp-cliniko'
If you have feedback or need assistance with the MCP directory API, please join our Discord server