苹果提醒与日历 MCP 服务器

一个通过 Model Context Protocol 将 Apple 提醒事项与日历集成到 Claude 的服务器,支持直接在对话中管理任务和日程安排。

  • by farmerajf
  • Swift
  • 混合部署
  • 13 星标
  • 更新于
在 GitHub 查看 farmerajf/apple-reminders-mcp

使用说明

Apple Reminders & Calendar MCP Server

A Model Context Protocol (MCP) server that integrates Apple Reminders and Apple Calendar with Claude, enabling task management and calendar scheduling directly through conversations.

Built entirely in Swift using EventKit for native, fast, and reliable access.

Features

Reminders / Task Management:

  • Create, update, complete, and delete reminders across multiple lists
  • Move existing reminders between lists with move_reminder, preserving their properties
  • Daily planning with list_today_reminders (due today + overdue)
  • Priority levels (0=none, 1-4=high, 5=medium, 6-9=low)

Calendar Events:

  • Create, update, and delete calendar events
  • View today's schedule with list_today_events
  • Query events by date range with list_events
  • Support for location, URL (video call links), and all-day events

Transport:

  • Stdio for local use (Claude Desktop)
  • Streamable HTTP for remote access (Claude Web, iOS, etc.)
  • OAuth bearer-token authentication for HTTP mode

Prerequisites

  • macOS 14.0 (Sonoma) or later
  • Swift 5.9 or later
  • Claude Desktop app (for stdio mode) or any MCP client (for HTTP mode)

Installation

  1. Clone this repository
  2. Build the Swift package:
swift build -c release
  1. The executable will be built at .build/release/apple-events-mcp

Transport Modes

Stdio (default)

For local use with Claude Desktop. No configuration file needed.

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "apple-events": {
      "command": "/absolute/path/to/apple-events-mcp/.build/release/apple-events-mcp"
    }
  }
}

Streamable HTTP

For remote access from Claude Web, Claude iOS, or other MCP clients.

  1. Create a config.json in the working directory:
{
  "port": 3031,
  "password": "your-server-password"
}

Generate a secure server password:

openssl rand -hex 32
  1. Start the server:
.build/release/apple-events-mcp --http
  1. The MCP endpoint will be available at:
POST http://localhost:3031/
POST http://localhost:3031/mcp
  1. Health check (no auth required):
GET http://localhost:3031/health

Both MCP routes use the same OAuth bearer-token authentication and tool handler. The /mcp route remains available for existing Claude connections. For the hosted ChatGPT connection, use https://apple-events-mcp.adamfarmer.dev/ with OAuth. Enter the server password on its authorization page; do not put passwords or tokens in the URL. Use HTTPS for remote access.

Permissions

The first time you run this, macOS will prompt you to grant access to both Reminders and Calendar. Click "Allow" for each.

License

MIT

Moving reminders

Call list_reminder_lists to get destination names and IDs, then call move_reminder with reminder_id and exactly one of list_id or list_name. Use list_id when names are duplicated. Missing, ambiguous, or read-only destinations return an error. Moving to the current list succeeds without a save. The result includes reminder_id, list_id, and list_name; use the returned reminder ID for subsequent calls because EventKit identifiers can change on moves.

{"name":"move_reminder","arguments":{"reminder_id":"REMINDER_ID","list_id":"DESTINATION_LIST_ID"}}

Run the live integration test with python3 test-move-reminder.py after building. It creates a temporary reminder, checks moves and field preservation, and deletes its test reminder. To test the running local HTTP service using its existing credentials, run python3 test-move-reminder.py --http-repo /path/to/apple-events-mcp.

Rebuilding this unsigned command-line server may require approving Reminders and Calendar access again. Allow both macOS prompts; the server requests them in that order during startup.