Easy!Appointments integration
Easy!Appointments is a self-hosted, open-source appointment booking application. An agent can check free time slots, book, change and cancel appointments (Easy!Appointments then emails the customer and provider as configured and syncs connected calendars), manage customers, services and service categories, providers, secretaries and admins, provider unavailabilities, working plan exceptions, blocked periods and outgoing webhooks. Not exposed: the settings routes (they read and write every instance setting, the API token and LDAP password included), and the fields, with and aggregates query options (they would return withheld fields such as stored passwords, calendar tokens and appointment hashes). Connect with the address of your installation and the API token set up under Settings in Easy!Appointments, sent as a Bearer token.
Say what should happen.
The workflow builds itself.
What you can do with Easy!Appointments
Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.
Each badge shows the default agent permission of an endpoint (allowed: an agent calls it without asking; ask first: you are asked before an agent calls it, when the agent or chat asks permission for sensitive actions; never: no agent may call it), which every user can change endpoint by endpoint in their credential settings.
Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.
Admin, 5 operations
create_adminCreate adminPOSTAgents: ask firstCreates an admin (full access to the Easy!Appointments back office), with a login (settings.username and settings.password required). Grants that person access to the back office. Returns it with its id.delete_adminDelete adminDELETEAgents: ask firstDeletes an admin and revokes the login. Cannot be undone.get_adminGet adminGETAgents: ask firstReturns one admin (personal data): contact details, login username and preferences; the password is withheld.list_adminsList adminsGETAgents: ask firstLists admins (personal data: name, email, phones, address) with their login username and preferences; passwords are never returned. Paged with page and length.update_adminUpdate adminPUTAgents: ask firstChanges the fields you send on an admin (others are kept); a settings.password sent replaces the login password. Returns the admin.
Appointment, 5 operations
create_appointmentCreate appointmentPOSTAgents: ask firstBooks an appointment for a customer with a provider and service; Easy!Appointments emails the customer and provider as configured, syncs connected calendars and fires webhooks. Returns it with its id.delete_appointmentDelete appointmentDELETEAgents: ask firstCancels and deletes an appointment; Easy!Appointments emails the customer and provider as configured and removes it from synced calendars. Cannot be undone.get_appointmentGet appointmentGETAgents: ask firstReturns one appointment: start, end, booking time, location, meeting link, status, notes and the customer, provider and service ids.list_appointmentsList appointmentsGETAgents: ask firstLists appointments (personal data: customer, times, notes), filtered by date, date range, service, provider or customer. Paged with page and length (default 20).update_appointmentUpdate appointmentPUTAgents: ask firstChanges the fields you send on an appointment (others are kept); Easy!Appointments then emails the customer and provider as configured and syncs calendars. Returns the appointment.
Blocked period, 5 operations
create_blocked_periodCreate blocked periodPOSTAgents: ask firstBlocks a period for the whole instance so no appointment can be booked in it (name, start and end required). Returns it with its id.delete_blocked_periodDelete blocked periodDELETEAgents: ask firstDeletes a blocked period, reopening that time for booking.get_blocked_periodGet blocked periodGETAgents: ask firstReturns one blocked period: name, start, end and notes.list_blocked_periodsList blocked periodsGETAgents: ask firstLists blocked periods (times when nothing can be booked, for every provider): name, start, end, notes. Filters by date or date range; paged with page and length.update_blocked_periodUpdate blocked periodPUTAgents: ask firstChanges the fields you send on a blocked period (others are kept). Returns it.
Customer, 5 operations
create_customerCreate customerPOSTAgents: ask firstCreates a customer. Which fields are required (name, email, phone, address...) depends on the instance's settings; an email already used is refused. Returns it with its id.delete_customerDelete customerDELETEAgents: ask firstDeletes a customer. Cannot be undone.get_customerGet customerGETAgents: ask firstReturns one customer (personal data): name, email, phone, address, time zone, language, custom fields and notes.list_customersList customersGETAgents: ask firstLists customers (personal data: name, email, phone, address, notes). Paged with page and length; q searches by keyword.update_customerUpdate customerPUTAgents: ask firstChanges the fields you send on a customer (others are kept). Returns the customer.
Provider, 5 operations
create_providerCreate providerPOSTAgents: ask firstCreates a provider (a person customers book, with a back-office login), with a login (settings.username and settings.password required). Grants that person access to the back office. Returns it with its id.delete_providerDelete providerDELETEAgents: ask firstDeletes a provider and revokes the login. Cannot be undone.get_providerGet providerGETAgents: ask firstReturns one provider (personal data): contact details, login username and preferences; the password is withheld.list_providersList providersGETAgents: ask firstLists providers (personal data: name, email, phones, address) with their login username and preferences; passwords are never returned. Paged with page and length.update_providerUpdate providerPUTAgents: ask firstChanges the fields you send on a provider (others are kept); a settings.password sent replaces the login password. Returns the provider.
Secretary, 5 operations
create_secretaryCreate secretaryPOSTAgents: ask firstCreates a secretary (a back-office user who manages the calendars of the providers listed), with a login (settings.username and settings.password required). Grants that person access to the back office. Returns it with its id.delete_secretaryDelete secretaryDELETEAgents: ask firstDeletes a secretary and revokes the login. Cannot be undone.get_secretaryGet secretaryGETAgents: ask firstReturns one secretary (personal data): contact details, login username and preferences; the password is withheld.list_secretariesList secretariesGETAgents: ask firstLists secretaries (personal data: name, email, phones, address) with their login username and preferences; passwords are never returned. Paged with page and length.update_secretaryUpdate secretaryPUTAgents: ask firstChanges the fields you send on a secretary (others are kept); a settings.password sent replaces the login password. Returns the secretary.
Service, 5 operations
create_serviceCreate servicePOSTAgents: ask firstCreates a bookable service (name and attendantsNumber required). Returns it with its id.delete_serviceDelete serviceDELETEAgents: ask firstDeletes a service. Cannot be undone.get_serviceGet serviceGETAgents: ask firstReturns one service: name, duration, price, currency, location, description, slot interval, attendants per slot and category.list_servicesList servicesGETAgents: ask firstLists bookable services: name, duration, price, currency, location, slot interval, attendants per slot, privacy and category. Paged with page and length.update_serviceUpdate servicePUTAgents: ask firstChanges the fields you send on a service (others are kept). Returns the service.
Service category, 5 operations
create_service_categoryCreate service categoryPOSTAgents: ask firstCreates a service category. Returns it with its id.delete_service_categoryDelete service categoryDELETEAgents: ask firstDeletes a service category.get_service_categoryGet service categoryGETAgents: ask firstReturns one service category: id, name and description.list_service_categoriesList service categoriesGETAgents: ask firstLists service categories (id, name, description). Paged with page and length.update_service_categoryUpdate service categoryPUTAgents: ask firstRenames a service category or changes its description; fields left out are kept.
Unavailability, 5 operations
create_unavailabilityCreate unavailabilityPOSTAgents: ask firstBlocks a provider's time so it cannot be booked (start, end and providerId required). Returns it with its id.delete_unavailabilityDelete unavailabilityDELETEAgents: ask firstDeletes a provider unavailability, freeing that time for booking.get_unavailabilityGet unavailabilityGETAgents: ask firstReturns one provider unavailability: start, end, location, notes and provider id.list_unavailabilitiesList unavailabilitiesGETAgents: ask firstLists provider unavailabilities (time a provider cannot be booked): start, end, location, notes and provider. Paged with page and length.update_unavailabilityUpdate unavailabilityPUTAgents: ask firstChanges the fields you send on a provider unavailability (others are kept). Returns it.
Webhook, 5 operations
create_webhookCreate webhookPOSTAgents: ask firstCreates an outgoing webhook: Easy!Appointments then calls the URL on the chosen events (bookings, customers, services, users...). The secret token is not returned. Returns it with its id.delete_webhookDelete webhookDELETEAgents: ask firstDeletes an outgoing webhook; its URL stops receiving events.get_webhookGet webhookGETAgents: ask firstReturns one outgoing webhook: name, URL, events, secret header name, TLS verification and notes; the secret token is withheld.list_webhooksList webhooksGETAgents: ask firstLists outgoing webhooks: name, target URL, events, secret header name, TLS verification and notes; the secret tokens are withheld.update_webhookUpdate webhookPUTAgents: ask firstChanges the fields you send on a webhook (others are kept). The secret token is not returned.
Working plan exception, 5 operations
create_working_plan_exceptionCreate working plan exceptionPOSTAgents: ask firstSets different working hours (or a day off) for a provider over a date range, overriding the weekly plan. Returns it with its id.delete_working_plan_exceptionDelete working plan exceptionDELETEAgents: ask firstDeletes a working plan exception; the provider's weekly plan applies again on those days.get_working_plan_exceptionGet working plan exceptionGETAgents: ask firstReturns one working plan exception: start and end dates, daily hours, breaks and provider id.list_working_plan_exceptionsList working plan exceptionsGETAgents: ask firstLists working plan exceptions (days a provider works other hours or is off): dates, daily hours, breaks and provider. Filters by provider, date or range.update_working_plan_exceptionUpdate working plan exceptionPUTAgents: ask firstChanges the fields you send on a working plan exception (others are kept). Returns it.
Availability, 1 operation
list_availabilitiesList availabilitiesGETAgents: ask firstReturns the free start times (HH:MM) a provider has for a service on one day, for booking with create_appointment.
Use Easy!Appointments from Claude Code, Cursor or Codex
Connect Easy!Appointments in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Easy!Appointments operations become tools the client can call, next to every other integration you connected.
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"
[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"{
"mcpServers": {
"livecontext": {
"type": "http",
"url": "https://livecontext.ai/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}How to connect Easy!Appointments
- Create your workspace
Sign up free. Nothing to install.
- Connect Easy!Appointments once
Add your Easy!Appointments connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.
- Describe the job in chat
The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.
Easy!Appointments integration FAQ
What can you do with the Easy!Appointments integration?
LiveContext exposes 56 operations on Easy!Appointments, covering admin, appointment, blocked period and customer.
