Skip to main content
Glama
leawn

Apple Reminders MCP Server

by leawn

Apple Reminders MCP Server

A Model Context Protocol (MCP) server that allows AI assistants to interact with Apple Reminders on macOS using AppleScript.

Requirements

  • macOS (required for AppleScript/Reminders integration)

  • Node.js 18+

  • Apple Reminders app with at least one list

  • Automation permission (automatic prompt on first run)

Related MCP server: Apple Reminders MCP Server

Installation

# Clone the repository
git clone https://github.com/leawn/apple_reminders_mcp.git
cd apple_reminders_mcp

# Install dependencies and build
npm install

Usage with Cursor

Add to your Cursor MCP settings (~/.cursor/mcp.json):

{
  "mcpServers": {
    "apple-reminders": {
      "command": "/path/to/node",
      "args": ["/path/to/apple_reminders_mcp/dist/index.js"]
    }
  }
}

Important: Use the full path to node, not just node. Find it with which node.

Example for nvm users:

{
  "mcpServers": {
    "apple-reminders": {
      "command": "/Users/yourname/.nvm/versions/node/v20.16.0/bin/node",
      "args": ["/Users/yourname/path/to/apple_reminders_mcp/dist/index.js"]
    }
  }
}

Available Tools

Tool

Description

Parameters

listReminderLists

Get all reminder lists

-

getReminders

Get reminders from a list

listName, includeCompleted?

createReminder

Create a new reminder

listName, title, notes?, dueDate?, priority?

completeReminder

Mark reminder as done

listName, reminderId

uncompleteReminder

Mark reminder as incomplete

listName, reminderId

deleteReminder

Delete a reminder

listName, reminderId

updateReminder

Update reminder details

listName, reminderId, title?, notes?, dueDate?, priority?

Tool Parameters

Priority Values

  • 0 - No priority

  • 1 - High priority

  • 5 - Medium priority

  • 9 - Low priority

Date Format

Dates should be in ISO8601 format:

2024-12-31T09:00:00Z
2024-12-31T09:00:00-05:00

CLI Reference

The shell script can be used directly for testing:

# List all reminder lists
./bin/reminders-helper.sh list-lists

# Get reminders from a list
./bin/reminders-helper.sh get-reminders --list "Work"
./bin/reminders-helper.sh get-reminders --list "Work" --include-completed

# Create a reminder
./bin/reminders-helper.sh create --list "Work" --title "New task"
./bin/reminders-helper.sh create --list "Work" --title "Meeting" --notes "Team sync" --due "2024-12-31T09:00:00Z" --priority 1

# Complete a reminder
./bin/reminders-helper.sh complete --list "Work" --id "x-apple-reminder://UUID"

# Uncomplete a reminder
./bin/reminders-helper.sh uncomplete --list "Work" --id "x-apple-reminder://UUID"

# Update a reminder
./bin/reminders-helper.sh update --list "Work" --id "x-apple-reminder://UUID" --title "Updated title"

# Delete a reminder
./bin/reminders-helper.sh delete --list "Work" --id "x-apple-reminder://UUID"

Permissions

On first run, macOS will prompt you to grant Automation permission for controlling the Reminders app. This uses the standard Automation permission (not the Reminders privacy permission), which is easier to grant and manage.

If you see permission errors:

  1. Open System SettingsPrivacy & SecurityAutomation

  2. Find Terminal/Cursor and enable "Reminders"

Development

# Run TypeScript directly (without building)
npm run dev

# Build TypeScript
npm run build

# Start the server
npm start

Troubleshooting

"Not authorized to send Apple events"

  1. Open System SettingsPrivacy & SecurityAutomation

  2. Find the app running the MCP server (Terminal, Cursor, etc.)

  3. Enable "Reminders" permission

  4. Restart the MCP server

"List 'X' not found"

Make sure the list name matches exactly (case-sensitive). Use listReminderLists to see available lists.

Commands are slow

The helper uses AppleScript with bulk property access, which should be fast. If commands are slow:

  • Check if Reminders.app is responding

  • Try quitting and reopening Reminders.app

  • Restart the MCP server

License

MIT

Available Tools

7 tools
completeReminderB

Mark a reminder as completed in Apple Reminders

ParametersJSON Schema
NameRequiredDescriptionDefault
listNameYesName of the reminder list
reminderIdYesID of the reminder to complete

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description bears full responsibility for behavioral disclosure. It only states the basic action without detailing side effects (e.g., irreversibility, state changes, or permission requirements).

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 that conveys the tool's purpose without superfluous information. It is well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation tool with 2 well-defined required parameters and no output schema, the description is adequate. It could mention the return value or success indication, but given the simplicity, it is nearly complete.

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 coverage is 100%, and the description adds no extra meaning beyond the parameter descriptions. Both listName and reminderId are already explained in the input schema, so the description provides no added value for parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the action 'mark as completed' and the resource 'reminder in Apple Reminders'. Among sibling tools like createReminder, deleteReminder, and uncompleteReminder, it clearly distinguishes its role.

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, such as uncompleteReminder or updateReminder. No prerequisites or contextual cues are provided, 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.

createReminderC

Create a new reminder in Apple Reminders

ParametersJSON Schema
NameRequiredDescriptionDefault
listNameYesName of the reminder list to add the reminder to
titleYesTitle of the reminder
notesNoAdditional notes for the reminder
dueDateNoDue date in ISO8601 format (e.g., 2024-12-31T09:00:00Z)
priorityNoPriority level: 0=none, 1=high, 5=medium, 9=low

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description must disclose behaviors. It only states creation, but fails to mention side effects, permissions required, or constraints like duplicate handling.

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?

Single concise sentence with no fluff. Front-loaded and efficient.

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 5 parameters, no output schema, and no annotations, the description is too minimal. It omits return values, error handling, and behavioral context.

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?

Input schema covers all 5 parameters with descriptions (100% coverage). The description adds no extra semantic value beyond what the schema provides.

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) and resource (reminder), specifying the context (Apple Reminders). It distinguishes from sibling tools like completeReminder and deleteReminder.

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 like updateReminder. No prerequisites or exclusion criteria provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteReminderB

Delete a reminder from Apple Reminders

ParametersJSON Schema
NameRequiredDescriptionDefault
listNameYesName of the reminder list
reminderIdYesID of the reminder to delete

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. It only states the action without revealing side effects (e.g., permanence), permissions needed, or error handling.

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?

Single sentence with no extra words; front-loaded with the action. Could be considered too minimal but earns its place.

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?

Simple tool with two parameters and no output schema. Description is adequate for basic understanding but lacks mention of return values or success/failure indications.

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. The description adds no additional meaning beyond what is in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'Delete a reminder from Apple Reminders' with a specific verb and resource, clearly distinguishing it from siblings like createReminder or updateReminder.

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 like completeReminder or updateReminder, nor any prerequisites or context for deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getRemindersB

Get reminders from a specific list in Apple Reminders

ParametersJSON Schema
NameRequiredDescriptionDefault
listNameYesName of the reminder list to get reminders from
includeCompletedNoWhether to include completed reminders (default: false)

TDQS

B3.1/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 does not disclose behavioral traits like read-only nature, default behavior of includeCompleted, or return format (e.g., array of reminder objects). The agent cannot infer side effects or performance implications.

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?

Single sentence, efficient and front-loaded. No wasted words. Could be expanded slightly to add value without sacrificing 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?

No output schema provided, and the description does not explain the return structure (e.g., fields of each reminder, pagination). The description is incomplete for an agent to anticipate the tool's output and use it effectively.

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 coverage is 100% with parameter descriptions, so baseline is 3. The description adds minimal extra meaning beyond the schema (e.g., tying 'specific list' to listName). No additional semantics like validation rules or default handling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get reminders'), the resource ('from a specific list'), and the context ('Apple Reminders'). It distinguishes from sibling tools like createReminder and deleteReminder by being a read operation.

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 like listReminderLists (which lists all lists) or updateReminder. No context on prerequisites or scenarios where this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listReminderListsA

Get all reminder lists from Apple Reminders

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description states it returns 'all reminder lists', indicating an exhaustive read operation. No annotations exist, so the description carries full burden. It does not disclose authentication needs, sorting, or other behavioral traits, but for a simple get operation, it is adequate.

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?

Single sentence of six words, extremely concise and front-loaded. No extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description is sufficiently complete. It clearly states the operation and resource. It could describe the output structure, but the concept of a reminder list is common and the operation is straightforward.

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?

No parameters exist, so the input schema covers 100%. The description adds no parameter information, but none is needed. It implicitly confirms the tool takes no input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'Get' and resource 'all reminder lists from Apple Reminders'. It distinguishes from siblings like getReminders (which likely gets items within a list) by explicitly naming the resource as lists.

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?

No explicit guidance on when to use versus alternatives. Usage is implied for listing all reminder lists, but no when-not-to-use or alternative hints are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uncompleteReminderB

Mark a reminder as incomplete in Apple Reminders

ParametersJSON Schema
NameRequiredDescriptionDefault
listNameYesName of the reminder list
reminderIdYesID of the reminder to mark as incomplete

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears the full burden of disclosing behavioral traits. It only states the action without mentioning side effects, permissions, or state changes beyond the basic purpose, leaving critical behavior undocumented.

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, clear sentence with no unnecessary words. While it is concise, it could benefit from slightly more context about the tool's behavior without becoming verbose.

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 simplicity of the tool and the schema descriptions, the description provides the basic purpose. However, it lacks usage guidelines and behavioral transparency, which are needed for full contextual completeness.

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 coverage is 100% (both parameters have descriptions in the schema), so the description adds no additional meaning beyond what the schema already provides. The baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Mark') and resource ('reminder') with a clear state change ('as incomplete'), which effectively distinguishes it from its sibling 'completeReminder' that performs the opposite action.

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 use when an agent needs to revert a reminder's completion status, but it offers no explicit guidance on when to use this tool versus alternatives like 'completeReminder' or 'updateReminder'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateReminderC

Update an existing reminder in Apple Reminders

ParametersJSON Schema
NameRequiredDescriptionDefault
listNameYesName of the reminder list
reminderIdYesID of the reminder to update
titleNoNew title for the reminder
notesNoNew notes for the reminder
dueDateNoNew due date in ISO8601 format (use 'none' to clear)
priorityNoNew priority level: 0=none, 1=high, 5=medium, 9=low

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 must disclose behaviors. It only says 'update,' implying modification, but omits details on permissions, destructive effects, or response behavior.

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?

Single sentence is concise and to the point, though it could benefit from more detail without being verbose.

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 6 parameters and the existence of sibling tools that perform specific updates, the description lacks context on what this tool updates generally vs. specialized siblings. No output schema information is provided.

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 coverage is 100%, so baseline is 3. The description adds no param-specific information beyond the schema, but it does not mislead.

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 'Update an existing reminder,' specifying the action and resource. It is distinct from sibling tools like createReminder or deleteReminder, though it does not clarify which fields can be updated, relying on the schema.

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 like completeReminder or uncompleteReminder. The description provides no usage context or exclusion criteria.

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.

  1. 7 tool updatesv1.0.0
    • First observedcompleteReminder
    • First observedcreateReminder
    • First observeddeleteReminder
    • First observedgetReminders
    • First observedlistReminderLists
    • First observeduncompleteReminder
    • First observedupdateReminder

TDQS

A3.5/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct operation (create, read, update, delete, complete, uncomplete, list lists) with no overlap in purpose.

Naming Consistency4/5

Tools follow a verbNoun pattern consistently, though 'listReminderLists' uses 'list' instead of 'get' like the others, and 'uncomplete' is a bit unusual but symmetrical to 'complete'.

Tool Count5/5

7 tools is well-scoped for a reminders server, covering the essential operations without bloat or missing core functionality.

Completeness4/5

Covers CRUD, complete/uncomplete, and listing lists; missing a dedicated getReminderById (getReminders returns from a list) but core workflows are solid.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers