Outlook Calendar Reader
Overview
This skill reads calendar events from Outlook via ICS subscription URL.
When to Use
- •User asks about today's meetings or schedule
- •User asks about upcoming events
- •User wants to check availability
- •User asks "What's on my calendar?"
ICS URL Configuration
ICS URL: <YOUR_ICS_URL_HERE>
⚠️ Setup Required: Replace
<YOUR_ICS_URL_HERE>above with your actual ICS URL.How to get your ICS URL:
- •Open Outlook Web
- •Go to Calendar → Settings (gear icon) → View all Outlook settings
- •Calendar → Shared calendars → Publish a calendar
- •Select calendar and permissions → Publish → Copy ICS link
Execution Steps
Method 1: Use ics_parser.py (Recommended)
The skill includes ics_parser.py that handles all parsing and RRULE expansion.
Prerequisite: uv must be installed.
bash
# Get today's date TODAY=$(date +%Y-%m-%d) # Parse events for today uv run ~/.claude/skills/outlook-calendar/ics_parser.py \ --url "ICS_URL_HERE" \ --start "$TODAY" \ --end "$TODAY" # Parse events for a date range uv run ~/.claude/skills/outlook-calendar/ics_parser.py \ --url "ICS_URL_HERE" \ --start 2025-12-01 \ --end 2025-12-31 # Output as JSON uv run ~/.claude/skills/outlook-calendar/ics_parser.py \ --url "ICS_URL_HERE" \ --start 2025-12-01 \ --end 2025-12-31 \ --format json # Debug mode (shows event counts) uv run ~/.claude/skills/outlook-calendar/ics_parser.py \ --url "ICS_URL_HERE" \ --start 2025-12-01 \ --end 2025-12-31 \ --debug
Method 2: Manual Parsing with WebFetch
If the script is not available, use WebFetch and parse manually:
- •Fetch ICS: Use WebFetch to retrieve the ICS URL
- •Parse Events: Extract VEVENT blocks
- •Handle RRULE: Expand recurring events (see RRULE Reference below)
- •Filter & Format: Filter by date range and output as table
Script Features
The ics_parser.py script handles:
- •✅ All 3 DTSTART formats (UTC, TZID, all-day)
- •✅ RRULE expansion (WEEKLY, DAILY with BYDAY, INTERVAL, UNTIL, COUNT)
- •✅ Automatic timezone conversion (UTC → Taipei UTC+8)
- •✅ Dependencies auto-installed by uv
- •✅ Table or JSON output format
- •✅ Debug mode for troubleshooting
Output Format
The script outputs a markdown table:
| Date | Time | Event | Location |
|---|---|---|---|
| 2025-12-02 (Tue) | 10:30-11:00 | 🔄 Standup Meeting | Microsoft Teams |
| 2025-12-02 (Tue) | 14:00-15:00 | 🔄 Weekly Meeting | Conference Room |
| 2025-12-03 (Wed) | 09:00-10:00 | Project Review | Zoom |
- •🔄 indicates a recurring event
RRULE Reference
Identify Recurring Events
A VEVENT with RRULE is a recurring event:
code
BEGIN:VEVENT DTSTART;TZID=Taipei Standard Time:20250424T103000 RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR SUMMARY:Standup Meeting END:VEVENT
Common RRULE Parameters
| Parameter | Meaning | Example |
|---|---|---|
FREQ | Frequency | DAILY, WEEKLY, MONTHLY, YEARLY |
INTERVAL | Every N periods | 2 = every 2 weeks |
BYDAY | Day of week | MO, TU, WE, TH, FR, SA, SU |
UNTIL | End date | 20251231T235959Z |
COUNT | Total occurrences | 10 |
DTSTART Formats
Outlook ICS uses 3 different formats:
| Format | Example | Timezone |
|---|---|---|
| UTC | DTSTART:20251211T060000Z | UTC (convert +8) |
| With TZID | DTSTART;TZID=Taipei Standard Time:20250424T103000 | Local time |
| All-day | DTSTART;VALUE=DATE:20251225 | Date only |
Example Queries
- •"What meetings do I have today?"
- •"Show my calendar for this week"
- •"Am I free tomorrow afternoon?"
- •"What's on my schedule for 12/5?"
Troubleshooting
Quick Debug
bash
# Run with debug flag uv run ics_parser.py --url "..." --start 2025-12-01 --end 2025-12-31 --debug
Output shows:
- •Total VEVENTs in ICS
- •Number of recurring events
- •Whether dateutil is available
- •Events found in range
Common Issues
| Issue | Solution |
|---|---|
uv: command not found | Install uv: curl -LsSf https://astral.sh/uv/install.sh | sh |
| No events found | Check date range matches your query |
| Script not found | Run install.sh to install skill |
| ICS URL placeholder | Edit SKILL.md and configure your ICS URL |
Error Handling
- •If ICS URL shows placeholder: Guide user to edit this file and configure their ICS URL
- •If uv not found: Install uv first (see README)
- •If no events found: Confirm the date range and calendar permissions
- •If parsing fails: Use
--debugflag to see event counts