返回市场
谷歌日历MCP服务器

谷歌日历MCP服务器

作者:daemonX102 星标更新:2025-04-30

项目介绍

Google 日历 MCP 服务器

GitHub 仓库

这是一个与 Google 日历 API 集成的模型上下文协议(MCP)服务器,允许AI助手管理日历、创建和更新事件、查找可用时间槽等。

功能

  • 列出所有可用的日历
  • 使用过滤选项列出事件
  • 创建、更新和删除事件
  • 获取特定事件的详细信息
  • 在日历中查找可用的时间槽
  • 获取带有状态(正在进行、即将进行、已过去)的即将到来的会议
  • 支持重复事件
  • 会议参与者管理

安装

先决条件

  • Node.js 16+
  • 启用了日历API的Google云项目
  • OAuth 2.0客户端凭证

安装

方案1:本地安装

  1. 克隆此仓库
    git clone https://github.com/daemonX10/Google-Calendar-MCP-Server.git
    cd Google-Calendar-MCP-Server
    
  2. 安装依赖项:
    npm install
    
  3. 创建一个包含您的Google API凭证的.env文件(您可以从.env.example复制):
    GOOGLE_CLIENT_ID=your_client_id
    GOOGLE_CLIENT_SECRET=your_client_secret
    GOOGLE_REDIRECT_URI=http://localhost:3000/auth/callback
    

方案2:使用Docker(推荐)

  1. 克隆此仓库
    git clone https://github.com/daemonX10/Google-Calendar-MCP-Server.git
    cd Google-Calendar-MCP-Server
    
  2. 复制示例环境文件:
    cp .env.example .env
    
  3. 使用您的Google API凭证编辑.env文件
  4. 构建并启动Docker容器:
    docker-compose up -d
    

Google Cloud 设置

  1. 访问Google Cloud 控制台
  2. 创建一个新的项目或选择现有的项目
  3. 在API库中启用Google日历API
  4. 创建OAuth 2.0凭证:
    • 转到APIs & Services > 凭证
    • 点击“创建凭证”> “OAuth客户端ID”
    • 选择“Web应用”作为应用程序类型
    • 添加http://localhost:3000/auth/callback作为授权重定向URI
    • 将Client ID和Client Secret复制到您的.env文件中
  5. 设置OAuth同意屏幕:
    • 转到APIs & Services > OAuth同意屏幕
    • 填写所需信息(应用名称、用户支持电子邮件等)
    • 添加必要的范围(https://www.googleapis.com/auth/calendarhttps https://www.googleapis.com/auth/calendar.events
    • 将您的电子邮件地址添加为测试用户

认证

第一次认证

  1. 启动服务器:
    npx ts-node src/index.ts
    
  2. 您将在控制台输出中看到一个URL。在浏览器中打开此URL以授权应用程序。
  3. 授权后,您将被重定向到一个带有代码参数的URL。复制此代码。
  4. 使用认证助手保存您的刷新令牌:
    npx ts-node src/auth-helper.ts "YOUR_AUTH_CODE"
    
    这将自动将刷新令牌保存到您的.env文件中,并测试连接。
  5. 现在您可以使用MCP服务器了!

认证问题排查

如果您遇到认证问题:

  1. 确保您的Google Cloud OAuth凭证正确设置,并且重定向URI完全匹配
  2. 如果您收到“invalid_grant”错误,授权码可能已经过期——它们只持续几分钟
  3. 如果您之前授权过该应用,您可能需要从Google账户权限中撤销访问权限并重新尝试
  4. 确保您已在Google Cloud Console的OAuth同意屏幕上添加了自己的电子邮件地址作为测试用户

运行服务器

开发模式

npm run dev

生产模式

方案1:Node.js

  1. 构建服务器:
    npm run build
    
  2. 启动服务器:
    npm start
    

方案2:Docker(推荐)

# 构建并启动容器
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止容器
docker-compose down

Docker Hub 镜像

您也可以使用我们预构建的Docker镜像:

# 拉取镜像
docker pull daemonx10/google-calendar-mcp:latest

# 运行容器(先创建一个.env文件)
docker run -d -p 3000:3000 --name google-calendar-mcp --env-file ./.env daemonx10/google-calendar-mcp:latest

与AI助手集成

{
  "mcp": {
    "servers": {
      "google-calendar": {
        "command": "node",
        "args": ["/绝对路径/to/mcp-google-calendar/dist/index.js"],
        "env": {
          "GOOGLE_CLIENT_ID": "your_client_id",
          "GOOGLE_CLIENT_SECRET": "your_client_secret",
          "GOOGLE_REDIRECT_URI": "http://localhost:3000/auth/callback",
          "GOOGLE_REFRESH_TOKEN": "your_refresh_token"
        }
      }
    }
  }
}

对于Claude Desktop,您需要首先使用npm run build构建项目。

Claude.ai Web 集成

对于Claude.ai Web,您需要:

  1. 在您的机器上保持服务器运行
  2. 使用如Claude MCP 浏览器扩展这样的解决方案,将Claude.ai连接到本地MCP服务器

其他AI助手

对于支持模型上下文协议的其他AI助手:

  1. 保持服务器在端口3000上运行
  2. 配置助手连接到http://localhost:3000用于Google日历MCP服务器
  3. 查阅助手的文档以获取具体的MCP集成步骤

使用MCP服务器

一旦与您选择的AI助手集成,您可以使用自然语言命令与您的Google日历互动。例如:

  • "显示我今天的日历"
  • "明天下午2点与John安排关于项目规划的会议"
  • "找到本周内可用的30分钟时间槽"
  • "将我的3点会议改到4点"
  • "取消我与Sarah的会议"

可用工具

list_calendars

列出所有可用的日历。

list_events

按过滤选项列出日历中的事件。 参数:

  • calendarId(可选):日历ID(默认:'primary')
  • maxResults(可选):返回的最大事件数
  • timeMin(可选):开始时间,ISO格式(默认:现在)
  • timeMax(可选):结束时间,ISO格式
  • q(可选):搜索词以查找事件

create_event

在日历中创建新的事件。 参数:

  • calendarId(可选):日历ID(默认:'primary')
  • summary:事件标题
  • description(可选):事件描述
  • location(可选):事件地点
  • start:开始时间,ISO格式
  • end:结束时间,ISO格式
  • attendees(可选):参会者的电子邮件地址列表
  • reminders(可选):事件提醒配置
  • recurrence(可选):重复事件的重复规则

get_event

获取特定事件的详细信息。 参数:

  • calendarId(可选):日历ID(默认:'primary')
  • eventId:事件ID

update_event

更新日历中的现有事件。 参数:

  • calendarId(可选):日历ID(默认:'primary')
  • eventId:事件ID
  • summary(可选):事件标题
  • description(可选):事件描述
  • location(可选):事件地点
  • start(可选):开始时间,ISO格式
  • end(可选):结束时间,ISO格式
  • attendees(可选):参会者的电子邮件地址列表
  • reminders(可选):事件提醒配置

delete_event

从日历中删除事件。 参数:

  • calendarId(可选):日历ID(默认:'primary')
  • eventId:事件ID

find_available_slots

在日历中查找可用的时间槽。 参数:

  • calendarId(可选):日历ID(默认:'primary')
  • timeMin(可选):开始时间,ISO格式(默认:现在)
  • timeMax (可选):结束时间,ISO格式
  • duration(可选):时长,分钟
  • workingHoursStart(可选):工作时间开始时间(例如:"09:00")
  • workingHoursEnd(可选):工作时间结束时间(例如:"17:00")

get_upcoming_meetings

获取今天或特定日期的即将到来的会议。 参数:

  • calendarId(可选):日历ID(默认:'primary')
  • date(可选):日期,ISO格式(默认:今天)

安全注意事项

  • 此MCP服务器在您的机器上本地运行,因此您的日历数据永远不会通过外部服务器传递
  • OAuth刷新令牌存储在您的.env文件中,请确保安全
  • 服务器在与Google的API通信时使用HTTPS
  • 当暴露此服务器到外部网络时要小心

故障排除

服务器无法启动

  • 检查是否安装了最新版本的Node.js
  • 使用npm install验证所有依赖项是否已安装
  • 确保您的.env文件具有正确的凭证
  • 使用npx tsc --noEmit检查TypeScript错误

认证问题

  • 确保您的Google Cloud OAuth凭证与.env文件中的内容匹配
  • Google账户权限中撤销应用访问权限并重新尝试
  • 确保您的电子邮件地址已添加到Google Cloud Console的测试用户中
  • 检查重定向URI是否与Google Cloud Console中的完全匹配

集成问题

  • 验证配置文件中的路径是否绝对且正确
  • 在尝试使用AI助手之前确保服务器正在运行
  • 检查助手的日志以查找连接错误
  • 对于Claude Desktop,确保您已使用npm run build构建了项目

许可证

MIT