apple-reminders-mcp
Manage Apple Reminders, including adding, editing, completing, and deleting reminders, as well as managing reminder lists.
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-mcpremind me to buy milk tomorrow at 10am"
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
MCP server for Apple Reminders. Manage reminders with natural language from any MCP client.
Prerequisites
macOS 14+ · Node.js 18+ · remindctl
brew install steipete/tap/remindctl
remindctl authorizeRelated MCP server: reminders
Setup
Claude Code (plugin):
/plugin marketplace add namearth5005/namearth5005-plugins
/plugin install apple-reminders-mcp@namearth5005-pluginsClaude Code (manual):
claude mcp add --transport stdio apple-reminders -- npx -y apple-reminders-mcpCodex:
codex mcp add apple-reminders -- npx -y apple-reminders-mcpCursor / Windsurf / Other:
{
"mcpServers": {
"apple-reminders": {
"command": "npx",
"args": ["-y", "apple-reminders-mcp"]
}
}
}Tools
Tool | Description |
| Add a reminder with optional due date, list, notes, priority |
| Show reminders (today/tomorrow/week/overdue/upcoming/all) |
| List all reminder lists or show contents of one |
| Edit title, due date, notes, priority, or move to another list |
| Mark reminders as complete |
| Delete reminders |
| Create, rename, or delete lists |
Examples
"remind me to deploy on Friday at 3pm"
"what's due today?"
"mark the deploy reminder as done"
"create a list called Sprint 12"Troubleshooting
"remindctl is not authorized" — Run remindctl authorize.
"Could not find remindctl" — brew install steipete/tap/remindctl, or set REMINDCTL_PATH env var.
Using nvm? Use the full node path: /opt/homebrew/bin/node instead of node.
License
MIT
Available Tools
7 toolsadd_reminderAdd ReminderA
Add a new reminder to Apple Reminders. Use when the user wants to remember something, create a task, set a to-do, schedule a deadline, or needs to be reminded about anything.
Args:
title (string, required): The reminder text
list (string, optional): Target reminder list (e.g. "Work", "Personal"). Uses default list if omitted.
due (string, optional): Due date in natural language ("tomorrow", "Friday 3pm", "2026-04-05")
notes (string, optional): Additional notes or context
priority (string, optional): none, low, medium, or high
| Name | Required | Description | Default |
|---|---|---|---|
| due | No | Due date — natural language or ISO date | |
| list | No | Target reminder list name | |
| notes | No | Additional notes | |
| title | Yes | Reminder title/text | |
| priority | No | Priority level |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a write, non-idempotent, non-destructive operation, so the safety profile is covered. The description adds useful behavior beyond that — the default-list fallback when 'list' is omitted and natural-language date parsing — but says nothing about duplicate creation, permission/automation prompts, or what side effects occur on the reminder lists.
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?
Purpose and triggers are front-loaded in one sentence, followed by a scannable args block. The args block restates the schema but with example values, so it mostly earns its space, though it is somewhat redundant.
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 5-parameter creation tool with no output schema, the description covers purpose, triggers, and every parameter's intent and format. It stops short of saying what the call returns (e.g., an identifier for the new reminder) or error behavior on a missing list.
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, but the description genuinely adds meaning: concrete natural-language due examples ('tomorrow', 'Friday 3pm', '2026-04-05'), sample list names, and the priority enum values, going beyond the terse schema 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 opens with a specific verb+resource ('Add a new reminder to Apple Reminders'), which cleanly separates it from the edit/complete/delete/list siblings by name semantics. It does not explicitly name a sibling or a disambiguating condition, so it falls short of the top mark.
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?
It gives a rich set of trigger phrases ('remember something, create a task, set a to-do, schedule a deadline') that let an agent match intent confidently. However, it never states when NOT to use it (e.g., use edit_reminder for existing items) or names an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_remindersComplete RemindersAIdempotent
Mark one or more Apple Reminders as complete. Use when the user says they finished a task, did something, or wants to check off a reminder.
Args:
ids (string[], required): Array of index numbers or ID prefixes from show_reminders output
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Indexes or ID prefixes to mark complete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds no further behavioral context such as whether completion is reversible, what happens with invalid IDs, or any authentication requirements. It mostly restates the core action.
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 front-loaded with the purpose, followed by usage guidance and a compact Args section. Every sentence earns its place with no wasted text.
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 simple mutation tool with rich annotations and a fully described input schema, the description covers what it does, when to use it, and where IDs come from. It does not explain return values, but no output schema exists and the omission is minor.
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 baseline is 3. The description adds value by stating that the IDs are 'from show_reminders output,' which tells the agent where to obtain valid values and is not present in the schema.
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 a specific verb and resource: 'Mark one or more Apple Reminders as complete.' It is clear what the tool does, but it does not explicitly differentiate itself from siblings like edit_reminder or delete_reminders.
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?
It gives clear usage conditions: 'Use when the user says they finished a task, did something, or wants to check off a reminder.' It lacks explicit when-not-to-use guidance or named alternatives, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_remindersDelete RemindersADestructive
Delete one or more Apple Reminders permanently. Use when the user wants to remove a reminder entirely (not just complete it).
Args:
ids (string[], required): Array of index numbers or ID prefixes from show_reminders output
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Indexes or ID prefixes to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description reinforces this with 'permanently' (signalling no undo) and tells the agent where valid ids come from, but says nothing about permission requirements or behavior on invalid/stale ids.
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 tight sentences with the destructive scope and the disambiguation front-loaded, followed by a minimal Args block. Nothing is redundant or padded.
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 single-parameter destructive tool with no output schema, the description covers what the tool does, the permanence of the effect, and where ids come from. It stops short of covering failure modes (nonexistent ids, partial batch failure), which is a minor gap.
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 baseline would be 3, but the description adds real meaning: it explains that ids are 'index numbers or ID prefixes from show_reminders output', telling the agent how to source valid values rather than just their type.
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?
States a specific verb and resource ('Delete one or more Apple Reminders') and immediately distinguishes the operation from its nearest sibling by noting it removes a reminder 'entirely (not just complete it)'. An agent can separate this from complete_reminders without opening either 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?
Gives a clear when-to-use condition ('when the user wants to remove a reminder entirely'), which implicitly contrasts with the completion path. It does not name complete_reminders or edit_reminder explicitly as alternatives, so routing is clear but not fully enumerated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_reminderEdit ReminderBIdempotent
Edit an existing Apple Reminder. Use when the user wants to change a reminder's title, due date, notes, priority, move it to another list, or mark it complete/incomplete.
Args:
id (string, required): Index number or ID prefix from show_reminders output
title (string, optional): New title
list (string, optional): Move to a different list
due (string, optional): New due date
notes (string, optional): New notes
priority (string, optional): none, low, medium, high
clear_due (boolean, optional): Clear the due date
complete (boolean, optional): Mark as completed
incomplete (boolean, optional): Mark as incomplete
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Index or ID prefix from show output | |
| due | No | New due date | |
| list | No | Move to list | |
| notes | No | New notes | |
| title | No | New title | |
| complete | No | Mark completed | |
| priority | No | Priority level | |
| clear_due | No | Clear the due date | |
| incomplete | No | Mark incomplete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds only mild behavioral detail (clear_due as a distinct flag, complete/incomplete), and is silent on edge cases such as what happens if both complete and incomplete are sent, or what the call returns.
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 purpose sentence is well front-loaded, but the entire Args block duplicates a schema that is already 100% described, so a substantial share of the text does not earn its place. Sized adequately but not tight.
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?
There is no output schema, so the description could say what a successful edit returns or confirms, and it does not. It does cover the required id source and the mutation's field set, making it minimally sufficient for a 9-parameter mutation tool but not complete.
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 baseline is 3. The description restates each parameter and adds one small piece of meaning beyond the schema ('Index number or ID prefix from show_reminders output'), but most of the arg list is redundant with the schema text rather than adding new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Edit an existing Apple Reminder') and enumerates the editable surface (title, due date, notes, priority, list, completion), which lets an agent distinguish it from add_reminder and delete_reminders. It stops short of explicitly naming any sibling as the alternative, so it is clear but not sibling-differentiating by itself.
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?
It gives a clear positive trigger ('Use when the user wants to change...'), which is real usage guidance. However, marking complete/incomplete overlaps with the complete_reminders sibling, and the description never says when to prefer that tool over this one, leaving a genuine routing ambiguity unresolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reminder_listsList Reminder ListsARead-onlyIdempotent
List all Apple Reminder lists, or show the contents of a specific list. Use when the user wants to know what lists they have or browse a specific list.
Args:
name (string, optional): If provided, shows reminders in that list. If omitted, lists all available lists.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | List name — omit to list all lists, provide to show contents |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds the meaningful behavioral detail that the tool has two modes depending on the name argument, but says nothing about ordering, counts, or output shape; with annotations carrying the safety profile, this is adequate but not rich.
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 front-loaded sentences plus an Args block; the dual-mode behavior is stated up front before the parameter restatement. The Args section is mildly redundant with the schema description but not wasteful.
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 single-optional-parameter, read-only listing tool with no output schema, the description covers both call modes and when to use it. Missing only edge-case behavior (e.g., unknown list name) and result ordering, which are minor.
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% and the parameter's schema description ('omit to list all lists, provide to show contents') states the same dual-mode semantics as the description text. The description adds no syntax, format, or matching-behavior detail beyond the schema, so baseline 3 applies.
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 a specific verb and resource ('List all Apple Reminder lists') and adds a distinct second mode ('show the contents of a specific list'). It is clear what the tool does, though it does not explicitly distinguish itself from the near-sounding sibling show_reminders.
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?
It gives a clear usage context: 'Use when the user wants to know what lists they have or browse a specific list.' However, it names no alternatives and does not clarify when to prefer show_reminders or manage_reminder_list over this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_reminder_listManage Reminder ListADestructive
Create, rename, or delete an Apple Reminder list. Use when the user wants to organize their reminders by creating new lists, renaming existing ones, or removing lists.
Args:
name (string, required): The list name to act on
action (string, required): "create", "rename", or "delete"
new_name (string, optional): Required when action is "rename" — the new name for the list
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | List name | |
| action | Yes | Action to perform | |
| new_name | No | New name (required for rename) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered structurally. The description confirms the destructive path via 'delete' but adds nothing beyond that — no note on whether deletion is permanent, whether a list must be empty first, or what happens to contained reminders.
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 prose is tight and front-loaded, leading with the action set. The Args block duplicates the schema, which is slightly redundant, but it keeps the conditional 'required for rename' rule visible without forcing a schema read.
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 three-action mutation tool with no output schema and annotations covering the destructive/idempotency profile, the description is nearly complete — the action set, target resource, and conditional parameter rule are all present. Only the post-delete consequences of affecting contained reminders are unaddressed.
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% and the schema documents all three parameters, including the enum and the conditional note for new_name. The Args block in the description largely mirrors the schema, adding only marginal clarity, so the baseline of 3 applies.
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?
States specific verbs (create, rename, delete) against a specific resource type (Apple Reminder list), and the resource distinguishes it cleanly from siblings like add_reminder and show_reminders that operate on individual reminders rather than lists.
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 second sentence gives an explicit when-to-use trigger ('when the user wants to organize their reminders by creating new lists, renaming existing ones, or removing lists'). It stops short of naming an alternative tool for adjacent needs such as listing or editing reminders, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_remindersShow RemindersARead-onlyIdempotent
Show reminders from Apple Reminders. Use when the user asks what they need to do, what's on their list, what's due, overdue, or wants to see their agenda/tasks.
Args:
filter (string, optional): today, tomorrow, week, overdue, upcoming, completed, all, or a date string. Defaults to "upcoming".
list (string, optional): Limit to a specific reminder list
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | Limit to a specific reminder list | |
| filter | No | Filter: today, tomorrow, week, overdue, upcoming, completed, all, or a date | upcoming |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is fully covered by structured data. The description adds the default filter behavior, which is genuinely useful, but says nothing about result ordering, limits, or how completed items appear.
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?
Front-loads purpose, follows with usage triggers, and closes with a compact arg list. The Args section largely duplicates the schema, but it is brief and scannable rather than wasteful.
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 zero-required-parameter, read-only list tool with no output schema and full annotation coverage, the description supplies everything needed to invoke it correctly. Minor gaps (return shape, ordering) are tolerable given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters including the enum values and default. The description restates the filter options and the default without adding format details (e.g., accepted date string syntax), which is the baseline 3 case.
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?
States a specific verb and resource ('Show reminders from Apple Reminders'), which cleanly separates it from the write-oriented siblings (add_reminder, edit_reminder, delete_reminders). It does not explicitly distinguish itself from list_reminder_lists, but the resource difference is implied clearly enough.
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?
Provides concrete trigger phrasing — 'what they need to do', 'what's on their list', 'what's due, overdue', 'agenda/tasks' — which maps well onto user intent. It lacks explicit exclusions or a named alternative (e.g., when to prefer complete_reminders), so it falls just short of a 5.
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.
7 tool updates
v1.0.0- First observed
add_reminder - First observed
complete_reminders - First observed
delete_reminders - First observed
edit_reminder - First observed
list_reminder_lists - First observed
manage_reminder_list - First observed
show_reminders
TDQS
Scored across 7 tools
Most tools are distinct, but complete_reminders overlaps with edit_reminder's complete/incomplete flags, and list_reminder_lists (which can show a list's contents) overlaps with show_reminders' list filter. The descriptions mitigate this somewhat but boundaries remain blurry.
Mostly verb_noun, but plurality is inconsistent (add_reminder vs show_reminders/complete_reminders/delete_reminders) and list_reminder_lists is an awkward verb_noun_noun construction. Still readable and mostly predictable.
Seven tools is well-scoped for a reminders domain, with each tool earning its place across create/read/edit/complete/delete/list-management operations.
Covers the full reminder lifecycle (add, show, edit, complete, delete) plus list management, leaving few gaps. Minor omissions like text search or batch reassignment are workable around via filters and edit.
Maintenance
Related MCP Connectors
MCP connector for Apple Reminders — search, create, complete, and edit via your own Mac.
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
Create, list, and complete todo items through MCP.
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Apple Reminders lists and reminders on macOS, including creating, updating, completing, and deleting reminders.7276 npm5MIT
- AlicenseNot gradedqualityDmaintenanceEnables fuzzy search, creation, and management of Apple Reminders via CLI or MCP tools.15 npmMIT
- 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
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server providing comprehensive integration with Apple Reminders, enabling CRUD operations, natural language date parsing, advanced search, and list management.-