eventkit-rs
A Rust library and CLI for interacting with macOS Calendar events and Reminders via Apple's EventKit framework. Includes a built-in Model Context Protocol (MCP) server for AI assistant integration.
Features
- Calendar Events — Create, read, update, and delete calendar events with alarms, recurrence, attendees, and structured location
- Reminders — Full CRUD for reminders with priority, alarms, recurrence, tags, and URL support
- MCP Server — Built-in MCP server (
--mcp) with structured JSON output, input/output schemas, and 26 tools - Calendar Management — Create, update (name + color), and delete both reminder lists and event calendars
- Batch Operations — Batch delete, move, and update across reminders and events
- Location — Get current location via CoreLocation for geofenced reminders
- In-Process Transport — Embed as a library with
serve_on()for DuplexStream-based in-process MCP - CLI + Dump — Command-line tool with JSON dump for debugging raw EventKit objects
Requirements
- macOS 14+ (Sonoma)
- Rust 1.94+
Installation
As a CLI Tool
As a Library
[]
= "0.3"
Without MCP dependencies:
[]
= { = "0.3", = false, = ["events", "reminders"] }
Quick Start
Library Usage
use ;
In-Process MCP (no separate binary)
use duplex;
// One end for the MCP client, one for the server
let = duplex;
// Spawn the EventKit MCP server in-process
spawn;
// Connect your MCP client to client_stream...
CLI Usage
# MCP server (stdio transport)
# Reminders
# Calendar Events
# Dump objects as JSON (for debugging)
MCP Server
Tools (26)
All tools return structured JSON with typed output schemas. Responses use structured_content (MCP spec 2025-06-18) with text fallback for older clients.
| Tool | Description |
|---|---|
| Reminder Lists | |
list_reminder_lists |
List all reminder lists with color, source, permissions |
create_reminder_list |
Create a new reminder list |
update_reminder_list |
Update name and/or color (red, blue, green, purple, etc.) |
delete_reminder_list |
Delete a list and all its reminders |
| Reminders | |
list_reminders |
List reminders, filter by list and completion status |
create_reminder |
Create with inline alarms, recurrence, URL, tags, priority |
update_reminder |
Update any fields including alarms, recurrence, URL, tags |
get_reminder |
Get full detail (alarms, recurrence, tags inline) |
delete_reminder |
Delete a reminder |
complete_reminder |
Mark as completed |
uncomplete_reminder |
Mark as not completed |
| Event Calendars | |
list_calendars |
List all event calendars with color, source, permissions |
create_event_calendar |
Create a new calendar |
update_event_calendar |
Update name and/or color |
delete_event_calendar |
Delete a calendar and all its events |
| Events | |
list_events |
List events by date range, filter by calendar ID |
create_event |
Create with inline alarms, recurrence, URL |
update_event |
Update any fields including alarms, recurrence, URL |
get_event |
Get full detail (alarms, recurrence, attendees, organizer) |
delete_event |
Delete (with affect_future for recurring events) |
| Search & Location | |
search |
Search reminders and/or events by text (item_type optional) |
get_current_location |
Get lat/long via CoreLocation |
list_sources |
List accounts (iCloud, Local, Exchange) |
| Batch | |
batch_delete |
Delete multiple reminders or events at once |
batch_move |
Move multiple reminders between lists |
batch_update |
Update multiple items at once |
Prompts (4)
| Prompt | Description |
|---|---|
incomplete_reminders |
List all incomplete reminders (optionally by list) |
reminder_lists |
List all available reminder lists |
move_reminder |
Move a reminder to a different list |
create_detailed_reminder |
Create a reminder with notes, priority, and due date |
Configuration
Add to your MCP client config (e.g. Claude Desktop):
Privacy Permissions
Add to your Info.plist:
NSRemindersFullAccessUsageDescription
This app needs access to your reminders.
NSCalendarsFullAccessUsageDescription
This app needs access to your calendar.
NSLocationWhenInUseUsageDescription
This app needs your location for location-based reminders.
Feature Flags
| Feature | Default | Description |
|---|---|---|
events |
Yes | Calendar event support |
reminders |
Yes | Reminders support |
location |
Yes | CoreLocation for geofenced reminders |
mcp |
Yes | MCP server, structured JSON output, dump command |
Development
# Run all checks (same as CI)
# Auto-fix formatting + clippy
# Build universal binary (arm64 + x86_64)
License
Apache 2.0 — see LICENSE.