Google日历任务管理服务

一个集成了Google日历、任务和Gmail功能的MCP服务器,提供安全防护和跨平台支持,适用于团队协作和个人日程管理。

  • by talh
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 talh/google-calendar-tasks-mcp

使用说明

谷歌日历任务mcp

用于谷歌日历、谷歌任务和Gmail的MCP服务器,带有安全护栏。

专为配合使用而设计 克劳德代码 以及任何MCP兼容客户端。

特性

  • 21工具:日历事件、任务和Gmail邮件的完整CRUD
  • 安全护栏:每日写入限制、受保护的日历/任务列表、过去事件保护、定期系列保护、Gmail发送批准
  • 可选审计日志记录:每月跟踪所有写入操作的JSON文件
  • 跨平台:Windows、macOS、Linux
  • 可配置的 通过环境变量和 guardrails.json
  • 测试模式 用于在没有Google API证书的情况下进行开发

先决条件

  • Node.js 18+
  • 启用了日历、任务和Gmail API的Google Cloud项目
  • OAuth 2.0客户端ID(类型:桌面)

快速开始

# 1. Clone and install
git clone https://github.com/talh/google-calendar-tasks-mcp.git
cd google-calendar-tasks-mcp
npm install

# 2. Build
npm run build

# 3. Authenticate (one-time)
node auth.js

# 4. Test with MCP Inspector
npm run inspect

谷歌云项目设置

  1. 首选 console.cloud.google.com
  2. 创建新项目(或选择现有项目)
  3. 启用 谷歌日历API:
    • 导航到API和服务>库
    • 搜索“Google日历API”并启用它
  4. 启用 谷歌任务API:
    • 搜索“Google任务API”并启用它
  5. 启用 Gmail API:
    • 搜索“Gmail API”并启用它
  6. 配置 OAuth 授权界面:
    • 导航到API和服务>OAuth同意屏幕
    • 选择“外部”用户类型
    • 填写必填字段(应用程序名称、支持电子邮件)
    • 添加作用域: calendar.events, tasks,以及 gmail.modify
    • 将自己添加为测试用户
  7. 创建 OAuth 2.0凭据:
    • 导航到API和服务>凭据
    • 点击“创建凭据”>“OAuth客户端ID”
    • 选择“桌面应用程序”作为应用程序类型
    • 注意客户端ID和客户端密码

认证

运行auth脚本以设置OAuth凭据:

node auth.js

脚本将:

  1. 提示输入您的客户端ID和客户端密码
  2. 打开浏览器进入谷歌同意屏幕
  3. 监听OAuth回调 http://localhost:3000/callback
  4. 将凭据保存到特定于操作系统的默认路径

凭证存储位置:

  • 窗户: %APPDATA%\google-calendar-tasks-mcp\credentials.json
  • macOS/Linux: ~/.config/google-calendar-tasks-mcp/credentials.json

覆盖 GOOGLE_MCP_CREDENTIALS_PATH 环境变量。

Claude代码配置

添加到您的Claude Code MCP设置(项目级别 .mcp.json 或全局设置):

{
  "mcpServers": {
    "google-calendar-tasks": {
      "command": "node",
      "args": ["/absolute/path/to/google-calendar-tasks-mcp/build/index.js"],
      "env": {
        "GOOGLE_MCP_TIMEZONE": "America/New_York"
      }
    }
  }
}

工具参考

日历工具

calendar_list_calendars

列出用户有权访问的所有日历。

参数 类型 必填 说明
(无)

calendar_list_events

列出日期或日期范围的日历事件。

参数 类型 必填 说明
calendarId string 否 日历ID。默认为 "primary"
date string 否 单日期 YYYY-MM-DD 格式
startDate string 否 范围起始于 YYYY-MM-DD
endDate string 否 范围以结尾 YYYY-MM-DD
maxResults number 否 要返回的最大事件数(1-250,默认值50)

提供其中之一 date 或两者 startDate 和 endDate.

calendar_get_event

获取单个日历事件的完整详细信息。

参数 类型 必填 说明
calendarId string 否 日历ID。默认为 "primary"
eventId string 是 谷歌事件ID

calendar_create_event

创建新的日历事件。受护栏约束。

参数 类型 必填 说明
calendarId string 否 日历ID。默认为 "primary"
title string 是 事件标题
date string 是 日期 YYYY-MM-DD
startTime string 是 开始时间 HH:MM (24小时)
endTime string 是 结束时间 HH:MM (24小时)
location string 否 事件位置
description string 否 事件描述

calendar_update_event

更新现有日历事件。受护栏约束。

参数 类型 必填 说明
calendarId string 否 日历ID。默认为 "primary"
eventId string 是 谷歌事件ID
title string 否 新标题
date string 否 新日期 YYYY-MM-DD
startTime string 否 新的开始时间 HH:MM
endTime string 否 中的新结束时间 HH:MM
location string 否 新位置
description string 否 新描述

对于早于以下时间的事件被阻止 pastEventProtectionDays.

calendar_delete_event

删除单个日历事件。受护栏约束。

参数 类型 必填 说明
calendarId string 否 日历ID。默认为 "primary"
eventId string 是 谷歌事件ID

对于过去的事件和重复出现的系列主控,已被阻止(除非 allowRecurringSeriesDelete 这是真的)。

任务工具

tasks_list_tasklists

列出所有任务列表。

参数 类型 必填 说明
(无)

tasks_list

在给定的列表中列出任务。

参数 类型 必填 说明
taskListId string 否 任务列表ID。默认为默认列表
showCompleted boolean 否 包括已完成的任务(默认为false)
maxResults number 否 要返回的最大任务数(1-100,默认值100)

tasks_get

获取单个任务的完整详细信息。

参数 类型 必填 说明
taskListId string 是 任务列表ID
taskId string 是 谷歌任务ID

tasks_create

创建新任务。受护栏约束。

参数 类型 必填 说明
taskListId string 否 任务列表ID。默认为默认列表
title string 是 任务标题
due string 否 到期日期 YYYY-MM-DD
notes string 否 任务注释/描述

tasks_update

更新现有任务。受护栏约束。

参数 类型 必填 说明
taskListId string 是 任务列表ID
taskId string 是 谷歌任务ID
title string 否 新标题
due string 否 中的新截止日期 YYYY-MM-DD
notes string 否 新注释
status string 否 "needsAction" 或 "completed"

tasks_delete

删除单个任务。受护栏约束。

参数 类型 必填 说明
taskListId string 是 任务列表ID
taskId string 是 谷歌任务ID

tasks_complete

将任务标记为已完成。受护栏约束。

参数 类型 必填 说明
taskListId string 是 任务列表ID
taskId string 是 谷歌任务ID

tasks_move

将任务移动到其他列表。计为2次写入操作(创建+删除)。受护栏约束。

参数 类型 必填 说明
sourceListId string 是 源任务列表ID
taskId string 是 谷歌任务ID
destinationListId string 是 目标任务列表ID

Gmail工具

gmail_list_messages

搜索并列出电子邮件。

参数 类型 必填 说明
query string 否 Gmail搜索查询(与Gmail搜索栏语法相同。, is:unread, from:sender@email.com)
labelIds string[] 否 按标签ID过滤(例如。, ["INBOX", "UNREAD"])
maxResults number No 要返回的最大消息数(1-100,默认值20)

gmail_get_message

获取一封电子邮件的完整内容。

参数 类型 必填 说明
messageId string 是 Gmail邮件ID
format string 否 "full" (默认), "metadata",或 "minimal"

gmail_get_attachment

从电子邮件中下载特定附件。

参数 类型 必填 说明
messageId string 是 Gmail邮件ID
attachmentId string 是 附件ID来自 gmail_get_message 回应

gmail_modify_message

在电子邮件中添加或删除标签。移除 INBOX 存档。添加 TRASH 垃圾。

参数 类型 必填 说明
messageId string 是 Gmail邮件ID
addLabelIds string[] 否 要添加的标签ID
removeLabelIds string[] 否 要删除的标签ID

受护栏约束。

gmail_list_labels

列出所有Gmail标签(系统和用户创建)。

参数 类型 必填 说明
(无)

gmail_create_label

创建一个新的Gmail标签。

参数 类型 必填 说明
name string 是 标签名称。使用 / 用于嵌套(例如。, DPA/Processed)
labelListVisibility string 否 "labelShow" (默认), "labelShowIfUnread",或 "labelHide"

受护栏约束。

gmail_send_message

发送电子邮件(回复或新建)。 需要明确批准 — requireApproval 必须 true.

参数 类型 必填 说明
to string 是 收件人电子邮件地址
subject string 是 电子邮件主题
body string 是 电子邮件正文(纯文本)
requireApproval boolean 是 必须是 true --确认用户明确批准发送
threadId string 否 用于线程回复的Gmail线程ID
inReplyTo string 否 正在回复的电子邮件的邮件ID标头

受护栏约束。这 requireApproval: true 标志由服务器强制执行——没有标志的调用将被拒绝。

配置

环境变量

变量 默认值 描述
GOOGLE_MCP_TIMEZONE 系统时区 IANA时区(例如。, America/New_York)
GOOGLE_MCP_CREDENTIALS_PATH 特定于操作系统的路径 OAuth凭据文件的路径
GOOGLE_MCP_AUDIT_LOG_DIR (残疾) 审核日志文件目录
GOOGLE_MCP_GUARDRAILS_PATH ./guardrails.json 护栏配置路径
GOOGLE_MCP_TEST_MODE false 使用模拟Google API运行

护栏配置

创建或编辑 guardrails.json 在服务器目录中:

{
  "dailyWriteLimit": 50,
  "pastEventProtectionDays": 7,
  "protectedCalendars": [],
  "protectedTaskLists": [],
  "allowRecurringSeriesDelete": false,
  "gmail": {
    "sendRequiresApproval": true,
    "maxSendsPerDay": 10
  }
}
选项 默认值 描述
dailyWriteLimit 50 UTC日最大写入操作数
pastEventProtectionDays 7 阻止对超过N天的事件进行编辑/删除
protectedCalendars [] 无法写入的日历ID
protectedTaskLists [] 无法写入的任务列表ID
allowRecurringSeriesDelete false 允许删除整个重复事件系列
gmail.sendRequiresApproval true 需要 requireApproval: true 发送标志
gmail.maxSendsPerDay 10 每个UTC日可以发送的最大电子邮件数

审计日志

通过设置启用 GOOGLE_MCP_AUDIT_LOG_DIR 到目录路径。服务器每月写入JSON文件(operations_YYYY-MM.json)跟踪所有创建、更新、删除、完成和移动操作。

每个条目包括:操作类型、服务、项目标题、Google ID、时间戳和所做的任何更改。

发展

npm run build          # Compile TypeScript
npm test               # Run all tests
npm run test:unit      # Run unit tests only
npm run test:integration  # Run integration tests only
npm run inspect        # Launch MCP Inspector

测试模式

集 GOOGLE_MCP_TEST_MODE=true 使用模拟Google API运行。适用于没有真实证书的开发和测试。

许可证

麻省理工学院