Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Cal MCP connector

OAuth 2.1/DCR CalendarProductivityAI

Connect to Cal MCP. Manage bookings, event types, schedules, and availability from your AI workflows.

Cal MCP connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. quickstart.ts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENV_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'calmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Cal MCP:', link)
    process.stdout.write('Press Enter after authorizing...')
    await new Promise(r => process.stdin.once('data', r))
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'calmcp_get_bookings',
    toolInput: {},
    })
    console.log(result)

Connect this agent connector to let your agent:

  • Update schedule, org membership, me — Update an existing schedule
  • Booking reschedule, confirm, cancel — Reschedule a booking to a new time
  • Absent mark booking — Mark host or attendees as absent for a past booking
  • Get schedules, schedule, org routing forms — List all schedules for the authenticated user
  • Delete schedule, org membership, event type — Delete a schedule by its numeric ID
  • Create schedule, org membership, event type — Create a new schedule

Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.

calmcp_add_booking_attendee # Add a new attendee to an existing booking. Required: name, email, timeZone. ASK THE USER for all attendee details — never guess or fabricate names, emails, or time zones. 6 params

Add a new attendee to an existing booking. Required: name, email, timeZone. ASK THE USER for all attendee details — never guess or fabricate names, emails, or time zones.

Name Type Required Description
bookingUid string required Booking UID
email string required Attendee email address. Ask the user — never guess or fabricate.
name string required Attendee name. Ask the user — never guess.
timeZone string required IANA time zone. Ask the user — never guess.
language string optional ISO 639-1 language code (e.g. 'en')
phoneNumber string optional Phone in international format. Ask the user — never guess.
calmcp_calculate_routing_form_slots # Submit a routing form response and get available slots. The response object contains the user's answers (keys are routing form field slugs/IDs). Use get_org_routing_forms to find routingFormId. Start/end must be in UTC ISO 8601. 8 params

Submit a routing form response and get available slots. The response object contains the user's answers (keys are routing form field slugs/IDs). Use get_org_routing_forms to find routingFormId. Start/end must be in UTC ISO 8601.

Name Type Required Description
end string required Range end in UTC, ISO 8601 (e.g. '2024-08-14' or '2024-08-14T18:00:00Z')
response object required Routing form response object. Keys are routing form field IDs, values are the user's answers. Use get_org_routing_forms to discover the form's fields and their IDs. Ask the user for the answer values — never fabricate.
routingFormId string required Routing form ID. Use get_org_routing_forms to find this — never guess.
start string required Range start in UTC, ISO 8601 (e.g. '2024-08-13' or '2024-08-13T09:00:00Z')
bookingUidToReschedule string optional Booking UID being rescheduled — ensures original time appears in available slots
duration number optional Desired slot duration in minutes (for variable-duration events)
format string optional Slot format: 'range' returns start+end, 'time' returns start only
timeZone string optional IANA time zone for returned slots (default UTC)
calmcp_cancel_booking # Cancel a booking by UID. For recurring non-seated bookings, set cancelSubsequentBookings=true to cancel future recurrences. For seated bookings, pass seatUid to cancel a specific seat instead of the entire booking. Confirm with the user before cancelling. 4 params

Cancel a booking by UID. For recurring non-seated bookings, set cancelSubsequentBookings=true to cancel future recurrences. For seated bookings, pass seatUid to cancel a specific seat instead of the entire booking. Confirm with the user before cancelling.

Name Type Required Description
bookingUid string required Booking UID
cancellationReason string optional Reason for cancellation
cancelSubsequentBookings boolean optional For recurring non-seated bookings only: if true, also cancels all subsequent recurrences after this one.
seatUid string optional UID of the specific seat to cancel within a seated booking. Required when cancelling an individual seat instead of the entire booking.
calmcp_confirm_booking # Confirm a pending booking that requires manual confirmation. Only the host can confirm. 1 param

Confirm a pending booking that requires manual confirmation. Only the host can confirm.

Name Type Required Description
bookingUid string required Booking UID
calmcp_create_booking # Create a booking. WORKFLOW: (1) Use get_event_types to find the event type ID/slug. (2) Call get_availability to find open slots — NEVER pick a time without checking availability first. (3) If using bookingFieldsResponses, call get_event_type first to discover required custom fields. (4) For attendee details (name, email, timeZone), use get_me if booking for yourself, otherwise ASK THE USER — never guess or fabricate attendee info. Identify the event type by: eventTypeId, OR eventTypeSlug + username (individual), OR eventTypeSlug + teamSlug (team). The 'start' time MUST be in UTC ISO 8601. 'username' is the HOST whose calendar you are booking. 'attendee' is the GUEST (the caller). 14 params

Create a booking. WORKFLOW: (1) Use get_event_types to find the event type ID/slug. (2) Call get_availability to find open slots — NEVER pick a time without checking availability first. (3) If using bookingFieldsResponses, call get_event_type first to discover required custom fields. (4) For attendee details (name, email, timeZone), use get_me if booking for yourself, otherwise ASK THE USER — never guess or fabricate attendee info. Identify the event type by: eventTypeId, OR eventTypeSlug + username (individual), OR eventTypeSlug + teamSlug (team). The 'start' time MUST be in UTC ISO 8601. 'username' is the HOST whose calendar you are booking. 'attendee' is the GUEST (the caller).

Name Type Required Description
attendee object required Attendee details — the person making the booking (the guest/caller), NOT the host. To book another user's calendar, set their username in the 'username' field and put YOUR (the caller's) details here. NEVER guess or fabricate email addresses — ask the user if unknown.
start string required Start time in UTC, ISO 8601 (e.g. 2024-08-13T09:00:00Z). Must be UTC.
allowBookingOutOfBounds boolean optional If true and the authenticated user is a host, allow booking outside the configured scheduling window (e.g. before minimumBookingNotice or beyond the booking window). Ignored for non-hosts.
allowConflicts boolean optional If true and the authenticated user is a host, skip availability conflict checks. Ignored for non-hosts.
bookingFieldsResponses object optional Custom booking field responses as {slug: value} pairs
eventTypeId integer optional Event type ID. Required unless eventTypeSlug + username (or teamSlug) are provided.
eventTypeSlug string optional Event type slug (e.g. '15min'). Must be combined with username (for individual) or teamSlug (for team).
guests array optional Additional guest emails to include. Ask the user for guest emails — never guess or fabricate.
lengthInMinutes integer optional Desired booking length for variable-duration event types. Uses event type default if omitted.
location object optional Meeting location override as an object. Must match one of the event type's configured location types: {type:'integration',integration:'cal-video'|'google-meet'|'zoom'|...}, {type:'attendeePhone',phone:'+...'}, {type:'attendeeAddress',address:'...'}, {type:'attendeeDefined',location:'...'}, {type:'address'}, {type:'link'}, {type:'phone'}, or {type:'organizersDefaultApp'} (team events only).
metadata object optional Metadata key-value pairs (max 50 keys, keys ≤40 chars, string values ≤500 chars)
organizationSlug string optional Organization slug, needed when the user/team is within an organization.
teamSlug string optional Team slug. Required with eventTypeSlug for team event types.
username string optional Username of the host whose calendar you are booking on. Required with eventTypeSlug for individual event types.
calmcp_create_event_type # Create a new event type. Required: title, slug, lengthInMinutes. Supports locations, booking fields, buffers, recurrence, confirmation policy, seats, and more. 27 params

Create a new event type. Required: title, slug, lengthInMinutes. Supports locations, booking fields, buffers, recurrence, confirmation policy, seats, and more.

Name Type Required Description
lengthInMinutes integer required Duration in minutes
slug string required URL-friendly slug (e.g. '30min')
title string required Event type title
afterEventBuffer integer optional Minutes blocked on calendar after the meeting ends.
beforeEventBuffer integer optional Minutes blocked on calendar before the meeting starts.
bookingFields array optional Custom fields added to the booking form. Each object defines a field with properties like name, type, label, required, etc.
bookingLimitsCount object optional Limit how many times this event can be booked per period (e.g. {day: 2, week: 5}).
bookingWindow object optional Limit how far in the future this event can be booked.
confirmationPolicy object optional Manual confirmation policy. Controls whether bookings require host confirmation.
customName string optional Custom event name template with variables: {Event type title}, {Organiser}, {Scheduler}, {Location}.
description string optional Description shown on the booking page
destinationCalendar object optional Which external calendar new bookings are added to.
disableGuests boolean optional If true, bookers cannot add guest emails.
hidden boolean optional Whether the event type is hidden from the public profile.
hideCalendarNotes boolean optional Hide calendar notes from the booking.
lengthInMinutesOptions array optional Multiple duration options the attendee can choose from (e.g. [15, 30, 60]). If provided, the booker picks their preferred duration.
locations array optional Locations where the event takes place. If not provided, Cal Video is used. Each element is a location object (e.g. {type: 'inPerson', address: '...'}). Note: setting a conferencing app as location requires the app to already be installed.
lockTimeZoneToggleOnBookingPage boolean optional Lock the timezone on the booking page.
minimumBookingNotice integer optional Minimum minutes before the event that a booking can be made.
offsetStart integer optional Offset timeslots shown to bookers by a specified number of minutes.
onlyShowFirstAvailableSlot boolean optional Limit availability to one slot per day (the earliest available).
recurrence object optional Recurrence settings to create a recurring event type (e.g. {frequency: 'weekly', interval: 1, occurrences: 12}).
requiresBookerEmailVerification boolean optional Whether booker must verify their email before the booking is confirmed.
scheduleId integer optional Use a specific schedule instead of the user's default. Use get_schedules to find schedule IDs.
seats object optional Enable seated events. Object with seatsPerTimeSlot and other seat settings.
slotInterval integer optional Length of each slot in minutes. Defaults to the event duration.
successRedirectUrl string optional URL to redirect the booker to after a successful booking.
calmcp_create_org_membership # Add a user to an organization. Required: userId (must be a real user ID from the system) and role (MEMBER, ADMIN, or OWNER). Platform managed users should only have MEMBER role. 5 params

Add a user to an organization. Required: userId (must be a real user ID from the system) and role (MEMBER, ADMIN, or OWNER). Platform managed users should only have MEMBER role.

Name Type Required Description
orgId integer required Organization ID. Use get_me to obtain your organizationId — never guess.
role string required Role (managed users: MEMBER only)
userId number required User ID of the person to add. Must be a real user ID — ask the user for this, never guess.
accepted boolean optional Whether accepted
disableImpersonation boolean optional Disable impersonation
calmcp_create_schedule # Create a new schedule. Required: name, timeZone, isDefault. Each user should have exactly one default schedule. Supports availability slots and date-specific overrides. 5 params

Create a new schedule. Required: name, timeZone, isDefault. Each user should have exactly one default schedule. Supports availability slots and date-specific overrides.

Name Type Required Description
isDefault boolean required Whether this is the user's default schedule. Each user should have exactly one default schedule.
name string required Schedule name
timeZone string required IANA time zone used to calculate available times (e.g. America/New_York)
availability array optional Availability slots. If not provided, defaults to Mon-Fri 09:00-17:00.
overrides array optional Date-specific overrides. Use to change availability for a specific date or mark it as unavailable.
calmcp_delete_event_type # Permanently delete an event type by ID. This action is irreversible — confirm with the user before proceeding. 1 param

Permanently delete an event type by ID. This action is irreversible — confirm with the user before proceeding.

Name Type Required Description
eventTypeId integer required Event type ID to delete. Use get_event_types to find this.
calmcp_delete_org_membership # Remove a membership from an organization. This action is irreversible — confirm with the user before proceeding. 2 params

Remove a membership from an organization. This action is irreversible — confirm with the user before proceeding.

Name Type Required Description
membershipId integer required Membership ID. Use get_org_memberships to find this.
orgId integer required Organization ID. Use get_me to obtain your organizationId — never guess.
calmcp_delete_schedule # Delete a schedule by its numeric ID. This action is irreversible — confirm with the user before proceeding. 1 param

Delete a schedule by its numeric ID. This action is irreversible — confirm with the user before proceeding.

Name Type Required Description
scheduleId integer required Schedule ID
calmcp_get_availability # Get available time slots for a host. You MUST provide at least one identifier: (1) eventTypeId, (2) eventTypeSlug + username, (3) eventTypeSlug + teamSlug, or (4) usernames (comma-separated, min 2, for dynamic events). 'username' is the host whose availability you are checking. Start/end must be in UTC ISO 8601. 12 params

Get available time slots for a host. You MUST provide at least one identifier: (1) eventTypeId, (2) eventTypeSlug + username, (3) eventTypeSlug + teamSlug, or (4) usernames (comma-separated, min 2, for dynamic events). 'username' is the host whose availability you are checking. Start/end must be in UTC ISO 8601.

Name Type Required Description
end string required Range end in UTC, ISO 8601 (e.g. '2024-08-14' or '2024-08-14T18:00:00Z')
start string required Range start in UTC, ISO 8601 (e.g. '2024-08-13' or '2024-08-13T09:00:00Z')
bookingUidToReschedule string optional Booking UID being rescheduled — ensures original time appears in available slots
duration integer optional Desired slot duration in minutes (for variable-duration or dynamic events, defaults to 30)
eventTypeId integer optional Event type ID. Use this OR (eventTypeSlug + username) OR (eventTypeSlug + teamSlug).
eventTypeSlug string optional Event type slug. Must be combined with username (individual) or teamSlug (team).
format string optional Response format: 'range' (start+end) or 'time' (start only)
organizationSlug string optional Organization slug, needed when the user/team is within an organization.
teamSlug string optional Team slug. Required with eventTypeSlug for team event types.
timeZone string optional IANA time zone for returned slots (e.g. America/New_York). Defaults to UTC.
username string optional Username of the host whose availability you are checking. Required with eventTypeSlug for individual event types.
usernames string optional Comma-separated or array of usernames for dynamic events (min 2). organizationSlug is needed only if users belong to an org.
calmcp_get_booking # Get a specific booking by its UID (use get_bookings to find UIDs). Returns full details including attendees, location, and metadata. 1 param

Get a specific booking by its UID (use get_bookings to find UIDs). Returns full details including attendees, location, and metadata.

Name Type Required Description
bookingUid string required Booking UID
calmcp_get_booking_attendee # Get a specific attendee by their numeric ID within a booking. Use get_booking_attendees to find attendee IDs. 2 params

Get a specific attendee by their numeric ID within a booking. Use get_booking_attendees to find attendee IDs.

Name Type Required Description
attendeeId integer required Attendee ID. Use get_booking_attendees to find this.
bookingUid string required Booking UID
calmcp_get_booking_attendees # Get all attendees for a booking by its UID. 1 param

Get all attendees for a booking by its UID.

Name Type Required Description
bookingUid string required Booking UID
calmcp_get_bookings # List bookings with pagination (default 100, max 250 per page — use take/skip for more). Supports filtering by status (upcoming, recurring, past, cancelled, unconfirmed), attendee email/name, event type, team, date ranges (afterStart, beforeEnd), and sorting (sortStart, sortEnd, sortCreated). 20 params

List bookings with pagination (default 100, max 250 per page — use take/skip for more). Supports filtering by status (upcoming, recurring, past, cancelled, unconfirmed), attendee email/name, event type, team, date ranges (afterStart, beforeEnd), and sorting (sortStart, sortEnd, sortCreated).

Name Type Required Description
afterCreatedAt string optional Filter bookings created after this ISO 8601 date
afterStart string optional Filter bookings starting after this ISO 8601 date
afterUpdatedAt string optional Filter bookings updated after this ISO 8601 date
attendeeEmail string optional Filter by attendee email
attendeeName string optional Filter by attendee name
beforeCreatedAt string optional Filter bookings created before this ISO 8601 date
beforeEnd string optional Filter bookings ending before this ISO 8601 date
beforeUpdatedAt string optional Filter bookings updated before this ISO 8601 date
bookingUid string optional Filter by booking UID
eventTypeId integer optional Filter by event type ID
eventTypeIds string optional Comma-separated event type IDs (e.g. '100,200')
skip integer optional Results to skip (offset)
sortCreated string optional Sort by creation time
sortEnd string optional Sort by end time
sortStart string optional Sort by start time
sortUpdatedAt string optional Sort by updated time
status string optional Comma-separated statuses: upcoming, recurring, past, cancelled, unconfirmed
take integer optional Max results to return (default 100, max 250)
teamId integer optional Filter by team ID
teamsIds string optional Comma-separated team IDs (e.g. '50,60')
calmcp_get_busy_times # Get busy/blocked time blocks from a connected calendar (e.g. Google Calendar) between two dates. Returns a list of time ranges when the user is unavailable. Required: dateFrom, dateTo (YYYY-MM-DD), credentialId, and externalId. WORKFLOW: (1) Call get_connected_calendars first to get the real credentialId (number) and externalId (e.g. email) for the calendar — NEVER guess or fabricate these. (2) Provide dateFrom and dateTo as YYYY-MM-DD strings. (3) Optionally pass timeZone (IANA, e.g. 'America/New_York') to localise the results. 6 params

Get busy/blocked time blocks from a connected calendar (e.g. Google Calendar) between two dates. Returns a list of time ranges when the user is unavailable. Required: dateFrom, dateTo (YYYY-MM-DD), credentialId, and externalId. WORKFLOW: (1) Call get_connected_calendars first to get the real credentialId (number) and externalId (e.g. email) for the calendar — NEVER guess or fabricate these. (2) Provide dateFrom and dateTo as YYYY-MM-DD strings. (3) Optionally pass timeZone (IANA, e.g. 'America/New_York') to localise the results.

Name Type Required Description
credentialId number required The credential ID of the calendar integration. Use get_connected_calendars to obtain this — never guess.
dateFrom string required Start date for the query (e.g. '2024-08-13'). Required.
dateTo string required End date for the query (e.g. '2024-08-14'). Required.
externalId string required The external calendar ID (e.g. the email address for Google Calendar). Use get_connected_calendars to obtain this — never guess.
loggedInUsersTz string optional IANA time zone of the logged-in user (e.g. 'America/New_York'). Used to interpret date boundaries.
timeZone string optional IANA time zone for the query (e.g. 'America/New_York'). Defaults to UTC.
calmcp_get_conferencing_apps # List all conferencing applications connected to the authenticated user's account (e.g. Zoom, Google Meet, Cal Video). 0 params

List all conferencing applications connected to the authenticated user's account (e.g. Zoom, Google Meet, Cal Video).

calmcp_get_connected_calendars # List all calendar integrations connected to the authenticated user's account. Returns each calendar's credentialId and externalId, which are required by get_busy_times. Also shows the user's destination calendar. 0 params

List all calendar integrations connected to the authenticated user's account. Returns each calendar's credentialId and externalId, which are required by get_busy_times. Also shows the user's destination calendar.

calmcp_get_default_schedule # Get the authenticated user's default schedule. 0 params

Get the authenticated user's default schedule.

calmcp_get_event_type # Get a specific event type by its numeric ID (use get_event_types to find IDs). Returns full details including locations, booking fields, and schedule. 1 param

Get a specific event type by its numeric ID (use get_event_types to find IDs). Returns full details including locations, booking fields, and schedule.

Name Type Required Description
eventTypeId integer required Event type ID. Use get_event_types to find this.
calmcp_get_event_types # List event types. Without parameters returns all event types for the authenticated user. Pass 'username' to list another user's event types, or username + eventSlug for a specific one. Use usernames (comma-separated) for dynamic group event types. 6 params

List event types. Without parameters returns all event types for the authenticated user. Pass 'username' to list another user's event types, or username + eventSlug for a specific one. Use usernames (comma-separated) for dynamic group event types.

Name Type Required Description
eventSlug string optional Slug of a specific event type to return. Must be used together with username.
orgId number optional Organization ID to filter by (alternative to orgSlug).
orgSlug string optional Organization slug to filter by.
sortCreatedAt string optional Sort event types by creation date.
username string optional Username of the person whose event types you want to list. Omit to list the authenticated user's event types.
usernames string optional Comma-separated usernames for fetching a dynamic group event type (e.g. 'alice,bob').
calmcp_get_me # Get the authenticated user's profile including username, email, time zone, default schedule, and organizationId. Call this first when you need the user's own details (email, username, organizationId) for other tools. 0 params

Get the authenticated user's profile including username, email, time zone, default schedule, and organizationId. Call this first when you need the user's own details (email, username, organizationId) for other tools.

calmcp_get_org_membership # Get a specific organization membership by its numeric ID. 2 params

Get a specific organization membership by its numeric ID.

Name Type Required Description
membershipId integer required Membership ID. Use get_org_memberships to find this.
orgId integer required Organization ID. Use get_me to obtain your organizationId — never guess.
calmcp_get_org_memberships # List all memberships in an organization. Supports pagination with take/skip. 3 params

List all memberships in an organization. Supports pagination with take/skip.

Name Type Required Description
orgId integer required Organization ID. Use get_me to obtain your organizationId — never guess.
skip number optional Results to skip (offset)
take number optional Max results to return
calmcp_get_org_routing_form_responses # Get responses for a specific routing form. Supports filtering by date ranges, routed booking UID, and sorting. 11 params

Get responses for a specific routing form. Supports filtering by date ranges, routed booking UID, and sorting.

Name Type Required Description
orgId integer required Organization ID. Use get_me to obtain your organizationId — never guess.
routingFormId string required Routing form ID. Use get_org_routing_forms to find this — never guess.
afterCreatedAt string optional Created after (ISO 8601)
afterUpdatedAt string optional Updated after (ISO 8601)
beforeCreatedAt string optional Created before (ISO 8601)
beforeUpdatedAt string optional Updated before (ISO 8601)
routedToBookingUid string optional Filter by routed booking UID
skip number optional Results to skip
sortCreatedAt string optional Sort by created
sortUpdatedAt string optional Sort by updated
take number optional Max results
calmcp_get_org_routing_forms # List routing forms for an organization. Supports filtering by team IDs, date ranges, routed booking UID, and sorting. 11 params

List routing forms for an organization. Supports filtering by team IDs, date ranges, routed booking UID, and sorting.

Name Type Required Description
orgId integer required Organization ID. Use get_me to obtain your organizationId — never guess.
afterCreatedAt string optional Created after (ISO 8601)
afterUpdatedAt string optional Updated after (ISO 8601)
beforeCreatedAt string optional Created before (ISO 8601)
beforeUpdatedAt string optional Updated before (ISO 8601)
routedToBookingUid string optional Filter by routed booking UID
skip number optional Results to skip
sortCreatedAt string optional Sort by created
sortUpdatedAt string optional Sort by updated
take number optional Max results
teamIds array optional Filter by team IDs
calmcp_get_schedule # Get a specific schedule by its numeric ID. Returns availability slots and overrides. 1 param

Get a specific schedule by its numeric ID. Returns availability slots and overrides.

Name Type Required Description
scheduleId integer required Schedule ID
calmcp_get_schedules # List all schedules for the authenticated user. 0 params

List all schedules for the authenticated user.

calmcp_mark_booking_absent # Mark host or attendees as absent for a past booking. Set host=true if the host was absent. Use get_booking_attendees to look up real attendee emails before calling this. 3 params

Mark host or attendees as absent for a past booking. Set host=true if the host was absent. Use get_booking_attendees to look up real attendee emails before calling this.

Name Type Required Description
bookingUid string required Booking UID
attendees array optional Attendees with absent status. Use real attendee emails from the booking.
host boolean optional Whether the host was absent
calmcp_reschedule_booking # Reschedule a booking to a new time. WORKFLOW: (1) Call get_availability to find open slots — NEVER pick a new time without checking availability first. (2) The new start time must be in UTC ISO 8601. rescheduledBy is only needed for confirmation-required bookings — use the event owner's email (from get_me) for auto-confirmation. Never fabricate emails. 4 params

Reschedule a booking to a new time. WORKFLOW: (1) Call get_availability to find open slots — NEVER pick a new time without checking availability first. (2) The new start time must be in UTC ISO 8601. rescheduledBy is only needed for confirmation-required bookings — use the event owner's email (from get_me) for auto-confirmation. Never fabricate emails.

Name Type Required Description
bookingUid string required Booking UID
start string required New start time in UTC, ISO 8601 (e.g. 2024-08-13T09:00:00Z)
rescheduledBy string optional Only needed when rescheduling a booking that requires confirmation. If the event owner's email is provided, the rescheduled booking is auto-confirmed; otherwise the owner must confirm. Use get_me to get the authenticated user's email — never fabricate.
reschedulingReason string optional Reason for rescheduling
calmcp_update_event_type # Update an existing event type by ID (use get_event_types to find IDs). Any provided field replaces the current value. Array fields (locations, bookingFields) replace entirely — fetch the current event type first with get_event_type to avoid losing existing values. 28 params

Update an existing event type by ID (use get_event_types to find IDs). Any provided field replaces the current value. Array fields (locations, bookingFields) replace entirely — fetch the current event type first with get_event_type to avoid losing existing values.

Name Type Required Description
eventTypeId integer required Event type ID to update. Use get_event_types to find this.
afterEventBuffer integer optional Minutes blocked on calendar after the meeting.
beforeEventBuffer integer optional Minutes blocked on calendar before the meeting.
bookingFields array optional Updated booking fields array. Replaces ALL existing booking fields. To modify fields, first fetch the current event type with get_event_type, then include all desired fields here.
bookingLimitsCount object optional Limit how many times this event can be booked per period (e.g. {day: 2, week: 5}).
bookingWindow object optional Limit how far in the future this event can be booked.
confirmationPolicy object optional Manual confirmation policy settings.
customName string optional Custom event name template.
description string optional New description
destinationCalendar object optional Which external calendar new bookings are added to.
disableGuests boolean optional If true, bookers cannot add guest emails.
hidden boolean optional Whether the event type is hidden.
hideCalendarNotes boolean optional Hide calendar notes.
lengthInMinutes integer optional New duration in minutes
lengthInMinutesOptions array optional Multiple duration options the attendee can choose from (e.g. [15, 30, 60]). If provided, the booker picks their preferred duration.
locations array optional Updated locations array. Replaces all existing locations.
lockTimeZoneToggleOnBookingPage boolean optional Lock timezone on booking page.
minimumBookingNotice integer optional Minimum minutes before event that a booking can be made.
offsetStart integer optional Offset timeslots by specified minutes.
onlyShowFirstAvailableSlot boolean optional Show only the earliest available slot per day.
recurrence object optional Recurrence settings (e.g. {frequency: 'weekly', interval: 1, occurrences: 12}).
requiresBookerEmailVerification boolean optional Whether booker must verify their email.
scheduleId integer optional Schedule ID to use instead of default. Use get_schedules to find schedule IDs.
seats object optional Seated event settings.
slotInterval integer optional Length of each slot in minutes.
slug string optional New URL-friendly slug
successRedirectUrl string optional Redirect URL after successful booking.
title string optional New title
calmcp_update_me # Update the authenticated user's profile. Supports name, email, bio, time zone, week start, time format, default schedule, locale, avatar URL, and custom metadata. 10 params

Update the authenticated user's profile. Supports name, email, bio, time zone, week start, time format, default schedule, locale, avatar URL, and custom metadata.

Name Type Required Description
avatarUrl string optional URL of the user's avatar image
bio string optional Short biography or description
defaultScheduleId integer optional ID of the default schedule to use for event types
email string optional Email address
locale string optional Locale / language code (e.g. 'en', 'fr', 'de')
metadata object optional Custom metadata key-value pairs (max 50 keys, keys ≤40 chars, string values ≤500 chars)
name string optional Display name
timeFormat integer optional Time format: 12 or 24
timeZone string optional IANA time zone (e.g. America/New_York)
weekStart string optional Week start day (e.g. Monday, Sunday)
calmcp_update_org_membership # Update an organization membership. Can change role, accepted status, or impersonation settings. 5 params

Update an organization membership. Can change role, accepted status, or impersonation settings.

Name Type Required Description
membershipId integer required Membership ID. Use get_org_memberships to find this.
orgId integer required Organization ID. Use get_me to obtain your organizationId — never guess.
accepted boolean optional Whether accepted
disableImpersonation boolean optional Disable impersonation
role string optional New role
calmcp_update_schedule # Update an existing schedule. Array fields (availability, overrides) replace all existing entries. 6 params

Update an existing schedule. Array fields (availability, overrides) replace all existing entries.

Name Type Required Description
scheduleId integer required Schedule ID
availability array optional New availability slots. Replaces all existing slots.
isDefault boolean optional Set as the user's default schedule.
name string optional New name
overrides array optional Date-specific overrides. Replaces all existing overrides.
timeZone string optional New IANA time zone