Skip to main content
skill CX Codex

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.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add sickn33/agentic-awesome-skills --skill outlook-calendar-automation -a claude-code
Open on GitHub

What 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_id one 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-code

2Manually: put the files in place

~/.claude/skills/outlook-calendar-automation/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/outlook-calendar-automation/

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

Similar skills

All skills for Automation and no-code: n8n, Zapier, Make →

From the same set101

The whole set →
skill-creator Skill to create, review and package custom skills with Python scaffolding, frontmatter validation and ZIP helpers. Use it to extend your IDE or automate repetitive tasks. CX Codex +1 977installs agent-evaluation A skill for comparing agent, prompt or tool changes against versioned cases with explicit verifiers. Useful for reproducing a failure or running a regression pass. CX Codex +1 971installs bash-pro Teaches the agent to write defensive Bash scripts for CI/CD and ops, complete with Bats tests and ShellCheck linting. CX Codex +1 966installs autonomous-agent-patterns Design patterns for building an autonomous coding agent: tool calling, user approvals, browser automation, rollback checkpoints. Useful while you are designing the agent. CX Codex +1 965installs computer-use-agents Guides the architecture of AI agents that control screens, cursors, and keystrokes using Anthropic Computer Use or OpenAI Operator. Useful for sandboxed desktop and GUI automation. CX Codex +1 962installs voice-ai-development This skill guides work on voice applications and real-time voice agents. Use it when a task involves speech recognition, speech synthesis, or streamed audio. CX Codex +1 959installs agent-tool-builder A skill for writing tool schemas an agent can actually use: JSON Schema, descriptions, validation, error paths. Useful when it keeps calling the wrong function. CX Codex +1 961installs ai-product Helps plan and assess LLM features, retrieval, validated outputs, latency, and cost controls. Use it when an AI feature needs comparison against an evaluated baseline. CX Codex +1 960installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor