Skip to main content
ClaudeWave

iCloud Calendar MCP server. On MCP Registry, npm & PyPI. Kotlin/JVM, OWASP MCP Top 10 compliant.

MCP ServersOfficial Registry10 stars6 forksKotlinNOASSERTIONUpdated today
ClaudeWave Trust Score
57/100
· OK
Passed
  • Recently active
  • Clear description
  • Topics declared
Flags
  • !No standard license detected
Last scanned: 6/11/2026
Install in Claude Code / Claude Desktop
Method: NPX · @icloud-calendar-mcp/server
Claude Code CLI
claude mcp add icloud-calendar-mcp -- npx -y @icloud-calendar-mcp/server
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "icloud-calendar-mcp": {
      "command": "npx",
      "args": ["-y", "@icloud-calendar-mcp/server"],
      "env": {
        "ICLOUD_USERNAME": "<icloud_username>",
        "ICLOUD_PASSWORD": "<icloud_password>"
      }
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
Detected environment variables
ICLOUD_USERNAMEICLOUD_PASSWORD
Use cases

MCP Servers overview

<p align="center">
  <img src="images/logo.png" alt="iCloud Calendar MCP Server" width="200"/>
</p>

<h1 align="center">iCloud Calendar MCP Server</h1>

[![Build](https://github.com/icloud-calendar-mcp/icloud-calendar-mcp/actions/workflows/test.yml/badge.svg)](https://github.com/icloud-calendar-mcp/icloud-calendar-mcp/actions/workflows/test.yml)
[![npm](https://img.shields.io/npm/v/@icloud-calendar-mcp/server.svg)](https://www.npmjs.com/package/@icloud-calendar-mcp/server)
[![PyPI](https://img.shields.io/pypi/v/icloud-calendar-mcp.svg)](https://pypi.org/project/icloud-calendar-mcp/)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
[![MCP Registry](https://img.shields.io/badge/MCP-Registry-green.svg)](https://registry.modelcontextprotocol.io/?search=org.onekash)
[![Tests](https://img.shields.io/badge/Tests-843%20passing-brightgreen.svg)](#testing)
[![Security](https://img.shields.io/badge/Security-OWASP%20MCP%20Top%2010-blue.svg)](#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](https://owasp.org/www-project-mcp-top-10/).

> [!CAUTION]
> **Never use your main Apple ID password.** This server requires an [app-specific password](https://support.apple.com/en-us/HT204397) which can be revoked independently without affecting your Apple ID.

## Features

### MCP Tools

| Tool | Description | Read-Only | Destructive |
|------|-------------|:---------:|:-----------:|
| `list_calendars` | List all calendars from iCloud account | Yes | No |
| `get_events` | Get events within a date range from a calendar | Yes | No |
| `create_event` | Create a new calendar event | No | No |
| `update_event` | Update an existing event | No | No |
| `delete_event` | Delete an event by ID | No | Yes |

### MCP Resources

| Resource | Description |
|----------|-------------|
| `calendar://calendars` | Browse available calendars |

### 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

- **Java 17+** (for all installation methods)
- iCloud account with [app-specific password](https://support.apple.com/en-us/HT204397)

### Installation

Choose your preferred installation method:

#### Option 1: npm (Recommended)

```bash
npx @icloud-calendar-mcp/server
```

#### Option 2: Python (uvx)

```bash
uvx icloud-calendar-mcp
```

#### Option 3: Direct JAR

```bash
# Download from GitHub Releases
curl -LO https://github.com/icloud-calendar-mcp/icloud-calendar-mcp/releases/latest/download/icloud-calendar-mcp-3.1.0-all.jar

# Run
java -jar icloud-calendar-mcp-3.1.0-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-3.1.0-all.jar
```

### Configuration

Set your iCloud credentials as environment variables:

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

> **Security Note**: Use an [app-specific password](https://support.apple.com/en-us/HT204397), not your main Apple ID password.

---

## Claude Desktop Integration

Add to your Claude Desktop configuration:

| Platform | Config Path |
|----------|-------------|
| macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
| Linux | `~/.config/claude/claude_desktop_config.json` |
| Windows | `%APPDATA%\Claude\claude_desktop_config.json` |

<details open>
<summary><strong>Using npm (Recommended)</strong></summary>

```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"
      }
    }
  }
}
```
</details>

<details>
<summary><strong>Using uvx (Python)</strong></summary>

```json
{
  "mcpServers": {
    "icloud-calendar": {
      "command": "uvx",
      "args": ["icloud-calendar-mcp"],
      "env": {
        "ICLOUD_USERNAME": "your-apple-id@icloud.com",
        "ICLOUD_PASSWORD": "your-app-specific-password"
      }
    }
  }
}
```
</details>

<details>
<summary><strong>Using JAR directly</strong></summary>

```json
{
  "mcpServers": {
    "icloud-calendar": {
      "command": "java",
      "args": ["-jar", "/path/to/icloud-calendar-mcp-3.1.0-all.jar"],
      "env": {
        "ICLOUD_USERNAME": "your-apple-id@icloud.com",
        "ICLOUD_PASSWORD": "your-app-specific-password"
      }
    }
  }
}
```
</details>

---

## 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
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `calendar_id` | string | Yes | Calendar identifier |
| `start_date` | string | Yes | Start date (YYYY-MM-DD) |
| `end_date` | string | Yes | End date (YYYY-MM-DD) |

#### create_event
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `calendar_id` | string | Yes | Target calendar |
| `title` | string | Yes | Event title |
| `start_time` | string | Cond. | ISO 8601 datetime (required for timed events) |
| `end_time` | string | Cond. | ISO 8601 datetime (required for timed events) |
| `start_date` | string | Cond. | Start date YYYY-MM-DD (required for all-day events) |
| `end_date` | string | Cond. | End date YYYY-MM-DD, inclusive (required for all-day events) |
| `is_all_day` | boolean | No | All-day event flag |
| `description` | string | No | Event description |
| `location` | string | No | Event location |
| `timezone` | string | No | IANA timezone (e.g., `America/New_York`) |
| `rrule` | string | No | Recurrence rule (e.g., `FREQ=WEEKLY;BYDAY=MO`) |

#### update_event
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `event_id` | string | Yes | Event UID to update |
| `title` | string | No | New title |
| `start_time` | string | No | New start time (ISO 8601) |
| `end_time` | string | No | New end time (ISO 8601) |
| `start_date` | string | No | New start date for all-day events (YYYY-MM-DD) |
| `end_date` | string | No | New end date for all-day events (YYYY-MM-DD) |
| `is_all_day` | boolean | No | Change to all-day event |
| `description` | string | No | New description |
| `location` | string | No | New location |
| `timezone` | string | No | IANA timezone (e.g., `America/New_York`) |
| `rrule` | string | No | Recurrence rule (e.g., `FREQ=WEEKLY;BYDAY=MO`) |

#### delete_event
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `event_id` | string | Yes | Event to delete |

> **Note — resolving an event by `event_id`:** `update_event` and `delete_event`
> locate the target event in the current session's in-memory cache, which is
> populated by `get_events` (and by the `create_event` that created it). Within a
> session the usual flow — `get_events` → `update_event`/`delete_event` — works
> without any extra step. If you start a fresh session and want to act on an
> existing event, call `get_events` for its calendar first so the event is cached.
> There is no per-request server-side lookup by UID: iCloud rejects a CalDAV
> `calendar-query` UID `prop-filter` (HTTP 412), and an unfiltered query would
> return the entire calendar, so a stateless UID lookup is not practical.

---

## Security

This server is designed with security as a primary concern, following the [OWASP MCP Top 10](https://owasp.org/www-project-mcp-top-10/) guidelines.

### Security Controls

| Control | Implementation |
|---------|----------------|
| **Credential Storage** | Environment variables only, never logged or exposed |
| **Input Validation** | All inputs validated (calendar IDs, dates, times, text fields) |
| **SSRF Protection** | Blocks internal IPs, localhost, and dangerous URI schemes |
| **Rate Limiting** | Sliding window: 60 reads/min, 20 writes/min |
| **Error Handling** | Passwords, tokens, paths, emails sanitized from errors |
| **Injection Prevention** | ICS content properly escaped, command injection tested |
| **ETag Normalization** | RFC 7232 compliant, strips quotes/W/ prefix/XML entities |
| **Content-Length Guard** | Early rejection of oversized responses before buffering |
| **Circuit Breaker** | Prevents cascading failures with automatic recovery |
| **Audit Logging** | CUD operations logged via MCP logging protocol (MCP08) |
| **ReDoS Protection** | All regex patterns tested for catastrophic backtracking |
| **Unicode Security** | Homoglyph, normalization, and encoding bypass protection |

### OWASP MCP Top 10 Coverage

| Risk | Mitigation | Tests |
|------|------------|-------|
| **MCP01: Token Mismanagement** | Credentials masked in logs/errors, secure storage | 14 |
| **MCP02: Privilege Escalation** | Fixed tool set, no dynamic registration | 5 |
| **MCP03: Tool Argument Injection** | Input validation, parameterized operations | 8 |
| **MCP04: Sensitive Data Exposure** | Error sanitization, credential masking | 10 |
| **MCP05: Command Injection** | Input treated as data, not executed | 3 |
| **MCP06: Prompt Injection** | Ma
applecaldavcaldav-calendarcaldav-connectoricloudicloud-calendarsicloud-syncmcpmcp-securitymcp-servermodel-context-protocol

What people ask about icloud-calendar-mcp

What is icloud-calendar-mcp/icloud-calendar-mcp?

+

icloud-calendar-mcp/icloud-calendar-mcp is mcp servers for the Claude AI ecosystem. iCloud Calendar MCP server. On MCP Registry, npm & PyPI. Kotlin/JVM, OWASP MCP Top 10 compliant. It has 10 GitHub stars and was last updated today.

How do I install icloud-calendar-mcp?

+

You can install icloud-calendar-mcp by cloning the repository (https://github.com/icloud-calendar-mcp/icloud-calendar-mcp) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is icloud-calendar-mcp/icloud-calendar-mcp safe to use?

+

Our security agent has analyzed icloud-calendar-mcp/icloud-calendar-mcp and assigned a Trust Score of 57/100 (tier: OK). See the full breakdown of passed checks and flags on this page.

Who maintains icloud-calendar-mcp/icloud-calendar-mcp?

+

icloud-calendar-mcp/icloud-calendar-mcp is maintained by icloud-calendar-mcp. The last recorded GitHub activity is from today, with 2 open issues.

Are there alternatives to icloud-calendar-mcp?

+

Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.

Deploy icloud-calendar-mcp to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: icloud-calendar-mcp/icloud-calendar-mcp
[![Featured on ClaudeWave](https://claudewave.com/api/badge/icloud-calendar-mcp-icloud-calendar-mcp)](https://claudewave.com/repo/icloud-calendar-mcp-icloud-calendar-mcp)
<a href="https://claudewave.com/repo/icloud-calendar-mcp-icloud-calendar-mcp"><img src="https://claudewave.com/api/badge/icloud-calendar-mcp-icloud-calendar-mcp" alt="Featured on ClaudeWave: icloud-calendar-mcp/icloud-calendar-mcp" width="320" height="64" /></a>

More MCP Servers

icloud-calendar-mcp alternatives