多账户Gmail日历MCP服务

一个通过Cloudflare Worker将多个Google账户(Gmail和日历)作为MCP服务器暴露,以便与Claude Cowork集成的服务。

  • by Veryharry-forever
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Veryharry-forever/Gmail_MCP

使用说明

谷歌MCP——多账户(Gmail+日历)

Cloudflare Worker将多个Google帐户(Gmail+日历)作为MCP(模型上下文协议)服务器公开,供Claude Cowork使用。

建筑

Claude Cowork
    │
    ├─ Connector "Very Harry"  → POST /mcp/veryharry
    │
    └─ Connector "Personal"    → POST /mcp/personal
    │
    ▼
Cloudflare Worker (gmail-mcp)
    │
    ▼ (OAuth2 refresh-token flow)
Gmail API + Google Calendar API

每个帐户都有自己的MCP端点,暴露了Gmail和日历工具。Worker是无状态的——没有持久对象,没有本地进程,没有ngrok。这两个API为每个帐户共享一个访问令牌(一个刷新令牌,多个作用域)。

账户

名称 蛞蝓 端点
非常哈里 veryharry /mcp/veryharry
个人 personal /mcp/personal

MCP工具(每个账户)

Gmail

  • gmail_get_profile --获取个人资料信息
  • gmail_list_labels --列出标签
  • gmail_search_messages --搜索电子邮件(Gmail搜索语法)
  • gmail_read_message --按ID读取消息
  • gmail_read_thread --按ID读取完整线程
  • gmail_list_drafts --列出草稿
  • gmail_create_draft --创建电子邮件草稿

日历

  • gcal_list_calendars --列出可访问的日历
  • gcal_list_events --列出事件(默认为主日历上即将发生的事件)
  • gcal_get_event --按ID获取单个事件
  • gcal_create_event --创建活动(全天或定时,有与会者)
  • gcal_update_event --更新现有事件(部分)
  • gcal_delete_event --按ID删除事件

⚠️ OAuth作用域: 必须为每个帐户授予刷新令牌 两者 Gmail范围(https://mail.google.com/) 和 日历范围(https://www.googleapis.com/auth/calendar).如果您仅使用Gmail作用域生成了刷新令牌,请在 OAuth 2.0游乐场 选择两个范围后,更新 *_REFRESH_TOKEN 秘密。看 获取刷新令牌.

设置

1.先决条件

2.安装依赖项

cd worker
npm install

3.设定秘密

每个Gmail帐户都需要OAuth凭据。对于每个帐户,您需要:

  • 客户端ID 和 客户端密钥 从您的Google Cloud OAuth 2.0凭据
  • 刷新令牌 通过OAuth同意流获得
cd worker

# Very Harry account
wrangler secret put VERYHARRY_CLIENT_ID
wrangler secret put VERYHARRY_CLIENT_SECRET
wrangler secret put VERYHARRY_REFRESH_TOKEN

# Personal account
wrangler secret put PERSONAL_CLIENT_ID
wrangler secret put PERSONAL_CLIENT_SECRET
wrangler secret put PERSONAL_REFRESH_TOKEN

提示: 如果两个帐户使用相同的Google Cloud项目,则两者的客户端ID和客户端密码将相同。

4.部署

cd worker
npm run deploy

工人将在 https://gmail-mcp.<your-subdomain>.workers.dev.

5.添加到Claude Cowork

将每个帐户添加为单独的自定义MCP连接器:

非常哈里:

  • 姓名: Gmail — Very Harry
  • 网址: https://gmail-mcp.<your-subdomain>.workers.dev/mcp/veryharry

个人的:

  • 姓名: Gmail — Personal
  • 网址: https://gmail-mcp.<your-subdomain>.workers.dev/mcp/personal

本地开发

cd worker
npm run dev

对于本地开发人员,您需要 .dev.vars 文件在 worker/ 目录:

VERYHARRY_CLIENT_ID=your-client-id
VERYHARRY_CLIENT_SECRET=your-client-secret
VERYHARRY_REFRESH_TOKEN=your-refresh-token
PERSONAL_CLIENT_ID=your-client-id
PERSONAL_CLIENT_SECRET=your-client-secret
PERSONAL_REFRESH_TOKEN=your-refresh-token

获取刷新令牌

如果您还没有帐户的刷新令牌:

  1. 去 谷歌云控制台
  2. 启用 两者 这 Gmail API 和那个 谷歌日历API 为您的项目
  3. 创建OAuth 2.0凭据(Web应用程序类型),添加 https://developers.google.com/oauthplayground 作为授权重定向URI
  4. 在 OAuth 2.0游乐场 (齿轮图标→ “使用您自己的OAuth凭据”),选择 两者 范围:
    • https://mail.google.com/ (Gmail)
    • https://www.googleapis.com/auth/calendar (日历)
  5. 授权,将代码兑换为令牌,并复制 刷新令牌

如果您已经部署了仅限Gmail的刷新令牌,只需使用两个作用域重新生成它并运行 wrangler secret put <PREFIX>_REFRESH_TOKEN 再次强调,秘密更改不需要重新部署。

添加更多帐户

编辑 worker/src/index.ts 并向添加条目 ACCOUNTS 地图:

const ACCOUNTS = {
  veryharry: { prefix: "VERYHARRY", displayName: "Very Harry" },
  personal: { prefix: "PERSONAL", displayName: "Personal" },
  work:     { prefix: "WORK",     displayName: "Work" },  // new
};

然后设置机密并重新部署:

wrangler secret put WORK_CLIENT_ID
wrangler secret put WORK_CLIENT_SECRET
wrangler secret put WORK_REFRESH_TOKEN
npm run deploy

文件布局

Gmail_MCP/
├── README.md
├── worker/
│   ├── src/
│   │   ├── index.ts      # Worker entry — routing + MCP server per account
│   │   ├── google.ts      # Shared Google OAuth + fetch helper
│   │   ├── gmail.ts       # Gmail API client
│   │   └── calendar.ts    # Calendar API client
│   ├── package.json
│   ├── tsconfig.json
│   └── wrangler.jsonc
├── setup.sh               # (legacy) Local ngrok setup
├── gmail-mcp-ctl.sh       # (legacy) Local service management
└── launchagents/           # (legacy) macOS LaunchAgent plists