apple-reminders-mcp
Provides tools to manage Apple Reminders, including listing, creating, completing, deleting, and updating reminders across lists, with support for due dates, priorities, notes, and tags via AppleScript.
Click on "Deploy 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-mcplist my reminders for today"
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
An MCP server that connects Claude Desktop to Apple Reminders on macOS via AppleScript.
Prerequisites
macOS
Node.js 18+
Related MCP server: Apple Reminders MCP Server
Installation
1. Add to Claude Desktop config
Open ~/Library/Application Support/Claude/claude_desktop_config.json and add:
{
"mcpServers": {
"apple-reminders": {
"command": "npx",
"args": ["-y", "@kamk95/apple-reminders-mcp"]
}
}
}2. Restart Claude Desktop
The first time a reminder tool is used, macOS will prompt you to grant Reminders access — click Allow.
Manual install (alternative)
If you prefer to run from source:
git clone https://github.com/kamrenkennedy/apple-reminders-mcp.git
cd apple-reminders-mcp
npm installThen use this config instead:
{
"mcpServers": {
"apple-reminders": {
"command": "node",
"args": ["/absolute/path/to/apple-reminders-mcp/index.js"]
}
}
}Tools
list_reminders
List reminders across all lists or a specific one.
Parameter | Type | Description |
| string | Filter to a specific list (optional) |
| boolean | Include completed reminders (default: false) |
create_reminder
Create a new reminder.
Parameter | Type | Description |
| string | Required. Title of the reminder |
| string | Destination list (default: Reminders) — created if it doesn't exist |
| string | Due date in |
| string | Due time in |
| string |
|
| string | Body/notes text |
| string[] | Tags to attach |
complete_reminder
Mark a reminder as completed.
Parameter | Type | Description |
| string | Required. Exact name of the reminder |
| string | Narrow search to this list (optional) |
delete_reminder
Permanently delete a reminder.
Parameter | Type | Description |
| string | Required. Exact name of the reminder |
| string | Narrow search to this list (optional) |
update_reminder
Update any fields on an existing reminder. Only provided fields are changed.
If you update notes or tags individually, the other is preserved automatically.
Parameter | Type | Description |
| string | Required. Current name of the reminder |
| string | Current list to narrow the search |
| string | Rename the reminder |
| string | Move reminder to this list |
| string | New due date in |
| string | New due time in |
| boolean | Remove the due date entirely |
| string |
|
| string | Replace notes text |
| string[] | Replace tags |
Notes
Tags are stored inside the reminder's notes field as
[tags: tag1, tag2]since the native Reminders tags API is not accessible via AppleScript. They round-trip correctly through all tools.Reminders are matched by exact name. If you have duplicates across lists, pass
list_nameto disambiguate.
Available Tools
5 toolscomplete_reminderC
Mark a reminder as completed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact name of the reminder. | |
| list_name | No | Narrow search to this list (useful when duplicate names exist). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as irreversibility, side effects, authorization requirements, or the resulting state change beyond 'completed'. This is insufficient for a mutation tool.
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 very concise (one sentence) but lacks structure. It does not front-load critical information or include any usage notes, making it minimally adequate.
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 mutation tool with no output schema, the description is incomplete. It does not explain the semantics of 'completed', whether it is reversible, or what the response looks like. Important context is missing.
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 the parameters. The description adds no additional meaning or usage hints for the parameters, such as how to find the exact name or when to use list_name.
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 uses a specific verb ('Mark as completed') and resource ('reminder'), clearly distinguishing it from sibling tools like create, delete, update, and list. However, it lacks explicit mention that it requires the exact name, which is only in the schema.
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. The description does not mention circumstances where update_reminder might be more appropriate, nor does it give any context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reminderB
Create a new reminder in Apple Reminders.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Title of the reminder. | |
| tags | No | Tags to attach (stored in the notes field as [tags: ...]). | |
| notes | No | Body/notes text. | |
| due_date | No | Due date in YYYY-MM-DD format. | |
| due_time | No | Due time in HH:MM 24-hour format. Requires due_date. | |
| priority | No | Reminder priority. | |
| list_name | No | Destination list (default: Reminders). Created if it does not exist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states the basic action with no mention of side effects (e.g., auto-creating lists), silent behavior on duplicate names, or return values.
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 concise sentence, front-loading the purpose. However, it is slightly too terse, missing useful context that could fit in one more sentence.
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?
No output schema exists, yet the description does not explain what the tool returns (e.g., the created reminder object). It also lacks context on prerequisites or error conditions, which is critical for a creation tool.
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 baseline applied. The description adds no additional meaning beyond the schema's own descriptions, making it adequate but not superior.
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 the target resource ('in Apple Reminders'), distinguishing it from sibling tools like update_reminder or delete_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?
The description does not provide explicit when-to-use guidance versus alternatives. It implies creation, but no wording on when to use this over updating an existing reminder.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_reminderB
Permanently delete a reminder.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact name of the reminder to delete. | |
| list_name | No | Narrow search to this list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'permanently' to indicate irreversibility, which is valuable behavioral context beyond the name. However, with no annotations, it could detail more (e.g., side effects, auth requirements, behavior on missing reminder).
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 no wasted words. It is appropriately sized for the tool's simplicity.
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 has no output schema, no annotations, and only two parameters, the description provides minimal context. It does not mention return values, error handling, or prerequisites, leaving gaps for a complete understanding.
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 coverage is 100%, so the input schema already documents both parameters clearly. The description adds no extra meaning beyond what's in the schema, so baseline score of 3 is appropriate.
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 'delete' and resource 'reminder', but does not differentiate from sibling tools like 'complete_reminder'. The purpose is clear but lacks explicit distinction.
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 (e.g., complete_reminder or update_reminder). The description gives no context about prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_remindersB
List reminders from Apple Reminders. Optionally filter by list name and include completed items.
| Name | Required | Description | Default |
|---|---|---|---|
| list_name | No | Return reminders from this list only. Omit for all lists. | |
| include_completed | No | Include completed reminders (default: false). |
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 only states basic listing functionality without disclosing that the operation is read-only, non-destructive, or any other behavioral traits such as permissions or performance constraints.
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 very short (one sentence) and contains no unnecessary words. It is concise, though it could be slightly more structured to front-load key information.
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 has no output schema and no annotations, the description is minimally adequate. It does not mention return format, ordering, or pagination, but for a simple list tool it is acceptable.
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%, baseline is 3. The description's mention of optional filters ('by list name and include completed items') adds no new meaning beyond what the schema already provides.
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 ('list') and resource ('reminders from Apple Reminders'), and specifies optional filters. It distinguishes itself from sibling tools (complete, create, delete, update) which perform different operations.
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 does not explicitly state when to use this tool vs alternatives. It implies listing is for viewing reminders, but lacks explicit guidance on when not to use it or when to use sibling tools instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_reminderA
Update fields on an existing reminder. Only provided fields are changed. If you update notes OR tags individually, the other is preserved automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Current name of the reminder to find. | |
| tags | No | Replace tags (notes preserved if not provided). | |
| notes | No | Replace notes text (tags preserved if not provided). | |
| due_date | No | New due date in YYYY-MM-DD format. | |
| due_time | No | New due time in HH:MM 24-hour format. | |
| new_name | No | Rename the reminder to this. | |
| priority | No | New priority. | |
| list_name | No | Current list to narrow the search. | |
| new_list_name | No | Move reminder to this list. | |
| clear_due_date | No | Set to true to remove the due date entirely. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It discloses partial update and notes/tags preservation, but omits error handling, idempotency, or requirement for the reminder to exist.
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?
Two sentences, front-loaded with the main action, then key behavioral detail. No superfluous words.
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?
With 10 parameters and no output schema or annotations, the description covers core behavior but lacks details on response format, error conditions, and parameter interactions like clear_due_date.
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 coverage is 100%, so baseline is 3. The description adds value by clarifying partial update behavior and tag/notes interaction, which goes beyond schema parameter descriptions.
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 states 'Update fields on an existing reminder' with a specific verb and resource. It clearly distinguishes from sibling tools like create_reminder and delete_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?
The description explains partial update behavior ('Only provided fields are changed'), guiding correct usage. It does not explicitly exclude alternatives but the context of sibling tools makes usage clear.
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.
5 tool updates
v1.0.0- First observed
complete_reminder - First observed
create_reminder - First observed
delete_reminder - First observed
list_reminders - First observed
update_reminder
TDQS
Scored across 5 tools
Each tool addresses a distinct action on reminders: create, list, complete, update, and delete. There is no overlap or ambiguity between them.
All tools follow a consistent verb_noun pattern (e.g., create_reminder, delete_reminder), with verbs clearly indicating the operation.
With 5 tools, the set is well-scoped for managing reminders, covering core operations without unnecessary bloat.
CRUD operations are present along with a completion action. Missing a 'get single reminder' tool is a minor gap, but the set is largely complete for its domain.
Maintenance
Related MCP Connectors
MCP connector for Apple Reminders — search, create, complete, and edit via your own Mac.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
- mcpOAuthai.butlerbrain
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA macOS-only MCP server that exposes Apple Reminders to AI clients, enabling create, read, update, delete, search, and organization of reminders and lists through natural language.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server enabling AI assistants to create, read, list, and delete Apple Reminders on macOS via AppleScript.11Apache 2.0
- AlicenseAqualityDmaintenanceAn MCP server for managing Apple Reminders via remindctl on macOS, integrating with Claude Desktop and CoWork.1013 npm3MIT
- AlicenseAqualityDmaintenanceAn MCP server that lets Claude read and write your Things 3 tasks on macOS via AppleScript.10MIT