Skip to main content
Glama
Krishna-Desiraju

Apple Reminders MCP Server

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 setup

2. Request Permissions

./swift-cli/.build/release/reminders-cli request-access

Grant 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)

  1. create_reminder - Create reminders with comprehensive attributes

    • Basic: title, notes, due date, priority, tags, URL

    • Advanced: recurring patterns, location triggers, multiple alarms

  2. update_reminder - Update existing reminders

  3. delete_reminder - Permanently delete reminders

  4. complete_reminder - Mark reminder as complete

  5. uncomplete_reminder - Mark reminder as incomplete

  6. get_reminders - List all reminders (filter by completion)

List Management (1 tool)

  1. get_all_lists - Get all reminder lists

Search & Query (5 tools)

  1. search_reminders - Search by text in title/notes

  2. get_todays_reminders - Get reminders due today

  3. get_overdue_reminders - Get past-due reminders

  4. get_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.app

Why 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 alarms

    • See URGENT_FEATURE_STATUS.md for 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/                  # Documentation

Development 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 artifacts

Building from Source

# Build Swift CLI (release mode)
cd swift-cli
swift build --configuration release

# Build TypeScript
cd ..
npm run build

Testing

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-reminders

Test with MCP Inspector

npx @modelcontextprotocol/inspector node dist/index.js

Advanced 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

  1. Run ./swift-cli/.build/release/reminders-cli request-access

  2. Grant permission in System Settings > Privacy & Security > Reminders

  3. Restart your AI assistant

Swift CLI Not Found

  1. Build the Swift CLI: npm run build:swift

  2. Verify: ls swift-cli/.build/release/reminders-cli

Tool Not Working

  1. Check Swift CLI directly with test JSON

  2. Check MCP server logs in your AI assistant

  3. 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 tools
complete_reminderC

Mark a reminder as complete

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe reminder ID to mark as complete (required)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe reminder title/name (required)
notesNoAdditional notes or description for the reminder
listNameNoName of the list to add reminder to (defaults to default list)
dueDateNoDue date in ISO 8601 format (e.g., "2024-12-31T14:00:00Z")
priorityNoPriority: 0=none, 1=high/urgent (!!!), 5=medium, 9=low
tagsNoArray of tag names to apply (encoded as [#tag] in notes)
flaggedNoWhether to flag this reminder
urlNoURL to associate with the reminder

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe reminder ID to delete (required)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateNoStart date in ISO 8601 format (optional)
endDateNoEnd date in ISO 8601 format (optional)

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
completedNoFilter by completion status (true=completed, false=incomplete, omit=all)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
searchTextYesText to search for in title and notes (required)
completedNoFilter by completion status (optional)

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe reminder ID to mark as incomplete (required)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe reminder ID to update (required)
titleYesNew title for the reminder (required)
notesNoNew notes for the reminder
listNameNoMove to a different list
dueDateNoNew due date in ISO 8601 format
priorityNoPriority: 0=none, 1=high/urgent (!!!), 5=medium, 9=low
tagsNoNew tags
flaggedNoWhether to flag this reminder
urlNoURL to associate

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 11 tool updatesv1.0.0
    • First observedcomplete_reminder
    • First observedcreate_reminder
    • First observeddelete_reminder
    • First observedget_all_lists
    • First observedget_completed_reminders
    • First observedget_overdue_reminders
    • First observedget_reminders
    • First observedget_todays_reminders
    • First observedsearch_reminders
    • First observeduncomplete_reminder
    • First observedupdate_reminder

TDQS

A3.6/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessUnresponsive

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

Related MCP Servers

Latest Blog Posts

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