Calendly MCP Server & CLI

An open source Calendly API v2 MCP server and shared CLI with 66 tools, private accounts and a Claude Desktop extension.

Navid Moazzezby Navid Moazzez·Updated 2. okt. 2026·63 min read·
Rate this tool

This free Calendly MCP server and CLI gives your AI real access to Calendly API v2 scheduling, contacts and meeting recaps. Find available slots, book specifically approved meetings, manage event types and contacts, inspect authorized transcripts, and administer organization resources.

It's one install with 2 ways in. Claude, Codex, Cursor or any other MCP app calls its 66 tools for you, and the same tools work as a CLI that agents like Claude Code, Codex and OpenCode run, or that you type yourself.

Here's what the Calendly MCP server and CLI is, how to set it up in each app, and every tool it has.

What is the Calendly MCP server & CLI?

The Calendly MCP server & CLI is a free, open source program that lets AI agents work with scheduling, contacts, availability, meeting recaps and requested account administration for you, in 2 ways. The MCP server is what an AI app like Claude, Codex or Cursor connects to, through MCP (Model Context Protocol), the open standard AI apps use to call outside tools.

You ask in plain language. Your AI picks the right tool, and the server makes the call directly to Calendly API v2.

The CLI is the same program as commands. calendly-cli get-current-user runs the same code your AI runs when you ask which Calendly user your private credentials identify, whether an agent like Claude Code runs it or you do.

What can you ask it?

Once it's set up, you ask the way you'd ask an assistant. These are real prompts it handles:

Try asking
Show my current user and accessible event types.
Find available slots for the event type and time zone I choose.
Book only the specific slot and invitee I approved.
Read this booking before cancelling it.
Inspect a contact and its custom field definitions.
Read my authorized meeting recap and transcript.
Inspect the current availability rules before changing them.

Calendly already offers an official hosted MCP. This local package adds a task CLI, private PAT or REST OAuth accounts, current Contacts/Notetaker coverage and controlled JSON output. The official supported-tools documentation was reviewed on October 2, 2026; no authenticated competitor handshake or measured superiority is claimed.

How to install the Calendly MCP server

Choose your client in the install box. The npm package supplies MCP and CLI; GitHub Releases supplies the versioned Claude Desktop bundle. Configure private account access before a network call.

Before you start0/3

Watch out: Installation grants no account access. Never put actual credentials into a repository, issue, guide, screenshot or model conversation.

Set up Calendly access

Personal Access Token for your own account

  1. Sign in to the intended Calendly account.
  2. Open Integrations > API and webhooks, or the token page.
  3. Create a named Personal Access Token with the scopes your workflow requires. Copy it once into private storage.
  4. Set CALENDLY_API_TOKEN in private local client/shell settings, or CALENDLY_TOKEN_FILE to an absolute token-only file outside repositories.
  5. Run calendly-cli doctor, then calendly-cli doctor --network to check a user read.

See current PAT setup. The token is a Bearer credential, not your Calendly password or browser cookie. Revocation is done in Calendly. GUI clients may not inherit terminal variables; this package does not load .env automatically. On POSIX, a credential file must be owner-only, such as mode 0600; on Windows protect the file and its directory with user-only ACLs. Readers refuse symlinks and files larger than 64 KB. A PAT file takes precedence over the environment PAT, and is cached until restart.

Existing REST OAuth grant

Use your own authorized REST OAuth application when acting for users who consent to your application. This local package does not create an OAuth app, open a browser, host a callback or exchange the first authorization code. login prints setup instructions. Put an existing access token in CALENDLY_ACCESS_TOKEN, or the full grant in a private file selected by CALENDLY_TOKENS_FILE. Do not mix PAT and OAuth settings for the same account.

The token file is a JSON object containing access_token, and optionally refresh_token, client_id, client_secret, created_at (Unix seconds) and expires_in (seconds). Keep all actual values outside model context and repositories. A file is required for automatic refresh; an environment-only access token is never refreshed. The file is read on each request, allowing separate processes to observe a saved rotation. Without valid expiry metadata, one GET 401 can trigger one configured refresh; writes never retry after a 401.

Calendly's single-use refresh-token rule took effect by August 31, 2026. This package refreshes against https://calendly.com/oauth/token, uses Basic client authentication for confidential clients or a body client_id without a secret, and atomically replaces both returned tokens in mode 0600 storage. Concurrent in-process refreshes share one promise, and a per-file .refresh.lock prevents another process from consuming the same token. An existing lock produces a configuration error instead of a second refresh. A crashed process can leave a lock; stop all users of that grant and verify its state before manually removing a stale lock. Never remove an active lock.

A refresh HTTP failure, unknown timeout, incomplete response or failed save requires reauthorization/private storage repair and a restart. No automatic refresh retry occurs. The old refresh token is not deliberately reused after an uncertain result. OAuth access tokens last two hours according to the current token reference; actual expiry metadata governs proactive refresh. Token rotation fixtures are verified; live grants remain unverified.

Scopes, roles and plans

API operation descriptions list their required scopes. :write grants include the family's read access. Start with users:read for doctor, then select only needed scheduling, availability, contacts, meeting_recaps, organization, routing, group or webhook scopes. Webhooks need webhooks:write plus the corresponding event family's read scope. Reauthorize or replace the token if scopes change; an installed command cannot raise permissions.

Direct booking through create_invitee requires a paid Standard-or-higher account. Routing Forms require Teams or higher; Activity Log, outgoing communications and data-compliance deletion require Enterprise and suitable organization permissions. Notetaker endpoints require a paid plan; Contacts/Notetaker data exists only where the account and associated feature provide it. API access does not create transcripts or bypass recording/consent policy. Administrative operations depend on your actual role. See authorization scopes and the current endpoint reference before choosing a plan.

Current request limits

The quota reference documents 50 requests per user/minute on Free and 500 on paid plans. Booking has tighter limits: trial 5/day; paid non-Enterprise 10/minute, 50/hour and 100/day; Enterprise 500/minute. OAuth token requests are limited to 8/user/minute. These are shared provider limits, not allowances reserved for this process.

Default local pacing is 1,300 ms per account/process; multiple account labels for one user and other integrations share that user's quota. GET 429 handling respects Retry-After or X-RateLimit-Reset when the wait is at most ten seconds. Longer waits surface exit 7 so a script can pause explicitly, rather than retry too early. Writes and OAuth refresh requests have zero automatic retries. Every page and retried read consumes quota.

Official hosted MCP is a separate connection

Calendly's official MCP is hosted at https://mcp.calendly.com. It uses OAuth 2.1, PKCE S256, resource discovery and Dynamic Client Registration. It does not accept a PAT or a manually provisioned console client_id/client_secret connection. A client prompting only for static OAuth credentials is incompatible with that documented flow. The documentation search MCP at https://developer.calendly.com/_mcp/server reads docs; it does not operate your account. Keep all three entries distinct.

Check that it works

Start with local configuration checks, then explicitly opt into one authorized user read.

calendly-cli --version
calendly-cli doctor
calendly-cli doctor --network
calendly-cli list-accounts --agent
calendly-cli get-current-user --agent
calendly-cli --version
calendly-cli doctor
calendly-cli doctor --network
calendly-cli list-accounts --agent
calendly-cli get-current-user --agent

The local doctor checks configuration. Network doctor reads /users/me and reports success without printing user details; it does not book, cancel or invite anyone. A successful read proves that read's access, not every endpoint/plan permission. Full discovery has 66 tools; read-only has 44. Use the returned canonical user and organization URIs in subsequent filters, rather than substituting a bare UUID.

Use the Calendly CLI

The CLI is the same 66 tools as commands. AI agents that run commands, like Claude Code, Codex and OpenCode, use it on their own, and you can type the same commands in a terminal or a script.

Every tool name becomes a command with dashes, so list_events runs as calendly-cli list-events.

calendly-cli
calendly-cli list-events --help
calendly-cli schema create-invitee
calendly-cli list-events --user https://api.calendly.com/users/USER_UUID --count 10 --agent
calendly-cli list-contacts --email user@example.com --count 5 --agent

The bare calendly-cli lists every command, and calendly-cli <command> --help shows what a command takes. Every mutation requires --confirm. --yes and --agent never authorize a write. UUIDs and URIs in examples are placeholders; discover your own authorized resources.

These flags work on every command:

FlagWhat it does
--jsonStructured JSON
--compactOne-line JSON
--agentCompact JSON without prompts or color
--select a,b.cSelect local result fields
--confirmConfirm the specific requested mutation
--account NAMEChoose the private credential label
--payload JSON / --payload-file PATHComplete body instead of body flags

A script can branch on the exit code:

Exit codeWhat it means
0Success
2Invalid arguments or refused write
3Resource not found
4Authentication or permission failure
5API or transport failure
7Rate limit
10Missing or invalid private configuration

MCP server or CLI: which one?

Both surfaces call the same tools. Codex can connect to the local MCP server or run the CLI directly. Neither requires Claude Code.

MCP provides structured tool discovery; the CLI supports scripts, compact JSON, field selection and command/schema discovery. Official hosted MCP connection and local CLI authentication have different setup requirements.

Codex-specific token measurements are pending. Record the actual client/model versions, discovery configuration, input/output usage, caching, latency and equivalent successful outcomes. Standing definitions and full task cost are separate measurements; CLI commands, selected help, results and reasoning still consume tokens.

No efficiency percentage or Claude-derived figure is presented as a Codex result. Other-client benchmarks can be added separately.

Scheduling, contacts and meeting recap workflows

Find the right event type and available slot

Read get_current_user for canonical user and organization URIs. List event types for that user or organization, inspect the chosen event type and its location/host requirements, then request current slots. Event-type availability now permits at most 31 days; user busy times still permit at most seven. Both need a future increasing time range. Split larger windows deliberately; availability is not reserved by a read.

calendly-cli get-current-user --agent
calendly-cli list-event-types --user https://api.calendly.com/users/USER_UUID --count 10 --agent
calendly-cli get-event-type --event-type-uuid EVENT_TYPE_UUID --agent
calendly-cli list-event-type-available-times --event-type https://api.calendly.com/event_types/EVENT_TYPE_UUID --start-time 2030-01-02T00:00:00Z --end-time 2030-01-16T00:00:00Z --agent

Dates/URIs are illustrative. Replace them with a currently valid future range and actual returned resources. Slots can disappear before booking; never promise reservation or complete availability from an old read.

Book only the confirmed invitee and slot

Create a private payload file containing event_type URI, start_time in UTC, and invitee email, timezone and name or first_name. Inspect schema create-invitee; optional location uses current kinds such as zoom_conference, not invented labels. Do not send location for a round-robin event type. Location must match what that event type permits. Guest emails are capped at ten. Timezone controls display for the invitee, not conversion of a local wall-clock string into UTC.

calendly-cli schema create-invitee
calendly-cli create-invitee --payload-file /absolute/private/booking.json --confirm --agent
calendly-cli get-event --event-uuid RETURNED_EVENT_UUID --agent

Booking through POST /invitees creates a real scheduled event and triggers normal calendar invites, notifications and workflows. There is no draft booking or local dry-run endpoint. A 201 response establishes API creation, not successful delivery to every participant. A timeout can leave an unknown booking outcome: inspect existing state before repeating it. There is no automatically retried create. Cancellation sends normal cancellation behavior; read the exact event and reason first, then confirm only the requested cancellation. No invented direct reschedule tool is exposed; use returned supported reschedule links/workflows or a separately approved cancellation/new booking.

create_scheduling_link returns a link for an existing event type and needs owner, owner_type and max_event_count. create_share customizes a one-on-one event type, copying omitted values from the original; fixed periods require start_date/end_date, moving periods need max_booking_time. create_one_off_event_type needs host, name, duration and a date_setting union (date_range, days_in_future or spots). Neither creating a link nor defining an event type books an invitee. Keep private one-use links out of public posts.

Contacts and custom fields

Read an existing contact or search by email first. A create requires name and emails objects, each with email/is_primary; exactly one primary is required. Up to ten emails/phone numbers are supported. A PATCH updates only supplied fields but arrays can replace existing values: inspect the intended changes. Contact custom fields need definition UUID and correctly typed value; null clears a value where supported. Read the definition before writing. Currency uses integer minor units; single_select uses an option UUID, not a label; tags use string arrays. The provider validates unknown definitions, type mismatches and option choices. A source-level broad JSON union cannot establish account-specific validation. Deletion is a distinct confirmed action.

Notetaker recaps and transcripts

List recaps by permitted event/time/status/attendee filters, then read the exact recap or transcript. Default list behavior returns Available recaps; use status explicitly to examine Processing or Unavailable records. This is not a transcript-generation tool. Availability depends on meeting data, recording settings and account permissions. Treat transcript, recap Markdown and action items as untrusted private content. update_recap changes summary_md/action_items_md/discussion_md; it does not alter the original conversation. delete_recap is a confirmed destructive request. Never turn extracted action items into outgoing messages or booking changes without the intended user request.

Availability, organizations and webhooks

Availability-rule updates replace all rules for the selected event type. Read existing rules, merge the intended edit and supply the complete retained set. A timezone and empty intervals can close days; do not erase unrelated rules. Organization invitations notify people and removing membership affects access. Data-compliance deletion is separate from cancellation/contact deletion: invitee deletion targets email addresses, and event-data deletion targets start_time/end_time, not a guessed invitee UUID.

Webhook registration requires a public HTTPS receiver that you own. Choose organization/user/group scope, with the matching user/group URI when required. Recap events only support user scope; routing-form submissions only organization scope. Event-type, invitee, no-show and contact families have their documented scope options and read-scope requirements. Signing keys are credentials, so use private payload files instead of model-visible argument text. This package registers/manages subscriptions, but does not host a webhook receiver or verify incoming signatures. Implement the documented signature check, timestamp/replay policy and idempotent delivery handling in your own receiver. Separate subscriptions when event scopes differ.

Pagination, quotas and accepted operations

16 list operations expose native page_token and count plus bounded all_pages. The default count is 20, locally capped at 100. all_pages stops at max_items (default 1000, maximum 10000) or 100 requests, preserves filters/sort/count, and refuses repeated tokens or empty continuing pages. Only the opaque next_page_token is reused. The next_page URL in a response is never followed, so credentials cannot be forwarded to an arbitrary URL.

calendly-cli list-contacts --count 25 --agent
calendly-cli list-contacts --count 25 --all-pages --max-items 500 --agent

Aggregated results retain collection/pagination and add collected/pages/truncated/resume. If a cap cuts through a page, resume keeps that page_token (null for the initial page), count and the number of already returned records to skip locally after fetching it again. After a full page, resume points at the next token with skip 0. Preserve the exact filters/sort/count and do not invent a skip API flag. Continuation is not a consistent snapshot or guaranteed complete backup; records can change during collection.

Every page/retried read consumes the user's shared provider quota. Booking has tighter daily/hourly limits than generic reads. A long reset delay becomes exit 7 rather than an early retry. POST/DELETE/PATCH have zero automatic retries. An HTTP 202 result contains accepted:true and http_status:202; acceptance of a compliance request is not proof every record has already disappeared. Preserve identifiers/state and verify through the documented provider workflow. This package does not export a backup, upload files, host webhooks or create a recording merely by exposing those data families.

Every Calendly tool

Actual discovery supplies 66 tools: 44 reads and 22 confirmed writes. The complete arguments, scopes and nested body fields follow below; schema COMMAND returns the exact JSON Schema.

Activity log

list_activity_log
What it does
List activity log entries.
Kind
Reads

Availability

get_availability_schedule
What it does
Get User Availability Schedule.
Kind
Reads
list_event_type_availability_schedules
What it does
List Event Type Availability Schedules.
Kind
Reads
update_event_type_availability_schedules
What it does
Update Event Type Availability Schedules.
Kind
Asks first
list_availability_schedules
What it does
List User Availability Schedules.
Kind
Reads
list_user_busy_times
What it does
List User Busy Times.
Kind
Reads

Contacts

create_contact
What it does
Create Contact.
Kind
Asks first
list_contacts
What it does
List Contacts.
Kind
Reads
delete_contact
What it does
Delete Contact.
Kind
Asks first
get_contact
What it does
Get Contact.
Kind
Reads
update_contact
What it does
Update Contact.
Kind
Asks first
get_contact_custom_field_definition
What it does
Get Contact Custom Field Definition.
Kind
Reads
list_contact_custom_field_definitions
What it does
List Contact Custom Field Definitions.
Kind
Reads

Data compliance

delete_invitee_data
What it does
Delete Invitee Data.
Kind
Asks first
delete_scheduled_event_data
What it does
Delete Scheduled Event Data.
Kind
Asks first

Event types

create_event_type
What it does
Create Event Type.
Kind
Asks first
list_event_types
What it does
List User's Event Types.
Kind
Reads
create_one_off_event_type
What it does
Create One-Off Event Type.
Kind
Asks first
get_event_type
What it does
Get Event Type.
Kind
Reads
update_event_type
What it does
Update Event Type.
Kind
Asks first
list_event_type_available_times
What it does
List Event Type Available Times.
Kind
Reads
list_event_type_hosts
What it does
List Event Type Hosts.
Kind
Reads

Groups

get_group
What it does
Get Group.
Kind
Reads
get_group_relationship
What it does
Get Group Relationship.
Kind
Reads
list_group_relationships
What it does
List Group Relationships.
Kind
Reads
list_groups
What it does
List Groups.
Kind
Reads

Locations

list_user_locations
What it does
List User Meeting Locations.
Kind
Reads

Notetaker

delete_recap
What it does
Delete Recap.
Kind
Asks first
get_recap
What it does
Get Recap.
Kind
Reads
update_recap
What it does
Update Recap.
Kind
Asks first
get_transcript
What it does
Get Transcript.
Kind
Reads
list_recaps
What it does
List Recaps.
Kind
Reads

Organizations

get_organization
What it does
Get Organization.
Kind
Reads
get_organization_invitation
What it does
Get Organization Invitation.
Kind
Reads
revoke_organization_invitation
What it does
Revoke User's Organization Invitation.
Kind
Asks first
get_organization_membership
What it does
Get Organization Membership.
Kind
Reads
remove_from_organization
What it does
Remove User from Organization.
Kind
Asks first
get_team
What it does
Get Team.
Kind
Reads
invite_to_organization
What it does
Invite User to Organization.
Kind
Asks first
list_organization_invitations
What it does
List Organization Invitations.
Kind
Reads
list_organization_memberships
What it does
List Organization Memberships.
Kind
Reads
list_teams
What it does
List Teams.
Kind
Reads

Outgoing communications

list_outgoing_communications
What it does
List outgoing communications.
Kind
Reads

Routing forms

get_routing_form
What it does
Get Routing Form.
Kind
Reads
get_routing_form_submission
What it does
Get Routing Form Submission.
Kind
Reads
list_routing_form_submissions
What it does
List Routing Form Submissions.
Kind
Reads
list_routing_forms
What it does
List Routing Forms.
Kind
Reads

Scheduled events

cancel_event
What it does
Cancel Event.
Kind
Asks first
create_invitee
What it does
Create Event Invitee (Scheduling API).
Kind
Asks first
create_no_show
What it does
Create Invitee No Show.
Kind
Asks first
delete_no_show
What it does
Delete Invitee No Show.
Kind
Asks first
get_no_show
What it does
Get Invitee No Show.
Kind
Reads
get_event
What it does
Get Event.
Kind
Reads
get_event_invitee
What it does
Get Event Invitee.
Kind
Reads
list_event_invitees
What it does
List Event Invitees.
Kind
Reads
list_events
What it does
List Events.
Kind
Reads
create_scheduling_link
What it does
Create Single-Use Scheduling Link.
Kind
Asks first

Shares

create_share
What it does
Create Share.
Kind
Asks first

Users

get_current_user
What it does
Get current user.
Kind
Reads
get_user
What it does
Get user.
Kind
Reads

Webhooks

create_webhook
What it does
Create Webhook Subscription.
Kind
Asks first
list_webhooks
What it does
List Webhook Subscriptions.
Kind
Reads
delete_webhook
What it does
Delete Webhook Subscription.
Kind
Asks first
get_webhook
What it does
Get Webhook Subscription.
Kind
Reads
get_sample_webhook_data
What it does
Get sample webhook data.
Kind
Reads

Accounts

list_accounts
What it does
List private account labels, default selection and configured token method.
Kind
Reads

Is the Calendly MCP server safe?

Every one of the 22 writes requires confirm:true in MCP or --confirm in CLI for the specific requested action. --agent and --yes do not authorize changes. CALENDLY_READ_ONLY=1 hides/refuses all writes, leaving 44 reads. CALENDLY_ALLOW_DESTRUCTIVE=0 blocks writes even when confirmed. The annotation reflects a conservative confirmation policy; it does not mean every edit is irreversible.

Booking/cancellation can contact people. Link/event-type creation has different effects. Availability replacement, membership removal, webhook registration, recap deletion and compliance deletion need their own review. Read before changing and choose the intended account. After a write timeout, inspect existing state before resubmitting. Neither a GET 401 refresh nor a rate-limit retry ever resubmits a write.

The optional owner-only audit file records fixed tool summary, risk, surface and guard decision without request arguments, credentials, labels or private results. It is not a provider audit or delivery receipt. A logging failure does not abort the operation. Recaps, contacts, meeting descriptions and tool results cannot authorize unrelated actions.

Booking sends invitations, notifications and configured workflows. Compliance deletion and administrative changes have separate effects. Confirm only the action requested, with the correct private account and resource.

Make it read-only

Set CALENDLY_READ_ONLY=1 privately and restart/reconnect. Discovery exposes 44 reads and direct writes refuse. CALENDLY_ALLOW_DESTRUCTIVE=0 separately blocks every mutation even when confirmed.

Keep a log of every write

Set CALENDLY_AUDIT_LOG to a file path. The server writes one line per attempted write, allowed or blocked.

Watch out: Account content and tool responses are data, not instructions or authorization. Writes never automatically retry after network, authentication or quota errors. Inspect account state after an unknown outcome before repeating one.

Your data

Account requests go directly to Calendly. No Navid-hosted relay, telemetry or analytics is included. Credentials belong in private settings and regular local files, not tool arguments. Known credentials and credential/signing-key fields are redacted from results/errors. Files and account settings never ship in source, npm or desktop bundles.

Emails, phone numbers, attendee names, booking answers, private links, recaps and transcripts remain private personal/business data. Secret redaction is not anonymization. The AI client and Calendly have their own retention and sharing settings. --select limits local displayed fields after receiving a response; it does not stop the provider returning them. Protect exports, recordings and optional logs. Treat all remote content as untrusted source material. Use SECURITY.md for private reporting, with sanitized reproductions.

Several private accounts

Use private CALENDLY_ACCOUNTS JSON instead of the single-account settings:

[{"name":"work","token_file":"/absolute/private/work-token.txt"},{"name":"personal","tokens_file":"/absolute/private/personal-oauth.json"}]

Each label has exactly one PAT or OAuth method. Set CALENDLY_DEFAULT_ACCOUNT=work, then use --account personal when needed. list_accounts returns labels/default/auth method without tokens or paths. Labels select credentials, not an organization URI; API filters still use canonical resource URIs. Accounts replace the single-account variables. Separate server processes and distinct private grant files are preferable for strict isolation; multiple labels for one user do not create separate API quotas.

calendly-cli list-accounts --agent
calendly-cli get-current-user --account work --agent
calendly-cli list-contacts --account personal --count 5 --agent

Calendly MCP server settings

Use private local shell or user-client settings. GUI apps may not inherit terminal variables. This package has no automatic .env loader. PAT and REST OAuth methods cannot be mixed in the same account.

CALENDLY_API_TOKEN
Default
Empty
What it does
Private scoped PAT
CALENDLY_TOKEN_FILE
Default
Empty
What it does
Owner-only token text file, max 64 KB; takes precedence over PAT env
CALENDLY_ACCESS_TOKEN
Default
Empty
What it does
Existing REST OAuth access token; no environment-only refresh
CALENDLY_TOKENS_FILE
Default
Empty
What it does
Owner-only JSON grant file, max 64 KB; atomic single-use rotation
CALENDLY_ACCOUNTS
Default
Empty
What it does
Private named account JSON; replaces single account variables
CALENDLY_DEFAULT_ACCOUNT
Default
First label
What it does
Selected local credential label
CALENDLY_READ_ONLY
Default
0
What it does
Hide/refuse 22 writes
CALENDLY_ALLOW_DESTRUCTIVE
Default
1
What it does
0 blocks all writes
CALENDLY_AUDIT_LOG
Default
None
What it does
Private append-only guard decision log
CALENDLY_REQUEST_TIMEOUT_MS
Default
30000
What it does
Request deadline: integer 100 to 300000 ms
CALENDLY_MAX_RETRIES
Default
2
What it does
GET 429 retries: 0 to 5
CALENDLY_MIN_REQUEST_INTERVAL_MS
Default
1300
What it does
Per-account/process pacing: 0 to 10000 ms

Troubleshooting

Run the doctor first. It names the step that failed and the fix.

What you seeWhat to do
No configured accountSet a private PAT/token file or authorized REST OAuth tokens file.
401/403Check token scope, user role, feature eligibility and selected account.
OAuth refresh blockedWait for the active lock; unknown or invalid rotation requires reauthorization, repaired private storage and restart.
CLI works; GUI failsConfigure the actual GUI process or private user settings.
Invalid request bodyRead the current schema and choose one body input method.
First page onlyUse native page_token and count or bounded all_pages. Preserve resume metadata.
429Respect shared user and booking quotas. Longer delays return exit 7.
Unknown booking outcomeInspect events/invitees before repeating creation.
No transcriptNotetaker needs a paid plan, authorized recap access and an available recording; the wrapper creates no recordings.
Desktop bundle rejectedCheck the runtime and organization extension policy.

If the server doesn't show up in your app at all, run the command your app runs, in a terminal, and read the error.

Every argument, route and scope

All 65 API operations come from the pinned current official OpenAPI. list_accounts is local. Each tool is the same dashed CLI command. Top-level flags and nested request fields are shown below; schema COMMAND returns complete unions, enums and conditional rules. Body requirements apply whether you use individual flags or payload/payload_file.

list_activity_log
REST operation
GET /activity_log_entries
Mode
Read
Required scope
activity_log:read
get_availability_schedule
REST operation
GET /user_availability_schedules/{uuid}
Mode
Read
Required scope
availability:read
list_event_type_availability_schedules
REST operation
GET /event_type_availability_schedules
Mode
Read
Required scope
availability:read
update_event_type_availability_schedules
REST operation
PATCH /event_type_availability_schedules
Mode
Write, confirms
Required scope
availability:write
list_availability_schedules
REST operation
GET /user_availability_schedules
Mode
Read
Required scope
availability:read
list_user_busy_times
REST operation
GET /user_busy_times
Mode
Read
Required scope
availability:read
create_contact
REST operation
POST /contacts
Mode
Write, confirms
Required scope
contacts:write
list_contacts
REST operation
GET /contacts
Mode
Read
Required scope
contacts:read
delete_contact
REST operation
DELETE /contacts/{uuid}
Mode
Write, confirms
Required scope
contacts:write
get_contact
REST operation
GET /contacts/{uuid}
Mode
Read
Required scope
contacts:read
update_contact
REST operation
PATCH /contacts/{uuid}
Mode
Write, confirms
Required scope
contacts:write
get_contact_custom_field_definition
REST operation
GET /contacts/custom_field_definitions/{uuid}
Mode
Read
Required scope
contacts:read
list_contact_custom_field_definitions
REST operation
GET /contacts/custom_field_definitions
Mode
Read
Required scope
contacts:read
delete_invitee_data
REST operation
POST /data_compliance/deletion/invitees
Mode
Write, confirms
Required scope
data_compliance:write
delete_scheduled_event_data
REST operation
POST /data_compliance/deletion/events
Mode
Write, confirms
Required scope
data_compliance:write
create_event_type
REST operation
POST /event_types
Mode
Write, confirms
Required scope
event_types:write
list_event_types
REST operation
GET /event_types
Mode
Read
Required scope
event_types:read
create_one_off_event_type
REST operation
POST /one_off_event_types
Mode
Write, confirms
Required scope
event_types:write
get_event_type
REST operation
GET /event_types/{uuid}
Mode
Read
Required scope
event_types:read
update_event_type
REST operation
PATCH /event_types/{uuid}
Mode
Write, confirms
Required scope
event_types:write
list_event_type_available_times
REST operation
GET /event_type_available_times
Mode
Read
Required scope
availability:read
list_event_type_hosts
REST operation
GET /event_type_memberships
Mode
Read
Required scope
event_types:read
get_group
REST operation
GET /groups/{uuid}
Mode
Read
Required scope
groups:read
get_group_relationship
REST operation
GET /group_relationships/{uuid}
Mode
Read
Required scope
groups:read
list_group_relationships
REST operation
GET /group_relationships
Mode
Read
Required scope
groups:read
list_groups
REST operation
GET /groups
Mode
Read
Required scope
groups:read
list_user_locations
REST operation
GET /locations
Mode
Read
Required scope
locations:read
delete_recap
REST operation
DELETE /meeting_recaps/{uuid}
Mode
Write, confirms
Required scope
meeting_recaps:write
get_recap
REST operation
GET /meeting_recaps/{uuid}
Mode
Read
Required scope
meeting_recaps:read
update_recap
REST operation
PATCH /meeting_recaps/{uuid}
Mode
Write, confirms
Required scope
meeting_recaps:write
get_transcript
REST operation
GET /meeting_recaps/{uuid}/transcript
Mode
Read
Required scope
meeting_recaps:read
list_recaps
REST operation
GET /meeting_recaps
Mode
Read
Required scope
meeting_recaps:read
get_organization
REST operation
GET /organizations/{uuid}
Mode
Read
Required scope
organizations:read
get_organization_invitation
REST operation
GET /organizations/{org_uuid}/invitations/{uuid}
Mode
Read
Required scope
organizations:read
revoke_organization_invitation
REST operation
DELETE /organizations/{org_uuid}/invitations/{uuid}
Mode
Write, confirms
Required scope
organizations:write
get_organization_membership
REST operation
GET /organization_memberships/{uuid}
Mode
Read
Required scope
organizations:read
remove_from_organization
REST operation
DELETE /organization_memberships/{uuid}
Mode
Write, confirms
Required scope
organizations:write
get_team
REST operation
GET /teams/{team_uuid}
Mode
Read
Required scope
organizations:read
invite_to_organization
REST operation
POST /organizations/{uuid}/invitations
Mode
Write, confirms
Required scope
organizations:write
list_organization_invitations
REST operation
GET /organizations/{uuid}/invitations
Mode
Read
Required scope
organizations:read
list_organization_memberships
REST operation
GET /organization_memberships
Mode
Read
Required scope
organizations:read
list_teams
REST operation
GET /teams
Mode
Read
Required scope
organizations:read
list_outgoing_communications
REST operation
GET /outgoing_communications
Mode
Read
Required scope
outgoing_communications:read
get_routing_form
REST operation
GET /routing_forms/{uuid}
Mode
Read
Required scope
routing_forms:read
get_routing_form_submission
REST operation
GET /routing_form_submissions/{uuid}
Mode
Read
Required scope
routing_forms:read
list_routing_form_submissions
REST operation
GET /routing_form_submissions
Mode
Read
Required scope
routing_forms:read
list_routing_forms
REST operation
GET /routing_forms
Mode
Read
Required scope
routing_forms:read
cancel_event
REST operation
POST /scheduled_events/{uuid}/cancellation
Mode
Write, confirms
Required scope
scheduled_events:write
create_invitee
REST operation
POST /invitees
Mode
Write, confirms
Required scope
scheduled_events:write
create_no_show
REST operation
POST /invitee_no_shows
Mode
Write, confirms
Required scope
scheduled_events:write
delete_no_show
REST operation
DELETE /invitee_no_shows/{uuid}
Mode
Write, confirms
Required scope
scheduled_events:write
get_no_show
REST operation
GET /invitee_no_shows/{uuid}
Mode
Read
Required scope
scheduled_events:read
get_event
REST operation
GET /scheduled_events/{uuid}
Mode
Read
Required scope
scheduled_events:read
get_event_invitee
REST operation
GET /scheduled_events/{event_uuid}/invitees/{invitee_uuid}
Mode
Read
Required scope
scheduled_events:read
list_event_invitees
REST operation
GET /scheduled_events/{uuid}/invitees
Mode
Read
Required scope
scheduled_events:read
list_events
REST operation
GET /scheduled_events
Mode
Read
Required scope
scheduled_events:read
create_scheduling_link
REST operation
POST /scheduling_links
Mode
Write, confirms
Required scope
scheduling_links:write
create_share
REST operation
POST /shares
Mode
Write, confirms
Required scope
shares:write
get_current_user
REST operation
GET /users/me
Mode
Read
Required scope
users:read
get_user
REST operation
GET /users/{uuid}
Mode
Read
Required scope
users:read
create_webhook
REST operation
POST /webhook_subscriptions
Mode
Write, confirms
Required scope
scheduled_events:read, event_types:read, meeting_recaps:read, routing_forms:read, contacts:read, webhooks:write
list_webhooks
REST operation
GET /webhook_subscriptions
Mode
Read
Required scope
webhooks:read
delete_webhook
REST operation
DELETE /webhook_subscriptions/{webhook_uuid}
Mode
Write, confirms
Required scope
webhooks:write
get_webhook
REST operation
GET /webhook_subscriptions/{webhook_uuid}
Mode
Read
Required scope
webhooks:read
get_sample_webhook_data
REST operation
GET /sample_webhook_data
Mode
Read
Required scope
webhooks:read
list_accounts
REST operation
Local, no network
Mode
Read
Required scope
None

list_activity_log

calendly-cli list-activity-log · GET /activity_log_entries

organization
Route
query organization
Required
Yes
Type
string
Details
Return activity log entries from the organization associated with this URI format: uri.
search_term
Route
query search_term
Required
No
Type
string
Details
Filters entries based on the search term. Supported operators: - / - to allow filtering by one term or another. Example: this / that - + - to allow filtering by one term and another. Example: this + that - " - to allow filtering by an exact search term. Example: "email@website.com" - - - to omit specific terms from results. Example: Added -User - () - to allow specifying precedence during a search. Example: (this + that) OR (person + place) - * - to allow prefix searching. Example *@other-website.com maxLength: 300.
actor
Route
query actor
Required
No
Type
array
Details
Return entries from the user(s) associated with the provided URIs Array items: string.
sort
Route
query sort
Required
No
Type
array
Details
Order results by the specified field and direction. List of {field}:{direction} values. default: ['occurred_at:desc']. Array items: string.
min_occurred_at
Route
query min_occurred_at
Required
No
Type
string
Details
Include entries that occurred after this time (sample time format: "2020-01-02T03:04:05.678Z"). This time should use the UTC timezone. format: date-time.
max_occurred_at
Route
query max_occurred_at
Required
No
Type
string
Details
Include entries that occurred prior to this time (sample time format: "2020-01-02T03:04:05.678Z"). This time should use the UTC timezone. format: date-time.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next portion of the collection
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
namespace
Route
query namespace
Required
No
Type
array
Details
The categories of the entries Array items: string.
action
Route
query action
Required
No
Type
array
Details
The action(s) associated with the entries Array items: string.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

get_availability_schedule

calendly-cli get-availability-schedule · GET /user_availability_schedules/{uuid}

schedule_uuid
Route
path uuid
Required
Yes
Type
string
Details
The UUID of the availability schedule. minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

list_event_type_availability_schedules

calendly-cli list-event-type-availability-schedules · GET /event_type_availability_schedules

event_type
Route
query event_type
Required
Yes
Type
string
Details
The URI associated with the event type format: uri.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

update_event_type_availability_schedules

calendly-cli update-event-type-availability-schedules · PATCH /event_type_availability_schedules

event_type
Route
query event_type
Required
Yes
Type
string
Details
Event Type uri in which to update the availability schedule format: uri.
availability_rule
Route
Body
Required
Yes in body
Type
object
Details
Object requires: timezone.
availability_rule.timezone
Route
Nested body
Required
Yes in body
Type
string
Details
The timezone for which this Event Type Availability Schedule is originated in.
availability_rule.rules
Route
Nested body
Required
No
Type
array
Details
The rules for an availability schedule. Warning: Updating rules will overwrite all existing rules for the event type. Use the GET endpoint to first retrieve the existing rules and then pass the modified rules to the rules object. Array items: object.
availability_rule.rules[].type
Route
Nested body
Required
Yes in body
Type
string
Details
The type of this Availability Rule; can be "wday" or a specific "date". Values: wday, date.
availability_rule.rules[].intervals
Route
Nested body
Required
Yes in body
Type
array
Details
The intervals to be applied to this Rule. Each interval represents when booking a meeting is allowed. If the interval array is empty, then there is no booking availability for that day. Time is in 24h format (i.e. "17:30") and local to the timezone in the Availability Schedule. Array items: object.
availability_rule.rules[].intervals[].from
Route
Nested body
Required
No
Type
string
Details
Format: "hh:mm" pattern: (\d\d):(\d\d).
availability_rule.rules[].intervals[].to
Route
Nested body
Required
No
Type
string
Details
Format: "hh:mm" pattern: (\d\d):(\d\d).
availability_rule.rules[].wday
Route
Nested body
Required
No
Type
string
Details
The day of the week for which this Rule should be applied to. Values: sunday, monday, tuesday, wednesday, thursday, friday, saturday.
availability_rule.rules[].date
Route
Nested body
Required
No
Type
string
Details
A specific date in the future that this should be applied to (i.e. "2030-12-31"). pattern: ^\d{4}-(0?[1-9]/1[012])-(0?[1-9]/[12][0-9]/3[01])$.
availability_rule.user
Route
Nested body
Required
No
Type
string
Details
Required when an admin or org owner is making the call to update a specific users availability schedule format: uri.
availability_setting
Route
Body
Required
No
Type
string
Details
By default every host on the Event Type shares an identical schedule. default: host. Values: host.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

list_availability_schedules

calendly-cli list-availability-schedules · GET /user_availability_schedules

user
Route
query user
Required
Yes
Type
string
Details
A URI reference to a user format: uri.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

list_user_busy_times

calendly-cli list-user-busy-times · GET /user_busy_times

user
Route
query user
Required
Yes
Type
string
Details
The uri associated with the user format: uri.
start_time
Route
query start_time
Required
Yes
Type
string
Details
Start time of the requested availability range. Date cannot be in the past.
end_time
Route
query end_time
Required
Yes
Type
string
Details
End time of the requested availability range. Date must be in the future of start_time.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

create_contact

calendly-cli create-contact · POST /contacts

name
Route
Body
Required
Yes in body
Type
string
Details
Current schema
emails
Route
Body
Required
Yes in body
Type
array
Details
The user's email addresses. Max 10. minItems: 1. maxItems: 10. Array items: object.
emails[].email
Route
Nested body
Required
Yes in body
Type
string
Details
Email address. format: email.
emails[].is_primary
Route
Nested body
Required
Yes in body
Type
boolean
Details
Whether this is the primary email.
phone_numbers
Route
Body
Required
No
Type
array
Details
The user's phone numbers. Max 10. maxItems: 10. Array items: object.
phone_numbers[].phone_number
Route
Nested body
Required
Yes in body
Type
string
Details
Phone number.
timezone
Route
Body
Required
No
Type
string
Details
Current schema
job_title
Route
Body
Required
No
Type
string
Details
Current schema
company
Route
Body
Required
No
Type
string
Details
Current schema
country
Route
Body
Required
No
Type
string
Details
Current schema
state
Route
Body
Required
No
Type
string
Details
Current schema
city
Route
Body
Required
No
Type
string
Details
Current schema
linkedin
Route
Body
Required
No
Type
string
Details
format: uri.
custom_fields
Route
Body
Required
No
Type
array
Details
Custom field values to set on the contact. Each item requires a uuid (the custom field definition identifier) and a value; any other keys (such as label) are ignored. The entire request is rejected if any uuid is unknown, any value is the wrong type for its field (including an array for a scalar field or a scalar for an array field), or any single_select value is not one of the field definition's option uuids. Array items: object.
custom_fields[].uuid
Route
Nested body
Required
Yes in body
Type
string
Details
Unique identifier of the custom field definition.
custom_fields[].value
Route
Nested body
Required
Yes in body
Type
JSON union
Details
The custom field value; the accepted type is set by the field definition's field_type. text and single_select take a string (single_select must equal one of the definition's option uuids); number takes a number; boolean takes a boolean; currency takes an integer amount in the currency's minor units (the ISO currency code lives on the field definition, not on this entry); date takes a string in ISO 8601 date format (YYYY-MM-DD); tags takes an array of strings. Scalar fields reject array values, and tags rejects non-array values. Exactly one of 2 schema branches; inspect schema for nested requirements.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

list_contacts

calendly-cli list-contacts · GET /contacts

sort
Route
query sort
Required
No
Type
string
Details
Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values. Supported fields are: created_at, updated_at. Sort direction is specified as: asc, desc.
email
Route
query email
Required
No
Type
string
Details
Filter results by exact match on email address. Accepts a comma-separated list.
phone_number
Route
query phone_number
Required
No
Type
string
Details
Filter results by exact match on phone number. Accepts a comma-separated list.
timezone
Route
query timezone
Required
No
Type
string
Details
Filter results by exact match on the IANA time zone name(s). Accepts a comma-separated list of time zones.
name
Route
query name
Required
No
Type
string
Details
Filter results by partial match on name(s). Accepts a comma-separated list-- each segment is matched independently (commas in the query string separate values).
job_title
Route
query job_title
Required
No
Type
string
Details
Filter results by partial match on job title(s). Accepts a comma-separated list-- each segment is matched independently (commas in the query string separate values).
company
Route
query company
Required
No
Type
string
Details
Filter results by partial match on company name(s). Accepts a comma-separated list-- each segment is matched independently (commas in the query string separate values).
country
Route
query country
Required
No
Type
string
Details
Filter results by exact match on two-letter country code (ISO 3166-1 alpha-2). Accepts a comma-separated list.
state
Route
query state
Required
No
Type
string
Details
Filter results by exact match on state(s), province(s), or region(s). Accepts a comma-separated list of values.
city
Route
query city
Required
No
Type
string
Details
Filter results by partial match on city(ies). Accepts a comma-separated list-- each segment is matched independently (commas in the query string separate values).
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
exclude
Route
query exclude
Required
No
Type
string
Details
Omit the listed fields from the response. Currently only custom_fields is supported. When omitted, all fields are returned.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

delete_contact

calendly-cli delete-contact · DELETE /contacts/{uuid}

contact_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation

get_contact

calendly-cli get-contact · GET /contacts/{uuid}

contact_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
exclude
Route
query exclude
Required
No
Type
string
Details
Omit the listed fields from the response. Currently only custom_fields is supported. When omitted, all fields are returned.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

update_contact

calendly-cli update-contact · PATCH /contacts/{uuid}

contact_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
name
Route
Body
Required
No
Type
string
Details
Current schema
emails
Route
Body
Required
No
Type
array
Details
The user's email addresses. Max 10. Warning: Updating emails will overwrite all existing emails for the contact. Use the GET endpoint to first retrieve the existing emails and then pass the modified emails to the emails array. minItems: 1. maxItems: 10. Array items: object.
emails[].email
Route
Nested body
Required
Yes in body
Type
string
Details
Email address. format: email.
emails[].is_primary
Route
Nested body
Required
Yes in body
Type
boolean
Details
Whether this is the primary email.
phone_numbers
Route
Body
Required
No
Type
array
Details
The user's phone numbers. Max 10. Warning: Updating phone_numbers will overwrite all existing phone numbers for the contact. Use the GET endpoint to first retrieve the existing phone numbers and then pass the modified phone_numbers to the phone_numbers array. maxItems: 10. Array items: object.
phone_numbers[].phone_number
Route
Nested body
Required
Yes in body
Type
string
Details
Phone number.
timezone
Route
Body
Required
No
Type
string
Details
Current schema
job_title
Route
Body
Required
No
Type
string
Details
Current schema
company
Route
Body
Required
No
Type
string
Details
Current schema
country
Route
Body
Required
No
Type
string
Details
Current schema
state
Route
Body
Required
No
Type
string
Details
Current schema
city
Route
Body
Required
No
Type
string
Details
Current schema
linkedin
Route
Body
Required
No
Type
string
Details
format: uri.
custom_fields
Route
Body
Required
No
Type
array
Details
Custom field values to set on the contact. Each item requires a uuid (the custom field definition identifier) and a value; any other keys (such as label) are ignored. The entire request is rejected if any uuid is unknown, any value is the wrong type for its field (including an array for a scalar field or a scalar for an array field), or any single_select value is not one of the field definition's option uuids. Array items: object.
custom_fields[].uuid
Route
Nested body
Required
Yes in body
Type
string
Details
Unique identifier of the custom field definition.
custom_fields[].value
Route
Nested body
Required
Yes in body
Type
JSON union
Details
The custom field value; the accepted type is set by the field definition's field_type. text and single_select take a string (single_select must equal one of the definition's option uuids); number takes a number; boolean takes a boolean; currency takes an integer amount in the currency's minor units (the ISO currency code lives on the field definition, not on this entry); date takes a string in ISO 8601 date format (YYYY-MM-DD); tags takes an array of strings. Scalar fields reject array values, and tags rejects non-array values. Exactly one of 2 schema branches; inspect schema for nested requirements.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

get_contact_custom_field_definition

calendly-cli get-contact-custom-field-definition · GET /contacts/custom_field_definitions/{uuid}

definition_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

list_contact_custom_field_definitions

calendly-cli list-contact-custom-field-definitions · GET /contacts/custom_field_definitions

account
Route
Local
Required
No
Type
string
Details
Named private credential label

delete_invitee_data

calendly-cli delete-invitee-data · POST /data_compliance/deletion/invitees

emails
Route
Body
Required
Yes in body
Type
array
Details
Array items: string.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

delete_scheduled_event_data

calendly-cli delete-scheduled-event-data · POST /data_compliance/deletion/events

start_time
Route
Body
Required
Yes in body
Type
string
Details
The scheduled events UTC timestamp at which data deletion should begin. format: date-time.
end_time
Route
Body
Required
Yes in body
Type
string
Details
The scheduled events UTC timestamp at which data deletion should end. format: date-time.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

create_event_type

calendly-cli create-event-type · POST /event_types

active
Route
Body
Required
No
Type
boolean
Details
Indicates if the event type is active or not default: False.
owner
Route
Body
Required
Yes in body
Type
string
Details
The owner for this event type format: uri.
name
Route
Body
Required
Yes in body
Type
string
Details
The event type name
description
Route
Body
Required
No
Type
string
Details
The event type description
duration
Route
Body
Required
No
Type
integer
Details
The length of sessions booked with this event type. Must be one of the duration options if they're provided. minimum: 1. maximum: 720.
duration_options
Route
Body
Required
No
Type
array
Details
A maximum of 4 unique options is allowed. Each option must be >= 1 and <= 720. Array items: integer.
locations
Route
Body
Required
No
Type
array
Details
Configuration information for each possible location for this event type Array items: object.
locations[].kind
Route
Nested body
Required
No
Type
string
Details
Values: ask_invitee, custom, google_conference, gotomeeting_conference, inbound_call, microsoft_teams_conference, outbound_call, physical, webex_conference, zoom_conference.
locations[].location
Route
Nested body
Required
No
Type
string
Details
Current schema
locations[].additional_info
Route
Nested body
Required
No
Type
string
Details
Current schema
locations[].phone_number
Route
Nested body
Required
No
Type
string
Details
Current schema
color
Route
Body
Required
No
Type
string
Details
The hexadecimal color value of the event type's scheduling page pattern: ^#[a-f\d]{6}$.
locale
Route
Body
Required
No
Type
string
Details
The locale on the event type, used to determine the language of the event type's scheduling page Values: de, en, es, fr, it, nl, pt, uk.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

list_event_types

calendly-cli list-event-types · GET /event_types

active
Route
query active
Required
No
Type
boolean
Details
Return only active event types if true, only inactive if false, or all event types if this parameter is omitted.
organization
Route
query organization
Required
No
Type
string
Details
View available personal, team, and organization event types associated with the organization's URI. format: uri.
user
Route
query user
Required
No
Type
string
Details
View available personal, team, and organization event types associated with the user's URI. format: uri.
user_availability_schedule
Route
query user_availability_schedule
Required
No
Type
string
Details
Used in conjunction with user parameter, returns a filtered list of Event Types that use the given primary availability schedule. format: uri.
sort
Route
query sort
Required
No
Type
string
Details
Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values.Supported fields are: name, position, created_at, updated_at. Sort direction is specified as: asc, desc. default: name:asc.
admin_managed
Route
query admin_managed
Required
No
Type
boolean
Details
Return only admin managed event types if true, exclude admin managed event types if false, or include all event types if this parameter is omitted.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

create_one_off_event_type

calendly-cli create-one-off-event-type · POST /one_off_event_types

name
Route
Body
Required
Yes in body
Type
string
Details
Event type name maxLength: 55.
host
Route
Body
Required
Yes in body
Type
string
Details
Host user uri format: uri.
co_hosts
Route
Body
Required
No
Type
array
Details
Collection of meeting co-host(s) user URIs Array items: string.
duration
Route
Body
Required
Yes in body
Type
number
Details
Duration of meeting in minutes maximum: 720.
timezone
Route
Body
Required
No
Type
string
Details
Time zone used for meeting. Defaults to host's time zone.
date_setting
Route
Body
Required
Yes in body
Type
JSON union
Details
Exactly one of 3 schema branches; inspect schema for nested requirements.
location
Route
Body
Required
No
Type
JSON union
Details
Exactly one of 10 schema branches; inspect schema for nested requirements.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

get_event_type

calendly-cli get-event-type · GET /event_types/{uuid}

event_type_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

update_event_type

calendly-cli update-event-type · PATCH /event_types/{uuid}

event_type_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
active
Route
Body
Required
No
Type
boolean
Details
Indicates if the event type is active or not
name
Route
Body
Required
No
Type
string
Details
The event type name
color
Route
Body
Required
No
Type
string
Details
The hexadecimal color value of the event type's scheduling page pattern: ^#[a-f\d]{6}$.
description
Route
Body
Required
No
Type
string
Details
The event type description
duration
Route
Body
Required
No
Type
integer
Details
The length of sessions booked with this event type. Must be one of the duration options if they're provided. minimum: 1. maximum: 720.
duration_options
Route
Body
Required
No
Type
array
Details
A maximum of 4 unique options is allowed. Each option must be >= 1 and <= 720. Array items: integer.
locale
Route
Body
Required
No
Type
string
Details
The locale on the event type, used to determine the language of the event type's scheduling page Values: de, en, es, fr, it, nl, pt, uk.
locations
Route
Body
Required
No
Type
array
Details
Configuration information for each possible location for this Event Type Array items: object.
locations[].kind
Route
Nested body
Required
No
Type
string
Details
Values: ask_invitee, custom, google_conference, gotomeeting_conference, inbound_call, microsoft_teams_conference, outbound_call, physical, webex_conference, zoom_conference.
locations[].location
Route
Nested body
Required
No
Type
string
Details
Current schema
locations[].additional_info
Route
Nested body
Required
No
Type
string
Details
Current schema
locations[].phone_number
Route
Nested body
Required
No
Type
string
Details
Current schema
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

list_event_type_available_times

calendly-cli list-event-type-available-times · GET /event_type_available_times

event_type
Route
query event_type
Required
Yes
Type
string
Details
The uri associated with the event type format: uri.
start_time
Route
query start_time
Required
Yes
Type
string
Details
Start time of the requested availability range. Date cannot be in the past. format: date-time.
end_time
Route
query end_time
Required
Yes
Type
string
Details
End time of the requested availability range. Date must be in the future and no greater than 31 days from start_time. format: date-time.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

list_event_type_hosts

calendly-cli list-event-type-hosts · GET /event_type_memberships

event_type
Route
query event_type
Required
Yes
Type
string
Details
The uri associated with the event type format: uri.
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

get_group

calendly-cli get-group · GET /groups/{uuid}

group_uuid
Route
path uuid
Required
Yes
Type
string
Details
Group unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

get_group_relationship

calendly-cli get-group-relationship · GET /group_relationships/{uuid}

relationship_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

list_group_relationships

calendly-cli list-group-relationships · GET /group_relationships

count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
organization
Route
query organization
Required
No
Type
string
Details
Indicates the results should be filtered by organization format: uri.
owner
Route
query owner
Required
No
Type
string
Details
Indicates the results should be filtered by owner One Of: - Organization Membership URI - https://api.calendly.com/organization_memberships/AAAAAAAAAAAAAAAA - Organization Invitation URI - https://api.calendly.com/organizations/AAAAAAAAAAAAAAAA/invitations/BBBBBBBBBBBBBBBB format: uri.
group
Route
query group
Required
No
Type
string
Details
Indicates the results should be filtered by group format: uri.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

list_groups

calendly-cli list-groups · GET /groups

organization
Route
query organization
Required
Yes
Type
string
Details
Return groups that are associated with the organization associated with this URI format: uri.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

list_user_locations

calendly-cli list-user-locations · GET /locations

user
Route
query user
Required
Yes
Type
string
Details
The URI associated with the user format: uri.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

delete_recap

calendly-cli delete-recap · DELETE /meeting_recaps/{uuid}

recap_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation

get_recap

calendly-cli get-recap · GET /meeting_recaps/{uuid}

recap_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

update_recap

calendly-cli update-recap · PATCH /meeting_recaps/{uuid}

recap_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
summary_md
Route
Body
Required
No
Type
string/null
Details
Summary in Markdown.
action_items_md
Route
Body
Required
No
Type
string/null
Details
Action items in Markdown.
discussion_md
Route
Body
Required
No
Type
string/null
Details
Discussion notes in Markdown.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

get_transcript

calendly-cli get-transcript · GET /meeting_recaps/{uuid}/transcript

recap_uuid
Route
path uuid
Required
Yes
Type
string
Details
The meeting recap uuid minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

list_recaps

calendly-cli list-recaps · GET /meeting_recaps

event
Route
query event
Required
No
Type
string
Details
Filter results to recaps associated with a specific event scheduled via Calendly. This field corresponds to the /scheduled_events endpoint. format: uri.
start_time
Route
query start_time
Required
No
Type
string
Details
Return recaps for meetings that end after (or end at) this time (ISO 8601). format: date-time.
end_time
Route
query end_time
Required
No
Type
string
Details
Return recaps for meetings that start before (or start at) this time (ISO 8601). format: date-time.
status
Route
query status
Required
No
Type
string
Details
Filter by recap availability. When omitted, returns Available recaps only. - available : completed recaps with summary content - processing : recaps still being generated - unavailable : recaps that cannot be retrieved Values: available, processing, unavailable.
attendee
Route
query attendee
Required
No
Type
string
Details
Filter results to recaps that include a specific attendee email address. format: email.
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

get_organization

calendly-cli get-organization · GET /organizations/{uuid}

org_uuid
Route
path uuid
Required
Yes
Type
string
Details
The organization's unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

get_organization_invitation

calendly-cli get-organization-invitation · GET /organizations/{org_uuid}/invitations/{uuid}

org_uuid
Route
path org_uuid
Required
Yes
Type
string
Details
The organization’s unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
invitation_uuid
Route
path uuid
Required
Yes
Type
string
Details
The organization invitation's unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

revoke_organization_invitation

calendly-cli revoke-organization-invitation · DELETE /organizations/{org_uuid}/invitations/{uuid}

org_uuid
Route
path org_uuid
Required
Yes
Type
string
Details
The organization’s unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
invitation_uuid
Route
path uuid
Required
Yes
Type
string
Details
The organization invitation's unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation

get_organization_membership

calendly-cli get-organization-membership · GET /organization_memberships/{uuid}

membership_uuid
Route
path uuid
Required
Yes
Type
string
Details
The organization membership's unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

remove_from_organization

calendly-cli remove-from-organization · DELETE /organization_memberships/{uuid}

membership_uuid
Route
path uuid
Required
Yes
Type
string
Details
The organization membership's unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation

get_team

calendly-cli get-team · GET /teams/{team_uuid}

team_uuid
Route
path team_uuid
Required
Yes
Type
string
Details
Team UUID minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

invite_to_organization

calendly-cli invite-to-organization · POST /organizations/{uuid}/invitations

org_uuid
Route
path uuid
Required
Yes
Type
string
Details
The organization's unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
email
Route
Body
Required
Yes in body
Type
string
Details
The email of the user being invited
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

list_organization_invitations

calendly-cli list-organization-invitations · GET /organizations/{uuid}/invitations

org_uuid
Route
path uuid
Required
Yes
Type
string
Details
The organization's unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
sort
Route
query sort
Required
No
Type
string
Details
Order results by the field name and direction specified (ascending or descending). Returns multiple sets of results in a comma-separated list. default: created_at:asc.
email
Route
query email
Required
No
Type
string
Details
Indicates if the results should be filtered by email address format: email.
status
Route
query status
Required
No
Type
string
Details
Indicates if the results should be filtered by status ("pending", "accepted", or "declined") Values: pending, accepted, declined.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

list_organization_memberships

calendly-cli list-organization-memberships · GET /organization_memberships

page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
email
Route
query email
Required
No
Type
string
Details
Indicates if the results should be filtered by email address format: email.
organization
Route
query organization
Required
No
Type
string
Details
Indicates if the results should be filtered by organization format: uri.
user
Route
query user
Required
No
Type
string
Details
Indicates if the results should be filtered by user format: uri.
role
Route
query role
Required
No
Type
string
Details
Indicates if the results should be filtered by role Values: owner, admin, user.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

list_teams

calendly-cli list-teams · GET /teams

user
Route
query user
Required
No
Type
string
Details
Filter results to Teams associated with a specific user format: uri.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

list_outgoing_communications

calendly-cli list-outgoing-communications · GET /outgoing_communications

organization
Route
query organization
Required
Yes
Type
string
Details
Return outgoing communications from the organization associated with this URI format: uri.
count
Route
query count
Required
No
Type
integer
Details
The number of records to return minimum: 1. maximum: 100. default: 20.
min_created_at
Route
query min_created_at
Required
No
Type
string
Details
Include outgoing communications that were created after this time (sample time format: "2020-01-02T03:04:05.678Z"). This time should use the UTC timezone format: date-time.
max_created_at
Route
query max_created_at
Required
No
Type
string
Details
Include outgoing communications that were created prior to this time (sample time format: "2020-01-02T03:04:05.678Z"). This time should use the UTC timezone format: date-time.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next portion of the collection
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

get_routing_form

calendly-cli get-routing-form · GET /routing_forms/{uuid}

form_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

get_routing_form_submission

calendly-cli get-routing-form-submission · GET /routing_form_submissions/{uuid}

submission_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

list_routing_form_submissions

calendly-cli list-routing-form-submissions · GET /routing_form_submissions

form
Route
query form
Required
Yes
Type
string
Details
View routing form submissions associated with the routing form's URI. format: uri.
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
sort
Route
query sort
Required
No
Type
string
Details
Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values. Supported fields are: created_at. Sort direction is specified as: asc, desc.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

list_routing_forms

calendly-cli list-routing-forms · GET /routing_forms

organization
Route
query organization
Required
Yes
Type
string
Details
View organization routing forms associated with the organization's URI. format: uri.
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
sort
Route
query sort
Required
No
Type
string
Details
Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values. Supported fields are: created_at. Sort direction is specified as: asc, desc.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

cancel_event

calendly-cli cancel-event · POST /scheduled_events/{uuid}/cancellation

event_uuid
Route
path uuid
Required
Yes
Type
string
Details
The event's unique indentifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
reason
Route
Body
Required
No
Type
string
Details
Reason for cancellation maxLength: 10000.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

create_invitee

calendly-cli create-invitee · POST /invitees

event_type
Route
Body
Required
Yes in body
Type
string
Details
Canonical reference (unique identifier) for the event type being scheduled format: uri.
start_time
Route
Body
Required
Yes in body
Type
string
Details
The start time in UTC of the scheduled event format: date-time.
invitee
Route
Body
Required
Yes in body
Type
object
Details
Object requires: email, timezone. At least one schema branch must match.
invitee.name
Route
Nested body
Required
No
Type
string
Details
The full name of the invitee. Required if first_name is not provided
invitee.first_name
Route
Nested body
Required
No
Type
string
Details
The first name of the invitee. Required if name is not provided
invitee.last_name
Route
Nested body
Required
No
Type
string
Details
The last name of the invitee
invitee.email
Route
Nested body
Required
Yes in body
Type
string
Details
The email of the invitee format: email.
invitee.timezone
Route
Nested body
Required
Yes in body
Type
string
Details
The timezone of the invitee minLength: 1.
invitee.text_reminder_number
Route
Nested body
Required
No
Type
string
Details
Invitee's phone number for SMS reminders. Must be a valid phone number (e.g. +14155551234)
location
Route
Body
Required
No
Type
JSON union
Details
The polymorphic base type for an event location that Calendly supports. Note: - Location.kind must be supplied if location is defined. - Location must match location specified on the EventType. - Do not pass the location object for an EventType with a round_robin pooling_type. Exactly one of 10 schema branches; inspect schema for nested requirements.
questions_and_answers
Route
Body
Required
No
Type
array
Details
Array items: object.
questions_and_answers[].question
Route
Nested body
Required
Yes in body
Type
string
Details
A question for the invitee. String is case sensitive and must exactly match the question.
questions_and_answers[].answer
Route
Nested body
Required
Yes in body
Type
string
Details
The invitee's response to the question
questions_and_answers[].position
Route
Nested body
Required
Yes in body
Type
integer
Details
The position of the question in relation to others
tracking
Route
Body
Required
No
Type
object
Details
The UTM and Salesforce tracking parameters associated with an Invitee Object requires: utm_campaign, utm_source, utm_medium, utm_content, utm_term, salesforce_uuid.
tracking.utm_campaign
Route
Nested body
Required
Yes in body
Type
string/null
Details
The UTM parameter used to track a campaign
tracking.utm_source
Route
Nested body
Required
Yes in body
Type
string/null
Details
The UTM parameter that identifies the source (platform where the traffic originates)
tracking.utm_medium
Route
Nested body
Required
Yes in body
Type
string/null
Details
The UTM parameter that identifies the type of input (e.g. Cost Per Click (CPC), social media, affiliate or QR code)
tracking.utm_content
Route
Nested body
Required
Yes in body
Type
string/null
Details
UTM content tracking parameter
tracking.utm_term
Route
Nested body
Required
Yes in body
Type
string/null
Details
The UTM parameter used to track keywords
tracking.salesforce_uuid
Route
Nested body
Required
Yes in body
Type
string/null
Details
The Salesforce record unique identifier
event_guests
Route
Body
Required
No
Type
array
Details
Emails of invitee guests. Max 10. maxItems: 10. Array items: string.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

create_no_show

calendly-cli create-no-show · POST /invitee_no_shows

invitee
Route
Body
Required
Yes in body
Type
string
Details
format: uri.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

delete_no_show

calendly-cli delete-no-show · DELETE /invitee_no_shows/{uuid}

no_show_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation

get_no_show

calendly-cli get-no-show · GET /invitee_no_shows/{uuid}

no_show_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

get_event

calendly-cli get-event · GET /scheduled_events/{uuid}

event_uuid
Route
path uuid
Required
Yes
Type
string
Details
The event's unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

get_event_invitee

calendly-cli get-event-invitee · GET /scheduled_events/{event_uuid}/invitees/{invitee_uuid}

event_uuid
Route
path event_uuid
Required
Yes
Type
string
Details
The event's unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
invitee_uuid
Route
path invitee_uuid
Required
Yes
Type
string
Details
The invitee's unique identifier minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

list_event_invitees

calendly-cli list-event-invitees · GET /scheduled_events/{uuid}/invitees

event_uuid
Route
path uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
status
Route
query status
Required
No
Type
string
Details
Indicates if the invitee "canceled" or still "active" Values: active, canceled.
sort
Route
query sort
Required
No
Type
string
Details
Order results by the created_at field and direction specified: ascending ("asc") or descending ("desc") default: created_at:asc.
email
Route
query email
Required
No
Type
string
Details
Indicates if the results should be filtered by email address format: email.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

list_events

calendly-cli list-events · GET /scheduled_events

user
Route
query user
Required
No
Type
string
Details
Return events that are scheduled with the user associated with this URI format: uri.
organization
Route
query organization
Required
No
Type
string
Details
Return events that are scheduled with the organization associated with this URI format: uri.
invitee_email
Route
query invitee_email
Required
No
Type
string
Details
Return events that are scheduled with the invitee associated with this email address format: email.
status
Route
query status
Required
No
Type
string
Details
Whether the scheduled event is active or canceled Values: active, canceled.
sort
Route
query sort
Required
No
Type
string
Details
Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values. Supported fields are: start_time. Sort direction is specified as: asc, desc.
min_start_time
Route
query min_start_time
Required
No
Type
string
Details
Include events with start times after this time (sample time format: "2020-01-02T03:04:05.678123Z"). This time should use the UTC timezone. format: date-time.
max_start_time
Route
query max_start_time
Required
No
Type
string
Details
Include events with start times prior to this time (sample time format: "2020-01-02T03:04:05.678123Z"). This time should use the UTC timezone. format: date-time.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
group
Route
query group
Required
No
Type
string
Details
Return events that are scheduled with the group associated with this URI format: uri.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

create_scheduling_link

calendly-cli create-scheduling-link · POST /scheduling_links

max_event_count
Route
Body
Required
Yes in body
Type
string
Details
The max number of events that can be scheduled using this scheduling link. Values: 1.
owner
Route
Body
Required
Yes in body
Type
string
Details
A link to the resource that owns this Scheduling Link (currently, this is always an Event Type) format: uri.
owner_type
Route
Body
Required
Yes in body
Type
string
Details
Resource type (currently, this is always EventType) Values: EventType.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

create_share

calendly-cli create-share · POST /shares

event_type
Route
Body
Required
Yes in body
Type
string
Details
format: uri.
name
Route
Body
Required
No
Type
string
Details
maxLength: 55.
duration
Route
Body
Required
No
Type
integer
Details
Must be one of the provided duration options. If duration options aren't provided then duration must be one of the duration options inherited from the event type. minimum: 1. maximum: 720.
duration_options
Route
Body
Required
No
Type
array
Details
A maximum of 4 unique options is allowed. Each option must be >= 1 and <= 720. Array items: integer.
period_type
Route
Body
Required
No
Type
string
Details
Values: available_moving, moving, fixed, unlimited.
start_date
Route
Body
Required
No
Type
string
Details
is required when period_type is 'fixed' Format: YYYY-MM-DD format: date.
end_date
Route
Body
Required
No
Type
string
Details
is required when period_type is 'fixed' Format: YYYY-MM-DD format: date.
max_booking_time
Route
Body
Required
No
Type
integer
Details
is required when period_type is 'moving' or 'available_moving'
hide_location
Route
Body
Required
No
Type
boolean
Details
determines if a location is hidden until invitee books a spot, only respected when there is a single custom location configured
location_configurations
Route
Body
Required
No
Type
array
Details
Array items: object.
location_configurations[].location
Route
Nested body
Required
No
Type
string
Details
is only supported when kind is 'physical', 'custom' or 'ask_invitee' maxLength: 255.
location_configurations[].additional_info
Route
Nested body
Required
No
Type
string
Details
is only supported when kind is 'physical' or 'inbound_call' maxLength: 255.
location_configurations[].phone_number
Route
Nested body
Required
No
Type
string
Details
is required when kind is 'inbound_call'
location_configurations[].position
Route
Nested body
Required
No
Type
integer
Details
Current schema
location_configurations[].kind
Route
Nested body
Required
No
Type
string
Details
Values: physical, ask_invitee, custom, outbound_call, inbound_call, google_conference, gotomeeting_conference, microsoft_teams_conference, webex_conference, zoom_conference.
availability_rule
Route
Body
Required
No
Type
object
Details
Current schema
availability_rule.rules
Route
Nested body
Required
No
Type
array
Details
are required when an availability rule is provided Array items: object.
availability_rule.rules[].type
Route
Nested body
Required
No
Type
string
Details
Values: wday, date.
availability_rule.rules[].wday
Route
Nested body
Required
No
Type
string
Details
is required when type is 'wday' Values: sunday, monday, tuesday, wednesday, thursday, friday, saturday.
availability_rule.rules[].date
Route
Nested body
Required
No
Type
string
Details
is required when type is 'date' Format: YYYY-MM-DD format: date.
availability_rule.rules[].intervals
Route
Nested body
Required
No
Type
array
Details
Array items: object.
availability_rule.rules[].intervals[].from
Route
Nested body
Required
No
Type
string
Details
Format: "hh:mm" pattern: (\d\d):(\d\d).
availability_rule.rules[].intervals[].to
Route
Nested body
Required
No
Type
string
Details
Format: "hh:mm" pattern: (\d\d):(\d\d).
availability_rule.timezone
Route
Nested body
Required
No
Type
string
Details
is required when an availability rule is provided
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

get_current_user

calendly-cli get-current-user · GET /users/me

account
Route
Local
Required
No
Type
string
Details
Named private credential label

get_user

calendly-cli get-user · GET /users/{uuid}

uuid
Route
path uuid
Required
Yes
Type
string
Details
User unique identifier, or the constant "me" to reference the caller minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

create_webhook

calendly-cli create-webhook · POST /webhook_subscriptions

url
Route
Body
Required
Yes in body
Type
string
Details
The URL where you want to receive POST requests for events you are subscribed to. format: uri.
events
Route
Body
Required
Yes in body
Type
array
Details
List of user events to subscribe to. minItems: 1. Array items: string.
organization
Route
Body
Required
Yes in body
Type
string
Details
The unique reference to the organization that the webhook will be tied to. format: uri.
user
Route
Body
Required
No
Type
string
Details
The unique reference to the user that the webhook will be tied to. format: uri.
group
Route
Body
Required
No
Type
string
Details
The unique reference to the group that the webhook will be tied to. format: uri.
scope
Route
Body
Required
Yes in body
Type
string
Details
Indicates whether the webhook subscription scope is organization, user, or group Values: organization, user, group.
signing_key
Route
Body
Required
No
Type
string
Details
Optional secret key shared between your application and Calendly. See https://developer.calendly.com/api-docs/overview/webhooks/webhook-signatures for additional information.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation
payload
Route
Complete body
Required
Alternative
Type
object
Details
Complete current body JSON; no mixed body flags
payload_file
Route
Complete body
Required
Alternative
Type
string
Details
Regular local JSON file, at most 5 MB

list_webhooks

calendly-cli list-webhooks · GET /webhook_subscriptions

organization
Route
query organization
Required
Yes
Type
string
Details
The given organization that owns the subscriptions being returned. This field is always required. format: uri.
user
Route
query user
Required
No
Type
string
Details
Indicates if the results should be filtered by user. This parameter is only required if the scope parameter is set to user. format: uri.
group
Route
query group
Required
No
Type
string
Details
Indicates if the results should be filtered by group. This parameter is only required if the scope parameter is set to group. format: uri.
page_token
Route
query page_token
Required
No
Type
string
Details
The token to pass to get the next or previous portion of the collection
count
Route
query count
Required
No
Type
integer
Details
The number of rows to return minimum: 1. maximum: 100. default: 20.
sort
Route
query sort
Required
No
Type
string
Details
Order results by the specified field and direction. Accepts comma-separated list of {field}:{direction} values. Supported fields are: created_at. Sort direction is specified as: asc, desc.
scope
Route
query scope
Required
Yes
Type
string
Details
Filter the list by organization, user, or group Values: organization, user, group.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
all_pages
Route
Local paging
Required
No
Type
boolean
Details
Bounded native page_token collection; at most 100 requests
max_items
Route
Local paging
Required
No
Type
integer
Details
1 to 10000, default 1000; requires all_pages

delete_webhook

calendly-cli delete-webhook · DELETE /webhook_subscriptions/{webhook_uuid}

webhook_uuid
Route
path webhook_uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label
confirm
Route
Guard
Required
Yes to execute
Type
boolean
Details
Explicit true for this requested mutation

get_webhook

calendly-cli get-webhook · GET /webhook_subscriptions/{webhook_uuid}

webhook_uuid
Route
path webhook_uuid
Required
Yes
Type
string
Details
minLength: 1. pattern: ^[A-Za-z0-9_-]+$.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

get_sample_webhook_data

calendly-cli get-sample-webhook-data · GET /sample_webhook_data

event
Route
query event
Required
Yes
Type
string
Details
Values: invitee.created, invitee.canceled, invitee_no_show.created, invitee_no_show.deleted, routing_form_submission.created, event_type.created, event_type.deleted, event_type.updated, meeting_recap.created, meeting_recap.updated, meeting_recap.deleted, contact.created, contact.updated, contact.deleted.
organization
Route
query organization
Required
Yes
Type
string
Details
format: uri.
user
Route
query user
Required
No
Type
string
Details
format: uri.
scope
Route
query scope
Required
Yes
Type
string
Details
Values: user, organization, group.
group
Route
query group
Required
No
Type
string
Details
format: uri.
account
Route
Local
Required
No
Type
string
Details
Named private credential label

list_accounts

calendly-cli list-accounts lists private labels, defaults and credential method without tokens, file paths or account content. It accepts no arguments.

Complete client, OS and desktop setup

Put actual values only into private user settings. INSTALL.md ships in npm. Remote-only clients can use the official hosted MCP with supported DCR OAuth.

Claude Code

For a user-scoped connection, after privately configuring credentials:

claude mcp add --scope user calendly -- npx -y @thenavidm/calendly-mcp-cli@latest
claude mcp list

Use the client's private local environment settings for the account variable if they are not inherited. Claude's -e NAME=value registration option writes values into its config; only use it locally through your secret manager, with no shared command transcript. Never place credentials in a project .mcp.json. Reconnect and ask Claude to verify credentials.

Alternatively install the CLI, make SKILL.md available to Claude, and use shell commands. Registering both surfaces is optional.

Codex

Codex is a first-class client for both surfaces. The installed Codex CLI 0.159.3 accepts the local stdio command and private environment forwarding below. No Claude Code is required.

codex mcp add calendly -- npx -y @thenavidm/calendly-mcp-cli@latest
codex mcp list

Account credentials must reach the server through private environment settings. codex mcp add --env NAME=value stores values in your local config, so never commit that config or put secrets in a shared command. In TOML, the equivalent server is:

[mcp_servers.calendly]
command = "npx"
args = ["-y", "@thenavidm/calendly-mcp-cli@latest"]
env_vars = ["CALENDLY_API_TOKEN", "CALENDLY_TOKEN_FILE", "CALENDLY_ACCESS_TOKEN", "CALENDLY_TOKENS_FILE"]

env_vars forwards those names from the environment available to Codex. If that environment does not contain them, configure private env settings locally. Codex can also call the CLI directly with SKILL.md and --agent output.

Claude Desktop

Install the .mcpb extension

  1. Download calendly-2.0.0.mcpb from GitHub Releases.
  2. In a supported Claude Desktop build, open Settings > Extensions > Advanced settings > Install Extension… and select it.
  3. Enter a private PAT in the sensitive setting, or an absolute private token-file path. Leave the unused credential routes empty. For OAuth select the separate private JSON grant-file path.
  4. Enable read-only if you want only the 44 reads. Reconnect and ask for account verification.

The bundle includes production dependencies and no credentials. Use a regular private token-only file if you prefer file-based credentials. The manifest requires Node 22 or newer from a compatible host. Organization policy may restrict custom extensions. Manual bundle updates require installing the new version; no automatic directory updates are promised. GUI installation remains unverified separately from archive/protocol checks.

Manual config

Open Settings > Developer > Edit Config, or use your platform's config file:

OSTypical config path
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json; confirm the location through Edit Config in your installed build
{
"mcpServers": {
"calendly": {
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "YOUR_PRIVATE_PAT",
"CALENDLY_TOKEN_FILE": "",
"CALENDLY_ACCESS_TOKEN": "",
"CALENDLY_TOKENS_FILE": ""
}
}
}
}

Replace the placeholders only in your private file. Merge the server entry into an existing mcpServers object instead of replacing other integrations. Fully quit and reopen Claude Desktop. Do not enable an extension and a manual entry with the same name; choose one route.

If a Windows launcher cannot execute npx directly, use "command": "cmd" with "args": ["/c", "npx", "-y", "@thenavidm/calendly-mcp-cli@latest"]. An absolute node executable and installed dist/index.js path also avoids launcher/PATH problems.

Cursor

Use private user settings at ~/.cursor/mcp.json, or Settings > Tools & MCP. Cursor documents environment interpolation and envFile support.

{
"mcpServers": {
"calendly": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "${env:CALENDLY_API_TOKEN}",
"CALENDLY_TOKEN_FILE": "${env:CALENDLY_TOKEN_FILE}",
"CALENDLY_ACCESS_TOKEN": "${env:CALENDLY_ACCESS_TOKEN}",
"CALENDLY_TOKENS_FILE": "${env:CALENDLY_TOKENS_FILE}"
}
}
}
}

The environment values must exist for the Cursor process. If you use envFile, keep that file private and outside version control. A project's .cursor/mcp.json must not contain actual credentials. Reconnect the server after saving.

VS Code and Copilot

Use MCP: Open User Configuration. VS Code uses servers and secure inputs, rather than a mcpServers root:

{
"inputs": [
{"type": "promptString", "id": "calendly-api-key", "description": "Calendly PAT (leave empty for a private token file)", "password": true},
{"type": "promptString", "id": "calendly-token-file", "description": "Optional private token-file path (leave empty for PAT)"}
],
"servers": {
"calendly": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "${input:calendly-api-key}",
"CALENDLY_TOKEN_FILE": "${input:calendly-token-file}",
"CALENDLY_ACCESS_TOKEN": "",
"CALENDLY_TOKENS_FILE": ""
}
}
}
}

Start Calendly through the MCP controls, approve trust if prompted, and enter credentials in the private input prompts. Workspace .vscode/mcp.json may contain this placeholder-only structure, but never resolved secret values. Remote development runs the server in the selected remote environment, so local file paths refer to that environment.

Windsurf

Open Cascade's MCP settings or edit the private user file ~/.codeium/windsurf/mcp_config.json. Use the Claude Desktop manual mcpServers block above with your locally configured env values. See Windsurf's current MCP documentation. Restart or reconnect Calendly in Cascade; project files must not contain secrets.

Zed

Open Settings > AI > MCP Servers > Add Server > Add Local Server, or your user settings file. Zed uses context_servers:

{
"context_servers": {
"calendly": {
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "YOUR_PRIVATE_PAT",
"CALENDLY_TOKEN_FILE": "",
"CALENDLY_ACCESS_TOKEN": "",
"CALENDLY_TOKENS_FILE": ""
}
}
}
}

Enter actual values only in private user settings. Check the active-server indicator before prompting. Do not wrap command and args inside a nested command object from older Zed examples.

Gemini CLI

Merge the Claude Desktop manual mcpServers block into your private ~/.gemini/settings.json. Configure the private credential values locally, then restart Gemini CLI and inspect /mcp. See Gemini CLI's MCP configuration. Its project settings must not contain real credentials. You can instead use the CLI from an agent shell.

Other local stdio clients use the same command and arguments, adapted to their config format. A client that only accepts a remote MCP URL cannot connect directly: this package does not ship a public HTTP listener. ChatGPT's remote connector setup is not a substitute for local stdio installation.

Docker

Build locally from the reviewed source; no prebuilt registry image is claimed:

git clone https://github.com/thenavidm/calendly-mcp-cli.git
cd calendly-mcp-cli
docker build -t calendly-mcp-cli .
docker run --rm -i -e CALENDLY_API_TOKEN calendly-mcp-cli

-e CALENDLY_API_TOKEN forwards the shell's already configured private value. MCP needs -i and stdio. For file-based tokens, mount the private token file read-only and set the absolute in-container CALENDLY_TOKEN_FILE path. Host paths do not automatically exist inside a container. PAT files are read-only and cached until restart. For OAuth, mount the private grant directory with narrowly scoped read/write access so atomic replacement and lock creation work; a read-only mount cannot rotate credentials. Do not mount a whole home directory.

Cline and other local MCP clients

Use the client's Add MCP server flow with command npx, arguments -y and @thenavidm/calendly-mcp-cli@latest, stdio transport, and private local PAT or OAuth credential settings. UI names depend on the installed client. Reconnect and discover tools before an account call. Browser-only clients need a remote HTTPS connector; use Calendly's official server rather than this local stdio command.

Command inputs, JSON and output

Tool names become dashed commands; underscores are accepted too. Path parameter names follow the discovered schema, such as event_uuid → --event-uuid. Body tools accept individual top-level flags, complete --payload JSON, or --payload-file pointing to a regular JSON body file up to 5 MB. Do not mix those body routes. Path/query flags remain separate. Nested objects take JSON and array flags repeat once per item; a whole array is not a single item.

calendly-cli get-event --help
calendly-cli schema create-invitee
calendly-cli list-events --user https://api.calendly.com/users/USER_UUID --count 10 --agent
calendly-cli list-contacts --email user@example.com --count 5 --agent

UUIDs and URIs are illustrative; use resources discovered in your own account. Nullable fields require an actual JSON null inside payload; --field null is a string. Nested request properties follow the current schema; unknown top-level body fields are refused. Body-required fields are validated during execution even when the wrapper schema allows an alternative payload route. Operations whose upstream request body is required need body flags or an explicit payload; a deliberately supplied empty object is sent as JSON, never omitted.

FlagBehavior
--help / schema COMMANDCurrent argument help / full JSON Schema
--jsonStructured JSON
--compactOne-line JSON
--agentCompact JSON, no prompts or color
--select a,b.cKeep selected fields, including nested objects/arrays
--no-color / --no-inputNoninteractive house flags
--yesNever replaces write confirmation
--confirmConfirm only the requested mutation
--account NAMESelect private local credentials
--payload JSON / --payload-file PATHComplete request body, mutually exclusive with body flags
ExitMeaning
0Success
2Invalid arguments or refused write
3Resource not found
4Authentication/permission failure
5API/transport failure
7Rate limit
10Missing or invalid private configuration

Results go to stdout, errors as JSON to stderr. Selection changes local output, not the original API response or quota charge. API success is not proof of notification delivery or a completed export.

Official MCP and community comparisons

Surface
Hosted https://mcp.calendly.com, DCR OAuth/PKCE
Documented scope and tradeoff
Strong scheduling and user/organization coverage plus provider skills; no PAT/static console OAuth connection
This package
Surface
Local MCP + shared CLI + desktop archive
Documented scope and tradeoff
65 current REST operations plus local helper; Contacts/custom fields/Notetaker, private PAT/REST OAuth, named accounts, bounded cursors and explicit guards; local maintenance required
Surface
https://developer.calendly.com/_mcp/server
Documented scope and tradeoff
Documentation search/reference; not authenticated account scheduling
Surface
Community CLI + MCP
Documented scope and tradeoff
Documents PAT login, user/organization auto-resolution, agent JSON and scheduling commands; its current README still states a seven-day event-slot range, versus the official July 2026 change to 31
Surface
Community MCP
Documented scope and tradeoff
Documents PAT/OAuth and end-to-end booking, discovery, availability and locations; review its current implementation/permissions before use

Checked October 2, 2026. The official supported-tools table lists 34 account operations plus two skills, but this is a documentation count, not authenticated tools/list. It does not list Contacts/Notetaker in the reviewed table. It shows several paths that differ from the current REST spec (availability schedules, locations, share and routing submissions). Our API routes use the current OpenAPI; that discrepancy does not prove the official hosted MCP fails. Neither tool counts nor schema size establish task success or token savings.

No dedicated Calendly-published task CLI was identified in the reviewed official developer pages. A community CLI does exist, so we do not claim the CLI category is empty. Community scope observations are documentation/source reviews, not competitor handshakes or live booking tests. See COMPARISON.md for evidence scope and the pending matched task comparison.

Current primary sources: API reference, OpenAPI, scopes, quota, release notes and MCP tools. Original/sanitized hashes and reviewed schema corrections are in src/tools/api-source.json.

Versions and migration

Package / desktop manifest
Current baseline
2.0.0
Meaning
Shared MCP/CLI, current API and guarded workflows
Calendly service
Current baseline
API v2
Meaning
Fixed api.calendly.com, no /v2 URL prefix
OpenAPI info.version
Current baseline
1.0.0
Meaning
Document metadata, not service version
MCP TypeScript SDK
Current baseline
^1.32.0
Meaning
Same protocol server for all surfaces
Node
Current baseline
22+
Meaning
CLI/manual MCP and compatible desktop runtime
Legacy source
Current baseline
1.0.0 / 38 declared tools
Meaning
Manually assembled MCP-only implementation

Many old tool names remain, but use current schema arguments and routes. Path identifiers use meaningful *_uuid flags; filters use canonical full URIs. Availability updates use PATCH /event_type_availability_schedules with event_type query URI; user locations use /locations, customized links /shares, and form submissions the global resource with form filter. New Contacts/Notetaker families and current webhook scope/event rules are included. API v1 ended March 31, 2025. The July 2026 event-slot limit is 31 days; the user busy-time limit stays seven. OAuth refresh tokens have rotated once since the August 2026 deadline.

See CHANGELOG.md for exact legacy-name migration and current corrections. Preserve AGPL-3.0-or-later. Build/typecheck, 25 realistic fixture checks and actual discovery are distinct from live account outcomes, GUI installation and fresh token/task measurements. Those remain separately recorded.

Updates and removal

npm install -g @thenavidm/calendly-mcp-cli@latest
calendly-cli --version
claude mcp remove --scope user calendly
codex mcp remove calendly
npm uninstall -g @thenavidm/calendly-mcp-cli

Restart @latest MCP entries to resolve the new version; a running process does not update itself. Pin a reviewed version for reproducible automation. Read CHANGELOG.md and GitHub Releases before major updates. Manually installed desktop extensions need the new versioned .mcpb installed separately. No directory-driven automatic desktop update is claimed.

Remove each manual client entry and copied skill as appropriate. Uninstalling does not revoke tokens, undo bookings, revoke OAuth grants, remove account data or reverse invitations. Revoke tokens in Calendly separately. Preserve private data before removing local private files. Do not overwrite an existing npm version to roll back.

Validation and remaining evidence

Typecheck, build, 25 behavior/shared-CLI tests and real stdio discovery pass. Full discovery exposes 66 tools; read-only exposes 44. All 22 writes require confirmation. Production dependency audit has zero findings; development-only packaging advisories are documented in SECURITY.md and excluded from runtime artifacts. Source history, npm and desktop artifacts are scanned for credentials. Public CI, fresh installation and downloaded desktop discovery are verified for the released version. Live provider account outcomes and desktop GUI installation remain separately unverified.

Codex is the current validation and measurement priority. Codex CLI 0.159.3 accepts the documented stdio registration and private environment forwarding. Neither surface requires Claude Code; other-client benchmarks are deferred. Codex-specific standing context and matched successful task measurements remain pending.

More tools for your creator business

Connect the tools needed for your requested workflow.

Calendly MCP Server & CLI FAQs

CLI and official MCP differences, private authentication, OAuth rotation, bookings, contacts, Notetaker, desktop installation and safety.

A local stdio server exposing Calendly operations to an AI client through structured tool schemas.

calendly-cli runs the same operations through the actual shared MCP implementation.

Shell agents and scripts can use it.

Yes, hosted at https://mcp.calendly.com, using DCR OAuth 2.1 and PKCE.

It is a strong scheduling option.

Local CLI use, PAT/REST OAuth grants, named accounts, Contacts/Notetaker operations, bounded pagination and explicit guards.

No overall superiority or efficiency percentage is claimed.

Yes.

The reviewed bcharleson/calendly-cli repository offers a community CLI and MCP.

No dedicated provider-published task CLI was identified in the official pages reviewed.

The wrapper preserves AGPL-3.0-or-later.

Calendly plan charges, permissions and quotas remain separate.

In your intended Calendly account, open Integrations > API and webhooks, generate a scoped token and store it privately.

Use private local settings or owner-only files outside repositories.

Never put tokens or signing keys in chats, issues or shared project configs.

No, it prints setup instructions.

Bring your own authorized REST grant; the official hosted MCP separately handles DCR OAuth in a compatible client.

A private JSON token file is required.

Rotation is locked, single-use and atomically saved.

Failed or unknown rotations require reauthorization/repair and restart, rather than repeated token use.

The versioned .mcpb bundles production dependencies and supports private sensitive PAT/file settings.

Compatible host/runtime and custom-extension policy apply; GUI installation is separately unverified.

It needs local stdio.

For remote URL clients, check the official hosted MCP and DCR compatibility.

It creates a real booking with normal calendar invites, notifications and workflows.

There is no draft booking; explicit confirmation is required.

No invented reschedule endpoint is exposed.

Use supported returned links/workflows or a separately approved cancellation/new booking.

Event-type available slots now allow up to 31 days; user busy-time queries remain capped at seven.

Both need future increasing ranges.

Supported native page_token lists have bounded all_pages, max_items and a 100-request cap.

Every page uses quota, and continuation is not a snapshot.

The result cap cut through a page.

Fetch the same token with identical filters/count and skip that many records locally.

There is no skip API flag.

It reads existing Notetaker transcript/recap data where your account provides it.

It does not record a meeting or bypass access/consent requirements.

No.

Inspect state after an unknown booking or edit outcome before repeating it.

GET retries and auth refresh do not resubmit writes.

Fresh eager/deferred MCP, skill and matched task usage measurements are pending.

No estimates or borrowed savings figures are substituted.

Navid Moazzez

AI business strategist & AI OS builder

Navid Moazzez helps creators and founders master AI and build their own AI Operating System (AI OS) to automate their business and life.

Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Learn more.

More MCP servers & CLIs

Related free tools

Free AI newsletter

The most actionable AI newsletter for founders

Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.

No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.

P.S. Sign up now to get free access to my ultimate AI tools guide for creators.

Loved by 10,000+ readers