Google 日历 MCP 服务器
  
一个基于Axum的MCP服务器,使AI代理能够读写Google日历事件。通过模型上下文协议(MCP)使用OAuth认证访问Google日历API。
特点/特性
- 🔐 支持PKCE的OAuth 2.0认证
- 📅 四项操作:列出、获取、创建和更新日历事件
- 🚀 通过服务器发送事件(SSE)实现远程MCP传输
- 🔄 自动令牌刷新
- 👥 支持多用户,每个用户拥有独立的令牌隔离
- 🛡️ 安全至上:故意禁用删除操作
- 🔌 完全兼容Claude代码
设置指南
1. Google 云项目设置
1-1。 创建一个项目
- 首选 Google Cloud 控制台
- 点击顶部的项目选择器下拉菜单
- 点击“新建项目”
- 输入项目名称(例如。,
mcp-calendar-server)并点击“创建”
1-2。 启用Google日历API
- 从侧边栏导航到“APIs 与服务”→ “库”
- 搜索“Google日历API”
- 点击“Google日历API”
- 点击“启用”
- 等待“API已启用”的确认
1-3。 配置OAuth同意屏幕
- 进入“APIs和服务”→“OAuth同意屏幕”
- 用户类型选择“外部”并点击“创建”
- 仅当仅内部用户使用Google Workspace时,才选择“内部”
- 应用信息:
- 应用名称: MCP Calendar Server (或任何名字) - 用户支持邮箱:选择您的邮箱 - 开发者联系方式:请输入您的电子邮件
- 点击“保存并继续”
1-4。 添加范围
- 点击“添加或移除范围”
- 按以下条件筛选
calendar - 检查
https://www.googleapis.com/auth/calendar - 点击“更新”→“保存并继续”
1-5。 添加测试用户
- 在“测试用户”部分,点击“添加用户”
- 输入您的谷歌帐户电子邮件地址
- 点击“添加”→“保存并继续”
- 点击“返回仪表板”
重要的在测试模式下,只有在此处添加的用户才能登录。
1-6。 创建OAuth凭据
- 前往“APIs和服务”→“凭据”
- 点击“创建凭据”→“OAuth 客户端 ID”
- 应用类型选择“Web 应用程序”
- 名字:
MCP Calendar OAuth Client(或任何名字) - 在……之下 授权重定向URI点击“添加URI”并添加:
- http://localhost:8080/oauth/callback - https://localhost:8443/proxy/oauth/callback
- 点击“创建”
- 复制并保存显示的“客户端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 nightly2-2。 配置环境变量
# Copy .env.example to .env
cp .env.example .env编辑 .env 包含您的 Google OAuth 凭据的文件:
APP__OAUTH__CLIENT_ID="
"
APP__OAUTH__CLIENT_SECRET="
"
APP__SERVER__PUBLIC_URL="https://localhost:8443"
APP__PROXY__ENABLED=true3. 安装并运行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.pem3-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启动后,运行:
/mcpMCP连接菜单将会出现。
4-3。 认证流程
- 选择
google_calendar来自MCP服务器列表 - 点击“验证”按钮
- 浏览器自动打开并显示Google OAuth界面
- 使用添加的测试用户Google帐户登录
- 检查应用程序权限并点击“允许”
- 当浏览器显示“认证完成”时,返回到Claude代码界面
- 连接后将显示可用工具列表
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帐户登录
解决方案:
- Google Cloud 控制台 → OAuth 同意屏幕 → 测试用户
- 添加您想要使用的Google帐户
令牌刷新错误
原因刷新令牌仅在首次授权时颁发
解决方案:
- 访问 https://myaccount.google.com/permissions
- 找到“MCP 日历服务器”并将其移除
- 通过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_IDAPP__OAUTH__CLIENT_SECRETAPP__SERVER__PUBLIC_URLAPP__SECURITY__USE_IN_MEMORY(真/假)APP__PROXY__ENABLED(真/假)
许可证
MIT 许可证 - 详见 许可证 详情请参阅
