iCloud Calendar MCP server. On MCP Registry, npm & PyPI. Kotlin/JVM, OWASP MCP Top 10 compliant.
- ✓Recently active
- ✓Clear description
- ✓Topics declared
- !No standard license detected
claude mcp add icloud-calendar-mcp -- npx -y @icloud-calendar-mcp/server{
"mcpServers": {
"icloud-calendar-mcp": {
"command": "npx",
"args": ["-y", "@icloud-calendar-mcp/server"],
"env": {
"ICLOUD_USERNAME": "<icloud_username>",
"ICLOUD_PASSWORD": "<icloud_password>"
}
}
}
}ICLOUD_USERNAMEICLOUD_PASSWORDResumen de MCP Servers
<p align="center">
<img src="images/logo.png" alt="iCloud Calendar MCP Server" width="200"/>
</p>
<h1 align="center">iCloud Calendar MCP Server</h1>
[](https://github.com/icloud-calendar-mcp/icloud-calendar-mcp/actions/workflows/test.yml)
[](https://www.npmjs.com/package/@icloud-calendar-mcp/server)
[](https://pypi.org/project/icloud-calendar-mcp/)
[](LICENSE)
[](https://registry.modelcontextprotocol.io/?search=org.onekash)
[](#testing)
[](#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** | MaLo que la gente pregunta sobre icloud-calendar-mcp
¿Qué es icloud-calendar-mcp/icloud-calendar-mcp?
+
icloud-calendar-mcp/icloud-calendar-mcp es mcp servers para el ecosistema de Claude AI. iCloud Calendar MCP server. On MCP Registry, npm & PyPI. Kotlin/JVM, OWASP MCP Top 10 compliant. Tiene 10 estrellas en GitHub y se actualizó por última vez today.
¿Cómo se instala icloud-calendar-mcp?
+
Puedes instalar icloud-calendar-mcp clonando el repositorio (https://github.com/icloud-calendar-mcp/icloud-calendar-mcp) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar icloud-calendar-mcp/icloud-calendar-mcp?
+
Nuestro agente de seguridad ha analizado icloud-calendar-mcp/icloud-calendar-mcp y le ha asignado un Trust Score de 57/100 (tier: OK). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene icloud-calendar-mcp/icloud-calendar-mcp?
+
icloud-calendar-mcp/icloud-calendar-mcp es mantenido por icloud-calendar-mcp. La última actividad registrada en GitHub es de today, con 2 issues abiertos.
¿Hay alternativas a icloud-calendar-mcp?
+
Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.
Despliega icloud-calendar-mcp en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](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>Más MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface