Connects Claude directly to your Calendly account via the Calendly API, letting you check availability, view scheduled events, search meetings by invitee, and inspect event types through natural language. The free tier covers read operations like listing upcoming meetings and checking busy times. Premium adds write capabilities including creating one-off scheduling links, canceling and rescheduling events, plus analytics on meeting patterns and invitee history. Useful when you're managing your calendar in conversation with Claude and want to skip opening the Calendly dashboard. Requires a Calendly Personal Access Token from your account's API settings.
Public tool metadata for what this MCP can expose to an agent.
users-get_current_userGet current user Returns basic information about your user account. <!-- theme: info --> > #### Required scopes: `users:read` :return: Returns the result object.Get current user Returns basic information about your user account. <!-- theme: info --> > #### Required scopes: `users:read` :return: Returns the result object.
No parameter schema in public metadata yet.
users-get_userGet user Returns information about a specified User. <!-- theme: info --> > #### Required scopes: `users:read` :param uuid: User unique identifier, or the constant "me" to reference the caller (required) :type uuid: str :return: Returns the result object.1 paramsGet user Returns information about a specified User. <!-- theme: info --> > #### Required scopes: `users:read` :param uuid: User unique identifier, or the constant "me" to reference the caller (required) :type uuid: str :return: Returns the result object.
uuidstringevent_types-create_event_typeCreate Event Type Create a new Event Type **NOTE:** * Currently, this endpoint only supports one-on-one event types (kind: "solo"). <!-- theme: info --> > #### Required scopes: `event_types:write` :param create_event_type_request: (required) :type create_event_type_request: Cr...1 paramsCreate Event Type Create a new Event Type **NOTE:** * Currently, this endpoint only supports one-on-one event types (kind: "solo"). <!-- theme: info --> > #### Required scopes: `event_types:write` :param create_event_type_request: (required) :type create_event_type_request: Cr...
create_event_type_requestobjectevent_types-update_event_typeUpdate Event Type Update an existing Event Type **NOTE:** * Currently, this endpoint only supports one-on-one event types (kind: "solo"). <!-- theme: info --> > #### Required scopes: `event_types:write` :param uuid: (required) :type uuid: str :param update_event_type_request:...2 paramsUpdate Event Type Update an existing Event Type **NOTE:** * Currently, this endpoint only supports one-on-one event types (kind: "solo"). <!-- theme: info --> > #### Required scopes: `event_types:write` :param uuid: (required) :type uuid: str :param update_event_type_request:...
uuidstringupdate_event_type_requestobjectevent_types-list_event_typesList User's Event Types Returns all Event Types associated with a specified User. Use: * `organization` to look up all Event Types that belong to the organization * `user` to look up a user's Event Types in an organization Either `organization` or `user` are required query par...8 paramsList User's Event Types Returns all Event Types associated with a specified User. Use: * `organization` to look up all Event Types that belong to the organization * `user` to look up a user's Event Types in an organization Either `organization` or `user` are required query par...
sortvalueuservaluecountvalueactivevaluepage_tokenvalueorganizationvalueadmin_managedvalueuser_availability_schedulevalueevent_types-get_event_typeGet Event Type Returns information about a specified Event Type. <!-- theme: info --> > #### Required scopes: `event_types:read` :param uuid: (required) :type uuid: str :return: Returns the result object.1 paramsGet Event Type Returns information about a specified Event Type. <!-- theme: info --> > #### Required scopes: `event_types:read` :param uuid: (required) :type uuid: str :return: Returns the result object.
uuidstringevent_types-list_event_type_available_timesList Event Type Available Times Returns a list of available times for an event type within a specified date range. Date range can be no greater than 1 week (7 days). **NOTE:** * This endpoint does not support traditional keyset pagination. <!-- theme: info --> > #### Required...3 paramsList Event Type Available Times Returns a list of available times for an event type within a specified date range. Date range can be no greater than 1 week (7 days). **NOTE:** * This endpoint does not support traditional keyset pagination. <!-- theme: info --> > #### Required...
end_timestringevent_typestringstart_timestringevent_types-list_event_type_availability_scheduleList Event Type Availability Schedules Return the availability for an event type <!-- theme: info --> > #### Required scopes: `availability:read` :param event_type: The URI associated with the event type (required) :type event_type: str :return: Returns the result object.1 paramsList Event Type Availability Schedules Return the availability for an event type <!-- theme: info --> > #### Required scopes: `availability:read` :param event_type: The URI associated with the event type (required) :type event_type: str :return: Returns the result object.
event_typestringevent_types-update_event_type_availability_scheduleUpdate Event Type Availability Schedules Update an event type availability schedule <!-- theme: info --> > #### Required scopes: `availability:write` :param event_type: Event Type uri in which to update the availability schedule (required) :type event_type: str :param update_e...2 paramsUpdate Event Type Availability Schedules Update an event type availability schedule <!-- theme: info --> > #### Required scopes: `availability:write` :param event_type: Event Type uri in which to update the availability schedule (required) :type event_type: str :param update_e...
event_typestringupdate_event_type_availability_requestobjectlocations-list_user_meeting_locationsList User Meeting Locations Returns configured location information for a given user. <!-- theme: info --> > #### Required scopes: `locations:read` :param user: The URI associated with the user (required) :type user: str :return: Returns the result object.1 paramsList User Meeting Locations Returns configured location information for a given user. <!-- theme: info --> > #### Required scopes: `locations:read` :param user: The URI associated with the user (required) :type user: str :return: Returns the result object.
userstringmeetings-list_eventsList Events Returns a list of Events. * Pass `organization` parameter to return events for that organization (requires admin/owner privilege) * Pass `user` parameter to return events for a specific User * Pass `group` parameter to return events for a specific Group (requires o...10 paramsList Events Returns a list of Events. * Pass `organization` parameter to return events for that organization (requires admin/owner privilege) * Pass `user` parameter to return events for a specific User * Pass `group` parameter to return events for a specific Group (requires o...
sortvalueuservaluecountvaluegroupvaluestatusvaluepage_tokenvalueorganizationvalueinvitee_emailvaluemax_start_timevaluemin_start_timevaluemeetings-get_eventGet Event Returns information about a specified Event. <!-- theme: info --> > #### Required scopes: `scheduled_events:read` :param uuid: The event's unique identifier (required) :type uuid: str :return: Returns the result object.1 paramsGet Event Returns information about a specified Event. <!-- theme: info --> > #### Required scopes: `scheduled_events:read` :param uuid: The event's unique identifier (required) :type uuid: str :return: Returns the result object.
uuidstringmeetings-cancel_eventCancel Event Cancels specified event. <!-- theme: info --> > #### Required scopes: `scheduled_events:write` :param uuid: The event's unique indentifier (required) :type uuid: str :param create_scheduled_event_cancellation_request: Optional cancellation reason. :type create_sch...2 paramsCancel Event Cancels specified event. <!-- theme: info --> > #### Required scopes: `scheduled_events:write` :param uuid: The event's unique indentifier (required) :type uuid: str :param create_scheduled_event_cancellation_request: Optional cancellation reason. :type create_sch...
uuidstringcreate_scheduled_event_cancellation_requestvaluemeetings-create_inviteeCreate Event Invitee Create a new Event Invitee. Standard notifications, calendar invites, reschedules, and workflows run as if booked via the Calendly UI. **NOTE:** * Access to this endpoint is limited to Calendly users on paid plans (Standard and above). Users on the Free pl...1 paramsCreate Event Invitee Create a new Event Invitee. Standard notifications, calendar invites, reschedules, and workflows run as if booked via the Calendly UI. **NOTE:** * Access to this endpoint is limited to Calendly users on paid plans (Standard and above). Users on the Free pl...
post_invitee_requestobjectmeetings-list_event_inviteesList Event Invitees Returns a list of Invitees for an event. <!-- theme: info --> > #### Required scopes: `scheduled_events:read` :param uuid: (required) :type uuid: str :param status: Indicates if the invitee "canceled" or still "active" :type status: str :param sort: Order r...6 paramsList Event Invitees Returns a list of Invitees for an event. <!-- theme: info --> > #### Required scopes: `scheduled_events:read` :param uuid: (required) :type uuid: str :param status: Indicates if the invitee "canceled" or still "active" :type status: str :param sort: Order r...
sortvalueuuidstringcountvalueemailvaluestatusvaluepage_tokenvaluemeetings-get_event_inviteeGet Event Invitee Returns information about a specified Invitee (person invited to an event). <!-- theme: info --> > #### Required scopes: `scheduled_events:read` :param event_uuid: The event's unique identifier (required) :type event_uuid: str :param invitee_uuid: The invitee...2 paramsGet Event Invitee Returns information about a specified Invitee (person invited to an event). <!-- theme: info --> > #### Required scopes: `scheduled_events:read` :param event_uuid: The event's unique identifier (required) :type event_uuid: str :param invitee_uuid: The invitee...
event_uuidstringinvitee_uuidstringscheduling_links-create_single_use_scheduling_linkCreate Single-Use Scheduling Link Creates a single-use scheduling link. <!-- theme: info --> > #### Required scopes: `scheduling_links:write` :param create_scheduling_link_request: (required) :type create_scheduling_link_request: CreateSchedulingLinkRequest :return: Returns th...1 paramsCreate Single-Use Scheduling Link Creates a single-use scheduling link. <!-- theme: info --> > #### Required scopes: `scheduling_links:write` :param create_scheduling_link_request: (required) :type create_scheduling_link_request: CreateSchedulingLinkRequest :return: Returns th...
create_scheduling_link_requestobjectavailability-list_user_availability_schedulesList User Availability Schedules Returns the availability schedules of the given user. <!-- theme: info --> > #### Required scopes: `availability:read` :param user: A URI reference to a user (required) :type user: str :return: Returns the result object.1 paramsList User Availability Schedules Returns the availability schedules of the given user. <!-- theme: info --> > #### Required scopes: `availability:read` :param user: A URI reference to a user (required) :type user: str :return: Returns the result object.
userstringavailability-get_user_availability_scheduleGet User Availability Schedule This will return the availability schedule of the given UUID. <!-- theme: info --> > #### Required scopes: `availability:read` :param uuid: The UUID of the availability schedule. (required) :type uuid: str :return: Returns the result object.1 paramsGet User Availability Schedule This will return the availability schedule of the given UUID. <!-- theme: info --> > #### Required scopes: `availability:read` :param uuid: The UUID of the availability schedule. (required) :type uuid: str :return: Returns the result object.
uuidstringavailability-list_user_busy_timesList User Busy Times Returns an ascending list of user internal and external scheduled events within a specified date range. Date range can be no greater than 1 week (7 days). **NOTE:** * This endpoint does not support traditional keyset pagination. * External events will only...3 paramsList User Busy Times Returns an ascending list of user internal and external scheduled events within a specified date range. Date range can be no greater than 1 week (7 days). **NOTE:** * This endpoint does not support traditional keyset pagination. * External events will only...
userstringend_timestringstart_timestringmeetings-create_invitee_no_showCreate Invitee No Show Marks an Invitee as a No Show. <!-- theme: info --> > #### Required scopes: `scheduled_events:write` :param create_invitee_no_show_request: (required) :type create_invitee_no_show_request: CreateInviteeNoShowRequest :return: Returns the result object.1 paramsCreate Invitee No Show Marks an Invitee as a No Show. <!-- theme: info --> > #### Required scopes: `scheduled_events:write` :param create_invitee_no_show_request: (required) :type create_invitee_no_show_request: CreateInviteeNoShowRequest :return: Returns the result object.
create_invitee_no_show_requestobjectmeetings-get_invitee_no_showGet Invitee No Show Returns information about a specified Invitee No Show. <!-- theme: info --> > #### Required scopes: `scheduled_events:read` :param uuid: (required) :type uuid: str :return: Returns the result object.1 paramsGet Invitee No Show Returns information about a specified Invitee No Show. <!-- theme: info --> > #### Required scopes: `scheduled_events:read` :param uuid: (required) :type uuid: str :return: Returns the result object.
uuidstringmeetings-delete_invitee_no_showDelete Invitee No Show Undoes marking an Invitee as a No Show. <!-- theme: info --> > #### Required scopes: `scheduled_events:write` :param uuid: (required) :type uuid: str :return: Returns the result object.1 paramsDelete Invitee No Show Undoes marking an Invitee as a No Show. <!-- theme: info --> > #### Required scopes: `scheduled_events:write` :param uuid: (required) :type uuid: str :return: Returns the result object.
uuidstringorganizations-get_organizationGet Organization Returns the details of a specified Organization. <!-- theme: info --> > #### Required scopes: `organizations:read` :param uuid: The organization's unique identifier (required) :type uuid: str :return: Returns the result object.1 paramsGet Organization Returns the details of a specified Organization. <!-- theme: info --> > #### Required scopes: `organizations:read` :param uuid: The organization's unique identifier (required) :type uuid: str :return: Returns the result object.
uuidstringorganizations-list_organization_membershipsList Organization Memberships Use this to list the Organization Memberships for all users belonging to an organization, use: * `user` to look up a user's membership in an organization * `organization` to look up all users that belong to the organization This endpoint can also...6 paramsList Organization Memberships Use this to list the Organization Memberships for all users belonging to an organization, use: * `user` to look up a user's membership in an organization * `organization` to look up all users that belong to the organization This endpoint can also...
rolevalueuservaluecountvalueemailvaluepage_tokenvalueorganizationvalueorganizations-get_organization_membershipGet Organization Membership Returns information about a user's Organization Membership <!-- theme: info --> > #### Required scopes: `organizations:read` :param uuid: The organization membership's unique identifier (required) :type uuid: str :return: Returns the result object.1 paramsGet Organization Membership Returns information about a user's Organization Membership <!-- theme: info --> > #### Required scopes: `organizations:read` :param uuid: The organization membership's unique identifier (required) :type uuid: str :return: Returns the result object.
uuidstringorganizations-delete_organization_membershipRemove User from Organization Removes a user from an organization. Notes: * To remove users, the caller must have admin rights for the organization * An organization owner can't be removed <!-- theme: info --> > #### Required scopes: `organizations:write` :param uuid: The orga...1 paramsRemove User from Organization Removes a user from an organization. Notes: * To remove users, the caller must have admin rights for the organization * An organization owner can't be removed <!-- theme: info --> > #### Required scopes: `organizations:write` :param uuid: The orga...
uuidstringorganizations-list_organization_invitationsList Organization Invitations Returns a list of Organization Invitations that were sent to the organization's members. <!-- theme: info --> > #### Required scopes: `organizations:read` :param uuid: The organization's unique identifier (required) :type uuid: str :param count: T...6 paramsList Organization Invitations Returns a list of Organization Invitations that were sent to the organization's members. <!-- theme: info --> > #### Required scopes: `organizations:read` :param uuid: The organization's unique identifier (required) :type uuid: str :param count: T...
sortvalueuuidstringcountvalueemailvaluestatusvaluepage_tokenvalueorganizations-create_organization_invitationInvite User to Organization Invites a user to an organization. <!-- theme: info --> > #### Required scopes: `organizations:write` :param uuid: The organization's unique identifier (required) :type uuid: str :param create_organization_invitation_request: (required) :type create...2 paramsInvite User to Organization Invites a user to an organization. <!-- theme: info --> > #### Required scopes: `organizations:write` :param uuid: The organization's unique identifier (required) :type uuid: str :param create_organization_invitation_request: (required) :type create...
uuidstringcreate_organization_invitation_requestobjectorganizations-revoke_organization_invitationRevoke User's Organization Invitation Use this to revoke an Organization Invitation to an organization. Once revoked, the invitation link that was sent to the invitee is no longer valid. <!-- theme: info --> > #### Required scopes: `organizations:write` :param org_uuid: The or...2 paramsRevoke User's Organization Invitation Use this to revoke an Organization Invitation to an organization. Once revoked, the invitation link that was sent to the invitee is no longer valid. <!-- theme: info --> > #### Required scopes: `organizations:write` :param org_uuid: The or...
uuidstringorg_uuidstringrouting_forms-list_routing_formsList Routing Forms Get a list of Routing Forms for a specified Organization. <!-- theme: info --> > #### Required scopes: `routing_forms:read` :param organization: View organization routing forms associated with the organization's URI. (required) :type organization: str :param...4 paramsList Routing Forms Get a list of Routing Forms for a specified Organization. <!-- theme: info --> > #### Required scopes: `routing_forms:read` :param organization: View organization routing forms associated with the organization's URI. (required) :type organization: str :param...
sortvaluecountvaluepage_tokenvalueorganizationstringrouting_forms-get_routing_formGet Routing Form Get a specified Routing Form. <!-- theme: info --> > #### Required scopes: `routing_forms:read` :param uuid: (required) :type uuid: str :return: Returns the result object.1 paramsGet Routing Form Get a specified Routing Form. <!-- theme: info --> > #### Required scopes: `routing_forms:read` :param uuid: (required) :type uuid: str :return: Returns the result object.
uuidstringrouting_forms-list_routing_form_submissionsList Routing Form Submissions Get a list of Routing Form Submissions for a specified Routing Form. <!-- theme: info --> > #### Required scopes: `routing_forms:read` :param form: View routing form submissions associated with the routing form's URI. (required) :type form: str :p...4 paramsList Routing Form Submissions Get a list of Routing Form Submissions for a specified Routing Form. <!-- theme: info --> > #### Required scopes: `routing_forms:read` :param form: View routing form submissions associated with the routing form's URI. (required) :type form: str :p...
formstringsortvaluecountvaluepage_tokenvaluerouting_forms-get_routing_form_submissionGet Routing Form Submission Get a specified Routing Form Submission. <!-- theme: info --> > #### Required scopes: `routing_forms:read` :param uuid: (required) :type uuid: str :return: Returns the result object.1 paramsGet Routing Form Submission Get a specified Routing Form Submission. <!-- theme: info --> > #### Required scopes: `routing_forms:read` :param uuid: (required) :type uuid: str :return: Returns the result object.
uuidstringshares-create_shareCreate Share Endpoint for our [Customize Once and Share](https://help.calendly.com/hc/en-us/articles/10594902199191) feature. This allows you to customize events for a specific invitee without needing to make an entirely new event type. ***This feature is only available for on...1 paramsCreate Share Endpoint for our [Customize Once and Share](https://help.calendly.com/hc/en-us/articles/10594902199191) feature. This allows you to customize events for a specific invitee without needing to make an entirely new event type. ***This feature is only available for on...
create_share_requestobjectAn MCP (Model Context Protocol) server that connects Claude Desktop and Claude Code to your Calendly account, enabling natural-language scheduling management.
pip install calendly-mcp
Add the following to your claude_desktop_config.json:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"calendly": {
"command": "calendly-mcp",
"env": {
"CALENDLY_ACCESS_TOKEN": "your-token-here",
"LICENSE_KEY": "optional-premium-key"
}
}
}
}
Set the environment variable before starting Claude Code:
export CALENDLY_ACCESS_TOKEN="your-token-here"
export LICENSE_KEY="optional-premium-key" # only if you have a premium license
Then add the MCP server:
claude mcp add calendly -- calendly-mcp
Or add it to your project's .mcp.json:
{
"mcpServers": {
"calendly": {
"command": "calendly-mcp",
"env": {
"CALENDLY_ACCESS_TOKEN": "your-token-here"
}
}
}
}
| Variable | Required | Description |
|---|---|---|
CALENDLY_ACCESS_TOKEN | Yes | Calendly Personal Access Token or OAuth2 token |
LICENSE_KEY | No | Lemon Squeezy premium license key |
LOG_LEVEL | No | Logging level: DEBUG, INFO, WARNING, ERROR (default: INFO) |
CALENDLY_BASE_URL | No | Override the Calendly API base URL (for testing) |
| Tool | Description | Required Parameters |
|---|---|---|
list_upcoming_events | List upcoming scheduled events with optional filters | None (optional: count, min_start_time, max_start_time, status) |
get_event_details | Get full details of a specific event including invitees and location | event_uuid |
search_events | Search events by invitee name or email (case-insensitive partial match) | query (optional: min_start_time, max_start_time) |
check_availability | Check available time slots from your availability schedules | date_range_start, date_range_end |
get_busy_times | Get busy/unavailable time periods for a date range | start_time, end_time |
list_event_types | List all configured event types with name, duration, and status | None |
get_event_type_details | Get detailed configuration of a specific event type | event_type_uuid |
| Tool | Description | Required Parameters |
|---|---|---|
create_one_off_event | Create a single-use scheduling link for a meeting | event_type_uuid, invitee_email, invitee_name, start_time |
cancel_event | Cancel an existing scheduled event (invitees are notified) | event_uuid (optional: reason) |
reschedule_event | Reschedule an event to a new time | event_uuid, new_start_time |
get_scheduling_stats | Get scheduling analytics: total meetings, avg duration, popular times | min_start_time, max_start_time |
get_invitee_insights | Analyze meeting patterns with a specific contact | invitee_email |
| Feature | Free | Premium |
|---|---|---|
| View upcoming events | Yes | Yes |
| Get event details | Yes | Yes |
| Search events by invitee | Yes | Yes |
| Check availability | Yes | Yes |
| View busy times | Yes | Yes |
| List event types | Yes | Yes |
| Get event type details | Yes | Yes |
| Create scheduling links | -- | Yes |
| Cancel events | -- | Yes |
| Reschedule events | -- | Yes |
| Scheduling analytics | -- | Yes |
| Invitee insights | -- | Yes |
| Price | Free | $12/month |
Upgrade at nyxtools.lemonsqueezy.com/checkout
Once connected, talk to Claude naturally:
git clone https://github.com/nyxtools/calendly-mcp-server.git
cd calendly-mcp-server
python -m venv venv
source venv/bin/activate # or venv\Scripts\activate on Windows
pip install -e ".[dev]"
pytest
pytest --cov=calendly_mcp # with coverage
ruff check src/ tests/
ruff format src/ tests/
mypy src/
You have not set the CALENDLY_ACCESS_TOKEN environment variable. Make sure it is configured in your claude_desktop_config.json (under env) or exported in your shell before running Claude Code.
Your Calendly Personal Access Token is invalid or has been revoked. Generate a new token at Settings > Integrations & Apps > API in Calendly and update your configuration.
The Calendly API enforces rate limits. The MCP server automatically retries with exponential backoff, but if you see persistent rate limit errors, reduce the frequency of requests or wait a few minutes.
api.calendly.com is reachable from your networkhttpx can reach the Calendly APILICENSE_KEY is set correctly in the environmentLOG_LEVEL=DEBUG)command path is correct (calendly-mcp must be on your PATH)calendly-mcp directly in a terminal to check for errorsMIT -- see LICENSE for details.
Copyright (c) 2026 NyxTools
makafeli/n8n-workflow-builder
danishashko/make-mcp
lukisch/n8n-manager-mcp
io.github.us-all/airflow
io.github.infoinlet-marketplace/mcp-workflow