日历事件管理服务器

一个用于Google Calendar集成的Model Context Protocol (MCP)服务器,提供日历事件的增删改查操作。

  • by eduruesta
  • Kotlin
  • 本地部署
  • 更新于
在 GitHub 查看 eduruesta/google-calendar-mcp-server

使用说明

谷歌日历MCP服务器

用于Google日历集成的模型上下文协议(MCP)服务器,为日历事件提供CRUD操作。

特性

  • 列出事件:使用可选筛选器检索日历事件
  • 创建事件:创建包含标题、时间、地点和与会者的新日历事件
  • 更新事件:修改现有日历事件
  • 删除事件:删除日历事件

先决条件

  • Java 17或更高版本
  • 启用日历API的Google云平台帐户
  • Google日历API的服务帐户凭据

设置

1.谷歌云设置

  1. 转到 谷歌云控制台
  2. 创建新项目或选择现有项目
  3. 启用Google日历API:
    • 导航到“API和服务”>“库”
    • 搜索“Google日历API”
    • 点击“启用”

2.服务帐户设置

  1. 在Google Cloud控制台中,转到“API和服务”>“凭据”
  2. 点击“创建凭据”>“服务帐户”
  3. 填写服务帐户详细信息并创建
  4. 点击已创建的服务帐户
  5. 转到“密钥”选项卡
  6. 点击“添加密钥”>“创建新密钥”>“JSON”
  7. 下载JSON文件并安全保存

3.日历权限

要允许服务帐户访问您的日历:

  1. 打开谷歌日历
  2. 转到日历设置
  3. 在“与特定人员共享”下,添加服务帐户电子邮件(在JSON文件中找到)
  4. 授予它“更改事件”权限

4.环境设置

设置指向凭据文件的环境变量:

export GOOGLE_CREDENTIALS_PATH="/Users/eduardoruesta/Workplace/google-calendar-mcp-server/credentials.json"

5.构建和运行

# Build the project
./gradlew build

# Run the server
./gradlew run

MCP工具

list_事件

从Google日历中列出日历事件。

参数:

  • calendar_id (可选):日历ID,默认为“主”
  • max_results (可选):要返回的最大事件数,默认为10
  • time_min (可选):事件开始时间的下限(ISO 8601格式)
  • time_max (可选):事件开始时间的上限(ISO 8601格式)

例子:

{
  "name": "list_events",
  "arguments": {
    "max_results": 5,
    "time_min": "2024-01-01T00:00:00Z"
  }
}

create_event

创建新的日历事件。

所需参数:

  • summary:事件标题
  • start_time:开始时间(ISO 8601格式)
  • end_time:结束时间(ISO 8601格式)

可选参数:

  • description:事件描述
  • location:活动地点
  • attendees:电子邮件地址数组
  • calendar_id:日历ID(默认为“主”)

例子:

{
  "name": "create_event",
  "arguments": {
    "summary": "Team Meeting",
    "description": "Weekly team sync",
    "start_time": "2024-01-15T10:00:00Z",
    "end_time": "2024-01-15T11:00:00Z",
    "location": "Conference Room A",
    "attendees": ["team@company.com"]
  }
}

update_事件

更新现有日历事件。

所需参数:

  • event_id:要更新的事件的ID

可选参数:

  • summary:新事件标题
  • description:新事件描述
  • start_time:新的开始时间(ISO 8601格式)
  • end_time:新结束时间(ISO 8601格式)
  • location:新活动地点
  • attendees:新的电子邮件地址数组
  • calendar_id:日历ID(默认为“主”)

例子:

{
  "name": "update_event",
  "arguments": {
    "event_id": "abc123def456",
    "summary": "Updated Team Meeting",
    "location": "Conference Room B"
  }
}

删除事件

删除日历事件。

所需参数:

  • event_id:要删除的事件的ID

可选参数:

  • calendar_id:日历ID(默认为“主”)

例子:

{
  "name": "delete_event",
  "arguments": {
    "event_id": "abc123def456"
  }
}

时间格式

所有时间参数应采用ISO 8601格式。示例:

  • 2024-01-15T10:00:00Z (UTC)
  • 2024-01-15T10:00:00-05:00 (带时区偏移)

错误处理

服务器为常见问题提供详细的错误消息:

  • 缺少必要参数
  • 时间格式无效
  • 身份验证失败
  • 日历访问权限问题

发展

运行测试

./gradlew test

建筑分布

./gradlew shadowJar

构建的JAR将在 build/libs/.

安全说明

  • 安全地存储您的Google服务帐户凭据
  • 从不将凭据提交到版本控制
  • 使用环境变量作为凭据路径
  • 确保您的服务帐户具有所需的最低权限

故障排除

常见问题

  1. 认证错误:验证 GOOGLE_CREDENTIALS_PATH 指向有效的服务帐户JSON文件
  2. 权限不足:确保以适当的权限将服务帐户电子邮件添加到您的日历中
  3. 未找到事件:检查事件ID是否正确,以及事件是否存在于指定的日历中
  4. 时间格式错误:确保所有日期时间参数都采用ISO 8601格式

许可证

该项目根据MIT许可证获得许可。