Cal MCP connector
OAuth 2.1/DCRCalendarProductivityAIConnect to Cal MCP. Manage bookings, event types, schedules, and availability from your AI workflows.
Cal MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. 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> -
Authorize and make your first call
Section titled “Authorize and make your first call”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.actionsconst connector = 'calmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { 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 callconst result = await actions.executeTool({connector,identifier,toolName: 'calmcp_get_bookings',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "calmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Cal MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="calmcp_get_bookings",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”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
Tool list
Section titled “Tool list”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.
bookingUidstringrequiredBooking UIDemailstringrequiredAttendee email address. Ask the user — never guess or fabricate.namestringrequiredAttendee name. Ask the user — never guess.timeZonestringrequiredIANA time zone. Ask the user — never guess.languagestringoptionalISO 639-1 language code (e.g. 'en')phoneNumberstringoptionalPhone 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.
endstringrequiredRange end in UTC, ISO 8601 (e.g. '2024-08-14' or '2024-08-14T18:00:00Z')responseobjectrequiredRouting 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.routingFormIdstringrequiredRouting form ID. Use get_org_routing_forms to find this — never guess.startstringrequiredRange start in UTC, ISO 8601 (e.g. '2024-08-13' or '2024-08-13T09:00:00Z')bookingUidToReschedulestringoptionalBooking UID being rescheduled — ensures original time appears in available slotsdurationnumberoptionalDesired slot duration in minutes (for variable-duration events)formatstringoptionalSlot format: 'range' returns start+end, 'time' returns start onlytimeZonestringoptionalIANA 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.
bookingUidstringrequiredBooking UIDcancellationReasonstringoptionalReason for cancellationcancelSubsequentBookingsbooleanoptionalFor recurring non-seated bookings only: if true, also cancels all subsequent recurrences after this one.seatUidstringoptionalUID 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.
bookingUidstringrequiredBooking UIDcalmcp_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).
attendeeobjectrequiredAttendee 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.startstringrequiredStart time in UTC, ISO 8601 (e.g. 2024-08-13T09:00:00Z). Must be UTC.allowBookingOutOfBoundsbooleanoptionalIf 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.allowConflictsbooleanoptionalIf true and the authenticated user is a host, skip availability conflict checks. Ignored for non-hosts.bookingFieldsResponsesobjectoptionalCustom booking field responses as {slug: value} pairseventTypeIdintegeroptionalEvent type ID. Required unless eventTypeSlug + username (or teamSlug) are provided.eventTypeSlugstringoptionalEvent type slug (e.g. '15min'). Must be combined with username (for individual) or teamSlug (for team).guestsarrayoptionalAdditional guest emails to include. Ask the user for guest emails — never guess or fabricate.lengthInMinutesintegeroptionalDesired booking length for variable-duration event types. Uses event type default if omitted.locationobjectoptionalMeeting 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).metadataobjectoptionalMetadata key-value pairs (max 50 keys, keys ≤40 chars, string values ≤500 chars)organizationSlugstringoptionalOrganization slug, needed when the user/team is within an organization.teamSlugstringoptionalTeam slug. Required with eventTypeSlug for team event types.usernamestringoptionalUsername 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.
lengthInMinutesintegerrequiredDuration in minutesslugstringrequiredURL-friendly slug (e.g. '30min')titlestringrequiredEvent type titleafterEventBufferintegeroptionalMinutes blocked on calendar after the meeting ends.beforeEventBufferintegeroptionalMinutes blocked on calendar before the meeting starts.bookingFieldsarrayoptionalCustom fields added to the booking form. Each object defines a field with properties like name, type, label, required, etc.bookingLimitsCountobjectoptionalLimit how many times this event can be booked per period (e.g. {day: 2, week: 5}).bookingWindowobjectoptionalLimit how far in the future this event can be booked.confirmationPolicyobjectoptionalManual confirmation policy. Controls whether bookings require host confirmation.customNamestringoptionalCustom event name template with variables: {Event type title}, {Organiser}, {Scheduler}, {Location}.descriptionstringoptionalDescription shown on the booking pagedestinationCalendarobjectoptionalWhich external calendar new bookings are added to.disableGuestsbooleanoptionalIf true, bookers cannot add guest emails.hiddenbooleanoptionalWhether the event type is hidden from the public profile.hideCalendarNotesbooleanoptionalHide calendar notes from the booking.lengthInMinutesOptionsarrayoptionalMultiple duration options the attendee can choose from (e.g. [15, 30, 60]). If provided, the booker picks their preferred duration.locationsarrayoptionalLocations 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.lockTimeZoneToggleOnBookingPagebooleanoptionalLock the timezone on the booking page.minimumBookingNoticeintegeroptionalMinimum minutes before the event that a booking can be made.offsetStartintegeroptionalOffset timeslots shown to bookers by a specified number of minutes.onlyShowFirstAvailableSlotbooleanoptionalLimit availability to one slot per day (the earliest available).recurrenceobjectoptionalRecurrence settings to create a recurring event type (e.g. {frequency: 'weekly', interval: 1, occurrences: 12}).requiresBookerEmailVerificationbooleanoptionalWhether booker must verify their email before the booking is confirmed.scheduleIdintegeroptionalUse a specific schedule instead of the user's default. Use get_schedules to find schedule IDs.seatsobjectoptionalEnable seated events. Object with seatsPerTimeSlot and other seat settings.slotIntervalintegeroptionalLength of each slot in minutes. Defaults to the event duration.successRedirectUrlstringoptionalURL 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.
orgIdintegerrequiredOrganization ID. Use get_me to obtain your organizationId — never guess.rolestringrequiredRole (managed users: MEMBER only)userIdnumberrequiredUser ID of the person to add. Must be a real user ID — ask the user for this, never guess.acceptedbooleanoptionalWhether accepteddisableImpersonationbooleanoptionalDisable impersonationcalmcp_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.
isDefaultbooleanrequiredWhether this is the user's default schedule. Each user should have exactly one default schedule.namestringrequiredSchedule nametimeZonestringrequiredIANA time zone used to calculate available times (e.g. America/New_York)availabilityarrayoptionalAvailability slots. If not provided, defaults to Mon-Fri 09:00-17:00.overridesarrayoptionalDate-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.
eventTypeIdintegerrequiredEvent 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.
membershipIdintegerrequiredMembership ID. Use get_org_memberships to find this.orgIdintegerrequiredOrganization 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.
scheduleIdintegerrequiredSchedule IDcalmcp_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.
endstringrequiredRange end in UTC, ISO 8601 (e.g. '2024-08-14' or '2024-08-14T18:00:00Z')startstringrequiredRange start in UTC, ISO 8601 (e.g. '2024-08-13' or '2024-08-13T09:00:00Z')bookingUidToReschedulestringoptionalBooking UID being rescheduled — ensures original time appears in available slotsdurationintegeroptionalDesired slot duration in minutes (for variable-duration or dynamic events, defaults to 30)eventTypeIdintegeroptionalEvent type ID. Use this OR (eventTypeSlug + username) OR (eventTypeSlug + teamSlug).eventTypeSlugstringoptionalEvent type slug. Must be combined with username (individual) or teamSlug (team).formatstringoptionalResponse format: 'range' (start+end) or 'time' (start only)organizationSlugstringoptionalOrganization slug, needed when the user/team is within an organization.teamSlugstringoptionalTeam slug. Required with eventTypeSlug for team event types.timeZonestringoptionalIANA time zone for returned slots (e.g. America/New_York). Defaults to UTC.usernamestringoptionalUsername of the host whose availability you are checking. Required with eventTypeSlug for individual event types.usernamesstringoptionalComma-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.
bookingUidstringrequiredBooking UIDcalmcp_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.
attendeeIdintegerrequiredAttendee ID. Use get_booking_attendees to find this.bookingUidstringrequiredBooking UIDcalmcp_get_booking_attendees#Get all attendees for a booking by its UID.1 param
Get all attendees for a booking by its UID.
bookingUidstringrequiredBooking UIDcalmcp_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).
afterCreatedAtstringoptionalFilter bookings created after this ISO 8601 dateafterStartstringoptionalFilter bookings starting after this ISO 8601 dateafterUpdatedAtstringoptionalFilter bookings updated after this ISO 8601 dateattendeeEmailstringoptionalFilter by attendee emailattendeeNamestringoptionalFilter by attendee namebeforeCreatedAtstringoptionalFilter bookings created before this ISO 8601 datebeforeEndstringoptionalFilter bookings ending before this ISO 8601 datebeforeUpdatedAtstringoptionalFilter bookings updated before this ISO 8601 datebookingUidstringoptionalFilter by booking UIDeventTypeIdintegeroptionalFilter by event type IDeventTypeIdsstringoptionalComma-separated event type IDs (e.g. '100,200')skipintegeroptionalResults to skip (offset)sortCreatedstringoptionalSort by creation timesortEndstringoptionalSort by end timesortStartstringoptionalSort by start timesortUpdatedAtstringoptionalSort by updated timestatusstringoptionalComma-separated statuses: upcoming, recurring, past, cancelled, unconfirmedtakeintegeroptionalMax results to return (default 100, max 250)teamIdintegeroptionalFilter by team IDteamsIdsstringoptionalComma-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.
credentialIdnumberrequiredThe credential ID of the calendar integration. Use get_connected_calendars to obtain this — never guess.dateFromstringrequiredStart date for the query (e.g. '2024-08-13'). Required.dateTostringrequiredEnd date for the query (e.g. '2024-08-14'). Required.externalIdstringrequiredThe external calendar ID (e.g. the email address for Google Calendar). Use get_connected_calendars to obtain this — never guess.loggedInUsersTzstringoptionalIANA time zone of the logged-in user (e.g. 'America/New_York'). Used to interpret date boundaries.timeZonestringoptionalIANA 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.
eventTypeIdintegerrequiredEvent 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.
eventSlugstringoptionalSlug of a specific event type to return. Must be used together with username.orgIdnumberoptionalOrganization ID to filter by (alternative to orgSlug).orgSlugstringoptionalOrganization slug to filter by.sortCreatedAtstringoptionalSort event types by creation date.usernamestringoptionalUsername of the person whose event types you want to list. Omit to list the authenticated user's event types.usernamesstringoptionalComma-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.
membershipIdintegerrequiredMembership ID. Use get_org_memberships to find this.orgIdintegerrequiredOrganization 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.
orgIdintegerrequiredOrganization ID. Use get_me to obtain your organizationId — never guess.skipnumberoptionalResults to skip (offset)takenumberoptionalMax results to returncalmcp_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.
orgIdintegerrequiredOrganization ID. Use get_me to obtain your organizationId — never guess.routingFormIdstringrequiredRouting form ID. Use get_org_routing_forms to find this — never guess.afterCreatedAtstringoptionalCreated after (ISO 8601)afterUpdatedAtstringoptionalUpdated after (ISO 8601)beforeCreatedAtstringoptionalCreated before (ISO 8601)beforeUpdatedAtstringoptionalUpdated before (ISO 8601)routedToBookingUidstringoptionalFilter by routed booking UIDskipnumberoptionalResults to skipsortCreatedAtstringoptionalSort by createdsortUpdatedAtstringoptionalSort by updatedtakenumberoptionalMax resultscalmcp_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.
orgIdintegerrequiredOrganization ID. Use get_me to obtain your organizationId — never guess.afterCreatedAtstringoptionalCreated after (ISO 8601)afterUpdatedAtstringoptionalUpdated after (ISO 8601)beforeCreatedAtstringoptionalCreated before (ISO 8601)beforeUpdatedAtstringoptionalUpdated before (ISO 8601)routedToBookingUidstringoptionalFilter by routed booking UIDskipnumberoptionalResults to skipsortCreatedAtstringoptionalSort by createdsortUpdatedAtstringoptionalSort by updatedtakenumberoptionalMax resultsteamIdsarrayoptionalFilter by team IDscalmcp_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.
scheduleIdintegerrequiredSchedule IDcalmcp_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.
bookingUidstringrequiredBooking UIDattendeesarrayoptionalAttendees with absent status. Use real attendee emails from the booking.hostbooleanoptionalWhether the host was absentcalmcp_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.
bookingUidstringrequiredBooking UIDstartstringrequiredNew start time in UTC, ISO 8601 (e.g. 2024-08-13T09:00:00Z)rescheduledBystringoptionalOnly 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.reschedulingReasonstringoptionalReason for reschedulingcalmcp_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.
eventTypeIdintegerrequiredEvent type ID to update. Use get_event_types to find this.afterEventBufferintegeroptionalMinutes blocked on calendar after the meeting.beforeEventBufferintegeroptionalMinutes blocked on calendar before the meeting.bookingFieldsarrayoptionalUpdated 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.bookingLimitsCountobjectoptionalLimit how many times this event can be booked per period (e.g. {day: 2, week: 5}).bookingWindowobjectoptionalLimit how far in the future this event can be booked.confirmationPolicyobjectoptionalManual confirmation policy settings.customNamestringoptionalCustom event name template.descriptionstringoptionalNew descriptiondestinationCalendarobjectoptionalWhich external calendar new bookings are added to.disableGuestsbooleanoptionalIf true, bookers cannot add guest emails.hiddenbooleanoptionalWhether the event type is hidden.hideCalendarNotesbooleanoptionalHide calendar notes.lengthInMinutesintegeroptionalNew duration in minuteslengthInMinutesOptionsarrayoptionalMultiple duration options the attendee can choose from (e.g. [15, 30, 60]). If provided, the booker picks their preferred duration.locationsarrayoptionalUpdated locations array. Replaces all existing locations.lockTimeZoneToggleOnBookingPagebooleanoptionalLock timezone on booking page.minimumBookingNoticeintegeroptionalMinimum minutes before event that a booking can be made.offsetStartintegeroptionalOffset timeslots by specified minutes.onlyShowFirstAvailableSlotbooleanoptionalShow only the earliest available slot per day.recurrenceobjectoptionalRecurrence settings (e.g. {frequency: 'weekly', interval: 1, occurrences: 12}).requiresBookerEmailVerificationbooleanoptionalWhether booker must verify their email.scheduleIdintegeroptionalSchedule ID to use instead of default. Use get_schedules to find schedule IDs.seatsobjectoptionalSeated event settings.slotIntervalintegeroptionalLength of each slot in minutes.slugstringoptionalNew URL-friendly slugsuccessRedirectUrlstringoptionalRedirect URL after successful booking.titlestringoptionalNew titlecalmcp_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.
avatarUrlstringoptionalURL of the user's avatar imagebiostringoptionalShort biography or descriptiondefaultScheduleIdintegeroptionalID of the default schedule to use for event typesemailstringoptionalEmail addresslocalestringoptionalLocale / language code (e.g. 'en', 'fr', 'de')metadataobjectoptionalCustom metadata key-value pairs (max 50 keys, keys ≤40 chars, string values ≤500 chars)namestringoptionalDisplay nametimeFormatintegeroptionalTime format: 12 or 24timeZonestringoptionalIANA time zone (e.g. America/New_York)weekStartstringoptionalWeek 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.
membershipIdintegerrequiredMembership ID. Use get_org_memberships to find this.orgIdintegerrequiredOrganization ID. Use get_me to obtain your organizationId — never guess.acceptedbooleanoptionalWhether accepteddisableImpersonationbooleanoptionalDisable impersonationrolestringoptionalNew rolecalmcp_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.
scheduleIdintegerrequiredSchedule IDavailabilityarrayoptionalNew availability slots. Replaces all existing slots.isDefaultbooleanoptionalSet as the user's default schedule.namestringoptionalNew nameoverridesarrayoptionalDate-specific overrides. Replaces all existing overrides.timeZonestringoptionalNew IANA time zone