# Cal — how to use (mcp.ai)

Cal simplifies meeting coordination by providing shareable booking pages, calendar syncing, and availability management to streamline the scheduling process

## Option A — via MCP (recommended)
Remote MCP endpoint (HTTP, streamable): `https://api.mcp.ai/p_cal?ms=1781541900000`
Add it as a custom/remote MCP connector in your client (Claude, Cursor, VS Code…), then authenticate when prompted. Once connected, ask the agent to use the server's tools (e.g. `cal_add_member_to_team_using_org_and_team_id`).

## Option B — via direct REST API
Base URL: `https://api.mcp.ai/api/cal`
Auth: `Authorization: Bearer sk_live_…` — create a workspace API key at https://mcp.ai/settings/api-keys
Discover endpoints: `GET https://api.mcp.ai/api/cal/_endpoints`

### Endpoints
- `POST https://api.mcp.ai/api/cal/add/member/to/team/using/org/and/team/id` — Adds a new member to a specified team within an organization by creating a team membership.
  - body: { role?: string, orgId: integer, teamId: integer, userId: integer, accepted?: boolean, disableImpersonation?: boolean }
- `POST https://api.mcp.ai/api/cal/add/organization/attribute/option` — Adds a new option to an organization's attribute, requiring a display `value` and a `slug` unique for that attribute.
  - body: { slug: string, orgId: integer, value: string, attributeId: string }
- `POST https://api.mcp.ai/api/cal/cal/delete/oauth/client/webhook` — Permanently deletes a specific webhook subscription of an oauth client in the cal application, stopping its notifications.
  - body: { clientId: string, webhookId: string }
- `POST https://api.mcp.ai/api/cal/cancel/booking/via/uid` — Cancels an existing and active cal.com booking using its unique identifier (uid).
  - body: { bookingUid: string }
- `POST https://api.mcp.ai/api/cal/check/calendar/version2` — Retrieves free/busy availability for a specified calendar to aid scheduling without revealing event details; requires an existing, accessible calendar, noting that data granularity can vary.
  - body: { calendar: string }
- `POST https://api.mcp.ai/api/cal/check/gcal/synchronization/status` — Call this read-only action to verify the connection and synchronization status of a user's google calendar integration with cal.
- `POST https://api.mcp.ai/api/cal/check/ics/feed/calendar/endpoint` — Checks an ics feed url (expected as a query parameter) to verify its validity, accessibility, and icalendar data integrity.
- `POST https://api.mcp.ai/api/cal/check/stripe/status` — Verifies if stripe is correctly connected to the cal scheduling system and functional for processing payments, reporting only on the integration's status.
- `POST https://api.mcp.ai/api/cal/check/team/stripe/integration/status` — Retrieves the stripe integration status and related information for a team, primarily to verify account connection, subscription details, or payment setup; this is a read-only operation that does not 
  - body: { teamId: string }
- `POST https://api.mcp.ai/api/cal/confirm/booking/by/uid` — Confirms an existing booking by `bookinguid` if the booking exists and is in a state allowing confirmation (e.g., not already cancelled or confirmed); this finalizes the booking, does not modify its d
  - body: { bookingUid: string }
- `POST https://api.mcp.ai/api/cal/connect/to/calendar` — Initiates or checks the external connection status for a specified calendar, possibly returning a redirect url for user authorization to complete integration, without altering calendar data.
  - body: { calendar: string }
- `POST https://api.mcp.ai/api/cal/create/membership/for/organization` — Creates a new membership or updates an existing one for a user within an organization; the user specified by userid must already exist in the system.
  - body: { role?: string, orgId: integer, userId: integer, accepted?: boolean, disableImpersonation?: boolean }
- `POST https://api.mcp.ai/api/cal/create/oauth/client/user` — Creates a new managed user for an oauth client, setting profile and scheduling preferences; if `timezone` is not provided, a default schedule (mon-fri, 9am-5pm) is not created, requiring manual setup 
  - body: { name: string, email: string, locale?: string, clientId: string, timeZone?: string, avatarUrl?: string, weekStart?: string, timeFormat?: integer }
- `POST https://api.mcp.ai/api/cal/create/oauth/client/webhook/configuration` — Creates a webhook for an existing oauth client to send real-time cal.com event notifications (e.g., `booking created`, `meeting ended`) to the `subscriberurl`, enabling integration with external syste
  - body: { active: boolean, secret?: string, clientId: string, triggers: string, subscriberUrl: string, payloadTemplate?: string }
- `POST https://api.mcp.ai/api/cal/create/or/update/team/profile` — Creates a new team profile, or updates one if a 'slug' matches, customizing branding, scheduling, privacy, and operational details.
  - body: { bio?: string, name: string, slug?: string, theme?: string, appLogo?: string, logoUrl?: string, metadata?: string, timeZone?: string, bannerUrl?: string, isPrivate?: boolean, weekStart?: string, brandColor?: string, timeFormat?: integer, appIconLogo?: string, calVideoLogo?: string, hideBranding?: boolean, darkBrandColor?: string, autoAcceptCreator?: boolean, hideBookATeamMember?: boolean }
- `POST https://api.mcp.ai/api/cal/create/organization/attributes` — Creates a new custom attribute for an existing organization, used to enhance data collection for event bookings or user profiles.
  - body: { name: string, slug: string, type: string, orgId: integer, enabled?: boolean, options: object[] }
- `POST https://api.mcp.ai/api/cal/create/organization/webhook/by/org/id` — Creates a webhook for a specified, existing organization, sending notifications for selected trigger events to a designated, publicly accessible subscriber url that accepts post requests.
  - body: { orgId: integer, active: boolean, secret?: string, triggers: string, subscriberUrl: string, payloadTemplate?: string }
- `POST https://api.mcp.ai/api/cal/create/phone/call/event` — Schedules a phone call event in cal.com using existing eventtype, organization, and team ids; this action only registers the event details and does not initiate the actual phone call.
  - body: { orgId: integer, teamId: integer, calApiKey: string, guestName?: string, guestEmail?: string, eventTypeId: integer, beginMessage?: string, guestCompany?: string, numberToCall: string, templateType?: string, generalPrompt?: string, schedulerName?: string, yourPhoneNumber: string }
- `POST https://api.mcp.ai/api/cal/create/phone/call/for/event/type` — Creates a phone call template associated with an existing event type and team, for defining reusable call configurations like numbers and scripts; note this does not initiate an actual call.
  - body: { teamId: integer, calApiKey: string, guestName?: string, guestEmail?: string, eventTypeId: integer, beginMessage?: string, guestCompany?: string, numberToCall: string, templateType?: string, generalPrompt?: string, schedulerName?: string, yourPhoneNumber: string }
- `POST https://api.mcp.ai/api/cal/create/team/event/type` — Creates a new event type for a specified team in cal.com; ensure `teamid`, any provided `scheduleid`, `hosts.userid`, and `destinationcalendar` details are valid and accessible.
  - body: { slug: string, hosts: object[], seats?: object, title: string, teamId: integer, locations?: object[], customName?: string, recurrence?: object, scheduleId?: integer, description?: string, offsetStart?: integer, slotInterval?: integer, bookingFields?: object[], bookingWindow?: object, disableGuests?: boolean, lengthInMinutes: integer, afterEventBuffer?: integer, beforeEventBuffer?: integer, hideCalendarNotes?: boolean, bookingLimitsCount?: object, confirmationPolicy?: object, successRedirectUrl?: string, color__darkThemeHex?: string, assignAllTeamMembers?: boolean, color__lightThemeHex?: string, minimumBookingNotice?: integer, bookingLimitsDuration?: object, lengthInMinutesOptions: string[], hideCalendarEventDetails?: boolean, onlyShowFirstAvailableSlot?: boolean, useDestinationCalendarEmail?: boolean, destinationCalendar__externalId?: string, lockTimeZoneToggleOnBookingPage?: boolean, requiresBookerEmailVerification?: boolean, destinationCalendar__integration?: string }
- `POST https://api.mcp.ai/api/cal/create/team/event/types/with/custom/options` — Creates a highly customizable cal.com team event type with extensive scheduling, booking, and host assignment options; `lengthinminutes` (as string) must be included in `lengthinminutesoptions`, desti
  - body: { slug: string, hosts: object[], orgId: integer, seats?: object, title: string, teamId: integer, locations?: object[], customName?: string, recurrence?: object, scheduleId?: integer, description?: string, offsetStart?: integer, slotInterval?: integer, bookingFields?: object[], bookingWindow?: object, disableGuests?: boolean, lengthInMinutes: integer, afterEventBuffer?: integer, beforeEventBuffer?: integer, hideCalendarNotes?: boolean, bookingLimitsCount?: object, confirmationPolicy?: object, successRedirectUrl?: string, color__darkThemeHex?: string, assignAllTeamMembers?: boolean, color__lightThemeHex?: string, minimumBookingNotice?: integer, bookingLimitsDuration?: object, lengthInMinutesOptions: string[], hideCalendarEventDetails?: boolean, onlyShowFirstAvailableSlot?: boolean, useDestinationCalendarEmail?: boolean, destinationCalendar__externalId?: string, lockTimeZoneToggleOnBookingPage?: boolean, requiresBookerEmailVerification?: boolean, destinationCalendar__integration?: string }
- `POST https://api.mcp.ai/api/cal/create/team/in/organization` — Creates a new team with customizable attributes within an existing and accessible cal.com organization specified by orgid.
  - body: { bio?: string, name: string, slug?: string, orgId: integer, theme?: string, appLogo?: string, logoUrl?: string, metadata?: string, timeZone?: string, bannerUrl?: string, isPrivate?: boolean, weekStart?: string, brandColor?: string, timeFormat?: integer, appIconLogo?: string, calVideoLogo?: string, hideBranding?: boolean, darkBrandColor?: string, autoAcceptCreator?: boolean, hideBookATeamMember?: boolean }
- `POST https://api.mcp.ai/api/cal/create/team/membership/with/role` — Adds a user to a team with a specified role, acceptance status, and impersonation settings; ensure `teamid` and `userid` refer to existing, valid entities.
  - body: { role?: string, teamId: integer, userId: integer, accepted?: boolean, disableImpersonation?: boolean }
- `POST https://api.mcp.ai/api/cal/create/user/availability/schedule` — Creates a cal.com user availability schedule, defining its name, timezone, weekly recurring availability, and specific date overrides; if `isdefault` is true, this schedule replaces any existing defau
  - body: { name: string, timeZone: string, isDefault: boolean, overrides?: object[], availability?: object[] }
- `POST https://api.mcp.ai/api/cal/create/user/schedule/in/organization` — Creates a new schedule defining a user's availability with weekly slots and date-specific overrides in an organization; setting 'isdefault' to true may replace an existing default schedule for the use
  - body: { name: string, orgId: integer, userId: integer, timeZone: string, isDefault: boolean, overrides?: object[], availability?: object[] }
- `POST https://api.mcp.ai/api/cal/create/webhook/for/event/type` — Creates a webhook for an existing `eventtypeid` in cal.com, sending notifications for specified `triggers` to a `subscriberurl` that handles post requests.
  - body: { active: boolean, secret?: string, triggers: string, eventTypeId: integer, subscriberUrl: string, payloadTemplate?: string }
- `POST https://api.mcp.ai/api/cal/decline/booking/with/reason` — Declines a pending booking using its bookinguid, optionally with a reason; this action is irreversible and applies only to bookings awaiting confirmation.
  - body: { reason?: string, bookingUid: string }
- `POST https://api.mcp.ai/api/cal/delete/conference/app/connection` — Disconnects the specified conferencing application (e.g., 'zoom', 'google meet') for the cal.com account, immediately terminating any ongoing call or meeting; use with caution.
  - body: { app: string }
- `POST https://api.mcp.ai/api/cal/delete/event/type/by/id` — Permanently deletes an existing event type by its id, which invalidates its scheduling links; the operation is irreversible, and while existing bookings are unaffected, no new bookings can be made for
  - body: { eventTypeId: integer }
- `POST https://api.mcp.ai/api/cal/delete/event/type/in/team` — Permanently removes an event type's configuration from a team's scheduling options (e.g., for cleanup); this action is irreversible and requires the event type to be associated with the team.
  - body: { teamId: integer, eventTypeId: integer }
- `POST https://api.mcp.ai/api/cal/delete/membership/in/team` — Use to permanently remove a user's membership from a specific team within an organization, which revokes their team-associated access but does not remove them from the organization.
  - body: { orgId: integer, teamId: integer, membershipId: integer }
- `POST https://api.mcp.ai/api/cal/delete/oauth/client/user` — Irreversibly revokes a specific user's association with a given oauth client, without deleting the user's cal account.
  - body: { userId: integer, clientId: string }
- `POST https://api.mcp.ai/api/cal/delete/org/webhook` — Permanently deletes an organization's webhook, which stops all its notifications; this action is irreversible and the webhook cannot be recovered.
  - body: { orgId: integer, webhookId: string }
- `POST https://api.mcp.ai/api/cal/delete/organization/attribute` — Permanently deletes an existing attribute (specified by `attributeid`) from an existing organization (specified by `orgid`); this action is irreversible and may affect features dependent on the attrib
  - body: { orgId: integer, attributeId: string }
- `POST https://api.mcp.ai/api/cal/delete/organization/attribute/option` — Permanently deletes a specified option from an organization's attribute, typically to remove an unnecessary configuration choice.
  - body: { orgId: integer, optionId: string, attributeId: string }
- `POST https://api.mcp.ai/api/cal/delete/organization/membership` — Irreversibly deletes a user's membership from an organization, removing all associated access and permissions; the response confirms deletion without returning details of the deleted membership.
  - body: { orgId: integer, membershipId: integer }
- `POST https://api.mcp.ai/api/cal/delete/schedule/by/id` — Permanently deletes a specific schedule using its unique identifier, which must correspond to an existing schedule.
  - body: { scheduleId: integer }
- `POST https://api.mcp.ai/api/cal/delete/selected/calendars` — Removes a specified, currently selected calendar from the user's active list within the application, without deleting it from the external provider.
  - body: { externalId: string, integration: string, credentialId: string }
- `POST https://api.mcp.ai/api/cal/delete/selected/slot` — Deletes a previously selected time slot from the cal schedule using its `uid`; the slot must exist and this action is irreversible.
  - body: { uid: string }
- `POST https://api.mcp.ai/api/cal/delete/team/by/id` — Permanently and irreversibly deletes an existing team and all its associated data from the cal system, using the team's unique `teamid`.
  - body: { teamId: integer }
- `POST https://api.mcp.ai/api/cal/delete/team/from/organization` — Permanently and irreversibly deletes a specific team (and all its associated data, members, and linked projects/events) from an organization, when the team is no longer needed or during organizational
  - body: { orgId: integer, teamId: integer }
- `POST https://api.mcp.ai/api/cal/delete/team/memberships/by/id` — Irreversibly removes a user's team membership in the cal application, revoking access to that specific team; the user's overall cal account remains active.
  - body: { teamId: integer, membershipId: integer }
- `POST https://api.mcp.ai/api/cal/delete/user/attribute/option` — Removes a custom attribute option (e.g., skill, role) currently assigned to a user within an organization; this operation is irreversible.
  - body: { orgId: integer, userId: integer, attributeOptionId: string }
- `POST https://api.mcp.ai/api/cal/delete/user/from/organization` — Permanently removes a user from a specific organization (user's system-wide account is unaffected), revoking their access rights therein; this action is irreversible via api and expects the user to be
  - body: { orgId: integer, userId: integer }
- `POST https://api.mcp.ai/api/cal/delete/user/schedule` — Permanently deletes a specific user's schedule, provided the organization, user, and schedule (identified by `orgid`, `userid`, and `scheduleid`) exist.
  - body: { orgId: integer, userId: integer, scheduleId: integer }
- `POST https://api.mcp.ai/api/cal/delete/webhook/by/id` — Permanently deletes an existing webhook by its `webhookid`, stopping future notifications; this action is irreversible.
  - body: { webhookId: string }
- `POST https://api.mcp.ai/api/cal/delete/webhook/for/event/type` — Permanently deletes a specific webhook for an event type, halting its real-time notifications; this operation is irreversible and leaves the event type and other webhooks untouched.
  - body: { webhookId: string, eventTypeId: integer }
- `POST https://api.mcp.ai/api/cal/delete/webhooks/for/event/type` — Call this to irreversibly delete all webhooks for a specific `eventtypeid` if the event type exists; details of deleted webhooks are not returned.
  - body: { eventTypeId: integer }
- `POST https://api.mcp.ai/api/cal/disconnect/calendar/using/credential/id` — Disconnects a calendar integration by its provider name and credential id, irreversibly revoking cal's access; external calendar data remains unaffected.
  - body: { id: integer, calendar: string }
- `POST https://api.mcp.ai/api/cal/fetch/all/bookings` — Fetches a list of bookings, optionally filtered by status, attendee, date range, or by event/team ids (which must belong to/include the authenticated user respectively), with support for pagination an
  - body: { skip?: integer, take?: integer, status?: string[], teamId?: string, sortEnd?: string, teamsIds?: string, beforeEnd?: string, sortStart?: string, afterStart?: string, eventTypeId?: string, sortCreated?: string, attendeeName?: string, eventTypeIds?: string, attendeeEmail?: string }
- `POST https://api.mcp.ai/api/cal/fetch/event/type/details` — Fetches all configuration settings and characteristics for a single event type (identified by orgid, teamid, and eventtypeid), which must exist and be accessible; this read-only action cannot list, cr
  - body: { orgId: integer, teamId: integer, eventTypeId: integer }
- `POST https://api.mcp.ai/api/cal/fetch/organization/attribute/by/id` — Retrieves a specific attribute of an organization, useful for fetching a single data point instead of the entire organization record.
  - body: { orgId: integer, attributeId: string }
- `POST https://api.mcp.ai/api/cal/fetch/provider/access/token` — Fetches an oauth access token for the specified `clientid` to authenticate api calls; this action only retrieves the token, not managing scheduling or calendar events.
  - body: { clientId: string }
- `POST https://api.mcp.ai/api/cal/fetch/schedule/by/id` — Fetches comprehensive details for a specific, existing schedule using its `scheduleid`.
  - body: { scheduleId: integer }
- `POST https://api.mcp.ai/api/cal/fetch/user/schedule/by/org/id` — Fetches a specific user's schedule, potentially including events and availability, using `orgid`, `userid`, and `scheduleid`.
  - body: { orgId: integer, userId: integer, scheduleId: integer }
- `POST https://api.mcp.ai/api/cal/fetch/webhook/by/event/type/id` — Retrieves details for a single, specific webhook using its `webhookid` and associated `eventtypeid`.
  - body: { webhookId: string, eventTypeId: integer }
- `POST https://api.mcp.ai/api/cal/force/refresh/user/oauth/client` — Forces an immediate refresh of oauth tokens for a specified user and client, bypassing the normal expiration cycle, typically when existing tokens are suspected to be invalid or fresh credentials are 
  - body: { userId: integer, clientId: string }
- `POST https://api.mcp.ai/api/cal/get/all/timezones` — Retrieves all supported time zone identifiers (e.g., 'america/new york', 'europe/london') and their associated metadata, excluding specific dst changes or precise utc offset details.
- `POST https://api.mcp.ai/api/cal/get/available/slots/info` — Retrieves available time slots for scheduling by considering existing bookings and availability, based on criteria like a specified time range and event type.
  - body: { endTime: string, orgSlug?: string, duration?: integer, timeZone?: string, startTime: string, slotFormat?: string, eventTypeId: integer, usernameList?: string[], eventTypeSlug?: string, rescheduleUid?: string }
- `POST https://api.mcp.ai/api/cal/get/conference/oauth/authorization/url` — Generates an oauth 2.0 authorization url for a supported conferencing `app` to initiate or refresh its integration with cal.com.
  - body: { app: string, returnTo: string, onErrorReturnTo: string }
- `POST https://api.mcp.ai/api/cal/get/default/schedule/details` — Retrieves the cal system's global default schedule configuration, not custom or user-specific ones.
- `POST https://api.mcp.ai/api/cal/get/event/type/by/team/id` — Retrieves a specific event type by its id, requiring that the event type is associated with the given team id.
  - body: { teamId: integer, eventTypeId: integer }
- `POST https://api.mcp.ai/api/cal/get/google/calendar/oauth/authentication/url` — Generates the initial google calendar oauth 2.0 authorization url for user redirection to begin the authentication and authorization process.
- `POST https://api.mcp.ai/api/cal/get/oauth/clients/user` — Retrieves users associated with a specific oauth client (identified by a valid `clientid`) for auditing access or managing permissions.
  - body: { limit?: integer, clientId: string }
- `POST https://api.mcp.ai/api/cal/get/organization/id` — Retrieves all organization ids associated with the currently authenticated user.
- `POST https://api.mcp.ai/api/cal/get/organization/schedules` — Retrieves a list of schedules (e.g., events, appointments) for an organization, providing basic schedule information, not detailed individual event data.
  - body: { skip?: integer, take?: integer, orgId: integer }
- `POST https://api.mcp.ai/api/cal/get/organization/teams/event/types` — Retrieves event types, including names, durations, and custom settings for team scheduling, for all teams within an existing organization specified by `orgid`.
  - body: { skip?: integer, take?: integer, orgId: integer }
- `POST https://api.mcp.ai/api/cal/get/organization/user/schedules` — Fetches all schedule information for a specific user within an organization; handle potential pagination for extensive schedules.
  - body: { orgId: integer, userId: integer }
- `POST https://api.mcp.ai/api/cal/get/schedule/for/user/in/team` — Fetches all scheduled events or appointments for a specified user within their team and organization.
  - body: { orgId: integer, teamId: integer, userId: integer }
- `POST https://api.mcp.ai/api/cal/get/stripe/connect/info` — Retrieves stripe connect account details (id, charges/payouts status, verification, settings) for the user's linked cal.com account; response may be empty or indicate no integration if no account is l
- `POST https://api.mcp.ai/api/cal/get/team/details/by/org/id/and/team/id` — Retrieves comprehensive details (e.g., members, roles, metadata) for a specific team using its `teamid` within an organization specified by `orgid`.
  - body: { orgId: integer, teamId: integer }
- `POST https://api.mcp.ai/api/cal/get/team/information/by/team/id` — Fetches comprehensive details for an existing team using its unique id; returned fields may vary by team configuration and user permissions.
  - body: { teamId: integer }
- `POST https://api.mcp.ai/api/cal/get/teams/list` — Retrieves all teams the user belongs to, including their names and members.
- `POST https://api.mcp.ai/api/cal/get/webhook/by/id` — Retrieves details for an existing and accessible webhook by its id; this is a read-only operation.
  - body: { webhookId: string }
- `POST https://api.mcp.ai/api/cal/handle/conferencing/oauth/callback/for/app` — Processes an oauth 2.0 callback for a conferencing `app`, exchanging the `code` and `state` for access credentials; ensure an oauth flow was previously initiated.
  - body: { app: string, code: string, state: string }
- `POST https://api.mcp.ai/api/cal/list/event/types` — Retrieves cal event types, filterable by `username` (required if `eventslug` is provided), multiple `usernames`, or organization details (`orgslug` or `orgid`).
  - body: { orgId?: integer, orgSlug?: string, username?: string, eventSlug?: string, usernames?: string }
- `POST https://api.mcp.ai/api/cal/list/organization/memberships` — Retrieves all memberships for a given organization, including user details, roles, status, and membership dates.
  - body: { skip?: integer, take?: integer, orgId: integer }
- `POST https://api.mcp.ai/api/cal/list/team/event/types/by/org/and/team/id` — Retrieves all event types for a specific team within an organization, optionally filtering by a specific event slug.
  - body: { orgId: integer, teamId: integer, eventSlug?: string }
- `POST https://api.mcp.ai/api/cal/mark/booking/absent/for/uid` — Marks the host and/or specified attendees as absent for an existing booking, typically used after a scheduled event to record no-shows.
  - body: { host?: boolean, attendees?: object[], bookingUid: string }
- `POST https://api.mcp.ai/api/cal/modify/org/attribute/by/id` — Partially updates an organization attribute using `orgid` and `attributeid`, allowing modification of its name, slug, type, or enabled status; changing the 'type' may affect existing data.
  - body: { name?: string, slug?: string, type?: string, orgId: integer, enabled?: boolean, attributeId: string }
- `POST https://api.mcp.ai/api/cal/modify/organization/membership/by/id` — Updates an organization membership's status (accepted), role, or impersonation settings, identified by `orgid` and `membershipid` in the path; requires at least one of these fields in the request to a
  - body: { role?: string, orgId: integer, accepted?: boolean, membershipId: integer, disableImpersonation?: boolean }
- `POST https://api.mcp.ai/api/cal/patch/organization/attribute/option` — Partially updates a specific option for an organization's attribute, modifying its 'value' and/or 'slug'; at least one of 'value' or 'slug' must be provided.
  - body: { slug?: string, orgId: integer, value?: string, optionId: string, attributeId: string }
- `POST https://api.mcp.ai/api/cal/patch/organization/user/details` — Partially updates details for a user that exists within the specified organization.
  - body: { orgId: integer, userId: integer }
- `POST https://api.mcp.ai/api/cal/patch/team/details/by/id` — Updates specified details for an existing team identified by `teamid`; unspecified fields remain unchanged.
  - body: { bio?: string, name?: string, slug?: string, theme?: string, teamId: integer, appLogo?: string, logoUrl?: string, metadata?: string, timeZone?: string, bannerUrl?: string, isPrivate?: boolean, weekStart?: string, brandColor?: string, timeFormat?: integer, appIconLogo?: string, calVideoLogo?: string, hideBranding?: boolean, bookingLimits?: string, darkBrandColor?: string, hideBookATeamMember?: boolean, includeManagedEventsInLimits?: boolean }
- `POST https://api.mcp.ai/api/cal/patch/webhook/event/type` — Updates configuration (e.g., payload template, active status, url, triggers, secret) for an existing webhook tied to a specific event type.
  - body: { active?: boolean, secret?: string, triggers?: string, webhookId: string, eventTypeId: integer, subscriberUrl?: string, payloadTemplate?: string }
- `POST https://api.mcp.ai/api/cal/post/calendar/credentials` — Use to submit/update authentication credentials (passed in the request body) for an existing calendar, enabling cal to connect with external calendar services for synchronization.
  - body: { calendar: string }
- `POST https://api.mcp.ai/api/cal/post/conferencing/app/connect` — Connects or reconnects cal.com with a specified conferencing application to enable future virtual meeting scheduling, but does not itself create or schedule meetings.
  - body: { app: string }
- `POST https://api.mcp.ai/api/cal/post/new/booking/request` — Creates a new booking for an active event type, scheduling it for a specified start time (preferably in the future) with primary attendee details and optional customizations.
  - body: { start: string, guests?: string[], attendee: object, location?: object, metadata?: object, eventTypeId: integer, lengthInMinutes?: integer, bookingFieldsResponses?: object }
- `POST https://api.mcp.ai/api/cal/post/org/attribute/option/by/user` — Assigns an existing attribute option (using `attributeoptionid`) or creates a new one (using `value`) for a user, linking it to a specified `attributeid` which must already exist within the organizati
  - body: { orgId: integer, value?: string, userId: integer, attributeId: string, attributeOptionId?: string }
- `POST https://api.mcp.ai/api/cal/post/selected/calendars` — Links a new external calendar or updates an existing link to one, enabling synchronization with the cal application by specifying the `integration` provider, the calendar's `externalid`, and the `cred
  - body: { externalId: string, integration: string, credentialId: integer }
- `POST https://api.mcp.ai/api/cal/post/user/to/organization` — Adds a new user to an existing organization (identified by `orgid` in path), requiring user's `email` and allowing extensive optional profile customization.
  - body: { email: string, orgId: integer, theme?: string, locale?: string, weekday?: string, appTheme?: string, timeZone?: string, username?: string, avatarUrl?: string, autoAccept?: boolean, brandColor?: string, timeFormat?: integer, hideBranding?: boolean, darkBrandColor?: string, organizationRole?: string, defaultScheduleId?: integer }
- `POST https://api.mcp.ai/api/cal/post/webhook/event` — Creates a new cal.com webhook subscription to send real-time notifications for specified calendar events to a publicly accessible subscriber url.
  - body: { active: boolean, secret?: string, triggers: string, subscriberUrl: string, payloadTemplate?: string }
- `POST https://api.mcp.ai/api/cal/reassign/booking/to/another/user` — Reassigns an existing, active booking to a specified, authorized user; does not notify participants of this change.
  - body: { reason?: string, userId: integer, bookingUid: string }
- `POST https://api.mcp.ai/api/cal/reassign/booking/with/uid` — Reassigns the specified booking to a new team member, who is determined by the system rather than being specified in the request.
  - body: { bookingUid: string }
- `POST https://api.mcp.ai/api/cal/refresh/oauth/token/for/client/id` — Refreshes an oauth access token for a specified `clientid` and managed user using their `refreshtoken`, enabling continued api access when the current token is near or past expiry.
  - body: { clientId: string, refreshToken: string }
- `POST https://api.mcp.ai/api/cal/reschedule/booking/by/uid` — Reschedules an existing booking (identified by `bookinguid`) to a new time, provided the new slot's availability is confirmed beforehand; all other rescheduling parameters (e.g., new date, time) must 
  - body: { bookingUid: string }
- `POST https://api.mcp.ai/api/cal/reserve/slot/for/event` — Temporarily reserves an available time slot for an existing and bookable event type, useful for high-demand slots to prevent double-bookings while the user completes the booking.
  - body: { bookingUid?: string, eventTypeId: integer, slotUtcEndDate: string, slotUtcStartDate: string }
- `POST https://api.mcp.ai/api/cal/retrieve/attribute/options/for/org` — Retrieves all available options for a specific attribute within a designated organization, requiring valid and associated `orgid` and `attributeid`.
  - body: { orgId: integer, attributeId: string }
- `POST https://api.mcp.ai/api/cal/retrieve/booking/details/by/uid` — Fetches comprehensive details for an existing booking, identified by its `bookinguid`.
  - body: { bookingUid: string }
- `POST https://api.mcp.ai/api/cal/retrieve/calendar/busy/times` — To find busy calendar slots for scheduling/conflict detection, call this with a valid `credentialid`, an `externalid` accessible by it, and a recognized iana `loggedinuserstz`; returns only busy inter
  - body: { dateTo?: string, dateFrom?: string, externalId: string, credentialId: integer, loggedInUsersTz: string }
- `POST https://api.mcp.ai/api/cal/retrieve/calendar/list` — Retrieves a list of all calendar summaries (no event details) associated with the authenticated user's account.
- `POST https://api.mcp.ai/api/cal/retrieve/current/team/for/organization` — Retrieves details of the team(s) for the currently authenticated user within the specified organization `orgid`.
  - body: { skip?: integer, take?: integer, orgId: integer }
- `POST https://api.mcp.ai/api/cal/retrieve/default/conferencing/settings` — Retrieves an account's or organization's read-only default conferencing settings in cal.com (e.g., video platform, meeting duration) to inform event creation or ensure consistency.
- `POST https://api.mcp.ai/api/cal/retrieve/event/type/by/id` — Retrieves comprehensive details for a specific, existing cal.com event type using its unique id; this is a read-only action and does not return associated events or bookings.
  - body: { eventTypeId: string }
- `POST https://api.mcp.ai/api/cal/retrieve/membership/from/organization` — Retrieves detailed information about a specific membership within a particular organization.
  - body: { orgId: integer, membershipId: integer }
- `POST https://api.mcp.ai/api/cal/retrieve/my/information` — Retrieves the authenticated user's core profile information (e.g., name, email, timezone); does not retrieve related data like calendar events or schedules.
- `POST https://api.mcp.ai/api/cal/retrieve/oauth/client/user/by/id` — Retrieves detailed information for an existing user specifically associated with an existing oauth client.
  - body: { userId: integer, clientId: string }
- `POST https://api.mcp.ai/api/cal/retrieve/oauth/client/webhook/by/id` — Retrieves a specific webhook using its `webhookid` and the `clientid` of its associated oauth client.
  - body: { clientId: string, webhookId: string }
- `POST https://api.mcp.ai/api/cal/retrieve/organization/attributes` — Retrieves detailed attributes (e.g., configurations, settings, metadata) for an organization, identified by its `orgid`, which must correspond to an existing organization.
  - body: { skip?: integer, take?: integer, orgId: integer }
- `POST https://api.mcp.ai/api/cal/retrieve/organization/attributes/options` — Fetches all available attribute options for a specific user within a given organization, provided the organization and user exist and the user is part of the organization.
  - body: { orgId: integer, userId: integer }
- `POST https://api.mcp.ai/api/cal/retrieve/organization/webhook/by/id` — Retrieves detailed information, including configuration and status, for a specific webhook by its id (`webhookid`) within a given organization (`orgid`).
  - body: { orgId: integer, webhookId: string }
- `POST https://api.mcp.ai/api/cal/retrieve/organization/webhooks/by/org/id` — Retrieves a list of webhooks for an organization specified by `orgid`, supporting pagination; this is a read-only operation.
  - body: { skip?: integer, take?: integer, orgId: integer }
- `POST https://api.mcp.ai/api/cal/retrieve/provider/details` — Retrieves detailed information for an existing provider in the cal scheduling system using their unique client id.
  - body: { clientId: string }
- `POST https://api.mcp.ai/api/cal/retrieve/schedules/list` — Retrieves a comprehensive list of all schedules associated with the authenticated user's cal.com account or organization.
- `POST https://api.mcp.ai/api/cal/retrieve/team/details/in/organization` — Retrieves a paginated list of teams and their details for a specific organization id; individual team member details or schedules are not included.
  - body: { skip?: integer, take?: integer, orgId: integer }
- `POST https://api.mcp.ai/api/cal/retrieve/team/event/types` — Retrieves event types for a team within the cal scheduling system; this action does not provide details on scheduled instances or member availability.
  - body: { teamId: integer, eventSlug?: string }
- `POST https://api.mcp.ai/api/cal/retrieve/team/membership/by/id` — Retrieves detailed information, including role and status, for a specific team membership using its id, for a given organization and team.
  - body: { orgId: integer, teamId: integer, membershipId: integer }
- `POST https://api.mcp.ai/api/cal/retrieve/team/membership/details` — Retrieves detailed attributes for a specific team membership by its id and the team id, such as member information, role, and status; does not list all team members.
  - body: { teamId: integer, membershipId: integer }
- `POST https://api.mcp.ai/api/cal/retrieve/team/memberships` — Retrieves a list of memberships, detailing member roles and statuses, for an existing team specified by `teamid`, with support for pagination.
  - body: { skip?: integer, take?: integer, teamId: integer }
- `POST https://api.mcp.ai/api/cal/retrieve/team/memberships/for/organization` — Retrieves all user memberships, including their roles and states, for a specific team within an organization.
  - body: { skip?: integer, take?: integer, orgId: integer, teamId: integer }
- `POST https://api.mcp.ai/api/cal/retrieve/users/in/organization` — Retrieves users associated with a specific organization id, excluding individual scheduling or calendar data; the `orgid` must be a valid identifier for an existing organization.
  - body: { skip?: integer, take?: integer, orgId: integer, emails?: string[] }
- `POST https://api.mcp.ai/api/cal/retrieve/v2/conferencing/info` — Retrieves an authenticated cal user's or organization's video conferencing configurations, capabilities, and installed apps, useful for understanding options before scheduling or verifying setups; pro
- `POST https://api.mcp.ai/api/cal/retrieve/webhook/details/for/oauth/client` — Retrieves a list of webhooks for a specific oauth client, supporting pagination.
  - body: { skip?: integer, take?: integer, clientId: string }
- `POST https://api.mcp.ai/api/cal/retrieve/webhooks/for/event/type` — Retrieves a paginated list of webhooks (including urls, subscribed events, and status) for a specified, existing event type id, useful for auditing configurations or troubleshooting.
  - body: { skip?: integer, take?: integer, eventTypeId: integer }
- `POST https://api.mcp.ai/api/cal/retrieve/webhooks/list` — Retrieves a paginated list of webhooks from the user's cal scheduling system account, which are used for real-time notifications on events like new bookings, cancellations, or updates.
  - body: { skip?: integer, take?: integer }
- `POST https://api.mcp.ai/api/cal/save/calendar/entry` — Saves or updates a calendar's settings using a get request, typically for data already on the server or simple updates via query parameters.
  - body: { code: string, state: string, calendar: string }
- `POST https://api.mcp.ai/api/cal/save/calendar/ics/feeds` — Imports and saves one or more publicly accessible external icalendar (ics) feed urls into the cal.com calendar system.
  - body: { urls: string[], readOnly?: boolean }
- `POST https://api.mcp.ai/api/cal/save/oauth/credentials/via/gcal/api` — Completes the google calendar oauth 2.0 flow by exchanging the `code` and `state` (received from google's redirect after user consent) for access and refresh tokens.
  - body: { code: string, state: string }
- `POST https://api.mcp.ai/api/cal/save/stripe/details` — Completes the stripe oauth flow by saving stripe details; call this when a user is redirected back from stripe with an authorization `code` and `state`.
  - body: { code: string, state: string }
- `POST https://api.mcp.ai/api/cal/set/default/conferencing/app` — Sets the specified, valid, and configured conferencing application as the default for new meetings for the authenticated user.
  - body: { app: string }
- `POST https://api.mcp.ai/api/cal/update/destination/calendar/integration` — Updates the destination calendar for syncing events, using `integration` and `externalid` (typically from `/calendars` endpoint).
  - body: { externalId: string, integration: string }
- `POST https://api.mcp.ai/api/cal/update/oauth/client/user/settings` — Updates specified profile and scheduling preference fields for a user associated with an oauth client; `defaultscheduleid`, if provided, must be an existing, valid schedule for the user.
  - body: { name?: string, email?: string, locale?: string, userId: integer, clientId: string, timeZone?: string, avatarUrl?: string, weekStart?: string, timeFormat?: integer, defaultScheduleId?: integer }
- `POST https://api.mcp.ai/api/cal/update/oauth/client/webhook` — Updates specified properties of an existing webhook for an oauth client; omitted fields remain unchanged.
  - body: { active?: boolean, secret?: string, clientId: string, triggers?: string, webhookId: string, subscriberUrl?: string, payloadTemplate?: string }
- `POST https://api.mcp.ai/api/cal/update/schedule/by/id` — Updates an existing schedule by its id, allowing partial modification of properties; providing `availability` or `overrides` replaces them entirely.
  - body: { name?: string, timeZone?: string, isDefault?: boolean, overrides?: object[], scheduleId: string, availability?: object[] }
- `POST https://api.mcp.ai/api/cal/update/team/information/by/id` — Updates an existing team's information by its id within a specified organization; the `slug`, if provided, must be unique within the organization.
  - body: { bio?: string, name?: string, slug?: string, orgId: integer, theme?: string, teamId: integer, appLogo?: string, logoUrl?: string, metadata?: string, timeZone?: string, bannerUrl?: string, isPrivate?: boolean, weekStart?: string, brandColor?: string, timeFormat?: integer, appIconLogo?: string, calVideoLogo?: string, hideBranding?: boolean, bookingLimits?: string, darkBrandColor?: string, hideBookATeamMember?: boolean, includeManagedEventsInLimits?: boolean }
- `POST https://api.mcp.ai/api/cal/update/team/membership/by/id` — Updates specified properties (e.g., acceptance status, role, impersonation settings) of an existing team membership, identified by `teamid` and `membershipid`, supporting partial updates where only pr
  - body: { role?: string, teamId: integer, accepted?: boolean, membershipId: integer, disableImpersonation?: boolean }
- `POST https://api.mcp.ai/api/cal/update/team/membership/properties` — Updates attributes like acceptance status, role, or impersonation settings for an existing team membership; only provided fields are changed, and this action cannot create or delete memberships.
  - body: { role?: string, orgId: integer, teamId: integer, accepted?: boolean, membershipId: integer, disableImpersonation?: boolean }
- `POST https://api.mcp.ai/api/cal/update/user/profile/details` — Updates the profile information and preferences for the authenticated user, affecting only the fields provided in the request.
  - body: { name?: string, email?: string, locale?: string, timeZone?: string, avatarUrl?: string, weekStart?: string, timeFormat?: integer, defaultScheduleId?: integer }
- `POST https://api.mcp.ai/api/cal/update/user/schedule/in/organization` — Modifies an existing schedule for a specified user within an organization by updating only the provided fields; the organization, user, and schedule must already exist.
  - body: { name?: string, orgId: integer, userId: integer, timeZone?: string, isDefault?: boolean, overrides?: object[], scheduleId: integer, availability?: object[] }
- `POST https://api.mcp.ai/api/cal/update/webhook/by/id` — Updates an existing cal.com webhook by its `webhookid`, allowing partial modification of its attributes; only explicitly provided fields will be changed.
  - body: { active?: boolean, secret?: string, triggers?: string, webhookId: string, subscriberUrl?: string, payloadTemplate?: string }
- `POST https://api.mcp.ai/api/cal/update/webhook/for/organization` — Use this action to modify settings of an already created webhook for an organization, such as its target url, active status, or the events that trigger it.
  - body: { orgId: integer, active?: boolean, secret?: string, triggers?: string, webhookId: string, subscriberUrl?: string, payloadTemplate?: string }

## More
- Page: https://mcp.ai/cal
- Agent spec (llms.txt): https://mcp.ai/cal/llms.txt
- Postman collection: https://mcp.ai/cal/postman.json
