outlook-calendar-automation — Claude Code skill: Outlook events via
A skill that lets your agent work with Outlook Calendar through Rube MCP: schedule meetings, find open slots, edit and cancel events.
npx skills add sickn33/agentic-awesome-skills --skill outlook-calendar-automation -a claude-codeWhat outlook-calendar-automation does
Everything runs through Rube MCP and Composio's outlook toolkit. The agent calls RUBE_SEARCH_TOOLS first, reads the current tool schemas, then picks the right one: OUTLOOK_CALENDAR_CREATE_EVENT to book something, OUTLOOK_LIST_EVENTS or OUTLOOK_GET_CALENDAR_VIEW to look around, OUTLOOK_UPDATE_CALENDAR_EVENT to change details, OUTLOOK_DELETE_EVENT and OUTLOOK_DECLINE_EVENT to back out, OUTLOOK_FIND_MEETING_TIMES to hunt for a slot.
Setup comes first. Add https://rube.app/mcp as an MCP server in your client config, then call RUBE_MANAGE_CONNECTIONS with the outlook toolkit and finish Microsoft OAuth through the link it returns. Until the connection reads ACTIVE, nothing will run.
Be careful with writes. A free/busy lookup is not permission to send invitations — adding attendees fires off emails right away, and deleting with send_notifications=true notifies everyone. Pass an attendee or category list on update and it replaces the old one entirely. Time zones are mandatory, and which names are accepted depends on the adapter, so daylight-saving edges deserve a second look.
What it helps with
- book an Outlook meeting with attendees and a Teams link
- find a free hour across several calendars
- move an event and notify the guests
- decline an invitation and propose another time
- pull every event in a date range, recurring ones included
Example prompts for the agent
- Create an Outlook meeting tomorrow at 10:00, time zone America/New_York, with a Teams link
- Find a free one-hour slot for me and two colleagues this week
- Move the event with
event_idone hour later and let attendees know
How to install outlook-calendar-automation
1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill outlook-calendar-automation -a claude-code2Manually: put the files in place
~/.claude/skills/outlook-calendar-automation/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/outlook-calendar-automation/
1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill outlook-calendar-automation -a codex2Manually: put the files in place
.agents/skills/outlook-calendar-automation/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill outlook-calendar-automation -a cursor2Manually: put the files in place
.cursor/skills/outlook-calendar-automation/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install sickn33/agentic-awesome-skills outlook-calendar-automation2Manually: put the files in place
.github/skills/outlook-calendar-automation/SKILL.md1Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill outlook-calendar-automation -a gemini-cli2Platform CLI
gemini skills install https://github.com/sickn33/agentic-awesome-skills --path skills/outlook-calendar-automationManually: put the files in place
.devin/skills/outlook-calendar-automation/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add sickn33/agentic-awesome-skills --skill outlook-calendar-automation -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about outlook-calendar-automation
How do I install outlook-calendar-automation in Claude Code?
Run npx skills add sickn33/agentic-awesome-skills --skill outlook-calendar-automation -a claude-code. The skill lands at ~/.claude/skills/outlook-calendar-automation/SKILL.md.
What does outlook-calendar-automation do?
It drives Outlook Calendar through Rube MCP: creating events, managing attendees, finding meeting times and handling invitations.
What does the skill need to work?
A connected Rube MCP where RUBE_SEARCH_TOOLS responds, plus an active Outlook connection made with RUBE_MANAGE_CONNECTIONS and the outlook toolkit. Microsoft OAuth has to be completed via the returned auth link.
Source text
SKILL.md · MIT
--- name: outlook-calendar-automation description: "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." risk: critical source: community date_added: "2026-02-27" --- # 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. The target account must still authenticate through the returned connection flow and grant the required scopes. 1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds 2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `outlook` 3. If connection is not ACTIVE, follow the returned auth link to complete Microsoft OAuth 4. Confirm connection status shows ACTIVE before running any workflows ## Calendar and notification authority Discover current tool schemas and resolve the exact mailbox/calendar/event occurrence. A search/free-busy request does not authorize invitations, changes, cancellations or declines. Confirm the approved recipient set, content and series-versus-occurrence scope before those writes, which may notify attendees immediately. Preserve existing attendee/category lists unless replacement is intended; reconcile an uncertain create/update before retrying. Treat timezone examples as adapter-specific: verify supported zones, offsets and daylight-saving boundaries; use calendarView for expanded recurring occurrences and spanning events. Minimize shared calendar details. ## Core Workflows ### 1. Create Calendar Events **When to use**: User wants to schedule a new event on their Outlook calendar **Tool sequence**: 1. `OUTLOOK_LIST_CALENDARS` - List available calendars [Optional] 2. `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**: 1. `OUTLOOK_GET_MAILBOX_SETTINGS` - Get user timezone for accurate queries [Prerequisite] 2. `OUTLOOK_LIST_EVENTS` - Search events with filters [Required] 3. `OUTLOOK_GET_EVENT` - Get full details for a specific event [Optional] 4. `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**: 1. `OUTLOOK_LIST_EVENTS` - Find the event to update [Prerequisite] 2. `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**: 1. `OUTLOOK_DELETE_EVENT` - Delete an event [Optional] 2. `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**: 1. `OUTLOOK_FIND_MEETING_TIMES` - Get meeting time suggestions [Required] 2. `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.
© sickn33 · MIT · sickn33/agentic-awesome-skills