An MCP server for interacting with Apple Reminders on macOS
English | įŽäŊ䏿
A Model Context Protocol (MCP) server that provides native integration with Apple Reminders on macOS. This server allows you to interact with Apple Reminders through a standardized interface.
Install globally via npm:
npm install -g mcp-server-apple-reminders
{
"mcpServers": {
"apple-reminders": {
"command": "mcp-server-apple-reminders",
"args": []
}
}
}
stdio
apple-reminders
mcp-server-apple-reminders
You need to configure Claude Desktop to recognize the Apple Reminders MCP server. There are two ways to access the configuration:
claude_desktop_config.json
For macOS:
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
For Windows:
code %APPDATA%\Claude\claude_desktop_config.json
Add the following configuration to your claude_desktop_config.json
:
{
"mcpServers": {
"apple-reminders": {
"command": "mcp-server-apple-reminders",
"args": []
}
}
}
For the changes to take effect:
Once configured, you can ask Claude to interact with your Apple Reminders. Here are some example prompts:
Create a reminder to "Buy groceries" for tomorrow at 5 PM.
Add a reminder to "Call mom" with a note "Ask about weekend plans".
Create a reminder in my "Work" list to "Submit report" due next Friday.
Update the reminder "Buy groceries" with a new title "Buy organic groceries".
Update "Call mom" reminder to be due today at 6 PM.
Update the reminder "Submit report" and mark it as completed.
Change the notes on "Buy groceries" to "Don't forget milk and eggs".
Show me all my reminders.
List all reminders in my "Shopping" list.
Show my completed reminders.
Show all my reminder lists.
Show reminders from my "Work" list.
The server will:
This server provides the following MCP services for interacting with Apple Reminders:
create_reminder(title: string, dueDate?: string, list?: string, note?: string, url?: string)
Creates a new reminder with the specified title and optional parameters:
title
: Title of the reminder (required)dueDate
: Optional due date in format 'YYYY-MM-DD HH:mm:ss' (e.g., '2025-03-12 10:00:00')list
: Optional name of the reminders list to add tonote
: Optional note text to attach to the reminderurl
: Optional URL to attach to the reminderExample response:
{
"content": [
{
"type": "text",
"text": "Successfully created reminder: Buy groceries with notes"
}
],
"isError": false
}
update_reminder(title: string, newTitle?: string, dueDate?: string, note?: string, completed?: boolean, list?: string, url?: string)
Updates an existing reminder by title. Note: If multiple reminders have the same title, only the first one found will be updated.
title
: Current title of the reminder to update (required)newTitle
: New title for the reminder (optional)dueDate
: New due date in format 'YYYY-MM-DD HH:mm:ss' (optional)note
: New note text (optional)completed
: Mark reminder as completed/uncompleted (optional)list
: Name of the list containing the reminder (recommended for accuracy)url
: New URL to attach to the reminder (optional)Example response:
{
"content": [
{
"type": "text",
"text": "Successfully updated reminder \"Buy groceries\": title to \"Buy organic groceries\", notes"
}
],
"isError": false
}
list_reminders(list?: string, showCompleted?: boolean, search?: string, dueWithin?: string)
Lists all reminders or reminders from a specific list:
list
: Optional name of the reminders list to showshowCompleted
: Whether to show completed reminders (default: false)search
: Search for reminders containing this text in title or notesdueWithin
: Filter by due date range ("today", "tomorrow", "this-week", "overdue", "no-date")Example response:
{
"reminders": [
{
"title": "Buy groceries",
"list": "Shopping",
"isCompleted": false,
"dueDate": "2024-03-25 18:00:00",
"notes": "Don't forget milk"
}
],
"total": 1,
"filter": {
"list": "Shopping",
"showCompleted": false
}
}
delete_reminder(title: string, list?: string)
Deletes a reminder by title:
title
: Title of the reminder to delete (required)list
: Optional name of the list containing the reminder (recommended for accuracy)Example response:
{
"content": [
{
"type": "text",
"text": "Successfully deleted reminder: Buy groceries"
}
],
"isError": false
}
move_reminder(title: string, fromList?: string, toList: string)
Moves a reminder between lists:
title
: Title of the reminder to move (required)fromList
: Optional name of the source listtoList
: Name of the destination list (required)Example response:
{
"content": [
{
"type": "text",
"text": "Successfully moved reminder 'Buy groceries' to list 'Shopping'"
}
],
"isError": false
}
list_reminder_lists()
Returns a list of all available reminder lists.
Example response:
{
"lists": [
{
"id": 1,
"title": "Shopping"
},
{
"id": 2,
"title": "Work"
}
],
"total": 2
}
MIT
Contributions welcome! Please read the contributing guidelines first.
npm install
npm run build
.
âââ src/ # Source code directory
â âââ index.ts # Main entry point
â âââ server/ # MCP server implementation
â âââ swift/ # Native Swift integration code
â â âââ bin/ # Compiled Swift binaries
â â âââ src/ # Swift source files
â âââ tools/ # CLI tools and utilities
â âââ types/ # TypeScript type definitions
â âââ utils/ # Helper functions and utilities
âââ dist/ # Compiled JavaScript output
âââ node_modules/ # Node.js dependencies
âââ tests/ # Test files and test utilities
npm run build
- Build TypeScript code and Swift binary (REQUIRED before starting server)npm run dev
- TypeScript watch modenpm test
- Run test suitenpm start
- Start MCP servernpm run clean
- Clean build artifacts