使用说明
日历MCP服务器
模型上下文协议(MCP)服务器的纯Swift实现,为Claude等AI助手提供本地macOS日历(EventKit)访问。
特性
- 纯Swift:单个编译的二进制文件,没有依赖关系
- 本地EventKit集成:直接访问macOS日历
- 简单轻便:~400KB二进制文件,即时启动
- 零配置:开箱即用
可用工具
事件管理
calendar_list_events-列出日期范围内的事件calendar_create_event-创建新的日历事件calendar_get_event-获取特定事件的详细信息calendar_update_event-更新现有事件calendar_delete_event-删除事件calendar_search_events-按标题、注释或位置搜索事件
日历管理
calendar_list_calendars-列出所有可用日历及其详细信息
先决条件
- macOS 13.0或更高版本
- Swift 5.9或更高版本
- Xcode命令行工具
建筑
# Clone the repository
git clone https://github.com/alexchambers/calendar-mcp.git
cd calendar-mcp
# Build the server
swift build -c release
# Or use the build script
./build.sh
Claude Code的安装
-
构建服务器(见上文)
-
使用MCP命令添加到Claude代码中:
# Remove existing version (if any) claude mcp remove calendar-mcp -s user # Add the server to user space (available in all projects) claude mcp add calendar-mcp -s user /path/to/calendar-mcp/.build/release/calendar-mcp -
服务器将在您的所有项目中可用
其他MCP命令
# List all MCP servers
claude mcp list
# List only user-space servers
claude mcp list -s user
# Remove from user space
claude mcp remove calendar-mcp -s user
# Add to project-specific space (current project only)
claude mcp add calendar-mcp /path/to/calendar-mcp/.build/release/calendar-mcp
Claude Desktop的安装
-
构建服务器(见上文)
-
添加到Claude桌面配置:
打开
~/Library/Application Support/Claude/claude_desktop_config.json并添加:{ "mcpServers": { "calendar-mcp": { "type": "stdio", "command": "/path/to/calendar-mcp/.build/release/calendar-mcp" } } } -
重新启动克劳德桌面
-
首次使用时,macOS将提示您访问日历。授予服务器工作权限。
使用示例
安装后,您可以要求Claude:
查看事件
- “显示我下周的日历事件”
- “列出我在12月1日至12月15日期间的活动”
- “今天我的日历上有什么?”
- “获取事件ID ABC123的详细信息”
创建事件
- “明天9:00至9:30创建一个名为“团队站立”的会议”
- “3月15日安排一场名为‘会议’的全天活动”
- “添加周五下午2点医生预约,地点为‘医疗中心’”
- “在接下来的10天里,每天上午9点创建一个定期会议”
- “每周一下午2点安排一次团队会议”
- “在每月1日设置月度账单提醒”
管理活动
- 将会议标题更新为“每日站立”
- “将我下午3点的会议改为下午4点”
- “删除ID为XYZ789的事件”
- “将我的牙医预约地点更改为‘市中心诊所’”
搜索事件
- “查找标题中包含“meeting”的所有事件”
- “搜索下个月包含“项目审查”的事件”
- “显示‘A会议室’的所有活动”
日历管理
- “列出我的所有日历”
- “显示我可以在哪些日历中创建事件”
重复发生的事件
- “创建30天的每日站立会议”
- “每周五下午3点安排一次团队会议”
- “在15日设置每月账单提醒”
- “创建年度生日提醒”
- “每周二和周四上午10点安排一次会议”
- “设立季度审查会议(每3个月一次)”
工具参考
日历列表事件
列出日期范围内的日历事件。
- 参数:
startDate(YYYY-MM-DD),endDate(年-月-日) - 退货:事件列表,包括标题、开始/结束时间和地点
日历创建事件
创建新的日历事件。
- 参数:
title(必填)-活动标题startDate(必填)-开始日期/时间(YYYY-MM-DD或YYYY-MM-MM-DD HH:MM)endDate(必填)-结束日期/时间(YYYY-MM-DD或YYYY-MM-MM-DD HH:MM)calendarId(可选)-目标日历IDlocation(可选)-活动地点notes(可选)-事件描述allDay(可选)-用于全天事件的布尔值- 重复参数(可选):
recurrenceFrequency-每日、每周、每月、每年recurrenceInterval-每N个间隔重复一次(默认值:1)recurrenceEndDate-重复的结束日期(YYYY-MM-DD)recurrenceCount-最大出现次数recurrenceWeekdays-工作日数组(周日、周一等)recurrenceDaysOfMonth-月/年的天数数组(1-31)recurrenceMonths-年度月份数组(1-12)
- 退货:带有事件ID的成功消息
日历_事件
获取特定事件的详细信息。
- 参数:
eventId(必填)-事件标识符 - 退货:完整的活动详细信息,包括与会者、警报、重复
日历更新事件
更新现有日历事件。
- 参数:
eventId(必填)-事件标识符title,startDate,endDate,location,notes,allDay(可选)- 重复参数(可选):
recurrenceFrequency-每日、每周、每月、每年recurrenceInterval-每N个间隔重复一次(默认值:1)recurrenceEndDate-重复的结束日期(YYYY-MM-DD)recurrenceCount-最大出现次数recurrenceWeekdays-工作日数组(周日、周一等)recurrenceDaysOfMonth-月/年的天数数组(1-31)recurrenceMonths-年度月份数组(1-12)
- 退货:成功确认
日历_删除_事件
删除日历事件。
- 参数:
eventId(必填)-事件标识符 - 退货:成功确认
日历搜索事件
按标题、注释或位置搜索事件。
- 参数:
query(必填)-搜索文本startDate,endDate(可选)-要搜索的日期范围calendarId(可选)-要搜索的特定日历
- 退货:匹配事件列表
日历列表_日历
列出所有可用日历。
- 参数:无
- 退货:日历详细信息,包括ID、类型、来源和权限
安全
服务器通过macOS的标准权限系统请求日历访问。首次使用时,系统会提示您授予访问权限。服务器仅在通过Claude明确请求时访问日历数据。
建筑
整个服务器在一个Swift文件中实现(SimpleServer.swift)即:
- 处理stdio上的JSON-RPC通信
- 直接与EventKit集成以访问日历
- 无需外部依赖即可实现MCP协议
技术细节
- 运输:stdio(标准输入/输出)
- 协议:JSON-RPC 2.0上的MCP
- 日历访问:EventKit框架
- 并发:Swift异步/等待
故障排除
日历访问被拒绝
如果您看到“日历访问被拒绝”,请转到“系统设置”>“隐私和安全”>“日历”,并确保终端或Claude具有访问权限。
服务器未启动
检查Claude Desktop配置中的路径是否正确,以及二进制文件是否可执行:
chmod +x /path/to/calendar-mcp/.build/release/calendar-mcp
调试
服务器记录到stderr。您可以在Claude Desktop的MCP服务器输出中看到日志。
许可证
MIT许可证-有关详细信息,请参阅许可证文件
贡献
欢迎投稿!请随时提交问题或拉取请求。
为什么选择纯Swift?
该项目展示了在Swift中构建MCP服务器的简单性:
- 无依赖关系:只有Swift和macOS框架
- 类型安全Swift的类型系统确保协议合规性
- 演出:编译的二进制文件具有本机性能
- 直接积分法:不需要桥接或子流程
- 单一语言:Swift中的整个堆栈
非常适合想要用原生功能扩展AI助手的macOS开发人员!