loading…
Search for a command to run...
loading…
Provides Claude with full access to Apple Calendar on macOS for event management, smart scheduling, and schedule analytics. It enables natural language event cr
Provides Claude with full access to Apple Calendar on macOS for event management, smart scheduling, and schedule analytics. It enables natural language event creation, conflict detection, and template-based scheduling through AppleScript integration.
macOS Only Node.js 20+ License: MIT
Note: This MCP server requires macOS with Apple Calendar.
A Model Context Protocol (MCP) server that provides Claude with full access to Apple Calendar for smart scheduling, calendar management, and time management assistance.
Apple's Calendar.app is fine for looking at your schedule. It's garbage for adding events. "Create an event Team Meeting tomorrow at 2pm in the Work calendar" — you can't do that without clicking 6 times. Natural language scheduling doesn't exist in Apple's UI.
I wanted my agent to handle scheduling like it handles everything else: via tool calls. "Lunch with Sarah at 1pm" → calendar entry. "Find free time tomorrow for a 1-hour meeting" → time slot suggestions. "Am I free Friday at 3pm?" → yes/no with conflict details.
This is an MCP server because Claude Code should be able to schedule things the same way it edits code or runs tests — as a tool call, not a manual GUI interaction.
These are the battles I'm actively fighting:
AppleScript is the only interface — Calendar.app has no public API. Everything goes through osascript which is brittle, slow, and has no error handling. If Calendar.app is in a weird state (syncing, locked, backgrounded), AppleScript hangs or returns garbage.
macOS-only — This inherently locks out my Linux desktop. I can't run this on my main machine. It only works on the MacBook at work. For an agent ecosystem that should run everywhere, this is a limitation I haven't solved.
Permission dialogs are user-hostile — "Allow Terminal to control Calendar?" — macOS shows this dialog once, and if the user clicks "Don't Allow" by accident, the server fails silently forever. Resetting permissions requires deep System Preferences navigation.
No recurring events — The server can create one-off events but not recurring ones ("every Monday at 9am"). AppleScript supports RRULE but the MCP server doesn't expose it yet. This is the most requested missing feature.
Date parsing edge cases — chrono-node handles 95% of natural language dates but fails on ambiguous cases ("next week" when it's Sunday, "this weekend" on a Saturday). I have fallback logic but it's heuristic.
No sync status awareness — Calendar.app might be syncing with iCloud when you create an event. The AppleScript returns success but the event doesn't appear for 30 seconds. The server has no way to know if the event actually landed.
Clone/Install the server:
cd ~/mcp-servers/calendar
npm install
npm run build
Grant Calendar Access:
Configure Claude Code:
The server is already configured in:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"apple-calendar": {
"command": "node",
"args": [
"/path/to/apple-calendar-mcp/dist/index.js"
]
}
}
}
Restart Claude Code:
The server will auto-start when Claude Code launches.
"List my calendars"
"Create a calendar called Work"
"Rename the Work calendar to Office"
"Delete the Test calendar"
"Create an event 'Team Meeting' tomorrow at 2pm in the life calendar"
"Schedule 'Dentist Appointment' next Tuesday at 10am with 1 hour duration"
"Add 'Coffee with Sarah' at 3pm today at Starbucks"
The server understands:
"Find free time tomorrow for a 1 hour meeting"
"Check if I'm free Friday at 3pm"
"Suggest the best time for a meeting next week, I prefer mornings"
"Find free time during business hours only"
"Search for 'dentist' events this month"
"Find all events with 'meeting' in the title from last week"
"Search for events at 'Starbucks' this year"
"Create a template called 'standup' with 15 minute duration"
"Schedule a standup meeting from template tomorrow at 9am"
"List all my templates"
"Analyze my schedule for this week"
"Show insights for next week"
"How busy am I this month?"
~/mcp-servers/calendar/
├── src/
│ ├── index.ts # Entry point
│ ├── server.ts # MCP server with all tools
│ ├── applescript/
│ │ ├── bridge.ts # AppleScript execution wrapper
│ │ ├── calendar-ops.ts # Calendar CRUD operations
│ │ └── event-ops.ts # Event CRUD operations
│ ├── utils/
│ │ ├── date-parser.ts # Natural language date parsing (chrono-node)
│ │ └── conflict-detector.ts # Conflict detection & free time finding
│ └── storage/
│ └── database.ts # SQLite for templates & history
├── storage/
│ └── calendar.db # SQLite database (auto-created)
└── dist/ # Compiled JavaScript
chrono-node for parsing natural language datesosascript calls for reliable Calendar accessDefault settings (stored in SQLite):
default_calendar: "life"default_event_duration: 1 hour (3600000 ms)business_hours_start: 9 (9am)business_hours_end: 17 (5pm)npm run build
npm run dev
npx @modelcontextprotocol/inspector npx tsx src/index.ts
Solution: Grant automation permissions in System Preferences > Security & Privacy > Privacy > Automation
~/Library/Logs/Claude/npm run buildnpx tsx src/index.tsPotential features for v2:
MIT
Built by Null-Phnix
Выполни в терминале:
claude mcp add apple-calendar-mcp-server -- npx CSA PROJECT - FZCO © 2026 IFZA Business Park, DDP, Premises Number 31174 - 001
Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.