apple-reminders-mcp-server
A Model Context Protocol server providing comprehensive integration with Apple Reminders, enabling CRUD operations, natural language date parsing, advanced search, and list management.
README
Apple Reminders MCP Server
A Model Context Protocol (MCP) server that provides comprehensive integration with Apple Reminders. Built for use with Claude Desktop, Claude Code, and Claude.ai.
Features
- ā 18 Comprehensive Tools - Full CRUD operations for reminders and lists
- š£ļø Natural Language Dates - Use "tomorrow at 3pm", "next Monday", "in 3 days"
- š Advanced Search - Filter by completion, priority, flags, text, and more
- š Statistics & Insights - Get overdue reminders, today's tasks, and analytics
- šØ List Customization - Set colors and emblems for reminder lists
- š Dual Transport - Works with both stdio (local) and HTTP (remote) connections
- ā” Real-time - Direct integration with your macOS Reminders app
Installation
Prerequisites
- macOS (Apple Reminders is macOS-only)
- Node.js 18.0.0 or higher
- npm or yarn
Quick Install
# Clone the repository
git clone https://github.com/yourusername/apple-reminders-mcp-server
cd apple-reminders-mcp-server
# Install dependencies
npm install
# Start the server
npm start
The server will start on http://localhost:3001 by default.
Configuration
For Claude Desktop/Code (stdio mode)
Add to your Claude Desktop or Claude Code configuration file:
Location: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"apple-reminders": {
"command": "npx",
"args": ["tsx", "/Users/yourusername/Projects/mcp/apple-reminders-mcp-server/src/index.ts"],
"env": {
"TRANSPORT": "stdio"
}
}
}
}
For Claude.ai (HTTP mode)
-
Start the server:
npm start -
In Claude.ai settings, add a new MCP connector:
- URL:
http://localhost:3001/mcp - The server includes a health check at
http://localhost:3001/health
- URL:
Available Tools
Reminder Operations
| Tool | Description |
|---|---|
apple_reminders_create |
Create a new reminder with natural language dates |
apple_reminders_get |
Get reminder details by ID |
apple_reminders_update |
Update reminder properties |
apple_reminders_delete |
Delete a reminder |
apple_reminders_complete |
Mark reminder as complete/incomplete |
apple_reminders_move |
Move reminder to a different list |
Search & Query
| Tool | Description |
|---|---|
apple_reminders_list |
List reminders with filters (completion, priority, etc.) |
apple_reminders_search |
Search reminders by text |
apple_reminders_overdue |
Get all overdue reminders |
apple_reminders_today |
Get reminders due today |
List Management
| Tool | Description |
|---|---|
apple_reminders_list_lists |
Get all reminder lists |
apple_reminders_get_list |
Get specific list details |
apple_reminders_create_list |
Create a new list with color/emblem |
apple_reminders_update_list |
Update list properties |
apple_reminders_delete_list |
Delete a list |
Utility
| Tool | Description |
|---|---|
apple_reminders_accounts |
List all accounts (typically iCloud) |
apple_reminders_stats |
Get statistics and analytics |
apple_reminders_show |
Open a reminder in the Reminders app |
Usage Examples
Creating Reminders
// Simple reminder
{
"name": "Call mom"
}
// With natural language due date
{
"name": "Submit report",
"dueDate": "tomorrow at 5pm",
"priority": "high",
"listName": "Work"
}
// With all details
{
"name": "Doctor appointment",
"body": "Annual checkup at Main Street clinic",
"dueDate": "next Monday at 2pm",
"remindMeDate": "Monday at 1:30pm",
"priority": "high",
"flagged": true,
"listName": "Personal"
}
Searching Reminders
// Find all incomplete tasks
{
"completed": false
}
// Search for specific text
{
"query": "meeting",
"listName": "Work"
}
// Filter by priority
{
"priority": 1, // High priority
"flagged": true
}
Managing Lists
// Create a new list with styling
{
"name": "Q1 Goals",
"color": "#30D33B",
"emblem": "education1"
}
Natural Language Date Examples
The server supports natural language date parsing via chrono-node:
- "tomorrow" ā Tomorrow at 00:00
- "tomorrow at 3pm" ā Tomorrow at 15:00
- "next Monday" ā Next Monday at 00:00
- "in 3 days" ā 3 days from now
- "January 15" ā January 15 of current/next year
- "2025-01-15" ā ISO date format also supported
Known Limitations
Due to AppleScript API limitations, the following features are not supported:
- ā Subtasks - Nested/indented reminders are not accessible via AppleScript
- ā Tags - Hashtags/tags are not accessible via AppleScript
- ā Attachments - Images and file attachments are not accessible
- ā Nested Lists - All lists are flat (no folders)
Development
Running in Development Mode
npm run dev
Watch Mode (auto-reload on changes)
npm run watch
Environment Variables
TRANSPORT- Set tostdioorhttp(default:http)PORT- HTTP server port (default:3001)DEBUG- Enable debug loggingVERBOSE- Enable verbose logging
Technical Details
Architecture
- Language: TypeScript (run via tsx)
- MCP SDK: @modelcontextprotocol/sdk v1.0.0
- Date Parsing: chrono-node v2.7.0
- Validation: Zod v3.25.0
- HTTP Server: Express v4.18.2
Why tsx instead of compiled JavaScript?
This project uses tsx to run TypeScript directly rather than pre-compiling to JavaScript. This approach:
- Avoids memory issues with complex Zod schema types during TypeScript compilation
- Provides faster development iteration
- Maintains full TypeScript type safety
- Simplifies the build process
File Structure
apple-reminders-mcp-server/
āāā src/
ā āāā index.ts # Server entry point
ā āāā types.ts # TypeScript interfaces
ā āāā services/
ā ā āāā applescript.ts # AppleScript execution
ā ā āāā dateUtils.ts # Date parsing utilities
ā ā āāā reminders.ts # Reminders business logic
ā āāā schemas/
ā ā āāā index.ts # Zod validation schemas
ā āāā tools/
ā āāā index.ts # MCP tool registrations
āāā package.json
āāā tsconfig.json
āāā README.md
Troubleshooting
Server won't start
- Ensure Node.js 18+ is installed:
node --version - Check if port 3001 is available:
lsof -i :3001 - Verify dependencies are installed:
npm install
Reminders app not responding
- Ensure Reminders app has necessary permissions in System Settings > Privacy & Security
- Try manually opening Reminders app first
- Check Console.app for AppleScript errors
Natural language dates not working
- Ensure
chrono-nodeis installed:npm list chrono-node - Check the date format - some complex natural language may not parse
- Fall back to ISO format if needed:
"2025-01-15T15:00:00"
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT
Author
Matthew Grimes
Acknowledgments
- Built on the Model Context Protocol
- Inspired by the Apple Mail MCP Server
- Uses chrono-node for natural language date parsing
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.