Icloud Calendar MCP logo

Icloud Calendar MCP

MCP server for iCloud (Apple) Calendar access via CalDAV

Install Icloud Calendar MCP

Pick your client, then add it in one click or paste the config.

STDIONode.js
~/Library/Application Support/Claude/claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "icloud-calendar-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@icloud-calendar-mcp/server"
      ]
    }
  }
}

Settings → Developer → Edit Config, merge this into mcpServers, then fully quit and reopen Claude Desktop.

We couldn’t confirm it starts correctly

We ran the install command but it didn't respond within our test window — this can mean a slow first-time install rather than a real problem.

npx -y @icloud-calendar-mcp/server

Process exited before answering initialize.

This is an experimental automated check and can have false negatives — missing environment variables, a slow cold install, etc. It doesn’t necessarily mean something’s wrong. Last checked 3d ago.

Overview

Tools5

What Icloud Calendar MCP lets your agent do. Expand a tool for its parameters.

Self-reported~69 tokens of context

Security & health

What it can reach and how reliably it runs — from our own checks, not the maintainer’s claims.

ActiveLast checked 3d ago

Recent health check succeeded.

8/8 checks healthy over the last 44d

Supply-chain signal

No high-severity advisories surfaced by our automated scan.

Critical 0High 0Medium 0Low 0

Scanned 11d ago via OSV.dev · @icloud-calendar-mcp/server (npm)

Adoption & maintenance

Factual signals from GitHub, npm, and our automated checks — not a rating.

GitHub stars23Stargazers on the source repository.
npm downloads800Package downloads in the last 30 days.
Last commit1mo agoMost recent push to the default branch.
Install checkInconclusiveDidn't respond in our test window — often a slow first install.
Tools exposed5Callable tools this server registers over MCP.

From the project README

iCloud Calendar MCP Server

iCloud Calendar MCP Server

Tests npm PyPI License MCP Registry Security

An MCP (Model Context Protocol) server that gives AI assistants access to iCloud Calendar via CalDAV, with security controls aligned with the OWASP MCP Top 10.

[!CAUTION] Never use your main Apple ID password. This server requires an app-specific password which can be revoked independently without affecting your Apple ID.

Why this server

  • Portable CalDAV. Runs anywhere a JVM runs. It does not depend on macOS, AppleScript, or Calendar.app.
  • Durable event handles. get_events and create_event return an opaque handle that references an event across sessions and process restarts, so editing or deleting one needs no re-listing.
  • Correct recurrence. A series expands into one result per occurrence in the range, and you can edit or delete a single occurrence, this-and-future, or the whole series.
  • Bounded responses. Date-span and event-count caps return a clear, structured error instead of a silently truncated response.
  • Security aligned with the OWASP MCP Top 10, backed by a dedicated test suite.
  • Published on the MCP Registry, npm, and PyPI.

Features

MCP Tools

ToolDescriptionRead-OnlyDestructive
list_calendarsList all calendars from iCloud accountYesNo
get_eventsGet events within a date range from a calendarYesNo
create_eventCreate a new calendar eventNoNo
update_eventUpdate an event (whole series or a single occurrence)NoNo
delete_eventDelete an event (whole series or a single occurrence)NoYes

MCP Resources

ResourceDescription
calendar://calendarsBrowse available calendars

MCP Prompts

User-initiated templates that guide Claude through a multi-step task:

PromptDescription
schedule_meetingDraft an event from a title, attendees, and duration, then create it
rescheduleMove an existing event by looking it up, then editing it
find_conflictsList a day's events and report overlapping time slots

Security Features

  • Credential Protection - Environment variables only, never in code or config
  • Input Validation - All parameters validated with SSRF protection
  • Rate Limiting - 60 reads/min, 20 writes/min per MCP specification
  • Secure Error Handling - No sensitive data leakage in error messages
  • OWASP MCP Top 10 Compliance - 282 security tests covering all major risks
  • ReDoS Protection - All regex patterns tested against catastrophic backtracking
  • Unicode Security - Protection against homoglyph and encoding attacks

Quick Start

Prerequisites

Installation

Choose your preferred installation method:

[!IMPORTANT] Every option runs the same Java build. Java 21 or newer must be on your PATH, including for npx and uvx. Those wrappers download and launch the JAR; they do not replace the JVM.

Option 1: npm (Recommended)

Terminal
npx @icloud-calendar-mcp/server

Option 2: Python (uvx)

bash
uvx icloud-calendar-mcp

Option 3: Direct JAR

bash
# Download the latest release (version-agnostic name, always resolves)
curl -LO https://github.com/icloud-calendar-mcp/icloud-calendar-mcp/releases/latest/download/icloud-calendar-mcp-all.jar

# Run
java -jar icloud-calendar-mcp-all.jar

Option 4: Build from Source

bash
git clone https://github.com/icloud-calendar-mcp/icloud-calendar-mcp.git
cd icloud-calendar-mcp
./gradlew fatJar
java -jar build/libs/icloud-calendar-mcp-*-all.jar

Configuration

Set your iCloud credentials as environment variables:

server.ts
export ICLOUD_USERNAME="your-apple-id@icloud.com"
export ICLOUD_PASSWORD="your-app-specific-password"

Security Note: Use an app-specific password, not your main Apple ID password.


Claude Desktop Integration

Add to your Claude Desktop configuration:

PlatformConfig Path
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Linux~/.config/claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Using npm (Recommended)
config.json
{
  "mcpServers": {
    "icloud-calendar": {
      "command": "npx",
      "args": ["@icloud-calendar-mcp/server"],
      "env": {
        "ICLOUD_USERNAME": "your-apple-id@icloud.com",
        "ICLOUD_PASSWORD": "your-app-specific-password"
      }
    }
  }
}
Using uvx (Python)
config.json
{
  "mcpServers": {
    "icloud-calendar": {
      "command": "uvx",
      "args": ["icloud-calendar-mcp"],
      "env": {
        "ICLOUD_USERNAME": "your-apple-id@icloud.com",
        "ICLOUD_PASSWORD": "your-app-specific-password"
      }
    }
  }
}
Using JAR directly
config.json
{
  "mcpServers": {
    "icloud-calendar": {
      "command": "java",
      "args": ["-jar", "/path/to/icloud-calendar-mcp-all.jar"],
      "env": {
        "ICLOUD_USERNAME": "your-apple-id@icloud.com",
        "ICLOUD_PASSWORD": "your-app-specific-password"
      }
    }
  }
}

Usage Examples

Once configured, you can ask Claude:

  • "What's on my calendar this week?"
  • "Create a meeting with John tomorrow at 2pm"
  • "Show me all my calendars"
  • "Delete the dentist appointment on Friday"
  • "Move my 3pm meeting to 4pm"

Tool Parameters

list_calendars

No parameters required.

get_events

ParameterTypeRequiredDescription
calendar_idstringYesCalendar identifier (from list_calendars)
start_datestringYesStart date (YYYY-MM-DD)
end_datestringYesEnd date (YYYY-MM-DD)

Behavior to know about:

  • UTC day boundaries. start_date and end_date select whole UTC calendar days: start_date at 00:00 UTC through the end of end_date in UTC. Timed events return UTC startTime/endTime instants; all-day events return a plain YYYY-MM-DD. To resolve a user's day in another timezone, request one extra day on each side and keep the events whose start, converted to that zone, falls on the wanted day; all-day events are floating dates and need no conversion.
  • Limits. The range is capped at 366 days, and end_date must not precede start_date. The response is capped at 1000 events, and a single recurring series that expands to too many occurrences is rejected. If you hit a cap, query a week or a month at a time.
  • Recurring series. Each occurrence in the range is returned as its own result, carrying its own handle and a recurrenceId that identifies the instance.
  • Read-after-write. iCloud does not guarantee immediate visibility, so an event created moments ago can be missing from the next get_events for a short window. This is CDN indexing lag, not a deletion, so do not recreate it.

Each result includes uid, handle, summary, isAllDay, and startTime/endTime (timed) or startDate/endDate (all-day), plus any of description, location, rrule, recurrenceId, status, url, categories, priority, organizer, attendeeCount that are set.

create_event

ParameterTypeRequiredDescription
calendar_idstringYesTarget calendar
titlestringYesEvent title
start_timestringCond.ISO 8601 datetime for a timed event. A naive value (2026-01-15T09:00:00) is read as UTC unless timezone is set; a Z or offset value is an absolute instant that overrides timezone
end_timestringCond.ISO 8601 datetime for a timed event (same rules as start_time)
start_datestringCond.Start date YYYY-MM-DD for an all-day event
end_datestringCond.End date YYYY-MM-DD, inclusive, for an all-day event
is_all_daybooleanNoAll-day event flag
descriptionstringNoEvent description
locationstringNoEvent location
timezonestringNoIANA timezone for a timed event (e.g., America/New_York)
end_timezonestringNoIANA timezone for the end when it differs from the start (e.g., a flight). Falls back to timezone
rrulestringNoRecurrence rule (e.g., FREQ=WEEKLY;BYDAY=MO)
rdatesstring[]NoExtra occurrence dates (RFC 5545 RDATE)
exdatesstring[]NoExcluded occurrence dates (RFC 5545 EXDATE)
alarmsobject[]NoReminders on the event (see Alarms)

update_event

Only the fields you pass are changed.

Reviews

No reviews yet — be the first to share how it worked for you.

Frequently Asked Questions about Icloud Calendar MCP

icloud-calendar-mcp is an MCP server that provides AI assistants access to iCloud (Apple) Calendar through CalDAV. It supports listing calendars, reading events, creating events, updating events, and deleting events. It also offers a calendar resource, guided prompts, and durable event handles for referencing events across sessions and process restarts.

Use an iCloud app-specific password rather than your main Apple ID password. The server reads credentials from environment variables and supports iCloud Calendar access through CalDAV. Java 21 or newer is required for the installation methods described in the README.

The server provides tools to list calendars, retrieve events in a date range, create events, update events, and delete events. It also exposes the calendar://calendars resource and includes schedule_meeting, reschedule, and find_conflicts prompts.

Yes, recurring series expand into one result per occurrence within the requested range. Using durable event handles, the server can update or delete a single occurrence, the selected occurrence and future instances, or the entire recurring series.

Related MCP servers

Add a badge to your READMEShow it’s listed — live SVG, Markdown or HTML.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewIcloud Calendar MCP AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/icloud-calendar-mcp?style=directory)](https://allmcps.com/mcp/icloud-calendar-mcp)
HTML Embed
<a href="https://allmcps.com/mcp/icloud-calendar-mcp"><img src="https://allmcps.com/api/badge/icloud-calendar-mcp?style=directory" alt="Icloud Calendar MCP on AllMCPs" /></a>