Apple Calendar
About
A lightweight MCP server for your Apple Calendar.
Details
- License
- MIT
Explore
- macOS 14+ (uses the modern requestFullAccessTo... permission APIs, with
- Python 3.10+, managed via uv
- Relative days: today, tomorrow, mon..sun / full weekday names
- Explicit dates: YYYY-MM-DD
- Times: 3pm, 3:30pm, 15:00 (optionally preceded by at)
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Apple CalendarCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
- macOS 14+ (uses the modern requestFullAccessTo... permission APIs, with
a fallback to the legacy API on older macOS)
- Python 3.10+, managed via uv
Add to ~/Library/Application Support/Claude/claude_desktop_config.json
(this repo's setup already did this on this machine - see below). The
mcpServers key becomes the connector name shown in Claude Desktop:
{
"mcpServers": {
"apple-calendar": {
"command": "uv",
"args": [
"--directory", "/absolute/path/to/apple-calendar-mcp",
"run", "python", "-m", "apple_calendar_mcp.server"
]
}
}
}
Restart Claude Desktop (or use server_restart, see below) after editing.
agenda_today
Human-readable agenda for today (events + reminders due)
| Tool | Description |
|---|---|
| agenda_today | Human-readable agenda for today (events + reminders due) |
| agenda_range(start_date, end_date) | Same, over a date range |
| quick_event(text) | Create an event from a short natural-language line |
| reschedule_event(event_id, new_start) | Move an event, keeping its duration |
| find_free_slots(date, working_hours, min_duration_minutes) | Free gaps within working hours (all-day events ignored) |
quick_event uses a small heuristic parser (no external NLP dependency, by
design - this project only depends on mcp[cli] and pyobjc). It recognizes:
- Relative days: today, tomorrow, mon..sun / full weekday names
- Explicit dates: YYYY-MM-DD
- Times: 3pm, 3:30pm, 15:00 (optionally preceded by at)
- Duration: for 30 minutes, for 2 hours
- Trailing #hashtags -> tags
Defaults: 1 hour duration; if no time is found, 09:00 (or 08:00/12:00/19:00
if the leftover title mentions breakfast/lunch/dinner). Anything not
matched by these patterns stays in the title. It's best-effort - review the
returned event before relying on it for anything time-sensitive.
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"apple calendar": {
"apple-calendar-mcp": {
"command": "uv",
"args": [
"sync"
]
}
}
}
}
McpServers
{
"apple-calendar-mcp": {
"command": "uv",
"args": [
"sync"
]
}
}
Calendar
| Tool | Description |
|---|---|
| calendar_list_calendars | List all calendars |
| calendar_list_events | List events in a date range |
| calendar_get_event | Get one event by id |
| calendar_search_events | Text search over title/location/notes, optional tag filter |
| calendar_create_event | Create an event (location, notes, url, tags) |
| calendar_edit_event | Edit an event (incl. moving categories via calendar_name); span required for recurring events |
| calendar_delete_event | Delete an event; span required for recurring events |
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



