Automate Calendly scheduling, event management, invitee tracking, availability checks, and organization administration via Rube MCP (Composio). Always search tools first for current schemas.
Add this skill
npx mdskills install sickn33/calendly-automationComprehensive Calendly automation with clear workflows, parameter details, and pitfall warnings
1---2name: calendly-automation3description: "Automate Calendly scheduling, event management, invitee tracking, availability checks, and organization administration via Rube MCP (Composio). Always search tools first for current schemas."4requires:5 mcp: [rube]6---78# Calendly Automation via Rube MCP910Automate Calendly operations including event listing, invitee management, scheduling link creation, availability queries, and organization administration through Composio's Calendly toolkit.1112## Prerequisites1314- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)15- Active Calendly connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `calendly`16- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas17- Many operations require the user's Calendly URI, obtained via `CALENDLY_GET_CURRENT_USER`1819## Setup2021**Get Rube MCP**: Add `https://rube.app/mcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.2223241. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds252. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `calendly`263. If connection is not ACTIVE, follow the returned auth link to complete Calendly OAuth274. Confirm connection status shows ACTIVE before running any workflows2829## Core Workflows3031### 1. List and View Scheduled Events3233**When to use**: User wants to see their upcoming, past, or filtered Calendly events3435**Tool sequence**:361. `CALENDLY_GET_CURRENT_USER` - Get authenticated user URI and organization URI [Prerequisite]372. `CALENDLY_LIST_EVENTS` - List events scoped by user, organization, or group [Required]383. `CALENDLY_GET_EVENT` - Get detailed info for a specific event by UUID [Optional]3940**Key parameters**:41- `user`: Full Calendly API URI (e.g., `https://api.calendly.com/users/{uuid}`) - NOT `"me"`42- `organization`: Full organization URI for org-scoped queries43- `status`: `"active"` or `"canceled"`44- `min_start_time` / `max_start_time`: UTC timestamps (e.g., `2024-01-01T00:00:00.000000Z`)45- `invitee_email`: Filter events by invitee email (filter only, not a scope)46- `sort`: `"start_time:asc"` or `"start_time:desc"`47- `count`: Results per page (default 20)48- `page_token`: Pagination token from previous response4950**Pitfalls**:51- Exactly ONE of `user`, `organization`, or `group` must be provided - omitting or combining scopes fails52- The `user` parameter requires the full API URI, not `"me"` - use `CALENDLY_GET_CURRENT_USER` first53- `invitee_email` is a filter, not a scope; you still need one of user/organization/group54- Pagination uses `count` + `page_token`; loop until `page_token` is absent for complete results55- Admin rights may be needed for organization or group scope queries5657### 2. Manage Event Invitees5859**When to use**: User wants to see who is booked for events or get invitee details6061**Tool sequence**:621. `CALENDLY_LIST_EVENTS` - Find the target event(s) [Prerequisite]632. `CALENDLY_LIST_EVENT_INVITEES` - List all invitees for a specific event [Required]643. `CALENDLY_GET_EVENT_INVITEE` - Get detailed info for a single invitee [Optional]6566**Key parameters**:67- `uuid`: Event UUID (for `LIST_EVENT_INVITEES`)68- `event_uuid` + `invitee_uuid`: Both required for `GET_EVENT_INVITEE`69- `email`: Filter invitees by email address70- `status`: `"active"` or `"canceled"`71- `sort`: `"created_at:asc"` or `"created_at:desc"`72- `count`: Results per page (default 20)7374**Pitfalls**:75- The `uuid` parameter for `CALENDLY_LIST_EVENT_INVITEES` is the event UUID, not the invitee UUID76- Paginate using `page_token` until absent for complete invitee lists77- Canceled invitees are excluded by default; use `status: "canceled"` to see them7879### 3. Create Scheduling Links and Check Availability8081**When to use**: User wants to generate a booking link or check available time slots8283**Tool sequence**:841. `CALENDLY_GET_CURRENT_USER` - Get user URI [Prerequisite]852. `CALENDLY_LIST_USER_S_EVENT_TYPES` - List available event types [Required]863. `CALENDLY_LIST_EVENT_TYPE_AVAILABLE_TIMES` - Check available slots for an event type [Optional]874. `CALENDLY_CREATE_SCHEDULING_LINK` - Generate a single-use scheduling link [Required]885. `CALENDLY_LIST_USER_AVAILABILITY_SCHEDULES` - View user's availability schedules [Optional]8990**Key parameters**:91- `owner`: Event type URI (e.g., `https://api.calendly.com/event_types/{uuid}`)92- `owner_type`: `"EventType"` (default)93- `max_event_count`: Must be exactly `1` for single-use links94- `start_time` / `end_time`: UTC timestamps for availability queries (max 7-day range)95- `active`: Boolean to filter active/inactive event types96- `user`: User URI for event type listing9798**Pitfalls**:99- `CALENDLY_CREATE_SCHEDULING_LINK` can return 403 if token lacks rights or owner URI is invalid100- `CALENDLY_LIST_EVENT_TYPE_AVAILABLE_TIMES` requires UTC timestamps and max 7-day range; split longer searches101- Available times results are NOT paginated - all results returned in one response102- Event type URIs must be full API URIs (e.g., `https://api.calendly.com/event_types/...`)103104### 4. Cancel Events105106**When to use**: User wants to cancel a scheduled Calendly event107108**Tool sequence**:1091. `CALENDLY_LIST_EVENTS` - Find the event to cancel [Prerequisite]1102. `CALENDLY_GET_EVENT` - Confirm event details before cancellation [Prerequisite]1113. `CALENDLY_LIST_EVENT_INVITEES` - Check who will be affected [Optional]1124. `CALENDLY_CANCEL_EVENT` - Cancel the event [Required]113114**Key parameters**:115- `uuid`: Event UUID to cancel116- `reason`: Optional cancellation reason (may be included in notification to invitees)117118**Pitfalls**:119- Cancellation is IRREVERSIBLE - always confirm with the user before calling120- Cancellation may trigger notifications to invitees121- Only active events can be canceled; already-canceled events return errors122- Get explicit user confirmation before executing `CALENDLY_CANCEL_EVENT`123124### 5. Manage Organization and Invitations125126**When to use**: User wants to invite members, manage organization, or handle org invitations127128**Tool sequence**:1291. `CALENDLY_GET_CURRENT_USER` - Get user and organization context [Prerequisite]1302. `CALENDLY_GET_ORGANIZATION` - Get organization details [Optional]1313. `CALENDLY_LIST_ORGANIZATION_INVITATIONS` - Check existing invitations [Optional]1324. `CALENDLY_CREATE_ORGANIZATION_INVITATION` - Send an org invitation [Required]1335. `CALENDLY_REVOKE_USER_S_ORGANIZATION_INVITATION` - Revoke a pending invitation [Optional]1346. `CALENDLY_REMOVE_USER_FROM_ORGANIZATION` - Remove a member [Optional]135136**Key parameters**:137- `uuid`: Organization UUID138- `email`: Email address of user to invite139- `status`: Filter invitations by `"pending"`, `"accepted"`, or `"declined"`140141**Pitfalls**:142- Only org owners/admins can manage invitations and removals; others get authorization errors143- Duplicate active invitations for the same email are rejected - check existing invitations first144- Organization owners cannot be removed via `CALENDLY_REMOVE_USER_FROM_ORGANIZATION`145- Invitation statuses include pending, accepted, declined, and revoked - handle each appropriately146147## Common Patterns148149### ID Resolution150Calendly uses full API URIs as identifiers, not simple IDs:151- **Current user URI**: `CALENDLY_GET_CURRENT_USER` returns `resource.uri` (e.g., `https://api.calendly.com/users/{uuid}`)152- **Organization URI**: Found in current user response at `resource.current_organization`153- **Event UUID**: Extract from event URI or list responses154- **Event type URI**: From `CALENDLY_LIST_USER_S_EVENT_TYPES` response155156Important: Never use `"me"` as a user parameter in list/filter endpoints. Always resolve to the full URI first.157158### Pagination159Most Calendly list endpoints use token-based pagination:160- Set `count` for page size (default 20)161- Follow `page_token` from `pagination.next_page_token` until absent162- Sort with `field:direction` format (e.g., `start_time:asc`, `created_at:desc`)163164### Time Handling165- All timestamps must be in UTC format: `yyyy-MM-ddTHH:mm:ss.ffffffZ`166- Use `min_start_time` / `max_start_time` for date range filtering on events167- Available times queries have a maximum 7-day range; split longer searches into multiple calls168169## Known Pitfalls170171### URI Formats172- All entity references use full Calendly API URIs (e.g., `https://api.calendly.com/users/{uuid}`)173- Never pass bare UUIDs where URIs are expected, and never pass `"me"` to list endpoints174- Extract UUIDs from URIs when tools expect UUID parameters (e.g., `CALENDLY_GET_EVENT`)175176### Scope Requirements177- `CALENDLY_LIST_EVENTS` requires exactly one scope (user, organization, or group) - no more, no less178- Organization/group scoped queries may require admin privileges179- Token scope determines which operations are available; 403 errors indicate insufficient permissions180181### Data Relationships182- Events have invitees (attendees who booked)183- Event types define scheduling pages (duration, availability rules)184- Organizations contain users and groups185- Scheduling links are tied to event types, not directly to events186187### Rate Limits188- Calendly API has rate limits; avoid tight loops over large datasets189- Paginate responsibly and add delays for batch operations190191## Quick Reference192193| Task | Tool Slug | Key Params |194|------|-----------|------------|195| Get current user | `CALENDLY_GET_CURRENT_USER` | (none) |196| Get user by UUID | `CALENDLY_GET_USER` | `uuid` |197| List events | `CALENDLY_LIST_EVENTS` | `user`, `status`, `min_start_time` |198| Get event details | `CALENDLY_GET_EVENT` | `uuid` |199| Cancel event | `CALENDLY_CANCEL_EVENT` | `uuid`, `reason` |200| List invitees | `CALENDLY_LIST_EVENT_INVITEES` | `uuid`, `status`, `email` |201| Get invitee | `CALENDLY_GET_EVENT_INVITEE` | `event_uuid`, `invitee_uuid` |202| List event types | `CALENDLY_LIST_USER_S_EVENT_TYPES` | `user`, `active` |203| Get event type | `CALENDLY_GET_EVENT_TYPE` | `uuid` |204| Check availability | `CALENDLY_LIST_EVENT_TYPE_AVAILABLE_TIMES` | event type URI, `start_time`, `end_time` |205| Create scheduling link | `CALENDLY_CREATE_SCHEDULING_LINK` | `owner`, `max_event_count` |206| List availability schedules | `CALENDLY_LIST_USER_AVAILABILITY_SCHEDULES` | user URI |207| Get organization | `CALENDLY_GET_ORGANIZATION` | `uuid` |208| Invite to org | `CALENDLY_CREATE_ORGANIZATION_INVITATION` | `uuid`, `email` |209| List org invitations | `CALENDLY_LIST_ORGANIZATION_INVITATIONS` | `uuid`, `status` |210| Revoke org invitation | `CALENDLY_REVOKE_USER_S_ORGANIZATION_INVITATION` | org UUID, invitation UUID |211| Remove from org | `CALENDLY_REMOVE_USER_FROM_ORGANIZATION` | membership UUID |212
Full transparency — inspect the skill content before installing.