#Webdev #AI

📬 Claude 的 Gmail MCP 只能存草稿不能发信 — 那就写个 Worker 帮它发

June 2, 2026
📬 Claude 的 Gmail MCP 只能存草稿不能发信 — 那就写个 Worker 帮它发

大家好 👋

先说结论:如果你也被 Claude 的 Gmail MCP "只能写草稿不能发" 这件事卡住,用 Cloudflare Worker 大概 100 行就能补上这个洞。

上周我在搞一个 "让 Claude 每天自动发份小报告" 的流程。Google MCP 很乖地把邮件写好、排好版、然后…… 存成草稿。每一次都是。原来 MCP 的设计就是停在这一步 —— 发信这一步它故意不做。

理论上说得过去。实际上就是:我那个 "把无聊的邮件自动化" 的循环,永远卡在草稿夹里。

🤔 为什么写 Worker,不直接改 MCP

两个原因:

  • MCP 是别人维护的东西:我不想 fork 一个 MCP,只为了改那一个开关。
  • Worker 太便宜:Cloudflare 的免费额度跑一个 cron 完全够,整个东西部署只要几秒。

所以我换个方向:MCP 不动,把 Gmail 草稿夹当成一个 message queue,让另一个东西来 drain 它。

🛠️ 怎么跑起来

整个 Worker 单文件,配一个 cron trigger,每 5 分钟跑一次。每一次:

  1. 用 Gmail API(OAuth2,refresh token 自动轮转)跟 Gmail 通讯。
  2. 列出当前的草稿。
  3. 过滤出 To 是我设定的目标邮箱的那些。
  4. 用 drafts.send 把它们送出去。

就这样。Claude(透过 MCP)写好草稿 → Worker 在 5 分钟内捡走 → 邮件真的发出去了。

另外还有一个 GET /drafts/pending endpoint,方便我不开 Gmail 就能看看队列里有什么。

🔐 Secrets

六个值,全部用 wrangler secret put 存:

  • GMAIL_CLIENT_ID、GMAIL_CLIENT_SECRET:Google Cloud Console 拿。
  • GMAIL_REFRESH_TOKEN:去 OAuth Playground 走一次 gmail.modify scope 拿。
  • GMAIL_USER_EMAIL:寄件人。
  • TARGET_EMAIL:Worker 会监控 To 是这个地址的草稿。
  • API_KEY:可选,给 REST endpoint 加锁。

只有 refresh token 需要在 OAuth Playground 转一圈,弄完之后 Worker 就一直自己刷 access token,不用再管。

🚀 Setup

npm install、wrangler secret put 六次、npm run deploy。完事。

要先在本地跑一遍确认没问题:npm run build && npm run dev。

⚠️ 注意事项

几个值得知道的点:

  • 5 分钟的频率是写死的:想更快可以改 wrangler.toml 一行,但 Cloudflare cron 最快 1 分钟,Gmail API 的 quota 才是真正的天花板。
  • TARGET_EMAIL 只支持单一地址:过滤逻辑故意做得很死,就是 To 字段精确匹配。想要 label、subject 前缀、多目标这些,就改一下过滤函数那 5 行。
  • REST endpoint 的 bearer token 是可选的:我自己是开着的。就算 endpoint 只读 pending 草稿,"读你信箱队列" 也算信息泄漏。
  • MCP 这个洞可能会被补:如果 Claude 的 Gmail MCP 之后支持发信,这整个 Worker 就没用了。无所谓,它够小,删起来不心痛。

收尾

代码在这里:lky1020/gmail-mcp-worker-public。

整件事花了大概两小时(包括 OAuth Playground 那段折腾),换来的是 MCP 写的每一封 "好邮件" 都不再死在草稿夹。如果你也踩过同样的坑,可以试试。

下一步想把自动化再推一层 —— 用 cron 喂 Claude 几个 prompt,让它写好邮件,Worker 安静地把它们送出去。继续观察 👀。