apple-reminders-mcp-server
Provides tools to manage Apple Reminders (the reminders app on macOS) including creating, listing, updating, completing, and deleting reminders.
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-mcp-servercreate a reminder to submit report by Friday"
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-server
一个基于 MCP(Model Context Protocol) 的 macOS 提醒事项工具服务。 通过 AppleScript 操作系统原生「提醒事项」,以标准 MCP 协议(stdio 传输)暴露增删改查工具, 可被任何 MCP 兼容的 Agent / Host 接入使用。
本项目从 calendar-agent 的内置工具层重构而来—— 将进程内硬编码的工具函数解耦为独立、可复用的 MCP Server。
提供的工具
工具 | 说明 |
| 创建提醒事项,支持指定截止时间 |
| 列出未完成提醒,支持按时间范围过滤 |
| 列出已完成提醒,按完成时间范围过滤 |
| 修改指定提醒的标题或时间 |
| 标记指定提醒为已完成 |
| 删除指定提醒 |
Related MCP server: MCP Apple Reminders
环境要求
macOS(依赖系统「提醒事项」与 AppleScript)
Python 3.12+
快速开始
git clone https://github.com/yzheeng/apple-reminders-mcp-server
cd apple-reminders-mcp-server
uv sync
uv run apple-reminders-mcp-server首次调用工具时,macOS 会弹窗请求「自动化」权限(控制提醒事项),允许即可。
在 MCP Host 中接入
在你的 Host 配置中按如下方式声明(以通用 JSON 配置为例):
{
"mcpServers": {
"reminders": {
"command": "uv",
"args": ["--directory", "/path/to/reminder-mcp-server", "run", "reminder-mcp-server"]
}
}
}协议说明
传输方式:stdio(JSON-RPC 2.0,行分帧)
Available Tools
6 toolscomplete_reminderA
标记指定 id 的提醒事项为已完成。
Args: reminder_id: 提醒事项的 id(先用 list_reminders 查到)
| Name | Required | Description | Default |
|---|---|---|---|
| reminder_id | Yes |
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 the action without disclosing side effects (e.g., irreversibility, permissions, or behavior if already completed).
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 with a clear main action and an args section. It is front-loaded but could be more structured or formal.
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 one parameter and no output schema, the description covers the basic usage and parameter source. However, it lacks details on behavioral aspects and return behavior, leaving some gaps.
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 a single parameter with no description (0% coverage). The description adds meaning by clarifying that the id is obtained from list_reminders, which is valuable context.
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 explicitly states the action (mark as completed) and the resource (reminder by id). It clearly distinguishes from sibling tools like create, delete, update, list.
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 instructs to first use list_reminders to obtain the id, providing a prerequisite step. However, it does not specify when to use this tool versus alternatives or mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reminderB
创建一条提醒事项。
Args: title: 提醒的标题 due: 截止时间,格式 2026-06-04 18:00,可选
| Name | Required | Description | Default |
|---|---|---|---|
| due | No | ||
| title | Yes |
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 action and parameters, omitting details like idempotency, authentication needs, side effects, or return behavior. This is insufficient for a tool with no other behavioral hints.
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, using a Chinese sentence followed by parameter documentation in English. It wastes few words, though the 'Args:' header could be omitted for brevity. Front-loaded with the 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?
Given the tool's simplicity (2 parameters, no output schema), the description is minimally adequate. It covers the essential parameters but lacks information on return values, errors, or post-creation behavior, which would be useful 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?
With 0% schema description coverage, the description compensates by explaining 'title: 提醒的标题' and 'due: 截止时间,格式 2026-06-04 18:00,可选', adding meaning beyond the raw schema. The format example for 'due' is particularly helpful.
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 '创建一条提醒事项' (create a reminder item), specifying a concrete verb and resource. This distinctly differentiates it from sibling tools like complete_reminder, delete_reminder, etc.
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 explicit guidance is given on when to use this tool versus alternatives. While sibling names imply distinct actions, the description lacks any when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_reminderA
删除指定 id 的提醒事项。
Args: reminder_id: 提醒事项的 id(先用 list_reminders 查到)
| Name | Required | Description | Default |
|---|---|---|---|
| reminder_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It truthfully states that the tool deletes a reminder, but lacks details on reversibility, permissions, or return value, which are important for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two short sentences, front-loading the action and providing necessary context without verbosity.
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 low complexity (single parameter, no output schema), the description is largely complete. It could mention the result (e.g., success message or error), but it covers the essential information.
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 explains the meaning of the reminder_id parameter and suggests how to obtain it via list_reminders, adding value beyond the schema's bare type and zero coverage.
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 the resource 'reminder', and it distinguishes from sibling tools like create_reminder and list_reminders by specifying the action of deletion.
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 advises using list_reminders first to obtain the id, providing a clear prerequisite. It implicitly distinguishes from other actions like completing, but does not explicitly state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_completed_remindersA
查询「已完成」的提醒事项。当用户想统计/回顾过去做了什么时用它 (例如「过去一周我完成了几场面试」)。按「完成时间」过滤,不是截止时间。
Args: start: 完成时间范围起点,格式 YYYY-MM-DD HH:MM,可选。例如「过去一周」 用 7 天前的 00:00。建议总是传一个起点,避免一次拉回过多历史。 end: 完成时间范围终点,格式 YYYY-MM-DD HH:MM,可选。例如「过去一周」 用今天 23:59。
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the key behavior (filtering by completion time, not due time) and optional parameters. However, it does not describe return format, pagination, or any limitations beyond the start advice.
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?
Reasonably concise with a clear separation of purpose and parameter details. A bit of redundancy in the examples could be trimmed, but overall efficient.
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?
Completeness is good given the simplicity: purpose, parameter semantics, and usage advice are covered. The lack of output schema is mitigated by the clear return context (completed reminders). Could mention if it returns all fields or a summary.
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?
Both parameters are explained in detail: format (YYYY-MM-DD HH:MM), optional, and concrete examples for 'past week'. This adds significant value since the schema has 0% description coverage.
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?
Clearly states it queries completed reminders with specific filtering by completion time. The description explicitly distinguishes this from listing all reminders (sibling list_reminders) by emphasizing '已完成' and '完成时间'.
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 context for when to use (reviewing/completing tasks like past week interviews) and gives practical advice to always pass a start to avoid large result sets. Does not explicitly exclude alternatives but the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_remindersA
当用户想查看、修改、删除或完成提醒前,用它列出当前未完成提醒及其 id。 用户提到时间范围时通过 start/end 参数缩小范围。
Args: start: 时间范围起点,格式 YYYY-MM-DD HH:MM,可选。例如「今天」用今天 00:00, 「本周」用本周一 00:00。仅在用户提到时间范围时传入。 end: 时间范围终点,格式 YYYY-MM-DD HH:MM,可选。例如「今天」用今天 23:59, 「未来三天」用第三天的 23:59。 include_undated: 是否一并返回没有截止时间的提醒,默认 False; 仅在传了 start 或 end 时生效。
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| include_undated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavior. It clarifies that only uncompleted reminders are listed and explains parameter effects. However, it does not disclose rate limits, authentication needs, or return format details beyond mentioning 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?
The description is concise with two paragraphs and a parameter list. The purpose is front-loaded, and every sentence serves a clear purpose. No fluff.
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 list tool with 3 optional params, the description covers use case and parameter semantics well. It lacks explicit output schema info, but mentions returning ids and uncompleted reminders. Could improve by stating that no output schema is provided.
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 0%, so the description fully explains parameters: date formats, example values, conditions for use (e.g., include_undated only when start/end given). This adds significant 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 clearly states the tool lists uncompleted reminders for viewing, modifying, deleting, or completing. It explicitly distinguishes from siblings by focusing on uncompleted reminders and includes id retrieval.
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 says when to use (before viewing/modifying/deleting/completing) and when to use time range filtering. It implies not for completed reminders, but does not explicitly name list_completed_reminders as alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_reminderA
修改指定 id 的提醒事项的标题或截止时间。
Args: reminder_id: 提醒事项的 id(先用 list_reminders 查到) new_title: 新标题,可选 new_due: 新截止时间,格式 2026-06-04 18:00,可选
| Name | Required | Description | Default |
|---|---|---|---|
| new_due | No | ||
| new_title | No | ||
| reminder_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It indicates an update operation but omits details like whether partial updates are allowed, what happens if both optional fields are omitted, or what the response contains. This leaves significant behavioral ambiguity.
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 with a purpose sentence followed by an Args list. It is front-loaded and each part is relevant. Minor improvement could be more international phrasing, but overall efficient.
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 no output schema and no annotations, the description adequately explains purpose and parameters but lacks information on return values, error handling, or behavior on missing id. It meets minimum viability but has gaps.
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 0%, and the description compensates by explaining each parameter: reminder_id usage via list_reminders, new_title as optional, and new_due with a format example. This adds meaning 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 clearly states the tool modifies a reminder's title or due time, specifying the resource (reminder) and action (modify). It distinguishes from sibling tools like create_reminder, delete_reminder, or complete_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 advises first using list_reminders to obtain the id, providing clear context for use. However, it does not explicitly state when not to use this tool (e.g., for completing reminders) or mention alternatives.
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_completed_reminders - First observed
list_reminders - First observed
update_reminder
TDQS
Scored across 6 tools
Each tool targets a distinct action: create, list (incomplete), list completed, complete, update, delete. No overlapping functionality.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_reminder, list_reminders, complete_reminder). No deviations.
With 6 tools, the set covers the essential operations for reminders without bloat. It is well-scoped for the domain.
Covers full CRUD plus listing completed reminders. Missing a dedicated 'get' for a single reminder by ID, but list_reminders can serve that purpose. Minor gap.
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.
Local-first task manager: create, edit, and complete tasks, projects, and checklists via MCP.
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables fuzzy search, creation, and management of Apple Reminders via CLI or MCP tools.6MIT
- 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
- AlicenseNot gradedqualityCmaintenanceMCP server for Apple Reminders, enabling management of reminders and lists via tools like add, edit, complete, and delete reminders.MIT