Apple Reminders MCP Server
Enables comprehensive management of Apple Reminders with full CRUD operations, recurring reminders, location-based triggers, multiple alarms, search functionality, and date-based queries through native EventKit integration on macOS.
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., "@Apple Reminders MCP Servercreate a reminder to buy groceries when I leave work"
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.
Apple Reminders MCP Server v0.2.0
A comprehensive Model Context Protocol (MCP) server for Apple Reminders on macOS, enabling AI assistants like Claude and Cursor AI to manage reminders using natural language.
π What's New in v0.2.0
β Full CRUD operations (create, read, update, delete)
β Recurring reminders (daily, weekly, monthly, yearly patterns)
β Location-based reminders (geofence triggers for arriving/leaving)
β Multiple alarms per reminder (absolute & relative)
β Search functionality (text search in title and notes)
β Date-based queries (today, overdue, completed)
β 12 MCP tools (up from 3 in v0.1.0)
Related MCP server: Reminders MCP Server
Features
β¨ Comprehensive Integration
Full CRUD on reminders (create, read, update, delete, complete)
Search and filter reminders
Date-based queries (today, overdue, completed)
~70% feature coverage of Apple Reminders
π Powered by EventKit + Swift
Native EventKit integration for best performance
β Recurring reminders (daily, weekly, monthly, custom)
β Location-based reminders (arrive/depart triggers)
β Multiple alarms per reminder
β Tag workarounds (encoded in notes)
π Privacy First
All operations happen locally on your Mac
No cloud services or external APIs
Respects macOS permission system
Prerequisites
macOS 13.0+ (Ventura or later)
Node.js 18+
Swift 5.9+ (Xcode Command Line Tools)
Quick Start
1. Install & Build
# Clone or download this repository
cd apple-reminders-mcp-server
# Run setup (installs dependencies and builds everything)
npm run setup2. Request Permissions
./swift-cli/.build/release/reminders-cli request-accessGrant permission in System Settings > Privacy & Security > Reminders.
3. Configure Your AI Assistant
For Claude Desktop
Edit ~/.config/claude/claude_desktop_config.json:
{
"mcpServers": {
"apple-reminders": {
"command": "node",
"args": ["/absolute/path/to/apple-reminders-mcp-server/dist/index.js"]
}
}
}For Cursor AI
Edit your Cursor MCP settings to add this server with the same configuration.
4. Restart Your AI Assistant
Restart Claude Desktop or Cursor to load the MCP server.
Available Tools (12 Total)
Reminder Management (6 tools)
create_reminder- Create reminders with comprehensive attributesBasic: title, notes, due date, priority, tags, URL
Advanced: recurring patterns, location triggers, multiple alarms
update_reminder- Update existing remindersdelete_reminder- Permanently delete reminderscomplete_reminder- Mark reminder as completeuncomplete_reminder- Mark reminder as incompleteget_reminders- List all reminders (filter by completion)
List Management (1 tool)
get_all_lists- Get all reminder lists
Search & Query (5 tools)
search_reminders- Search by text in title/notesget_todays_reminders- Get reminders due todayget_overdue_reminders- Get past-due remindersget_completed_reminders- Get completed reminders (optional date range)
Usage Examples
Basic Reminders
"Create a reminder to buy milk"
"Show me all my reminders"
"Mark the milk reminder as complete"
"Delete the milk reminder"Recurring Reminders
"Create a weekly reminder for team meeting every Monday at 10am"
"Set up a daily reminder to take medication at 8am"
"Create a monthly reminder on the 1st to pay rent"Location-Based Reminders
"Remind me to buy groceries when I arrive at the supermarket"
"Create a reminder to call mom when I leave work"Search & Filters
"Search for reminders about meetings"
"Show me today's reminders"
"What reminders are overdue?"
"Show me completed reminders from last week"Advanced Features
""Create an URGENT reminder with priority 1 to call the client"
"Create a high-priority reminder with tags #work #urgent""
"Set up a reminder with multiple alarms - 1 day before and 1 hour before"
"Create a reminder that repeats every other week"Architecture
AI Assistant (Claude/Cursor)
β MCP Protocol (stdio)
TypeScript MCP Server (Node.js)
β child_process + JSON
Swift CLI Binary (EventKit)
β EventKit Framework
Apple Reminders.appWhy EventKit + Swift?
This project uses Apple's EventKit framework via a Swift CLI, rather than the simpler JXA (JavaScript for Automation) approach. Here's why:
JXA Limitations (POC tested and documented):
β No support for recurring reminders (daily, weekly, monthly patterns)
β No support for location-based reminders (geofencing)
β No access to tags (would require text workarounds)
β No support for subtasks (not exposed in API)
β Multiple alarms not accessible
β JXA is essentially abandoned by Apple (no updates since 2014)
EventKit Advantages:
β Full access to 70%+ of Reminders features via official Apple API
β Native support for recurring reminders with complex rules
β Native support for location triggers (arrive/depart)
β Native support for multiple alarms per reminder
β Actively maintained by Apple with new macOS releases
β Better performance and reliability
Trade-off: EventKit requires Swift compilation, but the benefits far outweigh the minimal additional setup complexity. The Swift CLI is built once during installation and provides access to nearly all Reminders features that are publicly available.
Feature Coverage (~70%)
β Fully Supported
Core Operations: Create, read, update, delete, complete
Recurring Reminders: Daily, weekly, monthly, yearly with custom rules
Location Reminders: Geofence triggers (arriving/leaving)
Multiple Alarms: Absolute (specific time) and relative (before due date)
Search: Text search in title and notes
Date Queries: Today, overdue, completed with date ranges
Lists: Get all lists, specify list for reminders
Priority: 0=none, 1=urgent (!!!), 5=medium, 9=low
Flagged Status: Mark reminders as important (flag icon)
Notes & URLs: Rich text notes, associated URLs
β οΈ Workarounds
Tags: Encoded as
[#tag]in notes field (searchable)Subtasks: Use structured notes or linked reminders
β οΈ API Limitations (Not Yet Available in EventKit)
Urgent Alarms (macOS 26.2+): The new "Urgent" alarm feature is NOT exposed in EventKit API
Workaround: Use
priority: 1+flagged: true+ regular alarmsSee
URGENT_FEATURE_STATUS.mdfor details
Apple has not announced when/if EventKit will support this feature
β Not Supported (Private Apple APIs)
Native tags feature
Subtasks feature
Smart lists
Development
Project Structure
apple-reminders-mcp-server/
βββ swift-cli/ # Swift CLI (EventKit integration)
β βββ Sources/
β β βββ RemindersKit/ # Core library
β β β βββ Models/ # Swift models
β β β βββ *.swift # Managers
β β βββ reminders-cli/ # CLI executable
β βββ Package.swift
βββ src/ # TypeScript MCP Server
β βββ index.ts # MCP server entry
β βββ executor/ # Swift CLI executor
β βββ tools/ # 12 MCP tool handlers
β βββ validation/ # Zod schemas
β βββ types/ # TypeScript types
βββ docs/ # DocumentationDevelopment Commands
# Build everything
npm run build # Build TypeScript
npm run build:swift # Build Swift CLI
# Development mode
npm run dev # Watch mode for TypeScript
# Testing
npm test # Run tests
npm run lint # Lint code
npm run format # Format code
# Cleanup
npm run clean # Remove build artifactsBuilding from Source
# Build Swift CLI (release mode)
cd swift-cli
swift build --configuration release
# Build TypeScript
cd ..
npm run buildTesting
Test Swift CLI Directly
# Create an urgent reminder (priority 1 = shows !!! in Reminders.app)
./swift-cli/.build/release/reminders-cli create-reminder '{"title":"URGENT: Fix bug","priority":1}'
# Create recurring reminder
./swift-cli/.build/release/reminders-cli create-reminder '{
"title":"Weekly Meeting",
"dueDate":"2026-01-13T10:00:00Z",
"recurrence":{"frequency":"weekly","interval":1}
}'
# Search reminders
./swift-cli/.build/release/reminders-cli search-reminders '{"searchText":"meeting"}'
# Get today's reminders
./swift-cli/.build/release/reminders-cli get-todays-remindersTest with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.jsAdvanced Features
Recurring Reminders
Create reminders that repeat on a schedule:
{
"title": "Weekly team sync",
"dueDate": "2026-01-13T10:00:00Z",
"recurrence": {
"frequency": "weekly", // daily, weekly, monthly, yearly
"interval": 1, // every N weeks
"daysOfWeek": [2], // Monday (1=Sunday, 7=Saturday)
"endDate": "2026-12-31T00:00:00Z" // optional
}
}Location-Based Reminders
Trigger reminders based on location:
{
"title": "Buy groceries",
"location": {
"latitude": 37.7749,
"longitude": -122.4194,
"radius": 100, // meters
"proximity": "enter", // or "leave"
"title": "Whole Foods"
}
}Multiple Alarms
Add multiple notifications to a reminder:
{
"title": "Important meeting",
"dueDate": "2026-01-15T14:00:00Z",
"alarms": [
{
"type": "relative",
"relativeOffset": -86400 // 1 day before (in seconds)
},
{
"type": "absolute",
"absoluteDate": "2026-01-15T13:00:00Z" // 1 hour before
}
]
}Troubleshooting
Permission Denied
Run
./swift-cli/.build/release/reminders-cli request-accessGrant permission in System Settings > Privacy & Security > Reminders
Restart your AI assistant
Swift CLI Not Found
Build the Swift CLI:
npm run build:swiftVerify:
ls swift-cli/.build/release/reminders-cli
Tool Not Working
Check Swift CLI directly with test JSON
Check MCP server logs in your AI assistant
Use MCP Inspector for isolated debugging
Roadmap
β Completed
Full CRUD operations
Search and filters
Date-based queries
Recurring reminders
Location-based reminders
Multiple alarms
π Future Enhancements
List management (create, update, delete lists)
Batch operations
Rich error messages with suggestions
Performance optimization
Pre-compiled binaries for distribution
npm package publication
Contributing
This is a learning project. Contributions, issues, and feature requests are welcome!
License
MIT
References
Built with β€οΈ for the MCP ecosystem
Version 0.2.0 | Updated January 2026
Available Tools
11 toolscomplete_reminderC
Mark a reminder as complete
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The reminder ID to mark as complete (required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but lacks behavioral details. It implies a mutation (marking as complete) but doesn't disclose side effects (e.g., if completion triggers notifications, updates timestamps, or affects list visibility), permissions required, or error conditions. This leaves gaps for safe agent operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with zero wasteβ'Mark a reminder as complete' efficiently conveys the core action. It's front-loaded and appropriately sized for a simple tool, earning full marks for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the mutation nature (implied by 'Mark'), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what 'complete' means behaviorally, potential return values, or error handling. For a tool that likely changes system state, more context is needed for reliable agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'id' documented as 'The reminder ID to mark as complete (required)'. The description adds no additional meaning beyond this, such as ID format or sourcing. Baseline 3 is appropriate since the schema adequately covers parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Mark') and resource ('a reminder') with a specific outcome ('as complete'). It distinguishes from siblings like 'uncomplete_reminder' by specifying the opposite action. However, it doesn't explicitly mention what 'complete' entails (e.g., status change, timestamp update), keeping it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., the reminder must exist and be incomplete), contrast with 'update_reminder' for partial changes, or specify scenarios like marking overdue reminders. The agent must infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reminderC
Create a new reminder in Apple Reminders with comprehensive attributes
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The reminder title/name (required) | |
| notes | No | Additional notes or description for the reminder | |
| listName | No | Name of the list to add reminder to (defaults to default list) | |
| dueDate | No | Due date in ISO 8601 format (e.g., "2024-12-31T14:00:00Z") | |
| priority | No | Priority: 0=none, 1=high/urgent (!!!), 5=medium, 9=low | |
| tags | No | Array of tag names to apply (encoded as [#tag] in notes) | |
| flagged | No | Whether to flag this reminder | |
| url | No | URL to associate with the reminder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool creates a reminder but doesn't cover aspects like whether it requires specific permissions, how errors are handled, what the return value looks like, or any rate limits. This is a significant gap for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. It avoids unnecessary words, though it could be slightly more specific (e.g., noting it's for Apple Reminders only). Every word earns its place, but it's not maximally dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a creation tool with 8 parameters, no annotations, and no output schema, the description is incomplete. It lacks behavioral context, usage guidelines, and details on the return value, leaving significant gaps for an AI agent to understand how to invoke it correctly beyond basic parameter input.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all 8 parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema, such as explaining interactions between parameters or default behaviors. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('create a new reminder') and specifies the target system ('in Apple Reminders'), which distinguishes it from generic creation tools. However, it doesn't explicitly differentiate from sibling tools like 'update_reminder' beyond the verb 'create' versus 'update'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'update_reminder' or 'complete_reminder', nor does it mention prerequisites such as authentication or list availability. It lacks explicit usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_reminderC
Delete a reminder permanently
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The reminder ID to delete (required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'permanently' indicates irreversible deletion, it doesn't address important behavioral aspects like required permissions, whether deletion affects associated data, confirmation requirements, or error conditions. The description is minimal for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at just three words, with zero wasted language. It's front-loaded with the essential action and includes the critical qualifier 'permanently' to indicate severity. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no annotations and no output schema, the description is inadequate. It doesn't explain what 'permanently' entails operationally, what happens to the deleted data, whether deletion can be undone, what permissions are required, or what the response looks like. Given the tool's destructive nature, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents the single 'id' parameter. The description adds no additional parameter information beyond what the schema provides, which is acceptable given the complete schema coverage but doesn't enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and resource ('a reminder') with the qualifier 'permanently', which distinguishes it from temporary removal operations. However, it doesn't explicitly differentiate from sibling tools like 'uncomplete_reminder' or 'complete_reminder' that might also affect reminder status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With multiple sibling tools that manipulate reminders (complete_reminder, uncomplete_reminder, update_reminder), there's no indication of when deletion is appropriate versus status changes or modifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_listsB
Get all reminder lists (calendars)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a read-only operation ('Get'), but doesn't disclose critical traits like authentication requirements, rate limits, pagination, error handling, or what 'all' entails (e.g., scope, limits). For a tool with zero annotation coverage, this is inadequate, though not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Get all reminder lists') with a clarifying parenthetical ('calendars'). There is no wasted verbiage, repetition, or unnecessary elaboration, making it optimally concise for its simple function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (0 parameters, no output schema, no annotations), the description is minimally completeβit states what the tool does. However, it lacks context for usage (e.g., how it fits with siblings) and behavioral details (e.g., response format, errors), which would be helpful even for simple tools. It meets the bare minimum but doesn't excel.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate, earning a baseline high score. However, it doesn't reach 5 because it could optionally note the lack of parameters (e.g., 'no inputs required'), but this is minor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('all reminder lists (calendars)'), making the purpose immediately understandable. It distinguishes itself from sibling tools that focus on individual reminders or specific subsets (e.g., get_todays_reminders, get_overdue_reminders) by targeting lists/calendars. However, it doesn't explicitly contrast with all siblings (e.g., get_reminders might also retrieve lists), keeping it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), differentiate from similar tools like get_reminders (which might also list items), or specify use cases (e.g., for overview vs. detailed views). This leaves the agent without context for selection among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_completed_remindersB
Get completed reminders within a date range
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | No | Start date in ISO 8601 format (optional) | |
| endDate | No | End date in ISO 8601 format (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action is to 'Get' (implying a read operation) but doesn't cover aspects like pagination, rate limits, authentication needs, or what happens if date parameters are omitted. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 optional parameters, no output schema, no annotations), the description is minimally adequate. It covers the basic action and scope but lacks details on usage guidelines, behavioral traits, and output format, which are important for an agent to use it effectively without annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with both parameters ('startDate' and 'endDate') documented as optional ISO 8601 dates. The description adds context by implying date-range filtering but doesn't provide additional semantics beyond what the schema already states, such as default behaviors or format details. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'completed reminders' with the scope 'within a date range', making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_reminders' or 'get_overdue_reminders' beyond the 'completed' qualifier, which is why it doesn't achieve a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'get_reminders' (which might include all reminders) or 'get_overdue_reminders'. There's no mention of prerequisites, exclusions, or contextual usage, leaving the agent to infer based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_overdue_remindersB
Get all overdue reminders
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves overdue reminders but doesn't describe return format (e.g., list structure, fields), pagination behavior, error conditions, or authentication requirements. For a read operation with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero wasted words. It's front-loaded with the core purpose ('Get all overdue reminders'), making it immediately understandable without requiring additional parsing. Every word earns its place by specifying the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate. It states what the tool does but lacks details on return values, error handling, or behavioral traits. For a read-only tool with no parameters, this might be sufficient, but the absence of output schema means the description should ideally hint at the response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add parameter details beyond the schema, which is appropriate. A baseline of 4 is applied since there are no parameters to document, and the description doesn't introduce unnecessary complexity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('overdue reminders'), making the purpose immediately understandable. It distinguishes this tool from siblings like 'get_todays_reminders' and 'get_completed_reminders' by specifying the time-based filter. However, it doesn't explicitly mention what constitutes 'overdue' (e.g., past-due reminders), leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying 'overdue' reminders, suggesting it should be used when retrieving past-due items rather than all reminders or those due today. However, it lacks explicit guidance on when to use this tool versus alternatives like 'search_reminders' or 'get_reminders', and doesn't mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_remindersC
Get all reminders, optionally filtered by completion status
| Name | Required | Description | Default |
|---|---|---|---|
| completed | No | Filter by completion status (true=completed, false=incomplete, omit=all) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool retrieves reminders with optional filtering, but lacks critical behavioral details: it does not specify if this is a read-only operation, whether it requires authentication, how results are returned (e.g., pagination, format), or any rate limits. The description is minimal and misses key operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the purpose and optional filtering. It is front-loaded with the core action and avoids unnecessary words, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It does not explain return values, error handling, or behavioral traits like safety or performance. For a tool with no structured metadata, the description should provide more context to guide the agent effectively, but it remains overly brief.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'completed' fully documented in the schema. The description adds no additional meaning beyond what the schema provides (e.g., no examples, edge cases, or usage tips). With high schema coverage, the baseline is 3, as the description does not compensate but does not detract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get all reminders') and specifies optional filtering by completion status. It distinguishes from siblings like 'get_completed_reminders' and 'get_overdue_reminders' by indicating it can retrieve all reminders or filter by completion, but does not explicitly contrast with 'search_reminders' or 'get_todays_reminders', which limits differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_completed_reminders' (for only completed), 'get_overdue_reminders' (for overdue ones), or 'search_reminders' (for more complex queries). It mentions optional filtering but does not specify use cases or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_todays_remindersB
Get all reminders due today
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states what the tool does but lacks behavioral details: it doesn't mention permissions needed, whether results are paginated, if it's a read-only operation, or what the return format looks like. For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and appropriately sized for a simple, parameterless tool. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'reminders due today' means (e.g., timezone handling, recurrence), the return structure, or error conditions. For a tool in a rich sibling set with no structured support, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description adds no parameter information, which is appropriate here. Baseline is 4 for zero parameters, as no compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('all reminders due today'), making the purpose immediately understandable. It distinguishes from siblings like 'get_reminders' (general) and 'get_overdue_reminders' (past due), but doesn't explicitly contrast them. The specificity is good but lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_reminders' (which might allow date filtering) or 'get_overdue_reminders'. The description implies usage for today's reminders only, but doesn't state exclusions or name specific alternatives, leaving the agent to infer context from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_remindersB
Search reminders by text in title or notes
| Name | Required | Description | Default |
|---|---|---|---|
| searchText | Yes | Text to search for in title and notes (required) | |
| completed | No | Filter by completion status (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the search functionality but lacks details on permissions, rate limits, pagination, or response format. For a search tool with zero annotation coverage, this is a significant gap in transparency about how the tool behaves beyond its basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence: 'Search reminders by text in title or notes.' It is front-loaded with the core purpose, has zero waste, and is appropriately sized for the tool's complexity. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the basic purpose but lacks behavioral context, usage guidelines, and output details. Without annotations or an output schema, the description should do more to compensate, but it meets a minimum viable standard with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('searchText' and 'completed') fully. The description implies text-based searching but does not add syntax, format details, or examples beyond what the schema provides. With high schema coverage, the baseline score of 3 is appropriate as the description adds minimal extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search reminders by text in title or notes.' It specifies the verb ('search'), resource ('reminders'), and scope ('by text in title or notes'), making it easy to understand what the tool does. However, it does not explicitly differentiate from sibling tools like 'get_reminders' or 'search_reminders' (if any other search tools exist), which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_reminders', 'get_completed_reminders', and 'get_overdue_reminders', it's unclear if this tool is for general retrieval or specific text-based searches. There are no explicit when/when-not instructions or named alternatives, leaving usage ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uncomplete_reminderC
Mark a reminder as incomplete
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The reminder ID to mark as incomplete (required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool performs a mutation ('Mark'), implying it changes data, but doesn't disclose behavioral traits such as permissions required, whether the operation is reversible, error conditions (e.g., invalid ID), or what happens if the reminder is already incomplete. For a mutation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It is front-loaded and directly states the tool's purpose without unnecessary elaboration, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects (e.g., side effects, error handling) and doesn't explain what the tool returns. For a tool that changes state, more context is needed to ensure safe and correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'id' fully documented in the schema as 'The reminder ID to mark as incomplete (required)'. The description adds no additional meaning beyond this, such as ID format or examples. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Mark') and resource ('a reminder') with the specific state change ('as incomplete'). It distinguishes from 'complete_reminder' by specifying the opposite state, but doesn't explicitly differentiate from other mutation tools like 'update_reminder' or 'delete_reminder' beyond the implied state change.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., the reminder must exist and be currently marked as complete), nor does it contrast with similar tools like 'update_reminder' which might also handle state changes. Usage is implied but not explicitly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_reminderC
Update an existing reminder with new attributes
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The reminder ID to update (required) | |
| title | Yes | New title for the reminder (required) | |
| notes | No | New notes for the reminder | |
| listName | No | Move to a different list | |
| dueDate | No | New due date in ISO 8601 format | |
| priority | No | Priority: 0=none, 1=high/urgent (!!!), 5=medium, 9=low | |
| tags | No | New tags | |
| flagged | No | Whether to flag this reminder | |
| url | No | URL to associate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states it updates attributes without disclosing behavioral traits. It lacks details on permissions required, whether updates are reversible, rate limits, error handling, or what happens to unspecified attributes (e.g., partial vs. full updates).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('update an existing reminder') without unnecessary words. Every part earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a mutation tool with 9 parameters, no annotations, and no output schema, the description is incomplete. It fails to address key contextual aspects like behavioral transparency, usage guidelines, or output expectations, leaving significant gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 9 parameters. The description adds no additional meaning beyond implying 'new attributes' map to the parameters, but doesn't clarify semantics like how tags replace or merge, or format specifics beyond the schema. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('update') and resource ('existing reminder'), specifying it modifies attributes. It distinguishes from create_reminder by focusing on existing items, though it doesn't explicitly differentiate from other sibling tools like complete_reminder or uncomplete_reminder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives is provided. The description doesn't mention prerequisites (e.g., needing an existing reminder ID), exclusions, or comparisons to sibling tools like complete_reminder or delete_reminder, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v1.0.0- First observed
complete_reminder - First observed
create_reminder - First observed
delete_reminder - First observed
get_all_lists - First observed
get_completed_reminders - First observed
get_overdue_reminders - First observed
get_reminders - First observed
get_todays_reminders - First observed
search_reminders - First observed
uncomplete_reminder - First observed
update_reminder
TDQS
Every tool has a clearly distinct purpose with no ambiguity. Each targets a specific action (create, get, update, delete, complete, search) on specific resources (reminders, lists) or states (completed, overdue, today's). The descriptions make it easy to differentiate between similar tools like get_reminders, get_completed_reminders, get_overdue_reminders, and get_todays_reminders.
All tools follow a consistent verb_noun pattern using snake_case throughout. The naming is predictable and readable, with verbs like create, get, update, delete, complete, uncomplete, and search consistently applied to nouns like reminder, reminders, or lists.
With 11 tools, the count is well-scoped for a reminders management server. Each tool earns its place by covering essential CRUD operations, status management, filtering, and list handling, without being excessive or too sparse for the domain.
The tool set provides complete coverage for Apple Reminders management. It includes full CRUD for reminders (create, get, update, delete), lifecycle management (complete/uncomplete), filtering by status and date (completed, overdue, today's, all), search capabilities, and list operations. There are no obvious gaps that would hinder agent workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP connector for Apple Reminders β search, create, complete, and edit via your own Mac.
An AI-first personal CRM you run in natural language: contacts, reminders, notes, and more.
Context-aware reminders that surface when your situation matches, not at a fixed time.
Manage tasks, Focus Zone, notes, projects, and task history from compatible AI assistants.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables management of Apple Reminders on macOS, including creating, updating, and querying reminders with due dates, priorities, and completion status across different reminder lists.MIT
- AlicenseAqualityDmaintenanceEnables interaction with macOS Reminders app through AppleScript, allowing users to create, read, update, and delete reminders and lists, with support for filtering, batch operations, and reminder properties like priority and due dates.1312MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Apple Reminders lists and reminders on macOS, including creating, updating, completing, and deleting reminders.7185MIT
- AlicenseNot gradedqualityDmaintenanceEnables native integration with Apple Reminders on macOS, allowing you to create, list, complete, and manage reminders through natural language.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Krishna-Desiraju/apple-reminders-swift-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server