loading…
Search for a command to run...
loading…
Provides secure access to macOS Reminders, Calendar, and Notes using semantic tools and validated AppleScript templates. It enables users to manage schedules, t
Provides secure access to macOS Reminders, Calendar, and Notes using semantic tools and validated AppleScript templates. It enables users to manage schedules, tasks, and notes through natural language while ensuring multi-layer security validation.
A fast, native Model Context Protocol (MCP) server for Claude that provides direct access to macOS productivity apps: Reminders, Calendar, and Notes.
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:
osascript for Notes (Notes.framework is private)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 keywordcalendar_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 eventsnotes_create — Create notes with title and body (HTML supported)notes_append — Append content to existing notesnotes_search — Search notes by keywordgit clone https://github.com/neverprepared/macos-ecosystem-mcp.git
cd macos-ecosystem-mcp
swift build -c release
The binary is placed at:
.build/release/macos-mcp
Install it system-wide:
sudo cp .build/release/macos-mcp /usr/local/bin/macos-mcp
The first time the binary runs it will request access. You can also grant it in advance:
macos-mcpmacos-mcpmacos-mcpAdd 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.
| 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 |
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| list | string | — | Filter by list | |
| includeCompleted | boolean | false | Include completed | |
| limit | integer | 50 | Max results (1–100) |
| Parameter | Type | Required | Description |
|---|---|---|---|
| reminderId | string | (one of) | EventKit calendarItemIdentifier |
| title | string | (one of) | Reminder title |
| list | string | Narrow search to list |
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| query | string | ✓ | — | Search keyword |
| list | string | — | Restrict to list | |
| includeCompleted | boolean | false | Include completed | |
| limit | integer | 20 | Max results |
| 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 |
| 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 |
| 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 |
| 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 |
| Parameter | Type | Required | Description |
|---|---|---|---|
| eventId | string | (one of) | EKEvent eventIdentifier |
| title | string | (one of) | Event title |
| date | string | ISO 8601 date to narrow search |
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| title | string | ✓ | — | Note title |
| body | string | ✓ | — | Note body |
| folder | string | "Notes" | Folder name |
| 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 |
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| query | string | ✓ | — | Search keyword |
| folder | string | — | Restrict to folder | |
| limit | integer | 20 | Max results |
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 operations
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.
MIT
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"macos-ecosystem-mcp-server": {
"command": "npx",
"args": []
}
}
}