icloud-calendar-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ICLOUD_CALENDAR | No | Name of the target iCloud calendar | Alex Plugg |
| ICLOUD_PASSWORD | Yes | iCloud app-specific password | |
| ICLOUD_USERNAME | Yes | iCloud account email address |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_calendarsA | List all available iCloud calendars with comprehensive metadata. Returns: A list of dicts containing: - name: Display name with provider prefix - provider: Provider identifier (icloud) - url: CalDAV URL for the calendar - description: Calendar description (if set) - timezone: Calendar timezone information (extracted from VTIMEZONE data) - supported_components: List of supported component types (VEVENT, VTODO, etc.) |
| list_eventsA | List calendar events from specified calendar or all calendars. Args: calendar_name: Full calendar name with provider prefix (e.g. '[iCloud] Work'). Defaults to all iCloud calendars. start: ISO 8601 start datetime. Defaults to start of current month. end: ISO 8601 end datetime. Defaults to 30 days after start. Returns: List of event dicts with 'calendar' and 'provider' fields added. |
| get_eventA | Get a single calendar event by its UID. Args: uid: The unique identifier of the event. calendar_name: Optional full calendar name with provider prefix. Defaults to searching all iCloud calendars. Returns: Event dict with 'calendar' and 'provider' fields. Raises: ValueError: If event not found |
| create_eventA | Create a new calendar event in an iCloud calendar. Args: summary: Title of the event. start: ISO 8601 start datetime. end: ISO 8601 end datetime. calendar_name: Full calendar name with provider prefix (e.g. '[iCloud] Work'). Defaults to DEFAULT_CALENDAR for backward compatibility. description: Optional event description. location: Optional event location. rrule: Optional iCalendar RRULE string for recurring events. Returns: The created event as a dict with its assigned UID. |
| update_eventA | Update an existing calendar event by UID. Only provided fields are changed. Args: uid: The unique identifier of the event to update. summary: New title (optional). start: New ISO 8601 start datetime (optional). end: New ISO 8601 end datetime (optional). description: New description (optional). location: New location (optional). calendar_name: Full calendar name with provider prefix. Returns: The updated event as a dict. Raises: ValueError: If event not found |
| delete_eventA | Delete a calendar event by its UID. Args: uid: The unique identifier of the event to delete. calendar_name: Full calendar name with provider prefix. Returns: Confirmation dict with the deleted event's UID and summary. Raises: ValueError: If event not found |
| update_calendar_metadataA | Update metadata for a calendar. Args: calendar_name: Full calendar name with provider prefix (e.g. '[iCloud] Work') description: New description for the calendar (optional) Returns: Dict with the updated calendar metadata including provider information |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| calendars_resource | List all available iCloud calendars as a resource. Returns a JSON array of objects with comprehensive metadata for each calendar. Exposed as a resource so clients can discover available calendars on connect without explicitly invoking a tool. |
| timezone_resource | Get current timezone information. Returns: JSON string containing timezone information |
TDQS
Scored across 7 tools
Each tool targets a distinct resource-action pair: calendars vs. events, and list/get/create/update/delete are clearly separated. No two tools overlap in purpose, and the parameter descriptions reinforce their differences.
All tools follow a consistent verb_noun snake_case pattern (list_calendars, create_event, delete_event, etc.). The naming convention is uniform and predictable across the entire set.
Seven tools is well-scoped for an iCloud calendar server, covering calendar listing/metadata and event CRUD without unnecessary bloat. Each tool has a clear role and the count feels intentional.
Event lifecycle is fully covered (list, get, create, update, delete), and calendar metadata can be updated. The main gap is lack of create/delete calendar operations, but that may not be supported by iCloud CalDAV and is a minor omission.