# icloud-calendar [Health: Active]

**Category:** 🏢 Workplace & Productivity  
**Repository:** https://github.com/IceyWu/icloud-calendar-mcp  
**GitHub Stars:** 0  
**npm Downloads (last month):** 945  
**Views:** 1  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/icloud-calendar

## Description
Manage Apple iCloud Calendar through a reliable CalDAV MCP server.

## Tools
Capabilities this server exposes over MCP:

- **list_calendars** — List calendars
- **list_events** — List events in a time range
- **get_event** — Get an event
- **create_event** — Create an event
- **update_event** — Update an event
- **delete_event** — Delete an event
- **find_conflicts** — Find overlapping events
- **free_busy** — Return busy time ranges

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "icloud-calendar": {
    "command": "npx",
    "args": ["-y","icloud-calendar-mcp"],
    "env": {
      "ICLOUD_USERNAME": "",
      "ICLOUD_APP_PASSWORD": ""
    }
  }
}
```

**Requires environment variables:** `ICLOUD_USERNAME`, `ICLOUD_APP_PASSWORD` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What the icloud-calendar MCP server does

The icloud-calendar MCP server exposes Apple iCloud Calendar through the Model Context Protocol. It is intended for MCP clients that need calendar data or calendar mutations without implementing CalDAV operations themselves. The server can enumerate calendars, query events within a time range, retrieve a specific event, and create, update, or delete events.

Scheduling-oriented queries are also supported. `find_conflicts` identifies overlapping events, while `free_busy` returns busy time ranges. Event data may include time zones, all-day dates, recurrence rules, alarms, locations, descriptions, URLs, and attendees.

## How it works

The server uses the Apple Account email and an Apple app-specific password to access iCloud Calendar. The app-specific password is required instead of the normal Apple Account password. MCP clients start the package with `npx`, using the configured credentials as environment variables.

stdio is the default transport. Streamable HTTP can be selected with an environment variable and configured to use a port and bearer token. HTTP mode listens on loopback by default; deployments that place it behind a proxy should review the project’s security guidance before exposing it beyond the local machine.

Write operations accept a `request_id`, which allows clients to retry safely. Concurrent modifications are checked with ETags. Updates and deletions can apply to an entire recurring series, but occurrence-level changes that are not supported return an error rather than changing the series.

## Setup and configuration

Node.js 22.13 or newer is required. Configure the server in the MCP client with the `icloud-calendar-mcp` package and provide `ICLOUD_USERNAME` for the Apple Account email and `ICLOUD_APP_PASSWORD` for the app-specific password. A typical stdio configuration invokes `npx -y icloud-calendar-mcp`.

For HTTP transport, set `ICLOUD_MCP_TRANSPORT=http`, provide `ICLOUD_MCP_HTTP_TOKEN` with a long random token, and optionally set `ICLOUD_MCP_HTTP_PORT` to choose the listening port. The HTTP token is required when HTTP mode is enabled.

## Tools and capabilities

The icloud-calendar MCP server provides these tools:

- `list_calendars` lists available calendars.
- `list_events` finds events in a specified time range.
- `get_event` retrieves an individual event.
- `create_event` adds an event.
- `update_event` changes an event.
- `delete_event` removes an event.
- `find_conflicts` finds overlapping events.
- `free_busy` returns busy intervals.

When making date-related requests, specify the calendar, date, time, and time zone when possible. All-day event end dates are exclusive: a one-day event on August 18 uses August 18 as its start and August 19 as its end.

## Limitations and notes

The server requires access to an Apple Account with an app-specific password and does not use the account’s regular password. Occurrence-level edits for recurring events are unsupported; requests for those changes return an error. All-day date ranges also require clients to account for exclusive end dates. Complete input, output, and error details are provided in the project’s tool-contract documentation.

_Full upstream README: https://allmcps.com/mcp/icloud-calendar/readme_

