{"slug":"calendly-automation","title":"calendly-automation","summary":"Automate Calendly scheduling, event management, invitee tracking, availability checks, and organization administration via Rube MCP (Composio). Always search tools first for current schemas.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-14T20:43:26.974268Z","repo":{"url":"https://github.com/davepoon/buildwithclaude","stars":3556,"forks":535,"license":"MIT","updatedAt":"2026-09-27T03:56:38Z"},"bodyHtml":"<hr>\n<h2>name: calendly-automation\ndescription: Automate Calendly scheduling, event management, invitee tracking, availability checks, and organization administration via Rube MCP (Composio). Always search tools first for current schemas.\nrequires:\nmcp: [rube]\ncategory: automation</h2>\n<h1>Calendly Automation via Rube MCP</h1>\n<p>Automate Calendly operations including event listing, invitee management, scheduling link creation, availability queries, and organization administration through Composio's Calendly toolkit.</p>\n<p><strong>Toolkit docs</strong>: <a href=\"https://composio.dev/toolkits/calendly\">composio.dev/toolkits/calendly</a></p>\n<h2>Prerequisites</h2>\n<ul>\n<li>Rube MCP must be connected (RUBE_SEARCH_TOOLS available)</li>\n<li>Active Calendly connection via <code>RUBE_MANAGE_CONNECTIONS</code> with toolkit <code>calendly</code></li>\n<li>Always call <code>RUBE_SEARCH_TOOLS</code> first to get current tool schemas</li>\n<li>Many operations require the user's Calendly URI, obtained via <code>CALENDLY_GET_CURRENT_USER</code></li>\n</ul>\n<h2>Setup</h2>\n<p><strong>Get Rube MCP</strong>: Add <code>https://rube.app/mcp</code> as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.</p>\n<ol>\n<li>Verify Rube MCP is available by confirming <code>RUBE_SEARCH_TOOLS</code> responds</li>\n<li>Call <code>RUBE_MANAGE_CONNECTIONS</code> with toolkit <code>calendly</code></li>\n<li>If connection is not ACTIVE, follow the returned auth link to complete Calendly OAuth</li>\n<li>Confirm connection status shows ACTIVE before running any workflows</li>\n</ol>\n<h2>Core Workflows</h2>\n<h3>1. List and View Scheduled Events</h3>\n<p><strong>When to use</strong>: User wants to see their upcoming, past, or filtered Calendly events</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CALENDLY_GET_CURRENT_USER</code> - Get authenticated user URI and organization URI [Prerequisite]</li>\n<li><code>CALENDLY_LIST_EVENTS</code> - List events scoped by user, organization, or group [Required]</li>\n<li><code>CALENDLY_GET_EVENT</code> - Get detailed info for a specific event by UUID [Optional]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>user</code>: Full Calendly API URI (e.g., <code>https://api.calendly.com/users/{uuid}</code>) - NOT <code>\"me\"</code></li>\n<li><code>organization</code>: Full organization URI for org-scoped queries</li>\n<li><code>status</code>: <code>\"active\"</code> or <code>\"canceled\"</code></li>\n<li><code>min_start_time</code> / <code>max_start_time</code>: UTC timestamps (e.g., <code>2024-01-01T00:00:00.000000Z</code>)</li>\n<li><code>invitee_email</code>: Filter events by invitee email (filter only, not a scope)</li>\n<li><code>sort</code>: <code>\"start_time:asc\"</code> or <code>\"start_time:desc\"</code></li>\n<li><code>count</code>: Results per page (default 20)</li>\n<li><code>page_token</code>: Pagination token from previous response</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Exactly ONE of <code>user</code>, <code>organization</code>, or <code>group</code> must be provided - omitting or combining scopes fails</li>\n<li>The <code>user</code> parameter requires the full API URI, not <code>\"me\"</code> - use <code>CALENDLY_GET_CURRENT_USER</code> first</li>\n<li><code>invitee_email</code> is a filter, not a scope; you still need one of user/organization/group</li>\n<li>Pagination uses <code>count</code> + <code>page_token</code>; loop until <code>page_token</code> is absent for complete results</li>\n<li>Admin rights may be needed for organization or group scope queries</li>\n</ul>\n<h3>2. Manage Event Invitees</h3>\n<p><strong>When to use</strong>: User wants to see who is booked for events or get invitee details</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CALENDLY_LIST_EVENTS</code> - Find the target event(s) [Prerequisite]</li>\n<li><code>CALENDLY_LIST_EVENT_INVITEES</code> - List all invitees for a specific event [Required]</li>\n<li><code>CALENDLY_GET_EVENT_INVITEE</code> - Get detailed info for a single invitee [Optional]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>uuid</code>: Event UUID (for <code>LIST_EVENT_INVITEES</code>)</li>\n<li><code>event_uuid</code> + <code>invitee_uuid</code>: Both required for <code>GET_EVENT_INVITEE</code></li>\n<li><code>email</code>: Filter invitees by email address</li>\n<li><code>status</code>: <code>\"active\"</code> or <code>\"canceled\"</code></li>\n<li><code>sort</code>: <code>\"created_at:asc\"</code> or <code>\"created_at:desc\"</code></li>\n<li><code>count</code>: Results per page (default 20)</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>The <code>uuid</code> parameter for <code>CALENDLY_LIST_EVENT_INVITEES</code> is the event UUID, not the invitee UUID</li>\n<li>Paginate using <code>page_token</code> until absent for complete invitee lists</li>\n<li>Canceled invitees are excluded by default; use <code>status: \"canceled\"</code> to see them</li>\n</ul>\n<h3>3. Create Scheduling Links and Check Availability</h3>\n<p><strong>When to use</strong>: User wants to generate a booking link or check available time slots</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CALENDLY_GET_CURRENT_USER</code> - Get user URI [Prerequisite]</li>\n<li><code>CALENDLY_LIST_USER_S_EVENT_TYPES</code> - List available event types [Required]</li>\n<li><code>CALENDLY_LIST_EVENT_TYPE_AVAILABLE_TIMES</code> - Check available slots for an event type [Optional]</li>\n<li><code>CALENDLY_CREATE_SCHEDULING_LINK</code> - Generate a single-use scheduling link [Required]</li>\n<li><code>CALENDLY_LIST_USER_AVAILABILITY_SCHEDULES</code> - View user's availability schedules [Optional]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>owner</code>: Event type URI (e.g., <code>https://api.calendly.com/event_types/{uuid}</code>)</li>\n<li><code>owner_type</code>: <code>\"EventType\"</code> (default)</li>\n<li><code>max_event_count</code>: Must be exactly <code>1</code> for single-use links</li>\n<li><code>start_time</code> / <code>end_time</code>: UTC timestamps for availability queries (max 7-day range)</li>\n<li><code>active</code>: Boolean to filter active/inactive event types</li>\n<li><code>user</code>: User URI for event type listing</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li><code>CALENDLY_CREATE_SCHEDULING_LINK</code> can return 403 if token lacks rights or owner URI is invalid</li>\n<li><code>CALENDLY_LIST_EVENT_TYPE_AVAILABLE_TIMES</code> requires UTC timestamps and max 7-day range; split longer searches</li>\n<li>Available times results are NOT paginated - all results returned in one response</li>\n<li>Event type URIs must be full API URIs (e.g., <code>https://api.calendly.com/event_types/...</code>)</li>\n</ul>\n<h3>4. Cancel Events</h3>\n<p><strong>When to use</strong>: User wants to cancel a scheduled Calendly event</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CALENDLY_LIST_EVENTS</code> - Find the event to cancel [Prerequisite]</li>\n<li><code>CALENDLY_GET_EVENT</code> - Confirm event details before cancellation [Prerequisite]</li>\n<li><code>CALENDLY_LIST_EVENT_INVITEES</code> - Check who will be affected [Optional]</li>\n<li><code>CALENDLY_CANCEL_EVENT</code> - Cancel the event [Required]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>uuid</code>: Event UUID to cancel</li>\n<li><code>reason</code>: Optional cancellation reason (may be included in notification to invitees)</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Cancellation is IRREVERSIBLE - always confirm with the user before calling</li>\n<li>Cancellation may trigger notifications to invitees</li>\n<li>Only active events can be canceled; already-canceled events return errors</li>\n<li>Get explicit user confirmation before executing <code>CALENDLY_CANCEL_EVENT</code></li>\n</ul>\n<h3>5. Manage Organization and Invitations</h3>\n<p><strong>When to use</strong>: User wants to invite members, manage organization, or handle org invitations</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CALENDLY_GET_CURRENT_USER</code> - Get user and organization context [Prerequisite]</li>\n<li><code>CALENDLY_GET_ORGANIZATION</code> - Get organization details [Optional]</li>\n<li><code>CALENDLY_LIST_ORGANIZATION_INVITATIONS</code> - Check existing invitations [Optional]</li>\n<li><code>CALENDLY_CREATE_ORGANIZATION_INVITATION</code> - Send an org invitation [Required]</li>\n<li><code>CALENDLY_REVOKE_USER_S_ORGANIZATION_INVITATION</code> - Revoke a pending invitation [Optional]</li>\n<li><code>CALENDLY_REMOVE_USER_FROM_ORGANIZATION</code> - Remove a member [Optional]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>uuid</code>: Organization UUID</li>\n<li><code>email</code>: Email address of user to invite</li>\n<li><code>status</code>: Filter invitations by <code>\"pending\"</code>, <code>\"accepted\"</code>, or <code>\"declined\"</code></li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Only org owners/admins can manage invitations and removals; others get authorization errors</li>\n<li>Duplicate active invitations for the same email are rejected - check existing invitations first</li>\n<li>Organization owners cannot be removed via <code>CALENDLY_REMOVE_USER_FROM_ORGANIZATION</code></li>\n<li>Invitation statuses include pending, accepted, declined, and revoked - handle each appropriately</li>\n</ul>\n<h2>Common Patterns</h2>\n<h3>ID Resolution</h3>\n<p>Calendly uses full API URIs as identifiers, not simple IDs:</p>\n<ul>\n<li><strong>Current user URI</strong>: <code>CALENDLY_GET_CURRENT_USER</code> returns <code>resource.uri</code> (e.g., <code>https://api.calendly.com/users/{uuid}</code>)</li>\n<li><strong>Organization URI</strong>: Found in current user response at <code>resource.current_organization</code></li>\n<li><strong>Event UUID</strong>: Extract from event URI or list responses</li>\n<li><strong>Event type URI</strong>: From <code>CALENDLY_LIST_USER_S_EVENT_TYPES</code> response</li>\n</ul>\n<p>Important: Never use <code>\"me\"</code> as a user parameter in list/filter endpoints. Always resolve to the full URI first.</p>\n<h3>Pagination</h3>\n<p>Most Calendly list endpoints use token-based pagination:</p>\n<ul>\n<li>Set <code>count</code> for page size (default 20)</li>\n<li>Follow <code>page_token</code> from <code>pagination.next_page_token</code> until absent</li>\n<li>Sort with <code>field:direction</code> format (e.g., <code>start_time:asc</code>, <code>created_at:desc</code>)</li>\n</ul>\n<h3>Time Handling</h3>\n<ul>\n<li>All timestamps must be in UTC format: <code>yyyy-MM-ddTHH:mm:ss.ffffffZ</code></li>\n<li>Use <code>min_start_time</code> / <code>max_start_time</code> for date range filtering on events</li>\n<li>Available times queries have a maximum 7-day range; split longer searches into multiple calls</li>\n</ul>\n<h2>Known Pitfalls</h2>\n<h3>URI Formats</h3>\n<ul>\n<li>All entity references use full Calendly API URIs (e.g., <code>https://api.calendly.com/users/{uuid}</code>)</li>\n<li>Never pass bare UUIDs where URIs are expected, and never pass <code>\"me\"</code> to list endpoints</li>\n<li>Extract UUIDs from URIs when tools expect UUID parameters (e.g., <code>CALENDLY_GET_EVENT</code>)</li>\n</ul>\n<h3>Scope Requirements</h3>\n<ul>\n<li><code>CALENDLY_LIST_EVENTS</code> requires exactly one scope (user, organization, or group) - no more, no less</li>\n<li>Organization/group scoped queries may require admin privileges</li>\n<li>Token scope determines which operations are available; 403 errors indicate insufficient permissions</li>\n</ul>\n<h3>Data Relationships</h3>\n<ul>\n<li>Events have invitees (attendees who booked)</li>\n<li>Event types define scheduling pages (duration, availability rules)</li>\n<li>Organizations contain users and groups</li>\n<li>Scheduling links are tied to event types, not directly to events</li>\n</ul>\n<h3>Rate Limits</h3>\n<ul>\n<li>Calendly API has rate limits; avoid tight loops over large datasets</li>\n<li>Paginate responsibly and add delays for batch operations</li>\n</ul>\n<h2>Quick Reference</h2>\n<table>\n<thead>\n<tr>\n<th>Task</th>\n<th>Tool Slug</th>\n<th>Key Params</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Get current user</td>\n<td><code>CALENDLY_GET_CURRENT_USER</code></td>\n<td>(none)</td>\n</tr>\n<tr>\n<td>Get user by UUID</td>\n<td><code>CALENDLY_GET_USER</code></td>\n<td><code>uuid</code></td>\n</tr>\n<tr>\n<td>List events</td>\n<td><code>CALENDLY_LIST_EVENTS</code></td>\n<td><code>user</code>, <code>status</code>, <code>min_start_time</code></td>\n</tr>\n<tr>\n<td>Get event details</td>\n<td><code>CALENDLY_GET_EVENT</code></td>\n<td><code>uuid</code></td>\n</tr>\n<tr>\n<td>Cancel event</td>\n<td><code>CALENDLY_CANCEL_EVENT</code></td>\n<td><code>uuid</code>, <code>reason</code></td>\n</tr>\n<tr>\n<td>List invitees</td>\n<td><code>CALENDLY_LIST_EVENT_INVITEES</code></td>\n<td><code>uuid</code>, <code>status</code>, <code>email</code></td>\n</tr>\n<tr>\n<td>Get invitee</td>\n<td><code>CALENDLY_GET_EVENT_INVITEE</code></td>\n<td><code>event_uuid</code>, <code>invitee_uuid</code></td>\n</tr>\n<tr>\n<td>List event types</td>\n<td><code>CALENDLY_LIST_USER_S_EVENT_TYPES</code></td>\n<td><code>user</code>, <code>active</code></td>\n</tr>\n<tr>\n<td>Get event type</td>\n<td><code>CALENDLY_GET_EVENT_TYPE</code></td>\n<td><code>uuid</code></td>\n</tr>\n<tr>\n<td>Check availability</td>\n<td><code>CALENDLY_LIST_EVENT_TYPE_AVAILABLE_TIMES</code></td>\n<td>event type URI, <code>start_time</code>, <code>end_time</code></td>\n</tr>\n<tr>\n<td>Create scheduling link</td>\n<td><code>CALENDLY_CREATE_SCHEDULING_LINK</code></td>\n<td><code>owner</code>, <code>max_event_count</code></td>\n</tr>\n<tr>\n<td>List availability schedules</td>\n<td><code>CALENDLY_LIST_USER_AVAILABILITY_SCHEDULES</code></td>\n<td>user URI</td>\n</tr>\n<tr>\n<td>Get organization</td>\n<td><code>CALENDLY_GET_ORGANIZATION</code></td>\n<td><code>uuid</code></td>\n</tr>\n<tr>\n<td>Invite to org</td>\n<td><code>CALENDLY_CREATE_ORGANIZATION_INVITATION</code></td>\n<td><code>uuid</code>, <code>email</code></td>\n</tr>\n<tr>\n<td>List org invitations</td>\n<td><code>CALENDLY_LIST_ORGANIZATION_INVITATIONS</code></td>\n<td><code>uuid</code>, <code>status</code></td>\n</tr>\n<tr>\n<td>Revoke org invitation</td>\n<td><code>CALENDLY_REVOKE_USER_S_ORGANIZATION_INVITATION</code></td>\n<td>org UUID, invitation UUID</td>\n</tr>\n<tr>\n<td>Remove from org</td>\n<td><code>CALENDLY_REMOVE_USER_FROM_ORGANIZATION</code></td>\n<td>membership UUID</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<p><em>Powered by <a href=\"https://composio.dev\">Composio</a></em></p>\n","files":[{"path":"SKILL.md","sizeBytes":10697,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-14T20:44:41.896744Z","sha256":"65944ADBD4E32D9A3AFA4281D1FE9A7A8683E0141FB649EBDFB5E4C00EC62AB4","sizeBytes":3778},"review":null,"source":{"repositoryUrl":"https://github.com/davepoon/buildwithclaude","path":"plugins/all-skills/skills/calendly-automation","license":"MIT","commit":"6178ae2b0900b3600419853206de1dddf0f28311","subtreeSha":"D6C579E15C3CEF8E9F7CA474DD2E1FF47747592EA1B41A5FE400621302B509D4","lastSyncedAt":"2026-09-27T19:47:46.68834Z"},"reviewedAt":"2026-09-14T20:47:14.650556Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/davepoon/buildwithclaude/tree/main/plugins/all-skills/skills/calendly-automation"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install davepoon-buildwithclaude@llmmart"},{"target":"git","command":"git clone https://github.com/davepoon/buildwithclaude.git"}]}