关于 Google Workspace MCP Server
Google Workspace MCP Server 基于官方 gws CLI,将选定的 Google Workspace 服务封装为工具,供需要访问 Gmail、Drive、Calendar、Sheets 和 Docs 等服务的 Agent 使用,并支持选择服务和只读模式。
主要功能
- 01提供邮件、文件和文档相关工具
- 02选择要公开的服务
- 03只读模式不注册写入工具
- 04工具注释说明副作用
- 05Contacts 可作为可选服务启用
适用场景
- 01通过 Agent 读取 Workspace 数据
- 02将 MCP 配置限制为指定服务
- 03配置只读 Workspace 连接
MCP 相关
该服务基于官方 gws CLI,将选定的 Google Workspace 操作注册为 MCP 工具。只读模式只注册不会向 Google 写入的工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
61收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| q | string | 否 | 搜索查询(例如 "name contains 'report'" 或 "mimeType='application/vnd.google-apps.folder'") |
| fields | string | 否 | 要包含的字段(例如 "files(id,name,mimeType)") |
| orderBy | string | 否 | 排序顺序(例如 "modifiedTime desc") |
| pageSize | number | 否 | 每页最大结果数(1-1000,默认 100) |
详细介绍
gws-mcp-server
维护模式。 此项目已稳定,并会接收安全修复。暂无新增功能计划,但仍欢迎提交问题和拉取请求。
为 AI Agent 提供 Google Workspace:Gmail、Calendar、Drive、Sheets、Docs、Slides、Tasks 和 Contacts,作为精选的 67 个 Model Context Protocol 工具集构建,基于官方的 Google Workspace CLI (gws)。
为什么?
gws CLI 内置的 MCP 服务因暴露了 200-400 个工具、导致 MCP 客户端的上下文窗口膨胀,已在 v0.8.0 中移除。此服务采用精选方案:由你选择要开放的 Google 服务,并仅将一组精简、高价值且范围明确的操作注册为工具。每个工具都声明全部四种 MCP 注解提示——readOnlyHint、destructiveHint、idempotentHint、openWorldHint——让客户端能够判断副作用、了解哪些写入操作可以安全重试,并提供更清晰的授权提示。这是 Agent 信任基础设施中的权限环节:刻意精简的工具范围、每个工具都声明副作用,且不提供独立的发送工具——Agent 唯一能触发的外发邮件是日历邀请/更新通知;此功能需通过 sendUpdates 选择启用,默认关闭。
前提条件
授予少于默认值的权限范围
此服务不提供独立的发送工具——gmail_drafts_create 明确不会发送邮件,而 Agent 唯一能触发的外发邮件,是通过 sendUpdates 发送日历邀请/更新通知;该参数会经过枚举值校验,默认值为 none。gws auth login 生成的令牌权限范围比这更广。
gws auth login 会打开一个权限范围选择器,列出 九 项权限范围。默认授予 七 项:具有完整读写权限的 drive、spreadsheets、gmail.modify(Google 将其说明为“读取、撰写和发送邮件”)、calendar、documents、presentations 和 tasks——以非交互方式运行时,DEFAULT_SCOPES 也会授予这七项。
另外两项是 Cloud Pub/Sub 和 Cloud Platform,均不属于默认授予范围——gws auth login --help 将 --full 描述为“请求所有权限范围,包括 pubsub + cloud-platform”。
尚未通过实际运行选择器确认哪些项会默认勾选——上面七项是文档所述的默认授予范围,并非对 TUI 的观察结果。按 Enter 前请检查复选框,不要只相信本段说明。
因此,磁盘上的令牌可以发送邮件并改写 Drive,尽管这里的功能不会执行这些操作。请在选择器中取消选择不需要的权限范围,或者:
gws auth login --readonly # read-only across services
根据该标志自身的帮助文本(“以逗号分隔的服务名称,用于限制权限范围选择器”),-s gmail 会将选择器限制为 Gmail。它无法加入 cloud-platform 或 pubsub,因为这两项只能通过 --full 获取。它还会替换你已有的凭据,而不是在其基础上添加权限范围。要为现有登录添加服务,请使用 gws-mcp-server auth login。
Linux 上没有密钥环,加密密钥文件与其加密的数据存放在一起。gws 仅在 macOS 和 Windows 上启用 keyring crate 的原生后端;在其他所有平台上,该依赖都不会启用任何后端,因此存储会回退到将 .encryption_key 写入 ~/.config/gws/。该文件不是存放在其他位置的密钥的备份——它本身就是密钥,而且凭据存储的文档注释明确指出,该文件永远不会被删除。在 Linux 上设置 GOOGLE_WORKSPACE_CLI_KEYRING_BACKEND=file 不会改变任何事情,因为这本来就是唯一的存储方式。在 macOS 和 Windows 上,操作系统密钥环保存密钥后,密钥文件会被删除。如果你在 Linux 上以无头模式运行,请将 ~/.config/gws/ 视为密码文件:任何能读取该目录的人都能获取凭据。
Contacts 需要默认授权范围之外的权限
people_* 工具需要 contacts 权限范围,而默认的 gws auth login(以及上文介绍的七项权限范围授权)不会请求该权限。
请使用 gws-mcp-server auth login -s people 添加 Contacts,而不要使用 gws auth login -s people。 gws 自带的筛选式登录会用筛选后的权限范围替换已保存的凭据,因此会移除你之前授予的 Drive、Gmail、Calendar 等所有权限范围( #68,上游跟踪问题:googleworkspace/cli#673)。此服务的 auth login 则会增量授权:
gws-mcp-server auth login -s people # keep existing scopes, add contacts
gws-mcp-server auth login -s people --dry-run # print the gws command first
它会从 gws auth status 读取已保存凭据所持有的权限范围,添加所请求服务的权限范围,然后运行 gws auth login --scopes <existing + new>。你只需在浏览器中同意一次,之后它会再次读取 gws auth status;如果你请求的任何权限范围(旧的或新的)未获授权,例如你在 Google 的授权界面取消勾选了某个选项,它就会以非零状态码退出。gws 会保存授权界面授予的所有权限范围,因此取消勾选某个选项确实会将该权限范围从已保存的凭据中移除。在打开浏览器之前,以及之后发现缺少权限范围时,命令都会打印 gws auth login --scopes "..." 命令,以便重新请求完整列表。它需要已配置好用于 gws auth login 的客户端;如果凭据已经涵盖这些服务,则不会进行任何更改便退出。
| 标志 | 效果 |
|---|---|
--services, -s <list> | 要添加权限范围的服务(必需) |
--readonly | 添加每项服务的只读权限范围(已持有读写权限范围时跳过) |
--dry-run | 打印 gws auth login 命令但不运行 |
--replace | 旧行为:仅用所请求的权限范围替换凭据 |
--gws-path <path> | gws 二进制文件,与服务端标志相同 |
gws auth status 会实时发现权限范围(通过刷新令牌交换及 Google 的令牌信息查询),因此查询失败时可能缺少 scopes 字段。存在已保存凭据但无法读取其权限范围时,auth login 会拒绝继续,而不会猜测;请修复状态查询问题后重试。如果你确实要仅用所请求的权限范围重新开始,请传入 --replace。如果完全没有已保存的凭据,则这是首次登录,只会请求你指定的服务。
如果你更愿意直接运行 gws,请自行传入完整列表。对于恰好使用上文所述默认七项权限范围的凭据:
gws auth login --scopes "https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets,https://www.googleapis.com/auth/gmail.modify,https://www.googleapis.com/auth/calendar,https://www.googleapis.com/auth/documents,https://www.googleapis.com/auth/presentations,https://www.googleapis.com/auth/tasks,https://www.googleapis.com/auth/contacts"
还必须在你自己的 GCP 项目中启用 People API——这是 OAuth 之外的一次性步骤,因为新增权限范围授权本身不会启用新 API:
gcloud services enable people.googleapis.com --project=<your-project-id>
缺少上述任一步骤都会导致 people_* 工具失败:缺少权限范围会显示来自 Google 的 401/403 错误;API 未启用则会显示独立的 403 错误,其中会指出 API 名称,并提供用于启用它的控制台链接。
快速开始
# Install
npm install -g gws-mcp-server
# Or run from source
git clone https://github.com/conorbronsdon/gws-mcp-server.git
cd gws-mcp-server
npm install && npm run build
配置
Claude Code(.mcp.json)
{
"mcpServers": {
"google-workspace": {
"command": "npx",
"args": [
"gws-mcp-server",
"--services", "drive,sheets,calendar,docs,slides,gmail,tasks"
]
}
}
}
Contacts 默认不启用,因为它需要额外的身份验证和 API 设置。
完成 Contacts 的前置步骤 后,
将 people 追加到服务列表中:
"args": ["gws-mcp-server", "--services", "drive,calendar,people"]
Claude Desktop(claude_desktop_config.json)
{
"mcpServers": {
"google-workspace": {
"command": "npx",
"args": [
"gws-mcp-server",
"--services", "drive,sheets,calendar"
]
}
}
}
选项
| 标志 | 说明 | 默认值 |
|---|---|---|
--services, -s | 要公开的服务逗号分隔列表 | 核心服务;people 默认不启用 |
--gws-path | gws 二进制文件的路径 | GWS_BINARY 或 gws |
--read-only | 仅注册只读工具 | 关闭 |
在 Windows 上,npm 的 gws.cmd 会被解析为其 JavaScript 入口点并通过 Node 运行。--gws-path 或 GWS_BINARY 也可以直接指向 JavaScript 入口点或 .exe。
--read-only
--read-only 注册 26 个工具,而不是默认的 61 个。所有会向 Google 写入数据的工具都不会注册,因此不会出现在 tools/list 中,Agent 也无法调用它们——包括 gmail_drafts_create,它虽然不会发送邮件,但仍属于写入操作。drive_files_download 会保留,因为它只读取数据。显式添加 people 后,总数会变为 67 个工具,其中 29 个为只读工具。
gws-mcp-server --read-only
gws-mcp-server --read-only --services drive,calendar # combines with -s
此选项限制的是 Agent,而不是凭据。磁盘上的令牌仍保留获授的所有权限范围,机器上的其他任何程序也仍可使用它。gws auth login --readonly 才会缩小令牌的权限范围;两者互为补充。对于 MCP 服务,威胁模型针对的是 Agent,但这也是此说法的适用范围。
缩减上下文开销
每个已注册的工具都会随每次对话一同传递。默认注册表的 tools/list 载荷约为 46 KB(约 11.8K 个令牌);选择启用 people 后,完整注册表约为 52 KB(约 13.2K 个令牌)。上面的两个标志可以组合使用,而移除整个不需要的服务是最省力的上下文优化方式:
gws-mcp-server --services calendar # calendar assistant: 6 tools
gws-mcp-server --services drive,docs # document work, nothing else
gws-mcp-server --read-only --services drive,docs,sheets # research setup: reads only
在 .mcp.json 或 claude_desktop_config.json 中,只需编辑 args 数组即可进行同样的精简:
"args": ["gws-mcp-server", "--services", "drive,calendar"]
服务的工具数量(下方标题中的数字)反映了其上下文开销:移除 drive(24 个工具)节省最多,移除 docs(3 个工具)节省最少。目前没有逐个排除工具的标志——如果服务粒度对你的设置来说太粗,请提交问题,说明你需要怎样拆分。
可用服务和工具
drive(24 个工具)
drive_files_list— 搜索并列出文件drive_files_get— 获取文件元数据drive_files_create— 创建文件(可选上传)drive_files_copy— 复制文件(适用于格式转换)drive_files_update— 更新文件元数据或内容drive_files_delete— 删除文件drive_files_export— 将 Google Workspace 文件(文档、表格、幻灯片)导出为其他格式drive_files_download— 下载文件内容(文本以内联形式返回,二进制内容以 base64 形式返回或保存到路径;Google 原生文件会导出为可读格式)drive_permissions_create— 共享文件drive_permissions_list— 列出文件的所有权限(审核共享状态,例如检查是否公开访问)drive_permissions_update— 更改现有权限的角色(例如从读者改为写入者);降级权限会移除相应能力。更改所有权请使用下方专用的转移工具。drive_permissions_delete— 撤销文件权限drive_permissions_transferOwnership— 立即将所有权转移给同一组织内的另一个 Google Workspace 账号,并将当前所有者降级为写入者;会发送强制通知邮件;不支持共享云端硬盘中的文件drive_permissions_proposeOwnershipTransfer— 提议在个人/消费者账号之间转移所有权;接收方必须另行接受(会发送强制通知邮件),此操作不会直接完成转移drive_comments_list— 列出文件上的评论(适用于任何 Drive 文件,不仅限于 Docs/Sheets/Slides)drive_comments_get— 获取单条评论drive_comments_create— 添加评论,可选择将其锚定到应用定义的区域(Workspace 编辑器仍会将其显示为未锚定)drive_comments_update— 更改评论文本(仅限作者)drive_comments_delete— 永久删除评论(仅限作者)drive_replies_list— 列出评论的回复drive_replies_get— 获取单条回复drive_replies_create— 回复评论,或通过action字段解决/重新打开评论drive_replies_update— 更改回复文本(仅限作者)drive_replies_delete— 永久删除回复(仅限作者)
sheets(5 个工具)
sheets_get— 获取电子表格元数据sheets_values_get— 读取单元格值sheets_values_update— 写入单元格值sheets_values_append— 追加行sheets_batchUpdate— 对电子表格应用更新(条件格式、单元格/边框格式、添加工作表等;删除请求不可撤销)
calendar(6 个工具)
calendar_events_list— 列出日程calendar_events_get— 获取日程详情calendar_events_insert— 创建日程,可选填写attendees。sendUpdates控制邀请邮件的发送(默认值为none,即不发送邮件;但根据参与者的设置,日程仍可能显示在其日历中)calendar_events_update— 更新日程(仅更改提供的字段,但attendees除外;该字段会替换整个列表,未列出的参与者将被取消邀请)。支持与插入操作相同的sendUpdates设置calendar_events_delete— 删除日程calendar_freebusy_query— 查询一个或多个日历在指定时间范围内的忙闲信息
docs(3 个工具)
docs_get— 获取文档内容docs_create— 创建文档docs_batchUpdate— 应用文档更新
slides(5 个工具)
slides_get— 获取演示文稿的幻灯片、版式、母版和页面元素slides_create— 创建空白演示文稿slides_batchUpdate— 应用更新(插入/更新/删除幻灯片、文本、形状、表格等)slides_pages_get— 获取单个页面(幻灯片、版式或母版)slides_pages_getThumbnail— 获取页面的缩略图 URL
gmail(6 个工具)
gmail_messages_list— 搜索邮件gmail_messages_get— 阅读邮件gmail_threads_list— 搜索邮件会话gmail_threads_get— 阅读完整邮件会话gmail_threads_modify— 添加/移除邮件会话标签(归档、标记为已读、加星标)gmail_drafts_create— 创建草稿(纯文本和/或 HTML,可通过threadId关联回复)。草稿不会自动发送
tasks(12 个工具)
tasks_tasklists_list— 列出任务清单tasks_tasklists_get— 获取任务清单tasks_tasklists_insert— 创建任务清单tasks_tasklists_update— 更新任务清单(仅更改提供的字段)tasks_tasklists_delete— 删除任务清单tasks_tasks_list— 列出任务(筛选条件:已完成/已隐藏/截止日期)tasks_tasks_get— 获取任务tasks_tasks_insert— 创建任务(可选择嵌套或指定位置)tasks_tasks_update— 更新任务(仅更改提供的字段;常见用途:标记为已完成)tasks_tasks_move— 在清单内或不同清单间移动任务,或调整顺序tasks_tasks_delete— 删除任务tasks_tasks_clear— 隐藏清单中的所有已完成任务
people(6 个工具)
需要 contacts 权限范围并启用 People API — 请参阅 Contacts needs a scope outside the default grant。
people_people_get— 按资源名称获取联系人(或通过people/me获取已认证用户)people_people_searchContacts— 按姓名、电子邮件、电话或组织搜索联系人people_people_createContact— 创建新联系人people_people_updateContact— 更新联系人(请求正文中必须包含当前 etag)people_people_deleteContact— 永久删除联系人people_connections_list— 列出已认证用户的联系人
更新语义:
*_update工具(日历日程、任务、任务清单)使用 Google API 的patch动词——合并提供的字段,其余字段保持不变。要清除现有值,请明确传入该值(例如空字符串),而不是省略该字段。
总计:支持 67 个工具;默认启用 61 个(旧实现中为 200-400 个)
添加新工具
编辑 src/services.ts 以添加工具定义。每个工具都直接对应一个 gws CLI 命令:
{
name: "drive_files_list", // MCP tool name
description: "List files in Drive", // Shown to AI
command: ["drive", "files", "list"],// gws CLI args
params: [ // Maps to --params JSON
{ name: "q", description: "Search query", type: "string", required: false },
],
bodyParams: [ // Maps to --json body
{ name: "name", description: "File name", type: "string", required: true },
],
}
类型化错误
工具调用失败会映射到类型化错误层级(src/errors.ts):AuthenticationError(401/403)、RateLimitError(429)、ValidationError(400)、NotFoundError(404,drive 命令会附带共享云端硬盘访问提示)和 ServerError(5xx),它们都继承自基类 GwsError。与 HTTP API 客户端不同,此服务没有可读取状态码的响应对象——它会将 gws CLI 作为子进程启动,只能看到纯文本(stdout/stderr,或被拒绝的 Promise 的 .message)。mapGwsErrorToTyped() 会从文本中提取类似状态码的信息,同时处理原始 JSON 错误正文(Google 自身的 {"error":{"code":...,"message":...}} 格式)以及包含类似 HTTP 状态码标记的纯文本(例如 "Error 404: ...")。如果两种格式都未找到,则原始消息会原样传递,而不会强行赋予一个臆造的状态码。
架构
MCP Client (Claude) ←→ stdio ←→ gws-mcp-server ←→ gws CLI ←→ Google APIs
该服务是一个轻量封装:它将 MCP 工具调用转换为 gws CLI 调用,在适当情况下传递 --params 和 --json,并返回 JSON 输出。身份验证由 gws CLI 负责——此服务绝不会查看或存储你的 Google 凭据。
开发
git clone https://github.com/conorbronsdon/gws-mcp-server.git
cd gws-mcp-server
npm ci
npm run lint # type-check
npm run build
npm test # vitest, mocks the executor layer — no real gws calls
贡献
欢迎提交问题和拉取请求。请遵循精选的服务契约:提供一组范围明确的工具,而不是逐一镜像所有 Google API。在为新服务编写 PR 之前,请先提交问题,描述使用场景、所需权限范围和副作用;docs/scope-policy.md 说明了哪些内容适合放在这里,哪些更适合作为配套服务。也欢迎直接改进现有工具。如何报告漏洞,请参阅 SECURITY.md。
配套服务
精选范围之外的服务可以作为独立 MCP 服务发布,与本服务并行运行,且各自拥有独立的权限范围授权。此处将列出社区提供的配套服务,前提是它们为每个工具声明副作用,并且不添加独立的发送操作。
其他选项
本服务刻意保持精简:精选的工具范围、每个工具都声明副作用、不提供独立的发送工具。这种取舍适合某些工作流,但不适合另一些。真正的替代方案如下:
| 你的需求 | 使用 |
|---|---|
| 使用所有 Workspace API、可自托管,并支持分级和多用户 OAuth | taylorwilsdon/google_workspace_mcp — 涵盖 12 项服务的 120+ 个工具,MIT 许可,--tool-tier core|extended|complete |
| 使用 Google 自己托管的服务 | Google Workspace remote MCP servers — 8 个端点、42 个工具。开发者预览版:需要应用、Workspace 账号(非个人 Gmail)和受支持的客户端方案 |
| 不使用 MCP——通过 CLI 和 Agent 技能实现 | googleworkspace/cli — 100+ 项 Agent 技能,使用的 gws auth login 与本服务相同 |
有一点值得直说:Google 官方的 Gmail MCP 服务同样只能起草邮件,不能发送——精选工具范围这一主张如今已不再另类。本服务仍具备而其他方案没有的功能包括:Google Tasks(Google 官方服务中没有 Tasks 服务)、每个工具都包含全部四种 MCP 注解提示、无需预览版应用或方案限制的本地 stdio 服务,以及只需一个标志即可启用的 --read-only。
数据分析领域的同类项目
| 数据 | 服务 |
|---|---|
| Google Workspace | 本仓库 |
| Search Console | gsc-mcp — 采用同样的精选方式,包括 gsc_striking_distance 等衍生视图 |
| YouTube Analytics | yt-analytics-mcp — 面向频道所有者的频道、视频和播放列表指标;只读,提供 9 个工具 |
| Google Analytics 4 | googleanalytics/google-analytics-mcp — Google 官方项目,只读 |
| BigQuery | googleapis/mcp-toolbox — Google 官方项目 |
这些使用不同的凭据体系,而非同一个登录:Workspace 使用 gws auth login 进行身份验证,Search Console 使用 webmasters OAuth 凭据,YouTube Analytics 使用 yt-analytics.readonly OAuth 凭据,GA4 使用作用域为 analytics.readonly 的 Application Default Credentials。这里没有任何项目会与其他项目共享令牌。
关于
由 Conor Bronsdon 创建并维护。我主持 Chain of Thought 播客,探讨 AI 基础设施、开发者工具,以及从业者如何实际使用这些技术。我构建这个项目,是为了让运行节目的 Agent 工作流能够安全、精选地访问 Gmail、Calendar、Drive、Sheets、Docs、Slides、Tasks 和 Contacts。
配套工具:
- Transistor MCP:Transistor.fm 官方 MCP 服务。提供单集、发布和分析功能。
- substack-mcp:在 Substack 上阅读帖子并管理草稿,适用于 Agent 工作流。
- podcastindex-mcp:Podcast Index MCP 服务,可按人物或主题搜索、查看热门节目和订阅源状态。
- op3-mcp:通过 OP3 查看播客分析数据,包括下载量、地理位置和应用。只读。
- ai-tools-for-creators:为以创意为生的人精选的 AI 技能和 MCP 服务列表。
更多内容请访问 chainofthought.show,也可在 X 上关注。
免责声明
这是一个独立的个人项目,与任何公司均无关联,也未获得任何公司的赞助或认可。文中所有观点均为我个人观点。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。