org.onekash/icloud-calendar-mcp
MCP server for iCloud (Apple) Calendar access via CalDAV
★ 4NOASSERTIONcloud
Install
Config snippet generator goes here (5 client tabs)
README
# iCloud Calendar MCP Server
[](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)
A **security-first** MCP (Model Context Protocol) server that provides AI assistants with secure access to iCloud Calendar via CalDAV. Built with comprehensive 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** - 239 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-1.0.0-all.jar
# Run
java -jar icloud-calendar-mcp-1.0.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-1.0.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-1.0.0-all.jar"],
"env": {
"ICLOUD_USERNAME": "your-apple-id@icloud.com",
"ICLOUD_PASSWORD": "your-a