使用说明
谷歌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.先决条件
- Node.js v18+
- A. Cloudflare帐户
- 牧马人CLI (
npm install -g wrangler) - 启用Gmail API和OAuth 2.0证书的谷歌云项目
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
获取刷新令牌
如果您还没有帐户的刷新令牌:
- 去 谷歌云控制台
- 启用 两者 这 Gmail API 和那个 谷歌日历API 为您的项目
- 创建OAuth 2.0凭据(Web应用程序类型),添加
https://developers.google.com/oauthplayground作为授权重定向URI - 在 OAuth 2.0游乐场 (齿轮图标→ “使用您自己的OAuth凭据”),选择 两者 范围:
https://mail.google.com/(Gmail)https://www.googleapis.com/auth/calendar(日历)
- 授权,将代码兑换为令牌,并复制 刷新令牌
如果您已经部署了仅限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