macOS Ecosystem MCP Server
The macOS Ecosystem MCP Server gives Claude native access to manage Apple's Reminders, Calendar, and Notes apps through 12 specialized tools.
Reminders (4 tools):
Create reminders with title, list, notes, due date, priority (none/low/medium/high), and flagged status
List reminders with optional filtering by list name and completion status
Mark reminders as completed by ID or title
Search reminders by keyword in title or notes, with optional list and completion filters
Calendar (5 tools):
Create events with title, start/end dates, location, notes, all-day flag, attendees, and alerts
List events within a date range, optionally filtered by calendar
Find available free time slots for a given date and required duration within working hours
Update existing events (title, dates, location, notes)
Delete events by ID or title with optional date filter
Notes (3 tools):
Create notes with title and body content (HTML formatting supported) in a specified folder
Append content to existing notes by ID or title
Search notes by keyword in title or body, with optional folder filtering
Built as a native Swift binary using EventKit for Reminders and Calendar, it avoids subprocess overhead and requires macOS 13+ with appropriate permissions granted for each app.
Enables secure, template-based access to Apple's native ecosystem apps on macOS, facilitating task management in Reminders, event coordination in Calendar, and content organization in Notes.
Provides semantic tools to interact with core macOS productivity applications, allowing users to manage Reminders, schedule Calendar events, find free time, and search or create entries in the Notes app.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@macOS Ecosystem MCP ServerAdd a reminder to review the budget proposal tomorrow at 9 AM"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
macOS Ecosystem MCP Server
A fast, native Model Context Protocol (MCP) server for Claude that provides direct access to macOS productivity apps: Reminders, Calendar, and Notes.
Why This Rewrite?
The original Node.js/TypeScript server shelled out to osascript for every tool call — adding 300–800 ms of process-startup overhead each time.
This Swift rewrite:
Uses EventKit natively for Reminders and Calendar (no subprocess)
Only shells out to
osascriptfor Notes (Notes.framework is private)Compiles to a single self-contained binary — no Node.js runtime required
Speaks the MCP stdio protocol directly via the official Swift SDK
Features
🗓️ Reminders (4 tools — EventKit)
reminders_add— Create reminders with title, notes, due date, priorityreminders_list— List reminders, filter by list and completion statusreminders_complete— Mark a reminder as completed (by ID or title)reminders_search— Search reminders by keyword
📅 Calendar (5 tools — EventKit)
calendar_create_event— Create events with location, notes, alertscalendar_list_events— List events within a date rangecalendar_find_free_time— Find available time slotscalendar_update_event— Modify existing eventscalendar_delete_event— Delete events
📝 Notes (3 tools — osascript)
notes_create— Create notes with title and body (HTML supported)notes_append— Append content to existing notesnotes_search— Search notes by keyword
Requirements
macOS 13 Ventura or later
Xcode 15+ / Swift 5.9+ (build only)
Reminders, Calendar, and Notes access granted in System Settings → Privacy & Security
Build from Source
git clone https://github.com/neverprepared/macos-ecosystem-mcp.git
cd macos-ecosystem-mcp
swift build -c releaseThe binary is placed at:
.build/release/macos-mcpInstall it system-wide:
sudo cp .build/release/macos-mcp /usr/local/bin/macos-mcpmacOS Permissions
The first time the binary runs it will request access. You can also grant it in advance:
System Settings → Privacy & Security → Reminders — add
macos-mcpSystem Settings → Privacy & Security → Calendars — add
macos-mcpSystem Settings → Privacy & Security → Automation → Notes — add
macos-mcp
Claude Desktop Configuration
Add this to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"macos-ecosystem": {
"command": "/usr/local/bin/macos-mcp"
}
}
}Or using the local build path:
{
"mcpServers": {
"macos-ecosystem": {
"command": "/path/to/macos-ecosystem-mcp/.build/release/macos-mcp"
}
}
}Restart Claude Desktop after editing the config.
Tool Reference
reminders_add
Parameter | Type | Required | Default | Description |
title | string | ✓ | — | Reminder title |
list | string | "Reminders" | List name | |
notes | string | — | Body text | |
dueDate | string | — | ISO 8601 date-time | |
priority | none|low|medium|high | "none" | Priority |
reminders_list
Parameter | Type | Required | Default | Description |
list | string | — | Filter by list | |
includeCompleted | boolean | false | Include completed | |
limit | integer | 50 | Max results (1–100) |
reminders_complete
Parameter | Type | Required | Description |
reminderId | string | (one of) | EventKit calendarItemIdentifier |
title | string | (one of) | Reminder title |
list | string | Narrow search to list |
reminders_search
Parameter | Type | Required | Default | Description |
query | string | ✓ | — | Search keyword |
list | string | — | Restrict to list | |
includeCompleted | boolean | false | Include completed | |
limit | integer | 20 | Max results |
calendar_create_event
Parameter | Type | Required | Default | Description |
title | string | ✓ | — | Event title |
startDate | string | ✓ | — | ISO 8601 start |
endDate | string | ✓ | — | ISO 8601 end |
calendar | string | system default | Calendar name | |
location | string | — | Location | |
notes | string | — | Description | |
allDay | boolean | false | All-day event | |
alerts | integer[] | — | Alert offsets in minutes |
calendar_list_events
Parameter | Type | Required | Default | Description |
startDate | string | ✓ | — | ISO 8601 range start |
endDate | string | ✓ | — | ISO 8601 range end |
calendar | string | — | Filter by calendar | |
limit | integer | 50 | Max results |
calendar_find_free_time
Parameter | Type | Required | Default | Description |
date | string | ✓ | — | ISO 8601 day to search |
duration | integer | ✓ | — | Required slot (15–480 min) |
workingHoursStart | integer | 9 | Start hour (0–23) | |
workingHoursEnd | integer | 17 | End hour (0–23) | |
calendar | string | — | Restrict to calendar |
calendar_update_event
Parameter | Type | Required | Description |
eventId | string | ✓ | EKEvent eventIdentifier |
title | string | New title | |
startDate | string | New ISO 8601 start | |
endDate | string | New ISO 8601 end | |
location | string | New location | |
notes | string | New description |
calendar_delete_event
Parameter | Type | Required | Description |
eventId | string | (one of) | EKEvent eventIdentifier |
title | string | (one of) | Event title |
date | string | ISO 8601 date to narrow search |
notes_create
Parameter | Type | Required | Default | Description |
title | string | ✓ | — | Note title |
body | string | ✓ | — | Note body |
folder | string | "Notes" | Folder name |
notes_append
Parameter | Type | Required | Description |
noteId | string | (one of) | AppleScript note ID |
title | string | (one of) | Note title |
folder | string | Narrow search | |
content | string | ✓ | Content to append |
notes_search
Parameter | Type | Required | Default | Description |
query | string | ✓ | — | Search keyword |
folder | string | — | Restrict to folder | |
limit | integer | 20 | Max results |
Architecture
Sources/macos-mcp/
├── App.swift # @main entry — MCP server setup and tool dispatcher
├── ToolDefinitions.swift # JSON Schema definitions for all 12 tools
├── EventKitManager.swift # Swift actor wrapping EKEventStore (reminders + calendar)
└── NotesHandler.swift # osascript runner for Notes operationsNotes on Flagged Reminders
EventKit does not expose the "flagged" status of reminders (it is a Reminders-app-specific attribute not in the EventKit API). The flagged parameter is accepted but silently ignored when creating reminders.
License
MIT
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/neverprepared/macos-ecosystem-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server