Outlook Calendar Automation via Rube MCP
Automate Outlook Calendar operations through Composio's Outlook toolkit via Rube MCP.
Prerequisites
- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- Active Outlook connection via
RUBE_MANAGE_CONNECTIONS with toolkit outlook
- 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 outlook
- If connection is not ACTIVE, follow the returned auth link to complete Microsoft OAuth
- Confirm connection status shows ACTIVE before running any workflows
Core Workflows
1. Create Calendar Events
When to use: User wants to schedule a new event on their Outlook calendar
Tool sequence:
OUTLOOK_LIST_CALENDARS - List available calendars [Optional]
OUTLOOK_CALENDAR_CREATE_EVENT - Create the event [Required]
Key parameters:
subject: Event title
start_datetime: ISO 8601 start time (e.g., '2025-01-03T10:00:00')
end_datetime: ISO 8601 end time (must be after start)
time_zone: IANA or Windows timezone (e.g., 'America/New_York', 'Pacific Standard Time')
attendees_info: Array of email strings or attendee objects
body: Event description (plain text or HTML)
is_html: Set true if body contains HTML
location: Physical location string
is_online_meeting: Set true for Teams meeting link
online_meeting_provider: 'teamsForBusiness' for Teams integration
show_as: 'free', 'tentative', 'busy', 'oof'
Pitfalls:
- start_datetime must be chronologically before end_datetime
- time_zone is required and must be a valid IANA or Windows timezone name
- Adding attendees can trigger invitation emails immediately
- To generate a Teams meeting link, set BOTH is_online_meeting=true AND>
- user_id defaults to 'me'; use email or UUID for other users' calendars
2. List and Search Events
When to use: User wants to find events on their calendar
Tool sequence:
OUTLOOK_GET_MAILBOX_SETTINGS - Get user timezone for accurate queries [Prerequisite]
OUTLOOK_LIST_EVENTS - Search events with filters [Required]
OUTLOOK_GET_EVENT - Get full details for a specific event [Optional]
OUTLOOK_GET_CALENDAR_VIEW - Get events active during a time window [Alternative]
Key parameters:
filter: OData filter string (e.g., "start/dateTime ge '2024-07-01T00:00:00Z'")
select: Array of properties to return
orderby: Sort criteria (e.g., ['start/dateTime desc'])
top: Results per page (1-999)
timezone: Display timezone for results
start_datetime/end_datetime: For CALENDAR_VIEW time window (UTC with Z suffix)
Pitfalls:
- OData filter datetime values require single quotes and Z suffix
- Use 'start/dateTime' for event start filtering, NOT 'receivedDateTime' (that is for emails)
- 'createdDateTime' supports orderby/select but NOT filtering
- Pagination: follow @odata.nextLink until all pages are collected
- CALENDAR_VIEW is better for "what's on my calendar today" queries (includes spanning events)
- LIST_EVENTS is better for keyword/category filtering
- Response events have start/end nested as start.dateTime and end.dateTime
3. Update Events
When to use: User wants to modify an existing calendar event
Tool sequence:
OUTLOOK_LIST_EVENTS - Find the event to update [Prerequisite]
OUTLOOK_UPDATE_CALENDAR_EVENT - Update the event [Required]
Key parameters:
event_id: Unique event identifier (from LIST_EVENTS)
subject: New event title (optional)
start_datetime/end_datetime: New times (optional)
time_zone: Timezone for new times
attendees: Updated attendee list (replaces existing if provided)
body: Updated description with contentType and content
location: Updated location
Pitfalls:
- UPDATE merges provided fields with existing event; unspecified fields are preserved
- Providing attendees replaces the ENTIRE attendee list; include all desired attendees
- Providing categories replaces the ENTIRE category list
- Updating times may trigger re-sends to attendees
- event_id is required; obtain from LIST_EVENTS first
4. Delete Events and Decline Invitations
When to use: User wants to remove an event or decline a meeting invitation
Tool sequence:
OUTLOOK_DELETE_EVENT - Delete an event [Optional]
OUTLOOK_DECLINE_EVENT - Decline a meeting invitation [Optional]
Key parameters:
event_id: Event to delete or decline
send_notifications: Send cancellation notices to attendees (default true)
comment: Reason for declining (for DECLINE_EVENT)
proposedNewTime: Suggest alternative time when declining
Pitfalls:
- Deletion with send_notifications=true sends cancellation emails
- Declining supports proposing a new time with start/end in ISO 8601 format
- Deleting a recurring event master deletes all occurrences
- sendResponse in DECLINE_EVENT controls whether the organizer is notified
5. Find Available Meeting Times
When to use: User wants to find optimal meeting slots across multiple people
Tool sequence:
OUTLOOK_FIND_MEETING_TIMES - Get meeting time suggestions [Required]
OUTLOOK_GET_SCHEDULE - Check free/busy for specific people [Alternative]
Key parameters:
attendees: Array of attendee objects with email and type
meetingDuration: ISO 8601 duration (e.g., 'PT1H' for 1 hour, 'PT30M' for 30 min)
timeConstraint: Time slots to search within
minimumAttendeePercentage: Minimum confidence threshold (0-100)
Schedules: Email array for GET_SCHEDULE
StartTime/EndTime: Time window for schedule lookup (max 62 days)
Pitfalls:
- FIND_MEETING_TIMES searches within work hours by default; use activityDomain='unrestricted' for 24/7
- Time constraint time slots require dateTime and timeZone for both start and end
- GET_SCHEDULE period cannot exceed 62 days
- Meeting suggestions respect attendee availability but may return suboptimal times for complex groups
Common Patterns
Event ID Resolution
1. Call OUTLOOK_LIST_EVENTS with time-bound filter
2. Find target event by subject or other criteria
3. Extract event id (e.g., 'AAMkAGI2TAAA=')
4. Use in UPDATE, DELETE, or GET_EVENT calls
OData Filter Syntax for Calendar
Time range filter:
filter: "start/dateTime ge '2024-07-01T00:00:00Z' and start/dateTime le '2024-07-31T23:59:59Z'"
Subject contains:
filter: "contains(subject, 'Project Review')"
Combined:
filter: "contains(subject, 'Review') and categories/any(c:c eq 'Work')"
Timezone Handling
- Get user timezone:
OUTLOOK_GET_MAILBOX_SETTINGS with select=['timeZone']
- Use consistent timezone in filter datetime values
- Calendar View requires UTC timestamps with Z suffix
- LIST_EVENTS filter accepts timezone in datetime values
Online Meeting Creation
1. Set is_online_meeting: true
2. Set online_meeting_provider: 'teamsForBusiness'
3. Create event with OUTLOOK_CALENDAR_CREATE_EVENT
4. Teams join link available in response onlineMeeting field
5. Or retrieve via OUTLOOK_GET_EVENT for the full join URL
Known Pitfalls
DateTime Formats:
- ISO 8601 format required: '2025-01-03T10:00:00'
- Calendar View requires UTC with Z: '2025-01-03T10:00:00Z'
- Filter values need single quotes: "'2025-01-03T00:00:00Z'"
- Timezone mismatches shift event boundaries; always resolve user timezone first
OData Filter Errors:
- 400 Bad Request usually indicates filter syntax issues
- Not all event properties support filtering (createdDateTime does not)
- Retry with adjusted syntax/bounds on 400 errors
- Valid filter fields: start/dateTime, end/dateTime, subject, categories, isAllDay
Attendee Management:
- Adding attendees triggers invitation emails
- Updating attendees replaces the full list; include all desired attendees
- Attendee types: 'required', 'optional', 'resource'
- Calendar delegation affects which calendars are accessible
Response Structure:
- Events nested at response.data.value
- Event times at event.start.dateTime and event.end.dateTime
- Calendar View may nest at data.results[i].response.data.value
- Parse defensively with fallbacks for different nesting levels
Quick Reference
| Task |
Tool Slug |
Key Params |
| Create event |
OUTLOOK_CALENDAR_CREATE_EVENT |
subject, start_datetime, end_datetime, time_zone |
| List events |
OUTLOOK_LIST_EVENTS |
filter, select, top, timezone |
| Get event details |
OUTLOOK_GET_EVENT |
event_id |
| Calendar view |
OUTLOOK_GET_CALENDAR_VIEW |
start_datetime, end_datetime |
| Update event |
OUTLOOK_UPDATE_CALENDAR_EVENT |
event_id, subject, start_datetime |
| Delete event |
OUTLOOK_DELETE_EVENT |
event_id, send_notifications |
| Decline event |
OUTLOOK_DECLINE_EVENT |
event_id, comment |
| Find meeting times |
OUTLOOK_FIND_MEETING_TIMES |
attendees, meetingDuration |
| Get schedule |
OUTLOOK_GET_SCHEDULE |
Schedules, StartTime, EndTime |
| List calendars |
OUTLOOK_LIST_CALENDARS |
user_id |
| Mailbox settings |
OUTLOOK_GET_MAILBOX_SETTINGS |
select |
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 environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
1---2name: outlook-calendar-automation3description: Automate Outlook Calendar tasks via Rube MCP (Composio): create events, manage attendees, find meeting times, and handle invitations. Always search tools first for current schemas.4---5
6# Outlook Calendar Automation via Rube MCP
7
8Automate Outlook Calendar operations through Composio's Outlook toolkit via Rube MCP.
9
10## Prerequisites
11
12- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
13- Active Outlook connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `outlook`
14- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas
15
16## Setup
17
18**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.
19
20
211. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds
222. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `outlook`
233. If connection is not ACTIVE, follow the returned auth link to complete Microsoft OAuth
244. Confirm connection status shows ACTIVE before running any workflows
25
26## Core Workflows
27
28### 1. Create Calendar Events
29
30**When to use**: User wants to schedule a new event on their Outlook calendar
31
32**Tool sequence**:
331. `OUTLOOK_LIST_CALENDARS` - List available calendars [Optional]
342. `OUTLOOK_CALENDAR_CREATE_EVENT` - Create the event [Required]
35
36**Key parameters**:
37- `subject`: Event title
38- `start_datetime`: ISO 8601 start time (e.g., '2025-01-03T10:00:00')
39- `end_datetime`: ISO 8601 end time (must be after start)
40- `time_zone`: IANA or Windows timezone (e.g., 'America/New_York', 'Pacific Standard Time')
41- `attendees_info`: Array of email strings or attendee objects
42- `body`: Event description (plain text or HTML)
43- `is_html`: Set true if body contains HTML
44- `location`: Physical location string
45- `is_online_meeting`: Set true for Teams meeting link
46- `online_meeting_provider`: 'teamsForBusiness' for Teams integration
47- `show_as`: 'free', 'tentative', 'busy', 'oof'
48
49**Pitfalls**:
50- start_datetime must be chronologically before end_datetime
51- time_zone is required and must be a valid IANA or Windows timezone name
52- Adding attendees can trigger invitation emails immediately
53- To generate a Teams meeting link, set BOTH is_online_meeting=true AND online_meeting_provider='teamsForBusiness'
54- user_id defaults to 'me'; use email or UUID for other users' calendars
55
56### 2. List and Search Events
57
58**When to use**: User wants to find events on their calendar
59
60**Tool sequence**:
611. `OUTLOOK_GET_MAILBOX_SETTINGS` - Get user timezone for accurate queries [Prerequisite]
622. `OUTLOOK_LIST_EVENTS` - Search events with filters [Required]
633. `OUTLOOK_GET_EVENT` - Get full details for a specific event [Optional]
644. `OUTLOOK_GET_CALENDAR_VIEW` - Get events active during a time window [Alternative]
65
66**Key parameters**:
67- `filter`: OData filter string (e.g., "start/dateTime ge '2024-07-01T00:00:00Z'")
68- `select`: Array of properties to return
69- `orderby`: Sort criteria (e.g., ['start/dateTime desc'])
70- `top`: Results per page (1-999)
71- `timezone`: Display timezone for results
72- `start_datetime`/`end_datetime`: For CALENDAR_VIEW time window (UTC with Z suffix)
73
74**Pitfalls**:
75- OData filter datetime values require single quotes and Z suffix
76- Use 'start/dateTime' for event start filtering, NOT 'receivedDateTime' (that is for emails)
77- 'createdDateTime' supports orderby/select but NOT filtering
78- Pagination: follow @odata.nextLink until all pages are collected
79- CALENDAR_VIEW is better for "what's on my calendar today" queries (includes spanning events)
80- LIST_EVENTS is better for keyword/category filtering
81- Response events have start/end nested as start.dateTime and end.dateTime
82
83### 3. Update Events
84
85**When to use**: User wants to modify an existing calendar event
86
87**Tool sequence**:
881. `OUTLOOK_LIST_EVENTS` - Find the event to update [Prerequisite]
892. `OUTLOOK_UPDATE_CALENDAR_EVENT` - Update the event [Required]
90
91**Key parameters**:
92- `event_id`: Unique event identifier (from LIST_EVENTS)
93- `subject`: New event title (optional)
94- `start_datetime`/`end_datetime`: New times (optional)
95- `time_zone`: Timezone for new times
96- `attendees`: Updated attendee list (replaces existing if provided)
97- `body`: Updated description with contentType and content
98- `location`: Updated location
99
100**Pitfalls**:
101- UPDATE merges provided fields with existing event; unspecified fields are preserved
102- Providing attendees replaces the ENTIRE attendee list; include all desired attendees
103- Providing categories replaces the ENTIRE category list
104- Updating times may trigger re-sends to attendees
105- event_id is required; obtain from LIST_EVENTS first
106
107### 4. Delete Events and Decline Invitations
108
109**When to use**: User wants to remove an event or decline a meeting invitation
110
111**Tool sequence**:
1121. `OUTLOOK_DELETE_EVENT` - Delete an event [Optional]
1132. `OUTLOOK_DECLINE_EVENT` - Decline a meeting invitation [Optional]
114
115**Key parameters**:
116- `event_id`: Event to delete or decline
117- `send_notifications`: Send cancellation notices to attendees (default true)
118- `comment`: Reason for declining (for DECLINE_EVENT)
119- `proposedNewTime`: Suggest alternative time when declining
120
121**Pitfalls**:
122- Deletion with send_notifications=true sends cancellation emails
123- Declining supports proposing a new time with start/end in ISO 8601 format
124- Deleting a recurring event master deletes all occurrences
125- sendResponse in DECLINE_EVENT controls whether the organizer is notified
126
127### 5. Find Available Meeting Times
128
129**When to use**: User wants to find optimal meeting slots across multiple people
130
131**Tool sequence**:
1321. `OUTLOOK_FIND_MEETING_TIMES` - Get meeting time suggestions [Required]
1332. `OUTLOOK_GET_SCHEDULE` - Check free/busy for specific people [Alternative]
134
135**Key parameters**:
136- `attendees`: Array of attendee objects with email and type
137- `meetingDuration`: ISO 8601 duration (e.g., 'PT1H' for 1 hour, 'PT30M' for 30 min)
138- `timeConstraint`: Time slots to search within
139- `minimumAttendeePercentage`: Minimum confidence threshold (0-100)
140- `Schedules`: Email array for GET_SCHEDULE
141- `StartTime`/`EndTime`: Time window for schedule lookup (max 62 days)
142
143**Pitfalls**:
144- FIND_MEETING_TIMES searches within work hours by default; use activityDomain='unrestricted' for 24/7
145- Time constraint time slots require dateTime and timeZone for both start and end
146- GET_SCHEDULE period cannot exceed 62 days
147- Meeting suggestions respect attendee availability but may return suboptimal times for complex groups
148
149## Common Patterns
150
151### Event ID Resolution
152
153```
1541. Call OUTLOOK_LIST_EVENTS with time-bound filter
1552. Find target event by subject or other criteria
1563. Extract event id (e.g., 'AAMkAGI2TAAA=')
1574. Use in UPDATE, DELETE, or GET_EVENT calls
158```
159
160### OData Filter Syntax for Calendar
161
162**Time range filter**:
163```
164filter: "start/dateTime ge '2024-07-01T00:00:00Z' and start/dateTime le '2024-07-31T23:59:59Z'"
165```
166
167**Subject contains**:
168```
169filter: "contains(subject, 'Project Review')"
170```
171
172**Combined**:
173```
174filter: "contains(subject, 'Review') and categories/any(c:c eq 'Work')"
175```
176
177### Timezone Handling
178
179- Get user timezone: `OUTLOOK_GET_MAILBOX_SETTINGS` with select=['timeZone']
180- Use consistent timezone in filter datetime values
181- Calendar View requires UTC timestamps with Z suffix
182- LIST_EVENTS filter accepts timezone in datetime values
183
184### Online Meeting Creation
185
186```
1871. Set is_online_meeting: true
1882. Set online_meeting_provider: 'teamsForBusiness'
1893. Create event with OUTLOOK_CALENDAR_CREATE_EVENT
1904. Teams join link available in response onlineMeeting field
1915. Or retrieve via OUTLOOK_GET_EVENT for the full join URL
192```
193
194## Known Pitfalls
195
196**DateTime Formats**:
197- ISO 8601 format required: '2025-01-03T10:00:00'
198- Calendar View requires UTC with Z: '2025-01-03T10:00:00Z'
199- Filter values need single quotes: "'2025-01-03T00:00:00Z'"
200- Timezone mismatches shift event boundaries; always resolve user timezone first
201
202**OData Filter Errors**:
203- 400 Bad Request usually indicates filter syntax issues
204- Not all event properties support filtering (createdDateTime does not)
205- Retry with adjusted syntax/bounds on 400 errors
206- Valid filter fields: start/dateTime, end/dateTime, subject, categories, isAllDay
207
208**Attendee Management**:
209- Adding attendees triggers invitation emails
210- Updating attendees replaces the full list; include all desired attendees
211- Attendee types: 'required', 'optional', 'resource'
212- Calendar delegation affects which calendars are accessible
213
214**Response Structure**:
215- Events nested at response.data.value
216- Event times at event.start.dateTime and event.end.dateTime
217- Calendar View may nest at data.results[i].response.data.value
218- Parse defensively with fallbacks for different nesting levels
219
220## Quick Reference
221
222| Task | Tool Slug | Key Params |
223|------|-----------|------------|
224| Create event | OUTLOOK_CALENDAR_CREATE_EVENT | subject, start_datetime, end_datetime, time_zone |
225| List events | OUTLOOK_LIST_EVENTS | filter, select, top, timezone |
226| Get event details | OUTLOOK_GET_EVENT | event_id |
227| Calendar view | OUTLOOK_GET_CALENDAR_VIEW | start_datetime, end_datetime |
228| Update event | OUTLOOK_UPDATE_CALENDAR_EVENT | event_id, subject, start_datetime |
229| Delete event | OUTLOOK_DELETE_EVENT | event_id, send_notifications |
230| Decline event | OUTLOOK_DECLINE_EVENT | event_id, comment |
231| Find meeting times | OUTLOOK_FIND_MEETING_TIMES | attendees, meetingDuration |
232| Get schedule | OUTLOOK_GET_SCHEDULE | Schedules, StartTime, EndTime |
233| List calendars | OUTLOOK_LIST_CALENDARS | user_id |
234| Mailbox settings | OUTLOOK_GET_MAILBOX_SETTINGS | select |
235
236## When to Use
237This skill is applicable to execute the workflow or actions described in the overview.
238
239## Limitations
240- Use this skill only when the task clearly matches the scope described above.
241- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
242- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.