Cal.com Automation via Rube MCP
Automate Cal.com scheduling operations through Composio's Cal toolkit via Rube MCP.
Prerequisites
- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- Active Cal.com connection via
RUBE_MANAGE_CONNECTIONS with toolkit cal
- Always call
RUBE_SEARCH_TOOLS first to get current tool schemas
Setup
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.
- Verify Rube MCP is available by confirming
RUBE_SEARCH_TOOLS responds
- Call
RUBE_MANAGE_CONNECTIONS with toolkit cal
- If connection is not ACTIVE, follow the returned auth link to complete Cal.com authentication
- Confirm connection status shows ACTIVE before running any workflows
Core Workflows
1. Manage Bookings
When to use: User wants to list, create, or review bookings
Tool sequence:
CAL_FETCH_ALL_BOOKINGS - List all bookings with filters [Required]
CAL_POST_NEW_BOOKING_REQUEST - Create a new booking [Optional]
Key parameters for listing:
status: Filter by booking status ('upcoming', 'recurring', 'past', 'cancelled', 'unconfirmed')
afterStart: Filter bookings after this date (ISO 8601)
beforeEnd: Filter bookings before this date (ISO 8601)
Key parameters for creation:
eventTypeId: Event type ID for the booking
start: Booking start time (ISO 8601)
end: Booking end time (ISO 8601)
name: Attendee name
email: Attendee email
timeZone: Attendee timezone (IANA format)
language: Attendee language code
metadata: Additional metadata object
Pitfalls:
- Date filters use ISO 8601 format with timezone (e.g., '2024-01-15T09:00:00Z')
eventTypeId must reference a valid, active event type
- Booking creation requires matching an available slot; check availability first
- Time zone must be a valid IANA timezone string (e.g., 'America/New_York')
- Status filter values are specific strings; invalid values return empty results
2. Check Availability
When to use: User wants to find free/busy times or available booking slots
Tool sequence:
CAL_RETRIEVE_CALENDAR_BUSY_TIMES - Get busy time blocks [Required]
CAL_GET_AVAILABLE_SLOTS_INFO - Get specific available slots [Required]
Key parameters:
dateFrom: Start date for availability check (YYYY-MM-DD)
dateTo: End date for availability check (YYYY-MM-DD)
eventTypeId: Event type to check slots for
timeZone: Timezone for the availability response
loggedInUsersTz: Timezone of the requesting user
Pitfalls:
- Busy times show when the user is NOT available
- Available slots are specific to an event type's duration and configuration
- Date range should be reasonable (not months in advance) to get accurate results
- Timezone affects how slots are displayed; always specify explicitly
- Availability reflects calendar integrations (Google Calendar, Outlook, etc.)
3. Configure Webhooks
When to use: User wants to set up or manage webhook notifications for booking events
Tool sequence:
CAL_RETRIEVE_WEBHOOKS_LIST - List existing webhooks [Required]
CAL_GET_WEBHOOK_BY_ID - Get specific webhook details [Optional]
CAL_UPDATE_WEBHOOK_BY_ID - Update webhook configuration [Optional]
CAL_DELETE_WEBHOOK_BY_ID - Remove a webhook [Optional]
Key parameters:
id: Webhook ID for GET/UPDATE/DELETE operations
subscriberUrl: Webhook endpoint URL
eventTriggers: Array of event types to trigger on
active: Whether the webhook is active
secret: Webhook signing secret
Pitfalls:
- Webhook URLs must be publicly accessible HTTPS endpoints
- Event triggers include: 'BOOKING_CREATED', 'BOOKING_RESCHEDULED', 'BOOKING_CANCELLED', etc.
- Inactive webhooks do not fire; toggle
active to enable/disable
- Webhook secrets are used for payload signature verification
4. Manage Teams
When to use: User wants to create, view, or manage teams and team event types
Tool sequence:
CAL_GET_TEAMS_LIST - List all teams [Required]
CAL_GET_TEAM_INFORMATION_BY_TEAM_ID - Get specific team details [Optional]
CAL_CREATE_TEAM_IN_ORGANIZATION - Create a new team [Optional]
CAL_RETRIEVE_TEAM_EVENT_TYPES - List event types for a team [Optional]
Key parameters:
teamId: Team identifier
name: Team name (for creation)
slug: URL-friendly team identifier
Pitfalls:
- Team creation may require organization-level permissions
- Team event types are separate from personal event types
- Team slugs must be URL-safe and unique within the organization
5. Organization Management
When to use: User wants to view organization details
Tool sequence:
CAL_GET_ORGANIZATION_ID - Get the organization ID [Required]
Key parameters: (none required)
Pitfalls:
- Organization ID is needed for team creation and org-level operations
- Not all Cal.com accounts have organizations; personal plans may return errors
Common Patterns
Booking Creation Flow
1. Call CAL_GET_AVAILABLE_SLOTS_INFO to find open slots
2. Present available times to the user
3. Call CAL_POST_NEW_BOOKING_REQUEST with selected slot
4. Confirm booking creation response
ID Resolution
Team name -> Team ID:
1. Call CAL_GET_TEAMS_LIST
2. Find team by name in response
3. Extract id field
Webhook Setup
1. Call CAL_RETRIEVE_WEBHOOKS_LIST to check existing hooks
2. Create or update webhook with desired triggers
3. Verify webhook fires on test booking
Known Pitfalls
Date/Time Formats:
- Booking times: ISO 8601 with timezone (e.g., '2024-01-15T09:00:00Z')
- Availability dates: YYYY-MM-DD format
- Always specify timezone explicitly to avoid confusion
Event Types:
- Event type IDs are numeric integers
- Event types define duration, location, and booking rules
- Disabled event types cannot accept new bookings
Permissions:
- Team operations require team membership or admin access
- Organization operations require org-level permissions
- Webhook management requires appropriate access level
Rate Limits:
- Cal.com API has rate limits per API key
- Implement backoff on 429 responses
Quick Reference
| Task |
Tool Slug |
Key Params |
| List bookings |
CAL_FETCH_ALL_BOOKINGS |
status, afterStart, beforeEnd |
| Create booking |
CAL_POST_NEW_BOOKING_REQUEST |
eventTypeId, start, end, name, email |
| Get busy times |
CAL_RETRIEVE_CALENDAR_BUSY_TIMES |
dateFrom, dateTo |
| Get available slots |
CAL_GET_AVAILABLE_SLOTS_INFO |
eventTypeId, dateFrom, dateTo |
| List webhooks |
CAL_RETRIEVE_WEBHOOKS_LIST |
(none) |
| Get webhook |
CAL_GET_WEBHOOK_BY_ID |
id |
| Update webhook |
CAL_UPDATE_WEBHOOK_BY_ID |
id, subscriberUrl, eventTriggers |
| Delete webhook |
CAL_DELETE_WEBHOOK_BY_ID |
id |
| List teams |
CAL_GET_TEAMS_LIST |
(none) |
| Get team |
CAL_GET_TEAM_INFORMATION_BY_TEAM_ID |
teamId |
| Create team |
CAL_CREATE_TEAM_IN_ORGANIZATION |
name, slug |
| Team event types |
CAL_RETRIEVE_TEAM_EVENT_TYPES |
teamId |
| Get org ID |
CAL_GET_ORGANIZATION_ID |
(none) |
When to Use
This skill is applicable to execute the workflow or actions described in the overview.
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for enprojectnment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
1---2name: cal-com-automation3description: Automate Cal.com tasks via Rube MCP (Composio): manage bookings, check availability, configure webhooks, and handle teams. Always search tools first for current schemas.4---56# Cal.com Automation via Rube MCP78Automate Cal.com scheduling operations through Composio's Cal toolkit via Rube MCP.910## Prerequisites1112- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)13- Active Cal.com connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `cal`14- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas1516## Setup1718**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.1920211. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds222. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `cal`233. If connection is not ACTIVE, follow the returned auth link to complete Cal.com authentication244. Confirm connection status shows ACTIVE before running any workflows2526## Core Workflows2728### 1. Manage Bookings2930**When to use**: User wants to list, create, or review bookings3132**Tool sequence**:331. `CAL_FETCH_ALL_BOOKINGS` - List all bookings with filters [Required]342. `CAL_POST_NEW_BOOKING_REQUEST` - Create a new booking [Optional]3536**Key parameters for listing**:37- `status`: Filter by booking status ('upcoming', 'recurring', 'past', 'cancelled', 'unconfirmed')38- `afterStart`: Filter bookings after this date (ISO 8601)39- `beforeEnd`: Filter bookings before this date (ISO 8601)4041**Key parameters for creation**:42- `eventTypeId`: Event type ID for the booking43- `start`: Booking start time (ISO 8601)44- `end`: Booking end time (ISO 8601)45- `name`: Attendee name46- `email`: Attendee email47- `timeZone`: Attendee timezone (IANA format)48- `language`: Attendee language code49- `metadata`: Additional metadata object5051**Pitfalls**:52- Date filters use ISO 8601 format with timezone (e.g., '2024-01-15T09:00:00Z')53- `eventTypeId` must reference a valid, active event type54- Booking creation requires matching an available slot; check availability first55- Time zone must be a valid IANA timezone string (e.g., 'America/New_York')56- Status filter values are specific strings; invalid values return empty results5758### 2. Check Availability5960**When to use**: User wants to find free/busy times or available booking slots6162**Tool sequence**:631. `CAL_RETRIEVE_CALENDAR_BUSY_TIMES` - Get busy time blocks [Required]642. `CAL_GET_AVAILABLE_SLOTS_INFO` - Get specific available slots [Required]6566**Key parameters**:67- `dateFrom`: Start date for availability check (YYYY-MM-DD)68- `dateTo`: End date for availability check (YYYY-MM-DD)69- `eventTypeId`: Event type to check slots for70- `timeZone`: Timezone for the availability response71- `loggedInUsersTz`: Timezone of the requesting user7273**Pitfalls**:74- Busy times show when the user is NOT available75- Available slots are specific to an event type's duration and configuration76- Date range should be reasonable (not months in advance) to get accurate results77- Timezone affects how slots are displayed; always specify explicitly78- Availability reflects calendar integrations (Google Calendar, Outlook, etc.)7980### 3. Configure Webhooks8182**When to use**: User wants to set up or manage webhook notifications for booking events8384**Tool sequence**:851. `CAL_RETRIEVE_WEBHOOKS_LIST` - List existing webhooks [Required]862. `CAL_GET_WEBHOOK_BY_ID` - Get specific webhook details [Optional]873. `CAL_UPDATE_WEBHOOK_BY_ID` - Update webhook configuration [Optional]884. `CAL_DELETE_WEBHOOK_BY_ID` - Remove a webhook [Optional]8990**Key parameters**:91- `id`: Webhook ID for GET/UPDATE/DELETE operations92- `subscriberUrl`: Webhook endpoint URL93- `eventTriggers`: Array of event types to trigger on94- `active`: Whether the webhook is active95- `secret`: Webhook signing secret9697**Pitfalls**:98- Webhook URLs must be publicly accessible HTTPS endpoints99- Event triggers include: 'BOOKING_CREATED', 'BOOKING_RESCHEDULED', 'BOOKING_CANCELLED', etc.100- Inactive webhooks do not fire; toggle `active` to enable/disable101- Webhook secrets are used for payload signature verification102103### 4. Manage Teams104105**When to use**: User wants to create, view, or manage teams and team event types106107**Tool sequence**:1081. `CAL_GET_TEAMS_LIST` - List all teams [Required]1092. `CAL_GET_TEAM_INFORMATION_BY_TEAM_ID` - Get specific team details [Optional]1103. `CAL_CREATE_TEAM_IN_ORGANIZATION` - Create a new team [Optional]1114. `CAL_RETRIEVE_TEAM_EVENT_TYPES` - List event types for a team [Optional]112113**Key parameters**:114- `teamId`: Team identifier115- `name`: Team name (for creation)116- `slug`: URL-friendly team identifier117118**Pitfalls**:119- Team creation may require organization-level permissions120- Team event types are separate from personal event types121- Team slugs must be URL-safe and unique within the organization122123### 5. Organization Management124125**When to use**: User wants to view organization details126127**Tool sequence**:1281. `CAL_GET_ORGANIZATION_ID` - Get the organization ID [Required]129130**Key parameters**: (none required)131132**Pitfalls**:133- Organization ID is needed for team creation and org-level operations134- Not all Cal.com accounts have organizations; personal plans may return errors135136## Common Patterns137138### Booking Creation Flow139140```1411. Call CAL_GET_AVAILABLE_SLOTS_INFO to find open slots1422. Present available times to the user1433. Call CAL_POST_NEW_BOOKING_REQUEST with selected slot1444. Confirm booking creation response145```146147### ID Resolution148149**Team name -> Team ID**:150```1511. Call CAL_GET_TEAMS_LIST1522. Find team by name in response1533. Extract id field154```155156### Webhook Setup157158```1591. Call CAL_RETRIEVE_WEBHOOKS_LIST to check existing hooks1602. Create or update webhook with desired triggers1613. Verify webhook fires on test booking162```163164## Known Pitfalls165166**Date/Time Formats**:167- Booking times: ISO 8601 with timezone (e.g., '2024-01-15T09:00:00Z')168- Availability dates: YYYY-MM-DD format169- Always specify timezone explicitly to avoid confusion170171**Event Types**:172- Event type IDs are numeric integers173- Event types define duration, location, and booking rules174- Disabled event types cannot accept new bookings175176**Permissions**:177- Team operations require team membership or admin access178- Organization operations require org-level permissions179- Webhook management requires appropriate access level180181**Rate Limits**:182- Cal.com API has rate limits per API key183- Implement backoff on 429 responses184185## Quick Reference186187| Task | Tool Slug | Key Params |188|------|-----------|------------|189| List bookings | CAL_FETCH_ALL_BOOKINGS | status, afterStart, beforeEnd |190| Create booking | CAL_POST_NEW_BOOKING_REQUEST | eventTypeId, start, end, name, email |191| Get busy times | CAL_RETRIEVE_CALENDAR_BUSY_TIMES | dateFrom, dateTo |192| Get available slots | CAL_GET_AVAILABLE_SLOTS_INFO | eventTypeId, dateFrom, dateTo |193| List webhooks | CAL_RETRIEVE_WEBHOOKS_LIST | (none) |194| Get webhook | CAL_GET_WEBHOOK_BY_ID | id |195| Update webhook | CAL_UPDATE_WEBHOOK_BY_ID | id, subscriberUrl, eventTriggers |196| Delete webhook | CAL_DELETE_WEBHOOK_BY_ID | id |197| List teams | CAL_GET_TEAMS_LIST | (none) |198| Get team | CAL_GET_TEAM_INFORMATION_BY_TEAM_ID | teamId |199| Create team | CAL_CREATE_TEAM_IN_ORGANIZATION | name, slug |200| Team event types | CAL_RETRIEVE_TEAM_EVENT_TYPES | teamId |201| Get org ID | CAL_GET_ORGANIZATION_ID | (none) |202203## When to Use204This skill is applicable to execute the workflow or actions described in the overview.205206## Limitations207- Use this skill only when the task clearly matches the scope described above.208- Do not treat the output as a substitute for enprojectnment-specific validation, testing, or expert review.209- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.