gws 上手:把 Google Workspace API 变成可组合的命令(还能直接喂给 Agent)

gws 上手:把 Google Workspace API 变成可组合的命令(还能直接喂给 Agent)

做过 Google Workspace 自动化的人,大概率都熟悉这条路径:

  • 先翻一圈 REST 文档
  • 再写一坨 OAuth
  • 然后开始拼请求、处理分页、做重试
  • 最后把返回值“揉”成脚本能消费的数据结构

googleworkspace/cli(命令:gws)给了一个更省事的解法:

  • 一个 CLI 覆盖 Drive/Gmail/Calendar/Sheets…几乎所有 Workspace API
  • 默认输出 结构化 JSON(对脚本和 LLM 都友好)
  • 甚至可以直接 gws mcp 启一个 MCP Server,把 Workspace 能力当成“工具”挂到你的 Agent 上

如果你希望把 Workspace 这类“企业胶水”做得更像工程化工具面,而不是一堆散脚本,gws 值得试。


先把它讲清楚:gws 是什么 / 不是什么

是什么:

  • One CLI for all of Google Workspace:Drive、Gmail、Calendar…以及更多 Workspace API。
  • 动态命令面:它不会内置固定命令表,而是运行时读取 Google 的 Discovery Service,动态生成资源/方法树。
  • 结构化输出:成功、错误、元数据都用 JSON,适合 jq、适合日志采集,更适合 Agent 做工具调用。

不是什么:

  • 不是官方支持的 Google 产品(仓库明确写了)。
  • 仍在快速迭代期,往 v1.0 走的过程中会有 breaking changes(适合你愿意跟着工具升级的场景)。

gws 标志

最短闭环:5 分钟确认它是不是你的菜

0)前置条件

  • Node.js 18+
  • 一个 Google Cloud project(为了 OAuth)
  • 你的账号能访问目标 Google Workspace

1)安装

最省事:

npm install -g @googleworkspace/cli

npm 包自带预编译二进制,一般不需要 Rust。

(你也可以走 GitHub Releases / 从源码 cargo install / Nix flake,但先别折腾,先跑通再说。)

2)认证(本地交互最顺)

gws auth setup
gws auth login

gws auth setup 会引导你把 GCP 项目和 OAuth 跑起来;gws auth login 负责后续登录与 scope 选择。

3)验证:列 5 个 Drive 文件

gws drive files list --params '{"pageSize": 5}'

能拿到 JSON 输出,就说明你已经跑通闭环。


快速上手流程示意

为什么我觉得它会火:不是“新”,是对 LLM/自动化太友好

1)你把 API 集成成本砍到“脚本级”

很多小需求(列文件、建表、发消息)不值得起一个 SDK 工程。

# 创建一个 Sheets
gws sheets spreadsheets create --json '{"properties": {"title": "Q1 Budget"}}'

2)Schema 自省:让 Agent 能自己学会怎么调用

Agent 最怕“不知道 request/response 长什么样”。gws 直接给你查:

gws schema drive.files.list

3)MCP:把 Workspace 变成可插拔工具箱

如果你已经在用 Claude Desktop / Gemini CLI / VS Code 等 MCP 客户端,这个就很直观:

# 只暴露你要的服务,避免工具数爆炸
gws mcp -s drive,gmail,calendar

MCP 客户端里通常这样配:

{
  "mcpServers": {
    "gws": {
      "command": "gws",
      "args": ["mcp", "-s", "drive,gmail,calendar"]
    }
  }
}

一个非常实用的提醒:每个 service 可能带来 10–80 个工具,很多客户端有 50–100 的 tool limit,别一上来 -s all


认证策略:本地、CI、服务器怎么选

你不用被 OAuth 绑死在“必须有浏览器”那种形态里。gws 支持几条常见路径:

1)本地交互(最推荐)

gws auth setup
gws auth login

它会把凭据加密存储(并使用系统 keyring 管钥匙),这是“既省事又相对安全”的默认路线。

2)Headless/CI:先在有浏览器的机器登录,再导出

# 在有浏览器的机器先登录
gws auth export --unmasked > credentials.json

# 在服务器/CI 上
export GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE=/path/to/credentials.json

3)你已经有 token:直接喂 access token

export GOOGLE_WORKSPACE_CLI_TOKEN=$(gcloud auth print-access-token)

4)Service Account(server-to-server)

export GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE=/path/to/service-account.json
gws drive files list

认证优先级(很关键,排错先看这个)

从高到低:

  • GOOGLE_WORKSPACE_CLI_TOKEN
  • GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE
  • gws auth login 加密凭据
  • ~/.config/gws/credentials.json

如果你觉得“明明设置了文件却没生效”,十有八九是上层优先级覆盖了。


工程化细节:它更像工具平台,不是玩具 CLI

我会重点看这些“能不能真上生产脚本”的点:

  • --dry-run:先预览请求(特别适合改动敏感资源的时候)
  • 自动分页:--page-all / --page-limit / --page-delay
  • Multipart upload:例如 Drive 传文件
gws drive files create --json '{"name": "report.pdf"}' --upload ./report.pdf
  • NDJSON:把分页结果当数据流处理
gws drive files list --params '{"pageSize": 100}' --page-all | jq -r '.files[].name'

高概率踩坑清单(建议你上来就看)

1)OAuth testing mode 的 scope 数量限制

如果你的 OAuth App 还在 testing mode,Google 对 consent 的 scope 数量有限制。
解决思路很简单:不要选“全家桶”,按服务过滤 scope:

gws auth login -s drive,gmail,sheets

2)登录 403 / “Access blocked”

常见原因是:你没把自己的账号加到 Test users
处理方式:去 OAuth consent screen 里把账号加进去,再重试 gws auth login

3)redirect_uri_mismatch

通常是 OAuth client 类型没选 Desktop app。删掉重建会快很多。

4)API 没开:accessNotConfigured

表现是 403,并提示某个 API 没启用。按提示去 GCP 控制台启用对应 API。

5)Sheets 的 !:bash history expansion

Sheet range 里有 !,在某些 shell 下会触发历史扩展。
稳妥做法:相关 JSON 都用单引号包起来。

gws sheets spreadsheets values get \
  --params '{"spreadsheetId": "ID", "range": "Sheet1!A1:C10"}'

额外加分项:给 Agent 做“响应消毒”(防 prompt injection)

如果你会把 Gmail/Docs/Chat 的内容喂给 Agent,真正的问题不只是“拿到数据”,而是数据里可能带 prompt injection

gws 提供了对接 Google Cloud Model Armor 的响应扫描:

gws gmail users messages get --params '...' \
  --sanitize "projects/P/locations/L/templates/T"

你也可以用环境变量设默认策略(例如 warnblock)。


我会怎么把它接进 OpenClaw(很实用的一套接法)

你可以把 gws 当成 Workspace 的“统一工具面”,然后让不同 agent 各司其职:

  • research:查清楚要用哪个 API/method、参数怎么填(用 gws schema
  • coding:把调用固化成脚本/定时任务
  • ops:只管跑命令、拉 JSON、做数据流水线

如果你希望 OpenClaw 直接拥有 gws 的能力,仓库也给了现成的技能安装方式:

  • 一次性装全套技能:
npx skills add https://github.com/googleworkspace/cli
  • 或只装你用得上的(例如 Drive/Gmail):
npx skills add https://github.com/googleworkspace/cli/tree/main/skills/gws-drive
npx skills add https://github.com/googleworkspace/cli/tree/main/skills/gws-gmail

(这类“按需装”的方式,反而更符合 Agent 的工具上限与权限最小化。)


一个很现实的选型标准

如果你对 Workspace 自动化的需求已经出现过两次以上(拉 Drive、发 Gmail、写 Calendar、批量操作 Sheets、发 Chat 消息),那 gws 值得你花 30 分钟跑完安装+认证。

跑完之后只问自己一句话:

我更想维护一堆零散脚本,还是更想维护一个“可组合、可被 Agent 调用的工具面”?

如果你偏后者,gws 大概率就是你要的那块“胶水底座”。


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注