get_available_times
Retrieve open appointment slots for a practitioner within a specified date range using business and practitioner IDs.
Instructions
Get available appointment times for a practitioner
Input Schema
| 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) |
Implementation Reference
- src/tools/appointments.ts:199-227 (handler)Main handler that registers the 'get_available_times' MCP tool. It accepts business_id, practitioner_id, from, and to parameters, calls the Cliniko client's getAvailableTimes method, and returns the available times as JSON.
server.tool('get_available_times', { description: 'Get available appointment times for a practitioner', inputSchema: { type: 'object', properties: { business_id: { type: 'number', description: 'Business ID' }, practitioner_id: { type: 'number', description: 'Practitioner ID' }, from: { type: 'string', description: 'Start date for availability check (YYYY-MM-DD)' }, to: { type: 'string', description: 'End date for availability check (YYYY-MM-DD)' } }, required: ['business_id', 'practitioner_id', 'from', 'to'] }, }, async (params: z.infer<typeof AvailableTimesSchema>) => { try { const availableTimes = await client.getAvailableTimes(params); return { content: [{ type: 'text', text: JSON.stringify({ available_times: availableTimes, total: availableTimes.length, ...params }, null, 2) }] }; } catch (error) { throw new Error(`Failed to get available times: ${error instanceof Error ? error.message : 'Unknown error'}`); } }); - src/tools/appointments.ts:24-29 (schema)Zod schema for validating input parameters (business_id, practitioner_id, from, to).
const AvailableTimesSchema = z.object({ business_id: z.number().describe('Business ID'), practitioner_id: z.number().describe('Practitioner ID'), from: z.string().describe('Start date for availability check (YYYY-MM-DD)'), to: z.string().describe('End date for availability check (YYYY-MM-DD)'), }); - src/cliniko-client.ts:184-199 (helper)Helper method on ClinikoClient that makes the HTTP request to the Cliniko API's /available_times endpoint with query parameters and returns the available times array.
async getAvailableTimes(params: { business_id: number; practitioner_id: number; from: string; to: string; }): Promise<AvailableTime[]> { const searchParams = new URLSearchParams({ business_id: params.business_id.toString(), practitioner_id: params.practitioner_id.toString(), from: params.from, to: params.to, }); const response = await this.request<{ available_times: AvailableTime[] }>(`/available_times?${searchParams.toString()}`); return response.available_times; } - src/tools/appointments.ts:31-31 (registration)The registration function that registers all appointment-related tools on the MCP server. The 'get_available_times' tool is registered within this function via server.tool().
export function registerAppointmentTools(server: any, client: ClinikoClient) {