macOS生态系统MCP服务器
Claude的快速原生模型上下文协议(MCP)服务器,可直接访问macOS生产力应用程序: 提醒事项, 日历,以及 备注.
为什么要重写?
最初的Node.js/TypeScript服务器外包给 osascript 为了 每 工具调用——每次增加300-800ms的进程启动开销。
Swift重写:
- 用途 EventKit 的 本机用于提醒和日历(无子流程)
- 只有贝壳出来
osascript 对于Notes(Notes.framework是私有的) - 编译为a 单一自包含二进制文件 --不需要Node.js运行时
- 通过以下方式直接说出MCP stdio协议 官方Swift SDK
特性
🗓️ 提醒(4个工具--EventKit)
reminders_add --创建带有标题、注释、截止日期和优先级的提醒reminders_list --列出提醒,按列表和完成状态过滤reminders_complete --将提醒标记为已完成(按ID或标题)reminders_search --按关键字搜索提醒
📅 日历(5个工具--EventKit)
calendar_create_event --创建具有位置、注释、警报的事件calendar_list_events --列出日期范围内的事件calendar_find_free_time --查找可用的时间段calendar_update_event --修改现有事件calendar_delete_event --删除事件
📝 注释(3个工具--osascript)
notes_create --创建带有标题和正文的笔记(支持HTML)notes_append --将内容添加到现有注释中notes_search --按关键字搜索笔记
需求
- macOS 13 Ventura或更高版本
- Xcode 15+/Swift 5.9+(仅限内部版本)
- 在中授予的提醒、日历和笔记访问权限 系统设置→ 隐私和安全
从源代码构建
git clone https://github.com/neverprepared/macos-ecosystem-mcp.git
cd macos-ecosystem-mcp
swift build -c release
二进制文件放置在:
.build/release/macos-mcp
在系统范围内安装:
sudo cp .build/release/macos-mcp /usr/local/bin/macos-mcp
macOS权限
二进制文件第一次运行时,它将请求访问。您也可以提前授予:
- 系统设置→ 隐私和安全→ 提醒事项 --添加
macos-mcp - 系统设置→ 隐私和安全→ 日历 --添加
macos-mcp - 系统设置→ 隐私和安全→ 自动化→ Notes --添加
macos-mcp
Claude桌面配置
将此添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"macos-ecosystem": {
"command": "/usr/local/bin/macos-mcp"
}
}
}
或者使用本地构建路径:
{
"mcpServers": {
"macos-ecosystem": {
"command": "/path/to/macos-ecosystem-mcp/.build/release/macos-mcp"
}
}
}
编辑配置后重新启动Claude Desktop。
工具参考
汇款人\_ add
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|
| title | 字符串 | ✓ | — | 提醒标题 |
| list | string | | “提醒” | 列表名称 |
| 注释 | 字符串 | | -- | 正文 |
| dueDate | string | | -- | ISO 8601日期时间 |
| 优先级 | 无 | 低 | 中 | 高 | “无” | 优先级 |
提醒列表
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|
| list | string | | -- | 按列表筛选 |
| includeComplete | 布尔值 | | false | 包含已完成 |
| limit | 整数 | | 50 | 最大结果(1–100) |
备忘录_完成
| 参数 | 类型 | 必填 | 说明 |
|---|
| reminderId | string | (其中之一) | EventKit日历项目标识符 |
| title | string | (其中之一) | 提醒标题 |
| list | string | | 将搜索范围缩小到列表 |
提醒搜索
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|
| 查询 | 字符串 | ✓ | — | 搜索关键字 |
| list | string | | -- | 限制为列表 |
| includeComplete | 布尔值 | | false | 包含已完成 |
| limit | 整数 | | 20 | 最大结果 |
日历创建事件
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|
| title | 字符串 | ✓ | — | 活动标题 |
| startDate | 字符串 | ✓ | — | ISO 8601开始 |
| endDate | 字符串 | ✓ | — | ISO 8601结束 |
| 日历 | 字符串 | | 系统默认值 | 日历名称 |
| 位置 | 字符串 | | -- | 位置 |
| 备注 | 字符串 | | -- | 描述 |
| allDay | boolean | | false | 全天事件 |
| 警报 | 整数\[\] | | -- | 警报偏移量(分钟) |
日历列表事件
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|
| startDate | 字符串 | ✓ | — | ISO 8601范围启动 |
| endDate | 字符串 | ✓ | — | ISO 8601范围结束 |
| 日历 | 字符串 | | -- | 按日历筛选 |
| limit | 整数 | | 50 | 最大结果 |
日历时间
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|
| 日期 | 字符串 | ✓ | — | ISO 8601搜索日 |
| 持续时间 | 整数 | ✓ | — | 所需时段(15-480分钟) |
| 工作时间开始 | 整数 | | 9 | 开始时间(0–23) |
| 工作小时结束 | 整数 | | 17 | 结束小时(0–23) |
| 日历 | 字符串 | | -- | 仅限于日历 |
日历更新事件
| 参数 | 类型 | 必填 | 说明 |
|---|
| eventid | string | 视觉透明; | 增强事件的透明度 |
| title | 字符串 | | 新标题 |
| startDate | string | | 新ISO 8601开始 |
| endDate | string | | 新ISO 8601结束 |
| 位置 | 字符串 | | 新位置 |
| 备注 | 字符串 | | 新描述 |
日历_删除_事件
| 参数 | 类型 | 必填 | 说明 |
|---|
| eventId | string | (其中之一) | EKEvent事件标识符 |
| title | string | (其中之一) | 事件标题 |
| date | string | | ISO 8601日期以缩小搜索范围 |
notes_create
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|
| title | 字符串 | ✓ | — | 注释标题 |
| 正文 | 字符串 | ✓ | — | 钞票主体 |
| 文件夹 | string | | “Notes” | 文件夹名称 |
notes_append
| 参数 | 类型 | 必填 | 说明 |
|---|
| noteId | string | (其中之一) | AppleScript笔记ID |
| title | string | (其中之一) | 注释标题 |
| 文件夹 | 字符串 | | 窄搜索 |
| 内容 | 字符串 | ✓ | 要附加的内容 |
notes_search
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|
| 查询 | 字符串 | ✓ | — | 搜索关键字 |
| 文件夹 | 字符串 | | -- | 仅限于文件夹 |
| limit | 整数 | | 20 | 最大结果 |
建筑
Sources/macos-mcp/
├── App.swift # @main entry — MCP server setup and tool dispatcher
├── ToolDefinitions.swift # JSON Schema definitions for all 12 tools
├── EventKitManager.swift # Swift actor wrapping EKEventStore (reminders + calendar)
└── NotesHandler.swift # osascript runner for Notes operations
标记提醒事项说明
EventKit不公开提醒的“标记”状态(它是特定于提醒的应用程序属性,不在EventKit API中)。这 flagged 参数被接受,但在创建提醒时会被默默忽略。
许可证
麻省理工学院