日历事件管理服务

基于Axum框架的MCP服务器,通过OAuth认证实现AI代理对Google日历事件的读写操作,支持多用户隔离和自动令牌刷新。

  • by kamekamek
  • Rust
  • 混合部署
  • 更新于
在 GitHub 查看 kamekamek/googlecalendar-mcp

使用说明

Google 日历 MCP 服务器

英语 | 日语

一个基于Axum的MCP服务器,使AI代理能够读写Google日历事件。通过模型上下文协议(MCP)使用OAuth认证访问Google日历API。

特点/特性

  • 🔐 支持PKCE的OAuth 2.0认证
  • 📅 四项操作:列出、获取、创建和更新日历事件
  • 🚀 通过服务器发送事件(SSE)实现远程MCP传输
  • 🔄 自动令牌刷新
  • 👥 支持多用户,每个用户拥有独立的令牌隔离
  • 🛡️ 安全至上:故意禁用删除操作
  • 🔌 完全兼容Claude代码

设置指南

1. Google 云项目设置

1-1。 创建一个项目

  1. 首选 Google Cloud 控制台
  2. 点击顶部的项目选择器下拉菜单
  3. 点击“新建项目”
  4. 输入项目名称(例如。, mcp-calendar-server)并点击“创建”

1-2。 启用Google日历API

  1. 从侧边栏导航到“APIs 与服务”→ “库”
  2. 搜索“Google日历API”
  3. 点击“Google日历API”
  4. 点击“启用”
  5. 等待“API已启用”的确认

1-3。 配置OAuth同意屏幕

  1. 进入“APIs和服务”→“OAuth同意屏幕”
  2. 用户类型选择“外部”并点击“创建”
    • 仅当仅内部用户使用Google Workspace时,才选择“内部”
  3. 应用信息:
    • 应用名称: MCP Calendar Server (或任何名字)
    • 用户支持邮箱:选择您的邮箱
    • 开发者联系方式:请输入您的电子邮件
  4. 点击“保存并继续”

1-4。 添加范围

  1. 点击“添加或移除范围”
  2. 按以下条件筛选 calendar
  3. 检查 https://www.googleapis.com/auth/calendar
  4. 点击“更新”→“保存并继续”

1-5。 添加测试用户

  1. 在“测试用户”部分,点击“添加用户”
  2. 输入您的谷歌帐户电子邮件地址
  3. 点击“添加”→“保存并继续”
  4. 点击“返回仪表板”

重要的在测试模式下,只有在此处添加的用户才能登录。

1-6。 创建OAuth凭据

  1. 前往“APIs和服务”→“凭据”
  2. 点击“创建凭据”→“OAuth 客户端 ID”
  3. 应用类型选择“Web 应用程序”
  4. 名字: MCP Calendar OAuth Client (或任何名字)
  5. 在……之下 授权重定向URI点击“添加URI”并添加:
    • http://localhost:8080/oauth/callback
    • https://localhost:8443/proxy/oauth/callback
  6. 点击“创建”
  7. 复制并保存显示的“客户端ID”和“客户端密钥”
    • ❗保存这些凭据 - 以后会用到

2. 本地环境设置

2-1。 克隆仓库并安装Rust

# Clone repository
git clone https://github.com/kamekamek/mcp-google-calendar.git
cd mcp-google-calendar

# Install Rust nightly (if not already installed)
rustup toolchain install nightly

2-2。 配置环境变量

# Copy .env.example to .env
cp .env.example .env

编辑 .env 包含您的 Google OAuth 凭据的文件:

APP__OAUTH__CLIENT_ID="<paste your client ID here>"
APP__OAUTH__CLIENT_SECRET="<paste your client secret here>"
APP__SERVER__PUBLIC_URL="https://localhost:8443"
APP__PROXY__ENABLED=true

3. 安装并运行Caddy

3-1。 使用 mkcert 生成证书

# Install mkcert (using Homebrew)
brew install mkcert

# Install local CA
mkcert -install

# Generate certificates for localhost
mkcert localhost 127.0.0.1 ::1
# → Creates localhost+2.pem and localhost+2-key.pem

3-2。 安装并运行Caddy

# Install Caddy
brew install caddy

# Run Caddy (in a separate terminal)
caddy run --config caddyfile

保持这个终端窗口打开,因为Caddy需要继续运行。

3-3。 启动MCP服务器

打开一个新的终端:

cd mcp-google-calendar
cargo +nightly run

服务器开始运行于 127.0.0.1:8080保持这个终端也处于打开状态。

4. 克劳德代码配置

4-1。 配置 .mcp.json 文件

编辑 .mcp.json (如果不存在则创建):

{
  "mcpServers": {
    "google_calendar": {
      "type": "sse",
      "url": "https://localhost:8443/mcp",
      "metadata": {
        "description": "Google Calendar MCP Server"
      }
    }
  }
}

4-2。 启动Claude代码

# Start Claude Code CLI
claude

启动后,运行:

/mcp

MCP连接菜单将会出现。

4-3。 认证流程

  1. 选择 google_calendar 来自MCP服务器列表
  2. 点击“验证”按钮
  3. 浏览器自动打开并显示Google OAuth界面
  4. 使用添加的测试用户Google帐户登录
  5. 检查应用程序权限并点击“允许”
  6. 当浏览器显示“认证完成”时,返回到Claude代码界面
  7. 连接后将显示可用工具列表

5. 验证

在Claude代码中尝试这个:

Show me my calendar events for this week

或者直接调用工具:

/tools

选择 google_calendar_list_events 从列表中选择并执行。

可用工具

所有工具都需要一个 user_id 参数(由Claude Code自动设置)。

Google日历列表事件

检索日历事件列表。

参数:

  • time_min开始时间过滤器(RFC3339: 2025-10-20T00:00:00+09:00)
  • time_max结束时间过滤器
  • max_results最多返回的事件数(1-2500)
  • calendar_id日历ID(默认为“primary”)

获取Google日历事件

通过ID获取单个事件。

参数:

  • event_id事件ID(必填)
  • calendar_id日历ID(默认为“主要”)

创建Google日历事件

创建一个新的日历事件。

参数:

  • summary活动标题(必填)
  • start开始时间(必填)
  • end结束时间(必填)
  • description描述(可选)
  • location位置(可选)

日期/时间格式:

"2025-10-20T10:00:00+09:00"

更新Google日历事件

更新现有事件。

参数:

  • event_id事件ID(必填)
  • summary, start, end, description, location要更新的字段(可选)

故障排除

认证错误

原因尝试使用未添加为测试用户的Google帐户登录

解决方案:

  1. Google Cloud 控制台 → OAuth 同意屏幕 → 测试用户
  2. 添加您想要使用的Google帐户

令牌刷新错误

原因刷新令牌仅在首次授权时颁发

解决方案:

  1. 访问 https://myaccount.google.com/permissions
  2. 找到“MCP 日历服务器”并将其移除
  3. 通过Claude代码重新验证

HTTPS 错误

原因证书缺失或Caddy未运行

解决方案:

# Check certificates exist
ls localhost+2*.pem
# → Should see localhost+2.pem and localhost+2-key.pem

# Check if Caddy is running
lsof -i :8443
# → Should see caddy process

事件日期时间格式错误

使用RFC3339格式:

"2025-10-20T10:00:00+09:00"

或者对象格式:

{
  "dateTime": "2025-10-20T10:00:00+09:00",
  "timeZone": "Asia/Tokyo"
}

对于开发者

构建与测试

# Format
cargo +nightly fmt

# Lint
cargo +nightly clippy -- -D warnings

# Test
cargo +nightly test

配置

看 config/config.toml 以获取完整的配置选项。

使用环境变量覆盖:

  • APP__OAUTH__CLIENT_ID
  • APP__OAUTH__CLIENT_SECRET
  • APP__SERVER__PUBLIC_URL
  • APP__SECURITY__USE_IN_MEMORY (真/假)
  • APP__PROXY__ENABLED (真/假)

许可证

MIT 许可证 - 详见 许可证 详情请参阅

链接