icloud-calendar-mcp
Manages iCloud calendar events, including creating, reading, updating, and deleting events via CalDAV.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@icloud-calendar-mcp create a meeting tomorrow at 10am with John"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Remote iCloud calendar MCP Server
Remote MCP server so Claude Code (or any MCP-compatible client) can manage calendar events directly you can deploy at https://horizon.prefect.io/.
Works with
Claude Code / Claude Desktop / Claude.ai
ChatGpt
Anything that supports Oauth MCP servers
Environment Variables
Variable | Required | Default | Description |
| Yes | — | iCloud account email address |
| Yes | — | iCloud app-specific password |
| No |
| Name of the target iCloud calendar |
Credentials are stored encrypted in secrets.env via SOPS + Age and loaded automatically by direnv.
Related MCP server: iCloud CalDAV MCP Connector
ICS Import (CLI)
Import an ICS file directly into iCloud:
uv run python main.py SchemaICAL.ics
# or, if inside the devenv shell:
import SchemaICAL.icsOptions:
usage: main.py [-h] [--username USERNAME] [--password PASSWORD] [--calendar CALENDAR] ics_file
positional arguments:
ics_file Path to the ICS file to import
options:
-u, --username USERNAME iCloud username (falls back to ICLOUD_USERNAME)
-p, --password PASSWORD iCloud app-specific password (falls back to ICLOUD_PASSWORD)
-c, --calendar CALENDAR Target calendar name (default: Alex Plugg)MCP Server
server.py is a FastMCP server that exposes CRUD operations on iCloud calendar events.
Tools
Tool | Description |
| List events in a date range (defaults to current month) |
| Fetch a single event by UID |
| Create a new event with title, time, description, and location |
| Update any fields of an existing event by UID |
| Delete an event by UID |
Installation — Claude Code (user-level)
Register the server globally so it is available in every project:
claude mcp add --scope user icloud-calendar \
uv -- run fastmcp run /home/kog/repos/ics-icloud-import/server.pyThe server reads ICLOUD_USERNAME, ICLOUD_PASSWORD, and ICLOUD_CALENDAR from the environment. These are already available in any shell that loads this repo's direnv config.
Installation — Claude Desktop (macOS / Windows)
Add the following to your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"icloud-calendar": {
"command": "uv",
"args": [
"run",
"--project", "/path/to/ics-icloud-import",
"fastmcp", "run", "/path/to/ics-icloud-import/server.py"
],
"env": {
"ICLOUD_USERNAME": "your@icloud.com",
"ICLOUD_PASSWORD": "xxxx-xxxx-xxxx-xxxx",
"ICLOUD_CALENDAR": "My Calendar"
}
}
}
}Replace /path/to/ics-icloud-import with the actual path to this repository.
Running the server manually
uv run fastmcp run server.pyAvailable Tools
7 toolscreate_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.
Inputs: end (required), start (required), summary (required), rrule, +3 more. Returns: object
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
Inputs: uid (required), calendar_name. Returns: object
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
Inputs: uid (required), calendar_name. Returns: object
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.)
Inputs: no named parameters. Returns: result
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.
Inputs: end, start, calendar_name. Returns: result
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
Inputs: calendar_name (required), description. Returns: object
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
Inputs: uid (required), end, start, summary, +3 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
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.
Maintenance
Related MCP Connectors
MCP server for Cronofy — read calendars, events and free/busy, and create, update or delete events.
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Read and send iCloud Mail, manage iCloud Calendar. Needs an approved account at icloud.mcp.visin.ch.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables interaction with iCloud Calendars via the CalDAV protocol using an app-specific password. It allows users to list, create, update, and delete calendar events through MCP-aware clients like ChatGPT.2MIT
- AlicenseNot gradedqualityCmaintenanceAn HTTP Model Context Protocol (MCP) server exposing iCloud Calendar (CalDAV) tools so MCP-aware clients can list calendars, read events, and create/update/delete events using an iCloud app-specific password.3MIT
- AlicenseAqualityBmaintenanceMCP server for Apple Calendar and CalDAV providers. Enables listing, creating, updating, deleting events, and checking free/busy status with per-calendar write protection.6MIT
- -licenseNot gradedqualityNot gradedmaintenanceAn MCP server for iCloud Calendar, Contacts, and Mail, usable from any MCP-capable AI client.-