Manage YouCanBook.me bookings, booking pages, appointment types, team members and locations.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
MUTATES YouCanBookMe data: cancels a booking. Convenience wrapper for PATCH /v1/bookings/{bookingId} with { cancelled: true } — safer and reversible (re-activate via youcanbookme_update_booking cancelled=false) versus deleting. Returns the updated booking.
The booking id to cancel (path only; required).
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
MUTATES YouCanBookMe data: cancels a booking. Convenience wrapper for PATCH /v1/bookings/{bookingId} with { cancelled: true } — safer and reversible (re-activate via youcanbookme_update_booking cancelled=false) versus deleting. Returns the updated booking.
| Argument | Type | Description |
|---|---|---|
| bookingId* | string | The booking id to cancel (path only; required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bookingId"
],
"properties": {
"bookingId": {
"type": "string",
"description": "The booking id to cancel (path only; required)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| name* | string | The appointment type name (required). |
| fields | object | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. |
| profileId* | string | The profile (booking page) id (path only; required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The appointment type name (required)."
},
"fields": {
"type": "object",
"description": "Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"profileId": {
"type": "string",
"description": "The profile (booking page) id (path only; required)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| title | string | Booking title. |
| units | integer | Number of slot units to book. |
| endsAt* | string | Booking end time, ISO 8601 (required). |
| fields | object | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. |
| locale | string | Locale for the booking (e.g. en-GB). |
| startsAt* | string | Booking start time, ISO 8601 (required). |
| timeZone | string | IANA time zone for the booking (e.g. Europe/London). |
| profileId* | string |
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.
| Argument | Type | Description |
|---|---|---|
| kind* | string | The location kind/type (required). |
| notes | string | Notes shown with the location. |
| value | string | The location value (e.g. an address or link). |
| fields | object | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. |
| strategy* | string | The location assignment strategy (required). |
| profileId* | string | The profile (booking page) id (path only; required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId",
"kind",
"strategy"
],
"properties": {
"kind": {
"type": "string",
"description": "The location kind/type (required)."
},
"notes": {
"type": "string",
"description": "Notes shown with the location."
},
"value": {
"type": "string",
"description": "The location value (e.g. an address or link)."
},
"fields": {
"type": "object",
"description": "Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"strategy": {
"type": "string",
"description": "The location assignment strategy (required)."
},
"profileId": {
"type": "string",
"description": "The profile (booking page) id (path only; required)."
}
}
}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 youcanbookme_list_available_accounts). Use the `fields` passthrough for email, description, pic, etc. The path profileId is never sent in the body.
| Argument | Type | Description |
|---|---|---|
| name* | string | The team member's display name (required). |
| fields | object | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. |
| profileId* | string | The profile (booking page) id (path only; required). |
| calendarId | string | The calendar id to link (see youcanbookme_list_available_accounts). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The team member's display name (required)."
},
"fields": {
"type": "object",
"description": "Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"profileId": {
"type": "string",
"description": "The profile (booking page) id (path only; required)."
},
"calendarId": {
"type": "string",
"description": "The calendar id to link (see youcanbookme_list_available_accounts)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| fields | string | 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* | string | The booking id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bookingId"
],
"properties": {
"fields": {
"type": "string",
"description": "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": {
"type": "string",
"description": "The booking id."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| fields | string | 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* | string | The profile (booking page) id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId"
],
"properties": {
"fields": {
"type": "string",
"description": "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": {
"type": "string",
"description": "The profile (booking page) id."
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| profileId* | string | The profile (booking page) id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId"
],
"properties": {
"profileId": {
"type": "string",
"description": "The profile (booking page) id."
}
}
}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.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| page | integer | Pagination page number, 0-based (offset-based paging). Use with maxResults. |
| after | string | Only bookings starting AFTER this time (ISO 8601, e.g. 2026-07-01T00:00:00Z). |
| before | string | Only bookings starting BEFORE this time (ISO 8601). |
| fields | string | 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 | object | Additional documented query-string filters to send verbatim (merged with the typed params above). |
| cancelled | boolean | Filter by cancelled status: true = only cancelled, false = only active. Omit for all. |
| profileId | string | Restrict to bookings on this profile (booking page) id. |
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).
| Argument | Type | Description |
|---|---|---|
| profileId* | string | The profile (booking page) id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId"
],
"properties": {
"profileId": {
"type": "string",
"description": "The profile (booking page) id."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| page | integer | Pagination page number, 0-based (offset-based paging). Use with maxResults. |
| fields | string | 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 | object | Additional documented query-string filters to send verbatim (merged with the typed params above). |
| maxResults | integer | Maximum records per page (page size). Defaults to the API's own default when omitted. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination page number, 0-based (offset-based paging). Use with maxResults."
},
"fields": {
"type": "string",
"description": "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": {
"type": "object",
"description": "Additional documented query-string filters to send verbatim (merged with the typed params above).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
},
"maxResults": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum records per page (page size). Defaults to the API's own default when omitted."
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| profileId* | string | The profile (booking page) id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId"
],
"properties": {
"profileId": {
"type": "string",
"description": "The profile (booking page) id."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| path* | string | Full API path after the origin, starting with "/", e.g. "/v1/bookings?maxResults=5". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"description": "Full API path after the origin, starting with \"/\", e.g. \"/v1/bookings?maxResults=5\"."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| fields | object | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. |
| profileId* | string | The profile (booking page) id (path only; required). |
| appointmentTypeId* | string | The appointment type id to update (path only; required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId",
"appointmentTypeId"
],
"properties": {
"fields": {
"type": "object",
"description": "Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"profileId": {
"type": "string",
"description": "The profile (booking page) id (path only; required)."
},
"appointmentTypeId": {
"type": "string",
"description": "The appointment type id to update (path only; required)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| title | string | New booking title. |
| units | integer | New number of slot units. |
| endsAt | string | New end time, ISO 8601 (reschedule). |
| fields | object | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. |
| locale | string | New locale. |
| noShow | boolean | Mark the attendee as a no-show (true) or not (false). |
| startsAt | string | New start time, ISO 8601 (reschedule). |
| timeZone | string | New IANA time zone. |
| bookingId |
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.
| Argument | Type | Description |
|---|---|---|
| fields | object | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. |
| profileId* | string | The profile (booking page) id to update (path only; required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId"
],
"properties": {
"fields": {
"type": "object",
"description": "Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"profileId": {
"type": "string",
"description": "The profile (booking page) id to update (path only; required)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| fields | object | Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above. |
| profileId* | string | The profile (booking page) id (path only; required). |
| teamMemberId* | string | The team member id to update (path only; required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId",
"teamMemberId"
],
"properties": {
"fields": {
"type": "object",
"description": "Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"profileId": {
"type": "string",
"description": "The profile (booking page) id (path only; required)."
},
"teamMemberId": {
"type": "string",
"description": "The team member id to update (path only; required)."
}
}
}| The profile (booking page) id to book on (required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"profileId",
"startsAt",
"endsAt"
],
"properties": {
"title": {
"type": "string",
"description": "Booking title."
},
"units": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of slot units to book."
},
"endsAt": {
"type": "string",
"description": "Booking end time, ISO 8601 (required)."
},
"fields": {
"type": "object",
"description": "Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"locale": {
"type": "string",
"description": "Locale for the booking (e.g. en-GB)."
},
"startsAt": {
"type": "string",
"description": "Booking start time, ISO 8601 (required)."
},
"timeZone": {
"type": "string",
"description": "IANA time zone for the booking (e.g. Europe/London)."
},
"profileId": {
"type": "string",
"description": "The profile (booking page) id to book on (required)."
}
}
}| maxResults |
| integer |
| Maximum records per page (page size). Defaults to the API's own default when omitted. |
| searchText | string | Free-text search across booking fields (e.g. attendee name/email). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination page number, 0-based (offset-based paging). Use with maxResults."
},
"after": {
"type": "string",
"description": "Only bookings starting AFTER this time (ISO 8601, e.g. 2026-07-01T00:00:00Z)."
},
"before": {
"type": "string",
"description": "Only bookings starting BEFORE this time (ISO 8601)."
},
"fields": {
"type": "string",
"description": "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": {
"type": "object",
"description": "Additional documented query-string filters to send verbatim (merged with the typed params above).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
},
"cancelled": {
"type": "boolean",
"description": "Filter by cancelled status: true = only cancelled, false = only active. Omit for all."
},
"profileId": {
"type": "string",
"description": "Restrict to bookings on this profile (booking page) id."
},
"maxResults": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum records per page (page size). Defaults to the API's own default when omitted."
},
"searchText": {
"type": "string",
"description": "Free-text search across booking fields (e.g. attendee name/email)."
}
}
}| string |
| The booking id to update (path only; required). |
| cancelled | boolean | Set true to cancel the booking, false to un-cancel. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bookingId"
],
"properties": {
"title": {
"type": "string",
"description": "New booking title."
},
"units": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "New number of slot units."
},
"endsAt": {
"type": "string",
"description": "New end time, ISO 8601 (reschedule)."
},
"fields": {
"type": "object",
"description": "Additional documented YCBM fields to send in the JSON write body — merged OVER the typed fields above.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"locale": {
"type": "string",
"description": "New locale."
},
"noShow": {
"type": "boolean",
"description": "Mark the attendee as a no-show (true) or not (false)."
},
"startsAt": {
"type": "string",
"description": "New start time, ISO 8601 (reschedule)."
},
"timeZone": {
"type": "string",
"description": "New IANA time zone."
},
"bookingId": {
"type": "string",
"description": "The booking id to update (path only; required)."
},
"cancelled": {
"type": "boolean",
"description": "Set true to cancel the booking, false to un-cancel."
}
}
}