Skip to main content
Glama
iCloud Calendar MCP Server

iCloud Calendar MCP Server

by Glob0x17

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ICLOUD_PASSWORDNoApp-specific password for the Apple ID.
ICLOUD_USERNAMENoApple ID address used for iCloud Calendar CalDAV authentication.
MCP_ICAL_CONFIGNoPath to a JSON configuration file shaped like config.json.example.
CALDAV_SERVER_URLNoURL of the CalDAV server.https://caldav.icloud.com/
MCP_ICAL_LOG_LEVELNoLog level: TRACE, DEBUG, INFO, WARNING or ERROR.INFO
MCP_ICAL_READ_ONLYNoSet to true to leave out create_event, update_event and delete_event.false

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_calendarsA

List all available calendars.

list_eventsA

List calendar events in a date range.

The start_date should always use the time such that it represents the beginning of that day (00:00:00). The end_date should always use the time such that it represents the end of that day (23:59:59). This way, range based searches are always inclusive and can locate all events in that date range.

Args: start_date: Start date in ISO8601 format (YYYY-MM-DDT00:00:00). end_date: Optional end date in ISO8601 format (YYYY-MM-DDT23:59:59). calendar_name: Optional calendar name to filter by

debug_calendar_connectionA

Debug calendar connection and provide detailed diagnostic information.

This tool helps diagnose why events might not be showing up. It will test:

  1. CalDAV connection status

  2. Calendar accessibility

  3. Event search capabilities

  4. Recent events count

create_eventB

Create a new calendar event.

Before using this tool, make sure to:

  1. Ask the user which calendar they want to use if not specified (check calendars://list)

  2. Ask if they want to add a location if none provided

  3. Ask if they want to add any notes/description if none provided

  4. Confirm the date and time with the user

  5. Ask if they want to set reminders for the event

Args: title: Event title start_time: Start time in ISO format (YYYY-MM-DDTHH:MM:SS) end_time: End time in ISO format (YYYY-MM-DDTHH:MM:SS) notes: Optional event notes/description. Ask user if they want to add notes. location: Optional event location. Ask user if they want to specify a location. calendar_name: Optional calendar name. Ask user which calendar to use, referencing calendars://list. all_day: Whether this is an all-day event reminder_offsets: List of minutes before the event to trigger reminders e.g. [60, 1440] means two reminders, the first 24 hours before the event and the second one hour before. recurrence_rule: Optional recurrence rule for the event. This should be an instance of RecurrenceRule with the following fields: - frequency: Frequency of the recurrence (e.g., DAILY, WEEKLY, MONTHLY, YEARLY). - interval: Interval between recurrences (e.g., every 2 weeks). - end_date: Optional end date for the recurrence. If specified, the recurrence will stop on this date. - occurrence_count: Optional number of occurrences. If specified, the recurrence will stop after this many occurrences. - days_of_week: Optional list of weekdays for the event. Use integers to represent days: - Sunday: 1 - Monday: 2 - Tuesday: 3 - Wednesday: 4 - Thursday: 5 - Friday: 6 - Saturday: 7

Note: Both end_date and occurrence_count should not be set simultaneously; choose one or the other, or leave both unset.

update_eventA

Update an existing calendar event.

Before using this tool, make sure to:

  1. Ask the user which fields they want to update

  2. If moving to a different calendar, verify the calendar exists using calendars://list

  3. If updating time, confirm the new time with the user

  4. Ask if they want to add/update location if not specified

  5. Ask if they want to add/update notes if not specified

  6. Ask if they want to set reminders for the event

Args: event_id: Unique identifier of the event to update title: Optional new title start_time: Optional new start time in ISO format end_time: Optional new end time in ISO format notes: Optional new notes/description. Ask user if they want to update notes. location: Optional new location. Ask user if they want to specify/update location. calendar_name: Optional new calendar. Ask user which calendar to use, referencing calendars://list. all_day: Optional all-day flag reminder_offsets: List of minutes before the event to trigger reminders e.g. [60, 1440] means two reminders, the first 24 hours before the event and the second one hour before. recurrence_rule: Optional recurrence rule for the event. This should be an instance of RecurrenceRule with the following fields: - frequency: Frequency of the recurrence (e.g., DAILY, WEEKLY, MONTHLY, YEARLY). - interval: Interval between recurrences (e.g., every 2 weeks). - end_date: Optional end date for the recurrence. If specified, the recurrence will stop on this date. - occurrence_count: Optional number of occurrences. If specified, the recurrence will stop after this many occurrences. - days_of_week: Optional list of weekdays for the event. Use integers to represent days: - Sunday: 1 - Monday: 2 - Tuesday: 3 - Wednesday: 4 - Thursday: 5 - Friday: 6 - Saturday: 7

Note: Both end_date and occurrence_count should not be set simultaneously; choose one or the other, or leave both unset.

delete_eventA

Delete a calendar event by its identifier.

Before using this tool, make sure to:

  1. Confirm with the user that they want to delete the event

  2. Verify the event exists by listing events first

  3. Note that this action cannot be undone

Args: event_id: Unique identifier of the event to delete

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
get_calendarsList all available calendars that can be used with calendar operations.

TDQS

A3.9/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a clearly distinct resource and action: calendar listing, event listing, and event CRUD operations are unambiguous. The diagnostic tool is easily distinguished from list_events despite both relating to events.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (list_calendars, list_events, create_event, update_event, delete_event, debug_calendar_connection). No mixing of conventions or vague verbs.

Tool Count5/5

Six tools is well-scoped for a calendar server, covering the essential lifecycle plus a diagnostic helper. Each tool earns its place without redundancy.

Completeness4/5

Full event CRUD plus calendar listing and diagnostics covers the core domain well. Minor gaps exist, such as no get_event-by-id or calendar creation/deletion, but agents can work around these via list_events.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues