reminders-mcp
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., "@reminders-mcpshow 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.
ποΈ reminders-mcp

macOS only β this server uses AppleScript to communicate with the macOS Reminders app.
A Model Context Protocol (MCP) server that lets Claude read and manage your macOS Reminders. Create, list, update, complete, and delete reminders directly from any MCP-compatible client such as Claude Desktop.
Requirements
macOS
Python 3.11+
uv β install with
curl -LsSf https://astral.sh/uv/install.sh | shmacOS Reminders app (you'll be prompted to grant Automation permission on first run)
Related MCP server: Apple Reminders MCP Server
Installation
git clone https://github.com/mhtb32/reminders-mcp.git
cd reminders-mcp
uv syncClaude Desktop Setup
Add the following to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"ποΈ reminders": {
"command": "/Users/YOUR_USERNAME/.local/bin/uv",
"args": ["run", "--directory", "/path/to/reminders-mcp", "reminders-mcp"]
}
}
}Replace YOUR_USERNAME and /path/to/reminders-mcp with your actual values, then restart Claude Desktop.
Tools
Tool | Description |
| Get all reminder list names |
| List reminders (with name, due date, notes, and completion status), optionally filtered by list |
| Create a reminder with optional due date and notes |
| Update the title, notes, or due date of an existing reminder |
| Mark a reminder as completed |
| Delete a reminder permanently |
Example Usage
Once connected, you can ask Claude things like:
"What are my reminders for today?"
"Add a reminder to buy groceries tomorrow at 9am"
"Update the notes on my 'Call dentist' reminder to include the phone number"
"Rename my 'Pay rent' reminder to 'Pay rent + utilities'"
"Mark the 'Call dentist' reminder as done"
"Show me everything in my Work list"
How It Works
This server uses AppleScript to communicate with the macOS Reminders app. No data leaves your machine β everything runs locally.
Project Structure
reminders-mcp/
βββ src/reminders_mcp/
β βββ __init__.py
β βββ reminders.py # AppleScript interface to macOS Reminders
β βββ server.py # MCP server (FastMCP)
βββ pyproject.toml
βββ uv.lock
βββ README.mdLicense
MIT
Available Tools
6 toolscomplete_reminderA
Mark a reminder as completed.
Args: name: The exact name of the reminder to complete. list_name: Optional list name to narrow the search.
Returns: True if the reminder was found and completed, False otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| list_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It does disclose the return value (True if found and completed, False otherwise) and the effect of the optional list_name. However, it does not address edge cases like duplicate names, idempotency (already completed), or permissions, leaving gaps in full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line purpose, an Args section with per-parameter explanations, and a Returns section. No redundant or extraneous content earns a top score.
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 tool with 2 parameters and a boolean return, the description covers the essential aspects: purpose, parameters, and return value. It does not cover edge-case behavior, but given the simple scope and the presence of an output schema, this is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It explains both parameters: 'name' must be the exact name, and 'list_name' is optional and 'narrow[s] the search'. This adds meaningful context beyond the schema, though it could be more detailed about formatting or uniqueness.
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 with the specific verb 'Mark' and the resource 'reminder', along with the action 'completed'. This distinguishes it from sibling tools like create_reminder, update_reminder, and delete_reminder by focusing specifically on the completion status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this tool is for completing a reminder, and the optional list_name parameter narrows the search. However, it does not explicitly mention when to choose this over update_reminder or list any exclusions, so it falls short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reminderA
Create a new reminder in the macOS Reminders app.
Args: name: The title of the reminder. list_name: The list to add the reminder to. Uses the default list if empty. due_date: Optional due date, e.g. "February 28, 2026 at 9:00 AM". notes: Optional notes/body for the reminder.
Returns: The name of the created reminder.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| notes | No | ||
| due_date | No | ||
| list_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly states the action (create), the default list behavior, optional parameters, and return value. It does not mention permissions or side effects, but for a simple create operation, it provides sufficient transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence, an Args block, and a Returns line. Every sentence adds value, including the date format example. No fluff or redundancy.
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?
The description covers all parameters and return value, making it complete for a simple CRUD creation tool. It lacks details on potential errors or prerequisites, but these are not critical for such a straightforward operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds full meaning to all four parameters, compensating for the 0% schema description coverage. It explains name, list_name (including default behavior), due_date (with example format), and notes. This goes far beyond the schema titles and defaults.
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: 'Create a new reminder in the macOS Reminders app.' This clearly distinguishes the tool from siblings like list_reminders (read), update_reminder, complete_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?
Usage context is implied by the verb 'create' and the description of adding to a list, but there is no explicit guidance on when to prefer this tool over alternatives like update_reminder or complete_reminder. Exclusions and alternatives are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_reminderA
Delete a reminder permanently.
Args: name: The exact name of the reminder to delete. list_name: Optional list name to narrow the search.
Returns: True if the reminder was found and deleted, False otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| list_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that deletion is permanent, requires the exact name, and returns True/False based on whether the reminder was found and deleted. This covers key behavior, though it does not mention idempotency, errors, or side effects beyond deletion.
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 highly concise: one primary action sentence, followed by a structured Args/Returns section. Every sentence provides value, with no redundant or vague phrasing. It is front-loaded with the essential purpose.
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 two-parameter deletion tool, the description covers the action, parameters, and return behavior. It also notes the permanence of the delete operation. The presence of an output schema does not reduce the need here, as the description already explains return values. There are no gaps in understanding how to invoke this 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?
Since schema description coverage is 0%, the description must fully explain the parameters. It does: 'name' is described as the exact name of the reminder, and 'list_name' is described as an optional narrow search. This adds significant meaning beyond the schema's simple field names.
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 'Delete a reminder permanently,' which clearly states the action and target resource. This distinguishes the tool from siblings like create_reminder, update_reminder, and complete_reminder by using the specific verb 'delete' and noting permanence.
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 gives clear context for when to use the tool: when you want to permanently remove a reminder. It also explains the optional 'list_name' parameter as a way to narrow the search, guiding usage. However, it does not explicitly contrast with alternatives like 'complete_reminder,' so it misses a full when-not-to-use explanation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reminder_listsA
List all reminder lists available in the macOS Reminders app.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states that the tool lists all reminder lists, which implies a read-only operation, but it does not disclose any additional behavioral traits such as whether hidden lists are included, if any permissions are needed, or how results are ordered. This is adequate for a simple zero-parameter tool but lacks depth.
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, complete sentence that is front-loaded with the action and object. It contains no fluff or redundant information, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters, clear purpose), the description fully covers what the tool does. An output schema exists to describe return values, so the description does not need to explain those. It is contextually complete for its scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema adds no information. The baseline for 0 params is 4, and the description does not need to add parameter-level semantics. It correctly focuses on the tool's action rather than parameter details.
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 a specific verb ('List'), resource ('reminder lists'), and context ('macOS Reminders app'), and it distinguishes itself from sibling tools that operate on individual reminders (e.g., list_reminders, create_reminder). It is unambiguous and informative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not explicitly state that this is for obtaining list metadata or IDs before working with reminders, nor does it contrast with list_reminders. The usage is only implied by the tool's name and purpose, offering no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_remindersA
List reminders from the macOS Reminders app.
Args: list_name: Optional name of a specific list to filter by. Leave empty for all lists. include_completed: Whether to include completed reminders (default: False).
| Name | Required | Description | Default |
|---|---|---|---|
| list_name | No | ||
| include_completed | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the default behavior for include_completed (False) and the filtering semantics for list_name, but does not explicitly state the operation is read-only, nor disclose return format, pagination, or sorting. It provides a basic but not comprehensive behavioral profile.
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?
Very concise: a one-sentence summary followed by a compact Args block. No redundant text, information is front-loaded, and every sentence adds value.
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 tool with two parameters and an output schema (which covers return format), the description covers the essential behaviors. It could be slightly improved by mentioning that the operation is read-only, but it is complete enough to use correctly. It does not discuss alternatives, but that is not required for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides types and defaults but no property descriptions (0% coverage). The description explains each parameter meaningfully: list_name filters by a specific list and handles empty input, while include_completed controls inclusion of completed items with its default. This adds significant semantic value beyond 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 uses a specific verb ('List') and resource ('reminders from the macOS Reminders app'), clearly distinguishing it from sibling tools like list_reminder_lists (which lists lists) and mutation tools. The purpose is unambiguous and front-loaded.
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 clear context on the tool's function and filtering options (list_name, include_completed). However, it does not explicitly mention when to use this over sibling tools (e.g., list_reminder_lists) or any exclusions, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_reminderA
Update properties of an existing reminder.
Args: name: The exact current name of the reminder to update. list_name: Optional list name to narrow the search. new_name: New title for the reminder. Leave empty to keep unchanged. notes: New notes/description. Leave empty to keep unchanged. due_date: New due date, e.g. "February 28, 2026 at 9:00 AM". Leave empty to keep unchanged.
Returns: True if the reminder was found and updated, False otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| notes | No | ||
| due_date | No | ||
| new_name | No | ||
| list_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It clearly states the return value: 'True if the reminder was found and updated, False otherwise.' It also discloses that leaving optional fields empty means 'keep unchanged,' which is key for an update operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with an Args section and a Returns section. It covers all necessary details without redundancy. Every sentence adds value, and the content is well organized for quick parsing.
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 CRUD tool with five parameters and one required, the description is comprehensive. It documents all parameters, explains the search-narrowing behavior, and specifies the boolean return value. The output schema likely defines the return type, but the description adds explicit semantics that are valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema's parameter descriptions are entirely absent (0% coverage), so the description must compensate. It provides thorough explanations for all five parameters, including a concrete example for due_date ('February 28, 2026 at 9:00 AM') and the exact semantics of name and 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 clearly states the tool's function: 'Update properties of an existing reminder.' This specifies a verb and resource, and distinguishes it from siblings like create_reminder, complete_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 implies usage by explaining that 'name' is required and 'list_name' narrows the search, but it does not explicitly state when to use this tool versus alternatives. There is no mention of 'use create_reminder for new reminders' or similar, leaving the guidance to inference.
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.
6 tool updates
v0.1.0- First observed
complete_reminder - First observed
create_reminder - First observed
delete_reminder - First observed
list_reminder_lists - First observed
list_reminders - First observed
update_reminder
TDQS
Scored across 6 tools
Each tool maps to a distinct action and resource: lists vs reminders, and create/update/complete/delete are clearly separated. No overlap in purpose.
All six tools follow a consistent verb_noun pattern (list_, create_, update_, complete_, delete_), making the API predictable and easy to navigate.
With 6 tools, the server is well-scoped for a reminders appβcovering listing, creation, update, completion, and deletion without bloat or missing essentials.
The lifecycle is well-covered, but there is no way to uncomplete a reminder or fetch a single reminder by ID. List with filtering mitigates this, but a status-reversal would round out the surface.
Maintenance
Related MCP Connectors
MCP connector for Apple Reminders β search, create, complete, and edit via your own Mac.
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Personal CRM for Claude. Contacts live as plain-text files in your own Google Drive.
Related MCP Servers
- FlicenseBqualityCmaintenanceEnables users to add tasks to Apple Reminders through natural language commands in Claude Desktop. It provides quick entry for reminders with support for due dates, lists, and notes.1-
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Apple Reminders lists and reminders on macOS, including creating, updating, completing, and deleting reminders.789 npm5MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to read and search Apple Reminders tasks on macOS, including lists, incomplete/completed items, and keyword search, all locally without modifying data.89 npm1MIT
- AlicenseAqualityFmaintenanceEnables Claude to manage Apple Reminders on macOS, including creating, reading, updating, deleting, and searching reminders across multiple lists with due dates, priorities, and notes.689 npm29MIT