Skip to content
Back to skills

Calendar Management

ASecurity

Guide for effective use of che-ical-mcp for macOS Calendar & Reminders management. Use when user asks about calendar events, reminders, scheduling, or time management.

  • 38 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added August 31, 2026
ai-agentsgo

Works with

  • mcp

Security analysis

A100/100

Scanned September 21, 2026

npx -y skills add PsychQuant/che-ical-mcp --skill calendar-management --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Calendar Management?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Calendar Management
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/psychquant-calendar-management/badge)](https://www.skillsdirectory.com/skills/psychquant-calendar-management)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: calendar-management
description: Guide for effective use of che-ical-mcp for macOS Calendar & Reminders management. Use when user asks about calendar events, reminders, scheduling, or time management.
allowed-tools:
  - mcp__che-ical-mcp__list_calendars
  - mcp__che-ical-mcp__create_calendar
  - mcp__che-ical-mcp__delete_calendar
  - mcp__che-ical-mcp__list_events
  - mcp__che-ical-mcp__create_event
  - mcp__che-ical-mcp__update_event
  - mcp__che-ical-mcp__delete_event
  - mcp__che-ical-mcp__list_reminders
  - mcp__che-ical-mcp__create_reminder
  - mcp__che-ical-mcp__update_reminder
  - mcp__che-ical-mcp__complete_reminder
  - mcp__che-ical-mcp__delete_reminder
  - mcp__che-ical-mcp__search_events
  - mcp__che-ical-mcp__list_events_quick
  - mcp__che-ical-mcp__create_events_batch
  - mcp__che-ical-mcp__check_conflicts
  - mcp__che-ical-mcp__copy_event
  - mcp__che-ical-mcp__move_events_batch
  - mcp__che-ical-mcp__delete_events_batch
  - mcp__che-ical-mcp__find_duplicate_events
---

# macOS Calendar & Reminders Management

This skill guides you through effective use of che-ical-mcp for calendar and task management on macOS.

## Date/Time Format

**CRITICAL**: Always use ISO8601 format with timezone for all date/time parameters:
```
2026-01-18T14:00:00+08:00  (correct)
2026-01-18 14:00           (wrong - will fail)
```

Use the user's local timezone. For Taiwan: `+08:00`

## Tool Categories

### 1. Discovery (Start Here)
Before creating or modifying, always check existing state:

```
list_calendars          → See all calendars and their sources
list_events_quick       → Quick view: "today", "this_week", "next_7_days"
list_reminders          → See tasks by list or completion status
```

### 2. Events (Calendar)
| Task | Tool | Key Parameters |
|------|------|----------------|
| View schedule | `list_events` | start_date, end_date, calendar_name |
| Quick view | `list_events_quick` | range: "today", "tomorrow", "this_week", week_starts_on |
| Create event | `create_event` | title, start_time, end_time, calendar_name (required) |
| Search | `search_events` | keyword/keywords, match_mode ("any"/"all") |
| Check availability | `check_conflicts` | start_time, end_time |

**Week Start Day (v0.8.2+)**: For `this_week`/`next_week` ranges, use `week_starts_on`:
- `system` (default): Use system locale
- `monday`: ISO 8601 (Europe, Asia)
- `sunday`: US, Japan
- `saturday`: Middle East

### 3. Reminders (Tasks)
| Task | Tool | Key Parameters |
|------|------|----------------|
| List tasks | `list_reminders` | calendar_name, completed (JSON boolean; omit/null = all; strings/numbers rejected) |
| Create task | `create_reminder` | title, calendar_name (required), due_date |
| Complete | `complete_reminder` | reminder_id, completed (JSON boolean, default true; strings/numbers rejected) |

> Every boolean argument on every tool (`all_day`, `clear_*`, `include_completed`, `dry_run`, `delete_original`, …) is a strict JSON boolean (#207): strings and numbers are rejected; omit or `null` keeps the default.

> **Recurring reminders (#194)**: list/search items carry `has_recurrence`, `recurrence_rules` and a `due` object (`date` / `time` / `timezone` / `date_time`). `complete_reminder` returns `operation` (write outcome), `observed` (the saved object) and `next_occurrence`. **Read `operation.status`, not `is_completed`**: completing a recurring reminder advances the same item to its next occurrence, so `is_completed` can be `false` after a successful write. `next_occurrence.status: "confirmed"` carries the next due (also in the message); `"unknown"` is not a failure — never repeat the write because of it.

### 4. Batch Operations (Efficiency)
| Task | Tool | When to Use |
|------|------|-------------|
| Create multiple | `create_events_batch` | Recurring meetings, series |
| Move multiple | `move_events_batch` | Calendar migration |
| Delete multiple | `delete_events_batch` | Cleanup old events |
| Find duplicates | `find_duplicate_events` | Before merging calendars |

## Common Workflows

### Schedule a Meeting
```
1. check_conflicts(start_time, end_time)  → Ensure no overlap
2. create_event(title, start_time, end_time, calendar_name, location?, alarms_minutes_offsets?)
```

### Recurring Series with Excluded Dates (#182)

Skip specific dates (e.g. holidays) when creating a recurring event, via `recurrence.excluded_occurrence_dates`:

```json
create_event({
  "title": "Weekly seminar",
  "start_time": "2026-09-07T14:00:00+08:00",
  "end_time": "2026-09-07T16:00:00+08:00",
  "calendar_name": "Work",
  "recurrence": {
    "frequency": "weekly",
    "excluded_occurrence_dates": ["2026-09-28", "2026-10-05"]
  }
})
```

- Same date grammar as `occurrence_date`; date-only values are interpreted in the event timezone. Max 100, duplicates rejected.
- Applied with best-effort all-or-nothing semantics: if any exclusion fails, the entire new series is removed via compensating delete (rollback failure is reported, never silent). The first occurrence cannot be excluded. One `undo` removes the whole series including exclusions.
- Response includes `excluded_occurrence_dates` (normalized `yyyy-MM-dd`) + `exclusion_count`. Also available per-item in `create_events_batch` (reported per-item).
- `update_event` and `create_reminder` reject this field — it is creation-time only.

### Weekly Review
```
1. list_events_quick(range: "this_week")  → See upcoming events
2. list_reminders(completed: false)       → See pending tasks
3. search_events(keywords: ["important"]) → Find priority items
```

### Calendar Migration
```
1. list_calendars()                       → Identify source/target
2. find_duplicate_events(calendars, date_range)  → Check for duplicates
3. move_events_batch(event_ids, target_calendar) → Move events
```

## Source Disambiguation

When multiple calendars have the same name (e.g., "Work" in both iCloud and Google):

```
create_event(
  calendar_name: "Work",
  calendar_source: "iCloud",  ← Specify the source
  ...
)
```

Available sources: "iCloud", "Google", "Exchange", "CalDAV", "Local"

## Best Practices

1. **Always specify calendar_name** for create operations (v0.8.0+)
2. **Use batch operations** for multiple similar actions
3. **Check conflicts** before scheduling important events
4. **Use search** instead of listing all events when looking for specific items
5. **Prefer list_events_quick** over list_events for common ranges
6. **Specify week_starts_on** when user's locale differs from expected (v0.8.2+)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.