# Calendly MCP connector

Connect Calendly to Elaichi and Claude, ChatGPT, Cursor, or any MCP client can read your scheduled meetings, invitees, event types, and availability, and update them, with each person acting under their own Calendly access.

Source: https://elaichi.ai/connectors/calendly/

## Facts

| | |
| --- | --- |
| Application | Calendly |
| Category | Scheduling |
| AI tools | 59 |
| Authentication | Connects over OAuth |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 59 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Calendly is connected

- List next week's scheduled events for the sales team.
- Which Calendly event types get the most bookings this month?
- Show my busy times before Thursday's customer calls.

## Connect Calendly in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Calendly.
2. Optionally set Share with, then press Connect.
3. Approve it in Calendly. Calendly's own window opens. Whoever approves it decides what this connection can reach.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Calendly tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Calendly to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Calendly to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Calendly to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Calendly to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Calendly tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Calendly through Elaichi

### See who booked a demo this week

Sales. Ask for this week's scheduled Calendly meetings and the invitees on each, then get a short list of who to prepare for before the calls start.

### Cancel and reschedule an interview slot

Recruiting. When a hiring manager drops out, cancel the scheduled Calendly event with a note to the candidate and check the team's busy times to find the next open slot.

### Set up a new onboarding call type

Customer success. Create a Calendly event type for onboarding calls with the right duration and update its availability schedule so the whole success team offers the same hours.

### Update office hours across every event type

Operations. When the team moves to summer hours, update the availability schedules for all Calendly event types in one pass instead of opening each one.

### Keep webinar contacts current in Calendly

Marketing. Add new contacts after a campaign, correct names and email addresses, and remove people who asked to be taken off the list.

### Review who has a Calendly seat

People. List the organization's Calendly memberships, check the activity log for recent changes, and remove the membership of someone who has moved on.

## Frequently asked questions

### How do I connect Calendly to Claude?

First connect Calendly in Elaichi, which opens Calendly's own sign-in page where you approve access the same way you would sign in to Calendly normally, with no client ID or secret to generate. Then in Claude go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp as the endpoint. Claude signs you in through Elaichi and your Calendly meetings, event types, and contacts are available in the conversation.

### Does Calendly work with ChatGPT and Cursor as well as Claude?

Yes. Calendly is connected once in Elaichi, and the same endpoint, https://api.elaichi.ai/mcp, is pasted into Claude, ChatGPT, Cursor, any other MCP client, and the Elaichi Agent. There is nothing separate to set up for each client.

### What can an AI agent actually do with my Calendly data?

It can list your scheduled Calendly meetings and who is invited to each, cancel a meeting, check when a teammate is busy, and create or update event types and their availability schedules. It can also add, edit, and remove Calendly contacts and review organization memberships and the activity log. Short, specific asks such as "cancel my 3pm demo tomorrow" work better than long paragraphs.

### Does connecting Calendly give the AI access to everyone's calendar and event types?

No. Each person signs in to Calendly as themselves, so the AI only sees the Calendly meetings, event types, and contacts that person can already see, and an organization admin's view stays with the admin. Elaichi can narrow that access further with restrictions, but it can never widen it beyond what Calendly itself allows that person.

### Can my team share one Calendly connection?

Yes. One person connects Calendly in Elaichi and shares it with a team, and nobody else ever handles a credential or approves anything in Calendly. Each teammate still signs in to Elaichi as themselves, so every cancellation or contact change in the audit log is attributed to the person who made it.

### Can I stop an agent from cancelling meetings or deleting contacts in Calendly?

Yes. Restrictions in Elaichi work per action, so you can allow reading Calendly meetings and invitees while blocking cancellations, contact deletion, or removing memberships. A blocked action is never shown to Claude, ChatGPT, or any other client at all, so no prompt, accidental or otherwise, can reach it.

### What happens to a Calendly connection when someone leaves?

Offboarding a person in Elaichi ends their access to Calendly through every client at once, including any shared connection they were using. A connection shared with the team keeps working for everyone else who still has access. Disconnecting Calendly once in Elaichi removes it from Claude, ChatGPT, Cursor, and every other client at the same time.

## All 59 Calendly tools

Every tool below is callable through https://api.elaichi.ai/mcp once Calendly is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Calendly organization memberships** (List). List Calendly organization memberships, filterable by organization_id, user, email, or role. Returns: uri, role, user, organization, updated_at, created_at. Requires either user or organization_id to filter results.
- **Get single Calendly organization membership by ID** (Get). Get a single Calendly organization membership by id. Returns: uri, role, user, organization, updated_at, created_at. Required: id.
- **Delete a Calendly organization membership by ID** (Delete). Remove a user from a Calendly organization by membership id. An organization owner cannot be removed. Returns an empty 204 response on success. Required: id.
- **Get single Calendly user by ID** (Get). Get information about a specified Calendly user by id. Returns: uri, name, email, scheduling_url, timezone, avatar_url, created_at, updated_at. Required: id.
- **Get single Calendly organization by ID** (Get). Get a single Calendly organization by id. Returns: uri, created_at, updated_at. Required: id.
- **List all Calendly organizations** (List). List Calendly organizations by label. Returns: uri, created_at, updated_at. Required: label.
- **List all Calendly activity log entries** (List). List Calendly activity log entries for an organization, filterable by action, actor, namespace, date range, and search term. Returns: occurred_at, uri, namespace, action, actor, fully_qualified_name, details, organization. Required: organization_id. Enterprise subscription required.
- **List all Calendly user busy times** (List). List Calendly user busy times (internal and external scheduled events) within a specified date range. Returns: type, start_time, end_time, buffered_start_time, buffered_end_time, event. Required: user, start_time, end_time. Date range cannot exceed 7 days and this endpoint does not support traditional keyset pagination.
- **List all Calendly event types** (List). List Calendly event types for a specified user or organization. Returns: uri, name, active, booking_method, slug, scheduling_url, duration, duration_options, kind, pooling_type, type, color, created_at, updated_at, internal_note, is_paid, description_plain, description_html, profile, secret, deleted_at, admin_managed, locations, position, custom_questions, locale. Required: organization or user…
- **Get single Calendly event type by ID** (Get). Get a single Calendly event type by id. Returns the full event type object including uri, name, active, scheduling_url, duration, kind, color, profile, locations, custom_questions, created_at, and updated_at. Required: id.
- **Create a Calendly event type** (Create). Create a new Calendly event type. Returns the created event type object including uri, name, active, duration, scheduling_url, kind, type, color, booking_method, slug, created_at, updated_at, and configuration details for locations, custom questions, and profile.
- **Update a Calendly event type by ID** (Update). Update a Calendly event type by id. Returns the updated event type including uri, name, active, duration, scheduling_url, color, kind, custom_questions, and locations. Required: id.
- **List all Calendly scheduled events** (List). List Calendly scheduled events, optionally filtered by organization, user, group, invitee email, status, or start-time range. Returns: uri, name, meeting_notes_plain, meeting_notes_html, status, start_time, end_time, event_type, location, invitees_counter, created_at, updated_at, event_memberships, event_guests, cancellation, calendar_event. Max 100 per page.
- **Get single Calendly scheduled event by ID** (Get). Get a single Calendly scheduled event by id. Returns the full event object including uri, name, status, start_time, end_time, event_type, location, invitees_counter, created_at, updated_at, event_memberships, event_guests, and calendar_event. Required: id.
- **Calendly scheduled events cancellation** (Action). Cancel a Calendly scheduled event by uuid, optionally providing a reason. Returns: reason, created_at. Required: uuid.
- **List all Calendly event invitees** (List). List invitees for a Calendly scheduled event. Returns: uri, email, first_name, last_name, name, status, questions_and_answers, timezone, event, created_at, updated_at, tracking, text_reminder_number, rescheduled, old_invitee, new_invitee, cancel_url, reschedule_url, routing_form_submission, cancellation, payment, no_show, reconfirmation, scheduling_method, invitee_scheduled_by. Required: event_id.
- **List all Calendly contacts** (List). List Calendly contacts with optional filters. Returns: uri, email, company, job_title, city, timezone, created_at, updated_at.
- **Get single Calendly contact by ID** (Get). Get a single Calendly contact by id. Returns: uri, email, company, job_title, city, timezone, created_at, updated_at. Required: id.
- **Create a Calendly contact** (Create). Create a new Calendly Contact. Returns the created contact object including uri, email, company, job_title, city, timezone, created_at, and updated_at. Required: email.
- **Update a Calendly contact by ID** (Update). Update an existing Calendly Contact by id. Returns: uri, email, company, job_title, city, timezone, created_at, updated_at. Required: id.
- **Delete a Calendly contact by ID** (Delete). Delete a Calendly Contact by id. Returns an empty 204 response on success. Required: id.
- **Delete a Calendly deletion invitee by ID** (Delete). Submit a request to delete Calendly invitee data for data compliance purposes such as GDPR. The deletion is processed asynchronously. Returns an empty 202 response on success. Required: emails.
- **List all Calendly event type availability schedules** (List). List Calendly event type availability schedules. Returns: event_type, availability_setting, availability_rule. Required: event_type.
- **Calendly event type availability schedules bulk update** (Update). Update a Calendly event type availability schedule. Returns: event_type, availability_setting, availability_rule. Required: event_type, availability_rule with timezone. Updating rules overwrites all existing rules for the event type.
- **List all Calendly event type available times** (List). List available time slots for a Calendly event type within a specified date range. Returns: status, invitees_remaining, start_time, scheduling_url. Required: event_type, start_time, end_time.
- **List all Calendly event type memberships** (List). List event type hosts for a specific Calendly event type. Returns each membership's uri, event_type, member, created_at, and updated_at. Required: event_type (the event type URI).
- **List all Calendly group relationships** (List). List group relationships (group memberships) in Calendly, showing which users belong to which groups within an organization. Returns: uri, group, user, organization, created_at, updated_at. Required: organization.
- **List all Calendly groups** (List). List Calendly groups within a specified organization, used for organizing users into teams for scheduling. Returns: uri, organization, created_at, updated_at. Required: organization.
- **Get single Calendly invitee no show by ID** (Get). Get a Calendly invitee no-show by id. Returns: uri, invitee, created_at. Required: id.
- **Create a Calendly invitee no show** (Create). Mark a Calendly invitee as a no-show. Pass the full invitee URI (not a bare UUID) in the request body as `invitee`. Returns the created no-show object including uri, invitee, and created_at. Required: invitee (full URI).
- **Calendly invitee no shows bulk delete** (Delete). Remove no-show status from a Calendly invitee. Returns an empty 204 response on success. Required: uuid.
- **Create a Calendly invitee** (Create). Create a Calendly invitee for a scheduled event, booking a meeting on behalf of the invitee via the Scheduling API without redirects or the Calendly-hosted UI. Returns: email, name, questions_and_answers, timezone, created_at, updated_at. Required: event_type, start_time, invitee (with name and email). Requires a paid Calendly plan.
- **List all Calendly locations** (List). List configured meeting locations in Calendly. Returns a collection of location configuration objects including kind, phone_number, additional_info, and location.
- **List all Calendly meeting recaps** (List). List Calendly meeting recaps with optional filters for event, user, organization, attendee, and meeting start time range. Returns: uri, summary, action_items, discussion, meeting_notes, event, user, organization, start_time, attendees, created_at, updated_at.
- **Get single Calendly meeting recap by ID** (Get). Get a single Calendly meeting recap by id, including highlights (summary, action items, discussion) and meeting metadata. Returns: uri, summary, action_items, discussion, meeting_notes, event, user, organization, start_time, attendees, created_at, updated_at. Required: id.
- **Update a Calendly meeting recap by ID** (Update). Update a Calendly meeting recap's highlights by id — summary, action items, and discussion notes. Returns: uri, summary, action_items, discussion, meeting_notes, event, user, organization, start_time, attendees, created_at, updated_at. Required: id.
- **Delete a Calendly meeting recap by ID** (Delete). Delete a Calendly meeting recap by id. Returns an empty 204 response on success. Required: id.
- **Calendly meeting recaps get transcript** (Get). Get the full transcript for a Calendly meeting recap. Returns: uri, recap, created_at. Required: recap_uuid.
- **Create a Calendly one off event type** (Create). Create a single-use one-off event type in Calendly for a one-time scheduling session. Returns the created event type including its uri, name, scheduling_url, duration, active, kind, type, and locations. Required: name, host, duration, date_setting. One-off event types are not listed on the user's scheduling page.
- **List all Calendly organization invitations** (List). List organization invitations in Calendly. Returns: uri, email, status, created_at, updated_at. Required: uuid. The status filter accepts pending, accepted, or declined.
- **Create a Calendly organization invitation** (Create). Invite a user to a Calendly organization by email address. The invitee receives an email with instructions to accept. Returns: uri, email, status, created_at, updated_at. Required: uuid, email.
- **Calendly organization invitations bulk delete** (Delete). Revoke a pending Calendly organization invitation. The invitee will no longer be able to accept the invitation. Returns an empty 204 response on success. Required: org_uuid, invitation_uuid.
- **List all Calendly organization invitations organizations** (List). Get detailed information about a specific Calendly organization invitation. Returns: uri, email, status, created_at, updated_at. Required: org_uuid, invitation_uuid.
- **List all Calendly outgoing communications** (List). List outgoing SMS and email communications in Calendly. Returns outgoing communication records with type-specific fields. No required parameters.
- **List all Calendly routing form submissions** (List). List Calendly routing form submissions for a specific routing form, including the answers provided by each submitter. Returns: uri, routing_form, questions_and_answers, tracking, created_at, updated_at. Required: routing_form.
- **Get single Calendly routing form submission by ID** (Get). Get a single Calendly routing form submission by id. Returns the full submission object including uri, routing_form, questions_and_answers, tracking, created_at, and updated_at. Required: id.
- **List all Calendly routing forms** (List). List Calendly routing forms for an organization. Routing forms are questionnaires that direct invitees to the appropriate scheduling page based on their responses. Returns: uri, created_at, updated_at, questions, routing_rules. Required: organization.
- **Get single Calendly routing form by ID** (Get). Get a specific Calendly routing form by id. Returns detailed information about the form including its uri, created_at, updated_at, questions, and routing_rules. Required: id.
- **List all Calendly scheduled event invitees** (List). Get a specific Calendly event invitee by event and invitee UUID. Returns: uri, email, first_name, last_name, name, status, questions_and_answers, timezone, event, created_at, updated_at, tracking, text_reminder_number, rescheduled, old_invitee, new_invitee, cancel_url, reschedule_url, routing_form_submission, cancellation, payment, no_show, reconfirmation, scheduling_method, invitee_scheduled_by.…
- **Create a Calendly scheduling link** (Create). Create a single-use scheduling link for a Calendly event type. Returns: booking_url, owner, owner_type. Required: max_event_count, owner, owner_type.
- **Create a Calendly share** (Create). Create a shareable scheduling link in Calendly from an existing event type. Returns: booking_url, owner, owner_type. Required: event_type.
- **List all Calendly user availability schedules** (List). List Calendly user availability schedules for a specific user. Availability schedules define recurring time windows when a user is available for meetings. Returns: uri, name, user, timezone, rules. Required: user.
- **Get single Calendly user availability schedule by ID** (Get). Get a single Calendly user availability schedule by its id, including the timezone and rules that define available time windows. Returns: uri, name, user, timezone, rules. Required: id.
- **List all Calendly users me** (List). Get information about the currently authenticated Calendly user. Returns: uri, name, slug, email, scheduling_url, timezone, time_notation, avatar_url, created_at, updated_at, current_organization, resource_type, locale.
- **List all Calendly webhook subscriptions** (List). List Calendly webhook subscriptions for a user or organization. Returns: uri, callback_url, created_at, updated_at, retry_started_at, state, events, scope, organization, user, creator, signing_key. Required: organization, scope.
- **Create a Calendly webhook subscription** (Create). Create a new Calendly webhook subscription to receive real-time scheduling event notifications. Returns: uri, callback_url, created_at, updated_at, retry_started_at, state, events, scope, organization, user, creator, signing_key. Required: url, events, organization, scope.
- **Get single Calendly webhook subscription by ID** (Get). Get a single Calendly webhook subscription by id. Returns: uri, callback_url, created_at, updated_at, retry_started_at, state, events, scope, organization, user, creator, signing_key. Required: id.
- **Delete a Calendly webhook subscription by ID** (Delete). Delete a Calendly webhook subscription by id. Returns an empty 204 response on success. Required: id.
- **Calendly webhook subscriptions get sample data** (Get). Get sample Calendly webhook payload data for testing a subscription. Returns: event, created_at, created_by, payload. Required: event, organization, scope.
