进阶 📋 6 个步骤 第 522 / 523 篇

用 Google Workspace MCP v2 让智能体接管邮箱与日历:120+ 工具、OAuth 2.1 多用户与工具分级实操

开源 Google Workspace MCP v2.1.0(10-9):12 个服务 120+ 工具、core/extended/complete 三级分级控上下文、OAuth 2.1 多用户、workspace-cli 脚本化、无状态容器部署,MIT 协议零遥测。

2026.10.11· 26 分钟阅读· 约 2438 字· 📧 Google Workspace MCP / 🧩 MCP Server

想让智能体真正接管工作,Google 全家桶是绕不开的一站:邮件要收发、日历要排期、文档要查要改。各家客户端内置的 Google 集成普遍偏浅,自己拼 API 又要处理 OAuth 与轮询。taylorwilsdon 维护的开源 Google Workspace MCP Server 在 10 月 9 日发布 v2.1.0,把 Gmail、Drive、Calendar、Docs、Sheets、Slides、Forms、Tasks、Contacts、Chat、Custom Search、Apps Script 十二个服务、120 多个工具收进一个 MCP 端点:OAuth 2.1 多用户认证、core/extended/complete 三级工具分级、只读模式、完整 CLI、无状态容器部署,MIT 协议、无内置遥测。v2.0.0(10 月 3 日)迁移到 FastMCP 4 与 MCP Python SDK v2 后支持无状态 HTTP——多人共用一个部署不再需要粘性会话。本篇按官方 README 路径,从 Google Cloud 配置到脚本化调用完整走一遍。

🎯 适合人群:想让 Claude Desktop、Claude Code、Codex 等 MCP 客户端直接操作邮箱、日历、文档的个人与团队。前置要求:一个 Google Cloud 项目;本机安装 uv;想好服务跑在哪(本机 stdio / HTTP 进程 / 容器)。

先理解:两种鉴权形态与三级工具分级

鉴权分两条路。单人本机用 confidential client:环境变量里放一对 OAuth client 凭证,客户端连上来时弹浏览器完成 Google 授权,token 存在本地。团队/远程部署用 OAuth 2.1 加 PKCE 的多用户形态:MCP 客户端凭 PKCE 连接(无需拿走 secret),服务端持有一对 client 凭证与 Google 往来,每个用户各自授权自己的账号。工具分级解决的是另一个问题——120 多个工具全量塞进上下文会吃掉大量 token,所以分 core(精简集)、extended(core 加管理操作)、complete(全量)三档,还能用 --tools 挑服务、--read-only 锁只读、--disabled-tools 单独减掉某个工具。

想清楚你把什么交了出去。默认数据流只在你与 Google API 之间,无遥测、无许可服务器;但你的 OAuth client 指向哪个 GCP 项目、同意屏幕上勾了哪些 scope,就等于把对应范围的 Gmail/Drive/日历交给了客户端里的模型。按需启用服务、从只读起步,是官方文档反复强调的姿势。

Step 1:Google Cloud 项目准备

1 启用 API、创建 OAuth 客户端
# 1) 启用计划使用的服务 API
#    (官方 quick-start 提供逐项一键启用链接,也可命令行批量开)
gcloud services enable gmail.googleapis.com calendar-json.googleapis.com \
  drive.googleapis.com docs.googleapis.com

# 2) 控制台:APIs & Services → Credentials → Create Credentials
#    → OAuth client ID
#    本机调试选「Desktop app」;HTTP 部署选「Web application」,
#    重定向 URI 填:http://localhost:8000/oauth2callback

# 3) 复制 client id 与 client secret(或下载 client_secret.json)

官方 quick-start(workspacemcp.com/quick-start)有带截图的五分钟全流程,每一步该点哪、scope 怎么生成都覆盖了。scope 不用手工罗列——按你启用的服务与启动参数自动推导,这也是「只开要用的服务」省心的原因之一。

同意屏幕的发布状态会挡人。OAuth 同意屏幕处于 Testing 状态时,只有手动加进测试用户名单的账号能完成授权;给团队成员用就把他们的账号加进名单,或走应用发布流程——别在「为什么同事授权报错」上浪费一下午。

Step 2:单人模式跑通

2 两个环境变量加一条启动命令
# 1. 凭证
export GOOGLE_OAUTH_CLIENT_ID="..."
export GOOGLE_OAUTH_CLIENT_SECRET="..."

# 2. 启动 —— 三档工具分级选一档
uvx workspace-mcp --tool-tier core       # 精简集
uvx workspace-mcp --tool-tier extended   # core + 管理操作
uvx workspace-mcp --tool-tier complete   # 全量 120+

# 或按服务精挑
uvx workspace-mcp --tools gmail drive calendar

uvx 会即时拉起带全部依赖的运行环境,你不需要装任何 Python 包。服务起来后,从 MCP 客户端发起连接时会弹 Google 授权页,账号确认、scope 确认,然后就能在客户端的工具列表里看到 Workspace 相关工具。

💡 每个工具的完整参考在 workspacemcp.com 上按服务成页:所属分级、参数、所需 scope、示例提示词一应俱全。给智能体写「帮我整理未读邮件」这类指令前,先翻一眼工具页,命名与参数心里有数,出错好排查。

Step 3:接入客户端

3 Claude 桌面端走 Connector,Claude Code 一条命令
# Claude Desktop / 网页 / 手机:HTTP 模式 + Connector(官方推荐路径)
#   Settings → Connectors → Add custom connector
#   地址填 http://localhost:8000/mcp

# Claude Code:先把服务以 HTTP 模式跑起来,然后
claude mcp add --transport http workspace-mcp http://localhost:8000/mcp

# 可选:装官方附带的技能包,改善 Workspace 工具路由
ln -s "$(pwd)/skills/managing-google-workspace" ~/.claude/skills/managing-google-workspace

streamable HTTP 是官方推荐的通道,旧客户端没有 Connector 能力的走 stdio 配置(FAQ 里有指引)。ChatGPT 走 Developer Mode 接入,VS Code、LM Studio、Open WebUI 等任意 MCP 客户端都能用同一套 HTTP 或 stdio 配置。附带技能包是个加分项:里面写好了「什么任务该用哪组工具」的路由经验,装上后工具命中率明显更稳。

uvx 拉起的进程生命周期跟着终端走。终端关了服务就停,客户端里工具集体消失——长期使用要么 uv tool install . 装成常驻命令,要么走 Step 6 的容器化,别用「每次手动开个终端」的方式维持依赖。

Step 4:多用户 OAuth 2.1 部署

4 团队共享一个部署,各自授权各自账号
export MCP_ENABLE_OAUTH21=true
export GOOGLE_OAUTH_CLIENT_ID="..."
export GOOGLE_OAUTH_CLIENT_SECRET="..."
# 或者用 GOOGLE_CLIENT_SECRET_PATH 指向 client_secret.json
# (环境变量优先级更高)
export WORKSPACE_MCP_PORT=8000
export GOOGLE_OAUTH_REDIRECT_URI="http://localhost:8000/oauth2callback"
export OAUTHLIB_INSECURE_TRANSPORT=1

# OAuth 2.1 要求 HTTP 传输
uvx workspace-mcp --transport streamable-http --tool-tier core

这个形态下每个用户用自己的 Google 账号走一遍授权,token 由服务端代理统一管理——适合团队共享一个内部部署,一人配服务、全员直接用。客户端凭 PKCE 连接,secret 始终留在服务端,不会随客户端配置扩散。

OAUTHLIB_INSECURE_TRANSPORT=1 只限本机调试。它放行非 HTTPS 回调,公网或内网共享部署绝不能带;生产环境必须 HTTPS 加反向代理,并按 Advanced Deployment 文档配置 WORKSPACE_EXTERNAL_URL 与 Origin 校验(文档里连 nginx 的 Origin: null 同意页坑位与 WORKSPACE_MCP_ALLOW_NULL_ORIGIN_CONSENT 逃生阀都写了),逐项对照,不要凭感觉上线。

Step 5:workspace-cli 脚本化

5 不开对话,直接在 shell 里调工具
# 列出当前服务器的工具
uv run workspace-cli list

# 直接调用一个工具
uv run workspace-cli call search_gmail_messages query="is:unread" max_results=5

# 全局安装后当普通命令用(在仓库目录内执行)
uv tool install .

CLI 自带加密磁盘缓存的 OAuth token——认证一次,之后脚本随便跑。这是把 Workspace 操作接进 shell 脚本、定时任务、CI 流水线的入口:每日晨会前自动汇总今日日程、每周把未读重要邮件归档到 Drive,都从这两条命令长出来。

安装方式有陷阱。官方 README 明确警告:不要用 uvx workspace-cli——PyPI 上有个废弃包占用了这个名字。一律用本仓库内的 uv run workspace-cli,或在仓库目录里 uv tool install . 装出来的本地命令。

Step 6:容器化与生产基线

6 从本机玩具到团队基础设施差这几步
docker build -t workspace-mcp .
docker run -p 8000:8000 workspace-mcp

# 生产要点(Advanced Deployment 文档):
# 1) 无状态模式:零磁盘写入,适配受限容器环境
# 2) token 存储后端:memory / disk / Valkey 或 Redis(分布式)
# 3) 只读起步:--read-only,再按服务开 --permissions
# 4) 服务账号 + 域级委派:按请求模拟用户,配域白名单
# 5) 可信网关身份:Pomerium / Cloudflare Access / oauth2-proxy
# 6) 调优变量:WORKSPACE_MCP_GOOGLE_API_WORKERS、
#    WORKSPACE_MCP_GOOGLE_API_TIMEOUT_SECONDS 等,见环境变量参考

v2.1.0 的几个增量值得点名:Gmail 转发草稿(对既有邮件起草转发)、可选的 GCS 文件后端(无状态部署存附件)、超时从 30 秒恢复到 60 秒(慢查询场景)。安全面上做得也比较自觉:本地文件读取默认限定托管附件目录,validate_file_path() 始终拦截 .env 系列文件与 ~/.ssh、~/.aws 等凭证目录——即便放宽 ALLOWED_FILE_DIRS 也绕不过这层。

💡 升级到 v2 的存量用户迁移成本主要在传输层:v2.0.0 起 stdio 与 streamable HTTP 双通道并存,老的 stdio 客户端配置继续可用;用到多用户或容器编排的,再按 OAuth 2.1 与无状态部署文档分步切。

给写权限前先问一句:对话另一端是谁。Drive/Docs/Gmail 的写工具一旦授权,客户端里的模型就能改文件发邮件;个人本机自用可接受,共享部署务必 read-only 起步、按人按服务开权限,并把 OAuth 2.1 多用户开着——让每个操作都能对上具体用户。

常见问题 FAQ

Q:和 Claude、ChatGPT 内置的 Google 集成差别在哪?覆盖广度(120 多个工具对内置的浅层集成)、细粒度编辑(Docs 19 个工具含样式、表格、批注)、多用户与自托管能力。官方 README 的原话是功能完整度「一个档位」。

Q:要花钱吗?MIT 开源免费,无内置遥测;官方也提供托管实例(每月 5 美元起)给不想自己运维的人。

Q:Chat 服务连不上?Google Chat 需要一次性完成 Chat app 配置且使用 Workspace 账号,纯个人 Gmail 不行——配置步骤在官方 Chat setup FAQ。

Q:token 存在哪里?默认本地磁盘(加密);无状态与分布式部署可切 memory、Valkey/Redis 或 GCS 后端,按部署形态在环境变量里选。

← 返回教程中心