YouCanBook.me MCP by usefulapi
Server Details
Manage YouCanBook.me bookings, booking pages, appointment types, team members and locations.
- Status
- Healthy
- Uptime
- 70.3% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 18 tools
Each resource/action pair is mostly distinct and clearly described, so an agent can usually tell list_ from create_ from update_ tools apart. However, cancel_booking overlaps with update_booking's cancelled flag, and get_profile with nested fields can duplicate the list_* subresource tools.
The vast majority of tools follow a consistent verb_noun snake_case pattern like list_bookings, create_team_member, and update_profile. The generic youcanbookme_request tool breaks that pattern, and list_available_accounts is slightly off-pattern relative to other list_ tools, but the overall convention is predictable.
At 18 tools, the server is slightly above the ideal 3-15 range but the count is justified by covering multiple resources: profiles, appointment types, locations, team members, and bookings. Each tool serves a real CRUD or convenience purpose, so the set does not feel bloated.
Core read and create/update paths are well covered, and cancel_booking handles the main booking lifecycle need, but the surface has notable gaps: there is no delete for appointment types, locations, team members, or profiles, no update_location, and no availability/free-slot lookup. The read-only generic GET hatch helps with reads, but there is no equivalent write escape hatch.
Available Tools
18 toolscancel_bookingCancel a bookingDestructiveInspect
MUTATES YouCanBookMe data: cancels a booking. Convenience wrapper for PATCH /v1/bookings/{bookingId} with { cancelled: true } — safer and reversible (re-activate via update_booking cancelled=false) versus deleting. Returns the updated booking.
| Name | Required | Description | Default |
|---|---|---|---|
| bookingId | Yes | The booking id to cancel (path only; required). |
create_appointment_typeCreate an appointment typeDestructiveInspect
MUTATES YouCanBookMe data: adds an appointment type to a profile. YCBM API: POST /v1/profiles/{profileId}/appointmenttypes/items (JSON). Required: name; use the fields passthrough for description, slotLength, price, etc. The path profileId is never sent in the body.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The appointment type name (required). | |
| fields | No | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. | |
| profileId | Yes | The profile (booking page) id (path only; required). |
create_bookingCreate a bookingDestructiveInspect
MUTATES YouCanBookMe data: creates a booking (appointment) on a profile. YCBM API: POST /v1/bookings (JSON). Required: profileId, startsAt, endsAt (ISO 8601 times). Optional: title, timeZone, locale, units. Complex fields like answers (form-field answers) and linkFields should be passed via the fields passthrough. Returns the created booking.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Booking title. | |
| units | No | Number of slot units to book. | |
| endsAt | Yes | Booking end time, ISO 8601 (required). | |
| fields | No | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. | |
| locale | No | Locale for the booking (e.g. en-GB). | |
| startsAt | Yes | Booking start time, ISO 8601 (required). | |
| timeZone | No | IANA time zone for the booking (e.g. Europe/London). | |
| profileId | Yes | The profile (booking page) id to book on (required). |
create_locationAdd a locationDestructiveInspect
MUTATES YouCanBookMe data: adds a location to a profile. YCBM API: POST /v1/profiles/{profileId}/locations (JSON). Required: kind (location type) and strategy (how it is assigned). Use the fields passthrough for value, notes, and other documented fields. The path profileId is never sent in the body.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | The location kind/type (required). | |
| notes | No | Notes shown with the location. | |
| value | No | The location value (e.g. an address or link). | |
| fields | No | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. | |
| strategy | Yes | The location assignment strategy (required). | |
| profileId | Yes | The profile (booking page) id (path only; required). |
create_team_memberAdd a team memberDestructiveInspect
MUTATES YouCanBookMe data: adds a team member to a profile. YCBM API: POST /v1/profiles/{profileId}/teammembers/items (JSON). Required: name; calendarId links the member to a calendar (find it via list_available_accounts). Use the fields passthrough for email, description, pic, etc. The path profileId is never sent in the body.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The team member's display name (required). | |
| fields | No | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. | |
| profileId | Yes | The profile (booking page) id (path only; required). | |
| calendarId | No | The calendar id to link (see list_available_accounts). |
get_bookingGet a bookingRead-onlyInspect
Fetch a single booking (appointment) by id. YCBM API: GET /v1/bookings/{bookingId}. Use fields to select which fields to return. Returns the booking object.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated field paths to return (e.g. "id,title,startsAt"). Supports dotted paths for nested objects. Omit to get the default field set. | |
| bookingId | Yes | The booking id. |
get_profileGet a profile (booking page)Read-onlyInspect
Fetch a single profile (booking page) by id. YCBM API: GET /v1/profiles/{profileId}. Use fields to select fields, including nested sub-resources (appointmentTypes, teamMembers, locations). Returns the profile object.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated field paths to return (e.g. "id,title,startsAt"). Supports dotted paths for nested objects. Omit to get the default field set. | |
| profileId | Yes | The profile (booking page) id. |
list_appointment_typesList a profile's appointment typesRead-onlyInspect
List the appointment types configured on a profile (booking page). YCBM API: GET /v1/profiles/{profileId} with an appointmentTypes field selection. Returns the profile's appointmentTypes block (each with id, name, description, slotLength, price).
| Name | Required | Description | Default |
|---|---|---|---|
| profileId | Yes | The profile (booking page) id. |
list_available_accountsList available accounts (calendars)Read-onlyInspect
List the accounts/calendars available to your account — used to find the calendarId for a team member. YCBM API: GET /v1/{accountId}/availableAccounts (accountId is taken from your configured credentials). Returns a JSON array.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_bookingsList bookingsRead-onlyInspect
List bookings (appointments) on the YouCanBookMe account. YCBM API: GET /v1/bookings. Filter by profileId (booking page), an after/before time window, cancelled status, and a free-text searchText; select fields with fields. Paginated via page (0-based) + maxResults. Returns a JSON array of bookings.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Pagination page number, 0-based (offset-based paging). Use with maxResults. | |
| after | No | Only bookings starting AFTER this time (ISO 8601, e.g. 2026-07-01T00:00:00Z). | |
| before | No | Only bookings starting BEFORE this time (ISO 8601). | |
| fields | No | Comma-separated field paths to return (e.g. "id,title,startsAt"). Supports dotted paths for nested objects. Omit to get the default field set. | |
| params | No | Additional documented query-string filters to send verbatim (merged with the typed params above). | |
| cancelled | No | Filter by cancelled status: true = only cancelled, false = only active. Omit for all. | |
| profileId | No | Restrict to bookings on this profile (booking page) id. | |
| maxResults | No | Maximum records per page (page size). Defaults to the API's own default when omitted. | |
| searchText | No | Free-text search across booking fields (e.g. attendee name/email). |
list_locationsList a profile's locationsRead-onlyInspect
List the locations configured on a profile (booking page). YCBM API: GET /v1/profiles/{profileId} with a locations field selection. Returns the profile's locations block (each with id, kind, value, notes, strategy).
| Name | Required | Description | Default |
|---|---|---|---|
| profileId | Yes | The profile (booking page) id. |
list_profilesList profiles (booking pages)Read-onlyInspect
List all profiles (booking pages) on the account. YCBM API: GET /v1/profiles. A profile is a bookable page with its own subdomain, appointment types, team members, and locations. Use fields to select fields (e.g. "id,title,subdomain"). Paginated via page (0-based) + maxResults. Returns a JSON array of profiles.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Pagination page number, 0-based (offset-based paging). Use with maxResults. | |
| fields | No | Comma-separated field paths to return (e.g. "id,title,startsAt"). Supports dotted paths for nested objects. Omit to get the default field set. | |
| params | No | Additional documented query-string filters to send verbatim (merged with the typed params above). | |
| maxResults | No | Maximum records per page (page size). Defaults to the API's own default when omitted. |
list_team_membersList a profile's team membersRead-onlyInspect
List the team members configured on a profile (booking page). YCBM API: GET /v1/profiles/{profileId} with a teamMembers field selection. Returns the profile's teamMembers block (each member has id, name, email, description, pic, calendarId).
| Name | Required | Description | Default |
|---|---|---|---|
| profileId | Yes | The profile (booking page) id. |
update_appointment_typeUpdate an appointment typeDestructiveInspect
MUTATES YouCanBookMe data: updates an appointment type on a profile. YCBM API: PATCH /v1/profiles/{profileId}/appointmenttypes/items/{appointmentTypeId} (JSON, partial update). Pass changed fields (name, description, slotLength, price, ...) via the fields passthrough. Path ids are never sent in the body.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. | |
| profileId | Yes | The profile (booking page) id (path only; required). | |
| appointmentTypeId | Yes | The appointment type id to update (path only; required). |
update_bookingUpdate a bookingDestructiveInspect
MUTATES YouCanBookMe data: updates an existing booking (reschedule, rename, mark cancelled/no-show). YCBM API: PATCH /v1/bookings/{bookingId} (JSON, partial update). Set any of title/startsAt/endsAt/cancelled/noShow/timeZone/locale/units; use the fields passthrough for answers/linkFields or other documented fields. The path id is never sent in the body.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New booking title. | |
| units | No | New number of slot units. | |
| endsAt | No | New end time, ISO 8601 (reschedule). | |
| fields | No | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. | |
| locale | No | New locale. | |
| noShow | No | Mark the attendee as a no-show (true) or not (false). | |
| startsAt | No | New start time, ISO 8601 (reschedule). | |
| timeZone | No | New IANA time zone. | |
| bookingId | Yes | The booking id to update (path only; required). | |
| cancelled | No | Set true to cancel the booking, false to un-cancel. |
update_profileUpdate a profile (booking page)DestructiveInspect
MUTATES YouCanBookMe data: updates a profile's (booking page) configuration. YCBM API: PATCH /v1/profiles/{profileId} (JSON, partial update). Pass the fields to change via the fields passthrough (e.g. { title, subdomain, ... }) — profile fields are numerous and use YCBM's own names. The path id is never sent in the body.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. | |
| profileId | Yes | The profile (booking page) id to update (path only; required). |
update_team_memberUpdate a team memberDestructiveInspect
MUTATES YouCanBookMe data: updates a team member on a profile. YCBM API: PATCH /v1/profiles/{profileId}/teammembers/items/{teamMemberId} (JSON, partial update). Pass changed fields (name, email, description, calendarId, ...) via the fields passthrough. Path ids are never sent in the body.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. | |
| profileId | Yes | The profile (booking page) id (path only; required). | |
| teamMemberId | Yes | The team member id to update (path only; required). |
youcanbookme_requestRaw read requestRead-onlyInspect
Power-user escape hatch: GET any YCBM API path not wrapped by a dedicated tool. READ-ONLY — only GET is allowed. Pass the FULL API path after the origin, starting with a slash, INCLUDING any query string, e.g. "/v1/bookings?maxResults=5" or "/v1/profiles". Returns the parsed JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Full API path after the origin, starting with "/", e.g. "/v1/bookings?maxResults=5". |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
18 tool updates
- Changed
cancel_booking1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
create_appointment_type1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
create_booking1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
create_location1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
create_team_member1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_booking1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_profile1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_appointment_types1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_available_accounts1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_bookings3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / properties / params / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / params / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +]
- Changed
list_locations1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_profiles3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / properties / params / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / params / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +]
- Changed
list_team_members1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update_appointment_type1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update_booking1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update_profile1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update_team_member1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
youcanbookme_request1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
18 tool updates
- First observed
cancel_booking - First observed
create_appointment_type - First observed
create_booking - First observed
create_location - First observed
create_team_member - First observed
get_booking - First observed
get_profile - First observed
list_appointment_types - First observed
list_available_accounts - First observed
list_bookings - First observed
list_locations - First observed
list_profiles - First observed
list_team_members - First observed
update_appointment_type - First observed
update_booking - First observed
update_profile - First observed
update_team_member - First observed
youcanbookme_request
Related MCP Connectors
Read appointments, types, calendars and availability; create, cancel or reschedule bookings.
Find available slots and manage bookings, users, and forms in the SuperSaaS scheduling service
Manage Novacal event types, availability, and bookings.
Check Bookeo availability and manage bookings, holds and customers; read payments.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to find open times on YouCanBookMe booking pages, book, reschedule and cancel bookings, and report on bookings, cancellations and no-shows in natural language.11MIT
- FlicenseBqualityNot gradedmaintenanceEnables interaction with Microsoft Bookings through the Microsoft Graph API to manage businesses, staff members, services, and appointments.4-
- AlicenseAqualityCmaintenanceEnables AI agents to look up businesses, find free appointment slots, book, list and cancel appointments at salons, barbershops, nail and brow studios and clinics. Works read-only without a customer login by returning a pre-filled booking link, and can also run against a built-in demo with sample businesses.5MIT
- FlicenseNot gradedqualityDmaintenanceEnables natural language interaction with SimplyBook.me API to manage bookings, services, and performers through MCP.2-
Glama MCP Gateway
Add one secure layer between your agents and this server.