Automate Outlook Calendar operations through Composio's Outlook toolkit via Rube MCP.
Toolkit docs
:
composio.dev/toolkits/outlook
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 online_meeting_provider='teamsForBusiness'
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
Powered by
Composio