日历管理服务器

一个纯Swift实现的日历管理服务器,提供原生macOS日历访问功能,适用于AI助手如Claude。

  • by AlexChambers
  • Swift
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 AlexChambers/calendar-mcp

使用说明

日历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的安装

  1. 构建服务器(见上文)

  2. 使用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
    
  3. 服务器将在您的所有项目中可用

其他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的安装

  1. 构建服务器(见上文)

  2. 添加到Claude桌面配置:

    打开 ~/Library/Application Support/Claude/claude_desktop_config.json 并添加:

    {
        "mcpServers": {
            "calendar-mcp": {
                "type": "stdio",
                "command": "/path/to/calendar-mcp/.build/release/calendar-mcp"
            }
        }
    }
    
  3. 重新启动克劳德桌面

  4. 首次使用时,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 (可选)-目标日历ID
    • location (可选)-活动地点
    • 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开发人员!