使用说明
mcp-google-calendar 翻译为中文是:“MCP(可能是指某种系统或平台)与谷歌日历”。不过,这里的“MCP”具体含义需要根据上下文来确定,因为“MCP”在不同领域可能有不同的含义。如果“MCP”是特定于某个系统或平台的缩写,那么翻译时可能需要保留该缩写或根据具体情况给出更准确的翻译。但基于提供的信息,上述翻译是一个较为通用的表述
一个Google日历和Google任务(MCP)服务器,用于将日历和任务操作作为工具暴露给大型语言模型(LLM)使用。
目录
重要:认证架构
此MCP服务器配置为使用单个Google帐户进行所有操作。 认证凭据(客户端ID、客户端密钥和刷新令牌)存储在环境变量中(.env 文件),这意味着此MCP服务器的所有用户都将与同一个Google日历和Google任务账户进行交互。
当前实施情况
- 单账户模式一个Google帐户的凭据已在
.env文件 - 所有操作 (创建、读取、更新、删除事件和任务)操作都是在这个单一账户上进行的
- 最适合于个人使用、单用户应用程序,或共享团队日历和任务列表
多用户场景
如果你需要 每个用户需使用自己的Google账户进行身份验证,此服务器需要进行修改:
- 添加用户认证层实现一个用户认证系统(OAuth2、会话、JWT等)
- 传递用户上下文修改MCP工具,使其使用经过身份验证的用户的令牌,而不是(之前的)
.env代币;标记;令牌 - 令牌刷新逻辑实现按用户刷新和管理令牌
注当前的实现版本更注重个人使用的简洁性。
设置
先决条件
- 一个谷歌账户
- 访问 Google Cloud Console
- 已安装 Node.js
逐步配置
1. 配置Google Cloud Console项目
- 首选 Google Cloud 控制台
- 创建一个新项目或选择一个现有项目
- 启用所需的API:
- 谷歌日历API前往“APIs 和服务”>“库”,搜索“Google 日历 API”并点击“启用”
- Google 任务 API转到“APIs和服务”>“库”,搜索“Google任务API”并点击“启用”
2. 创建OAuth 2.0凭据
- 前往“APIs和服务”>“凭据”
- 点击“创建凭据”> “OAuth 2.0 客户端ID”
- 如果是第一次使用,请配置OAuth同意屏幕:
- 选择“外部”(如果您使用的是 Google Workspace,则选择“内部”)
- 填写基本应用信息
- 在“Scopes”中,不要添加任何范围(我们将通过编程方式来完成此操作)
- 将您的电子邮件添加为测试用户
- 创建OAuth 2.0客户端ID:
- 应用类型:“Web应用”
- 名称:“Google 日历 MCP 服务器”
- 授权重定向URI:
http://localhost:8080/oauth/callback
3. 配置.env文件
- 从Google Cloud Console复制凭据
- 创建一个
.env项目根目录下的文件:
# Google Cloud Console credentials
GOOGLE_CLIENT_ID=your_client_id_here.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your_client_secret_here
# This will be generated in the next step
GOOGLE_REFRESH_TOKEN=
# Default timezone for calendar operations
DEFAULT_TIMEZONE=Atlantic/Canary
4. 获取刷新令牌
运行安装脚本:
npm run setup:google
这个脚本将:
- 在端口8080上启动一个临时服务器
- 向您展示一个URL以授权该应用程序
- 在浏览器中打开该网址
- 授权后,给您一个
refresh_token - 返回令牌
GOOGLE_REFRESH_TOKEN
5. 测试配置
npm run build
node dist/index.js
MCP客户端配置
将此添加到您的MCP客户端配置中(例如,Claude Desktop配置):
{
"mcpServers": {
"google-calendar": {
"command": "npx",
//WIP: "args": ["mcp-google-calendar"],
"env": {
"GOOGLE_CLIENT_ID": "<your-client-id>",
"GOOGLE_CLIENT_SECRET": "<your-client-secret>",
"GOOGLE_REFRESH_TOKEN": "<your-refresh-token>",
"DEFAULT_TIMEZONE": "Atlantic/Canary"
}
}
}
}
使用方法
- 将TypeScript编译为JavaScript:
npm run build
- 运行MCP服务器:
node dist/index.js
使用MCP Inspector进行测试
你可以使用(以下工具/方法)来测试和调试这个MCP服务器 MCP Inspector(中文可译为)“MCP 检测器”或“MCP 监视器”,具体翻译取决于上下文和“MCP”在此处的具体含义。如果“MCP”是某个特定系统、设备或软件的缩写,那么翻译时可能需要考虑其专业背景来给出更准确的译名。但在此通用翻译中,“MCP Inspector”直译为“MCP 检测器”或“MCP 监视器”是较为常见的表达:
- 确保您已经构建了该项目:
npm run build
- 在(相应位置)设置你的环境变量
.env文件:
GOOGLE_CLIENT_ID=your-client-id
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_REFRESH_TOKEN=your-refresh-token
DEFAULT_TIMEZONE=Atlantic/Canary
- 更新
mcp-inspector-config.json使用您的项目路径:
{
"mcpServers": {
"mcp-google-calendar": {
"command": "node",
"args": ["dist/index.js"],
"env": {
"GOOGLE_CLIENT_ID": "${GOOGLE_CLIENT_ID}",
"GOOGLE_CLIENT_SECRET": "${GOOGLE_CLIENT_SECRET}",
"GOOGLE_REFRESH_TOKEN": "${GOOGLE_REFRESH_TOKEN}",
"DEFAULT_TIMEZONE": "${DEFAULT_TIMEZONE}"
}
}
}
}
- 运行MCP检查器:
npx @modelcontextprotocol/inspector --config mcp-inspector-config.json
- 在浏览器中打开终端中显示的URL(默认应为http://localhost:6277),以通过Inspector用户界面与MCP服务器进行交互。
时区配置
这个MCP服务器支持灵活的时区配置:
- 默认时区设置
DEFAULT_TIMEZONE在你的.env使用IANA时区格式保存文件(例如。,Atlantic/Canary,America/New_York,Asia/Tokyo) - **每操作覆盖(或:每次操作重写)**在创建或更新事件时,您可以为该特定操作指定不同的时区
- 备用方案/回退方案如果未配置时区,服务器将默认为
Atlantic/Canary
时区优先级:
- 传递给工具的时区参数(最高优先级)
DEFAULT_TIMEZONE来自环境变量的.env- 硬编码默认值:
Atlantic/Canary(最低优先级)
常见的IANA时区:
- 欧洲:
Atlantic/Canary,Europe/London,Europe/Paris,Europe/Berlin - 美洲:
America/New_York,America/Chicago,America/Los_Angeles,America/Mexico_City - 亚洲:
Asia/Tokyo,Asia/Shanghai,Asia/Dubai,Asia/Kolkata - 其他:
Atlantic/Canary,Pacific/Auckland,Australia/Sydney
安全
- 永远不要 分享你的
client_secret或者refresh_token - 添加
.env到你的.gitignore(已包含) - 令牌仅具有对Google日历和Google任务的有限权限
额外资源
可用工具
日历工具
创建日历事件
在Google日历中创建一个新的日历事件。
参数:
title字符串 - 事件标题/摘要start日期时间字符串 - 事件开始时间(ISO 8601 格式)end日期时间字符串 - 事件结束时间(ISO 8601 格式)description字符串(可选)- 事件描述location字符串(可选)- 事件地点attendees电子邮件字符串数组(可选)- 参会者电子邮件地址列表timeZone字符串(可选)- IANA 格式的时间区(例如,Atlantic/Canary,America/New_York)。默认为DEFAULT_TIMEZONE从 .env 文件或 'Atlantic/Canary'(时区)获取calendarId字符串(可选)- 日历ID(默认为“primary”)
返回值:
- 所创建事件的唯一标识符和详细信息
日历更新事件
更新Google日历中的现有事件。
参数:
eventId字符串 - 要更新的事件的唯一IDtitle字符串(可选)- 新事件标题/摘要start日期时间字符串(可选)- 新事件开始时间(ISO 8601 格式)end日期时间字符串(可选)- 新事件结束时间(ISO 8601 格式)description字符串(可选)- 新事件描述location字符串(可选)- 新的活动地点attendees电子邮件字符串数组(可选)- 参会者电子邮件地址列表timeZone字符串(可选)- IANA 格式的时间区(例如,Atlantic/Canary,America/New_York)。默认为DEFAULT_TIMEZONE从 .env 文件或使用 'Atlantic/Canary'(时区)calendarId字符串(可选)- 日历ID(默认为'primary')
返回值:
- 更新后的活动详情
日历列表事件
从Google日历中列出指定时间范围内的事件。
参数:
timeMin日期时间字符串(可选)- 时间段的开始(ISO 8601 格式)timeMax日期时间字符串(可选)- 时间框架的结束时间(ISO 8601 格式)calendarId字符串(可选)- 日历ID(默认为'primary')maxResults数量(可选)- 返回的最大事件数(默认:10)
返回值:
- 在给定时间范围内发生的事件列表
日历搜索事件
在Google日历中通过文本查询搜索事件。
参数:
query字符串 - 搜索查询calendarId字符串(可选)- 日历ID(默认为'primary')maxResults数量(可选)- 要返回的事件最大数量(默认:10)
返回值:
- 符合搜索查询的活动列表
删除日历事件
从Google日历中删除一个事件。
参数:
eventId字符串 - 要删除的事件的唯一IDcalendarId字符串(可选)- 日历ID(默认为“primary”)
返回值:
- 确认删除
日历列表-日历
列出用户可用的所有日历。
返回:
- 包含日历ID和名称的日历列表
获取当前日期和时间的日历
获取ISO 8601格式的当前日期和时间。在创建或搜索事件时作为参考很有用。
参数:
timezone字符串(可选)- IANA 格式的时间区(例如,Atlantic/Canary,America/New_York,Asia/Tokyo)。默认值为DEFAULT_TIMEZONE从 .env 文件或设置为 'Atlantic/Canary'。
返回值:
- 当前日期和时间信息,包括ISO 8601格式、时间戳、本地时间以及时区详情
任务工具
任务列表-任务列表(注:此句在中文语境下略显重复,通常可简化为“任务列表”或根据具体语境调整表达)
列出Google任务中所有可用的任务列表。
参数:无
返回值:
- 所有任务列表及其ID和标题的清单
示例用例:
- 获取你所有任务列表的清单,以找到
taskListId用于创建或管理任务
任务列表-任务
列出特定任务列表中的所有任务。
参数:
taskListId字符串 - 任务列表的ID(使用tasks-list-task-lists(为了得到这个)showCompleted布尔值(可选)- 是否显示已完成的任务(默认:true)maxResults数字(可选)- 要返回的最大任务数(默认:100)
返回值:
- 包含任务详情(包括ID、标题、备注、状态、截止日期和完成日期)的任务列表
任务-创建任务
在Google任务中创建一个新任务。
参数:
taskListId字符串 - 将创建任务的任务列表的IDtitle字符串 - 任务标题/摘要notes字符串(可选)- 任务备注或描述due日期时间字符串(可选)- 以ISO 8601格式表示的截止日期(例如,“2024-12-31T23:59:59Z”)
返回值:
- 创建的任务详情包括ID、标题、备注、状态和截止日期
任务-更新任务
在Google任务中更新现有任务。
参数:
taskListId字符串 - 包含该任务的任务列表的IDtaskId字符串 - 要更新的任务的IDtitle字符串(可选)- 新任务标题notes字符串(可选)- 新任务的备注或描述due日期时间字符串(可选)- 新截止日期,采用ISO 8601格式status字符串(可选)- 任务状态:可以是“needsAction”(需要采取行动)或“completed”(已完成)
返回值:
- 更新后的任务详情
任务-删除任务
从Google任务中删除任务。
参数:
taskListId字符串 - 包含该任务的任务列表的IDtaskId字符串 - 要删除的任务的ID
返回值:
- 删除确认信息
许可证
麻省理工学院(MIT)