mcpField
G
gws-connector

gws-connector

本地服务
orieg.github.io生产力24 周前更新

关于 gws-connector

gws-connector 是供兼容客户端使用多个 Google Workspace 账户的 MCP 服务。它可按账户标签、邮箱或域名路由 Gmail、Calendar、Drive、Sheets、Docs 等请求,并支持每个账户单独配置 OAuth 凭据及使用系统密钥链存储凭据。

主要功能

  1. 01连接多个 Google 账户
  2. 02按标签、邮箱或域名路由请求
  3. 03为各账户使用独立 OAuth 凭据
  4. 04将凭据存储在系统密钥链
  5. 05管理账户及默认账户
  6. 06使用邮件、日历、文件和效率工具

适用场景

  1. 01同时处理个人和工作 Google 账户
  2. 02将请求路由到指定客户或组织账户
  3. 03区分不同组织的凭据
  4. 04通过兼容 MCP 的客户端管理 Google Workspace 数据

MCP 相关

MCP 服务通过标准输入输出通信,并提供 Google Workspace 服务及账户管理工具。兼容客户端可按标签或邮箱为请求指定账户。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbgws-mcp.mcpb0.4.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

GWS Connector

CI Release Go License: MIT

多账号 Google Workspace MCP 服务——通过智能路由连接多个 Gmail、Google Calendar 和 Google Drive 账号。

兼容 Claude Code、Gemini CLI、GitHub Copilot、Cursor、OpenAI Codex 以及任何兼容 MCP 的客户端。

为什么选择它

大多数 AI 编码助手只支持一个 Google 账号。如果你使用多个 Google 账号(个人和工作账号、多个客户的账号或不同组织的账号),就需要手动在账号之间切换。这个 MCP 服务可以让你一次性连接所有账号,并按标签、邮箱或域名路由请求。

功能

  • 多账号 — 连接不限数量的 Gmail 和 Google Workspace 账号
  • 智能路由 — 按标签(work)、邮箱或域名指定账号
  • 每账号独立 OAuth — 不同组织可以使用各自的 GCP 凭据
  • 安全存储 — 客户端密钥和令牌存储在操作系统密钥链中(在没有 GNOME Keyring 的 Linux 上回退到文件存储)
  • 49 个工具 — Mail(11 个)、Calendar(7 个)、Drive(3 个)、Sheets(8 个)、Docs(4 个)、Contacts(2 个)、Tasks(5 个)、Slides(3 个)、账号管理(6 个)
  • 账号管理 — 添加、移除、设置默认账号、列出账号
  • 跨平台 — 标准 MCP 服务,可与任何兼容的客户端配合使用

对比

有不少优秀的 Google Workspace MCP 服务。当你需要多个账号和简化运维时,GWS Connector 是理想选择:

大多数 GWS MCP 服务GWS Connector
账号每个服务实例一个账号一个实例中不限数量的账号,按标签 / 邮箱 / 域名路由
多个组织共用 OAuth 应用每账号独立 OAuth——每个组织使用各自的 GCP 凭据
凭据存储.env / 明文令牌文件操作系统密钥链(Keychain / GNOME Keyring / Credential Manager)
运行时Python/Node + 依赖项单个静态 Go 二进制文件,无需安装运行时
客户端通常只有一个Claude Code、Gemini CLI、Copilot、Cursor、Codex,以及任何 MCP 客户端
安装手动配置Claude Code 插件、Gemini 扩展、一键式 .mcpb、MCP Registry

如果你始终只使用一个 Google 账号,并希望获得尽可能全面的工具覆盖(Forms、Chat、Vault 等),那么单账号服务(例如 taylorwilsdon/google_workspace_mcp )可能更适合你。GWS Connector 专注于以清晰、安全的方式支持多账号 Gmail / Calendar / Drive / Sheets / Docs / Contacts / Tasks / Slides。

升级(Google Tasks)

Google Tasks 工具(gws.tasks.*)通过新增一个 OAuth scope (tasks)提供。现有用户必须为每个已连接账号重新授权,以便生成包含此 scope 的新令牌:

/gws:reauth

在批准浏览器中的授权页面之前,请查看新 scope 授予的权限——对账号的 Google Tasks 列表和任务拥有完整的读写权限。详情请参阅下方的scope 说明表。

重新授权之前,还必须在 GCP 项目的 OAuth 授权页面配置中添加 tasks scope 并启用 Tasks API,否则授权页面会拒绝该请求。在账号重新授权之前,gws.tasks.* 工具会返回权限不足错误,并指出需要运行的重新授权工具。

升级——联系人 / People API

Contacts 工具(gws.contacts.search、gws.contacts.directory_search)新增了两个只读 OAuth 范围(contacts.readonly、directory.readonly)。 现有用户必须为每个已连接的账号重新授权,以便生成包含这些范围的新令牌:

/gws:reauth

在浏览器中批准授权页面之前,请查看新增范围授予的权限——只读访问您的 Google 联系人,以及(对于 Workspace 账号)组织目录。详情请参阅下方的范围用途说明表。

您还必须在重新授权前,于 GCP 项目的 OAuth 授权页面配置中启用 People API 并添加这两个新范围,否则授权页面会拒绝该请求。gws.contacts.directory_search 需要 Google Workspace 账号——个人 Gmail 账号没有组织目录,因此会收到清晰的说明消息,而不是搜索结果。

升级(Google Slides 工具)

Slides 工具(gws.slides.*)新增了一个 OAuth 范围, https://www.googleapis.com/auth/presentations。现有用户必须为每个已连接的账号重新授权,以便生成包含 Slides 范围的新令牌:

/gws:reauth

您还必须在重新授权前,于 GCP 项目的 OAuth 授权页面配置中启用 Slides API 并添加 presentations 范围,否则授权页面会拒绝该请求(请参阅Google Cloud 设置)。重新授权之前,gws.slides.* 调用会返回范围错误,并提示 Agent 运行 gws.accounts.reauth;其他所有工具均可正常使用。

从 v0.2.x 升级

v0.3.0 新增了原生 Google Sheets 和 Google Docs 工具,需要两个新的 OAuth 范围(spreadsheets、documents)。现有用户必须为每个已连接的账号重新授权,以便生成包含这些范围的新令牌:

/gws:reauth

在浏览器中批准授权页面之前,请查看新增范围授予的权限——可对该账号 Google Drive 中的所有电子表格和文档进行完整的读写访问,包括与该账号共享的文件。详情请参阅下方的范围用途说明表。

您还必须在重新授权前,于 GCP 项目的 OAuth 授权页面配置中添加这两个新范围(并启用 Sheets 和 Docs API),否则授权页面会拒绝该请求。

快速入门(Claude Code)

1. 安装插件——在 Claude Code 中运行以下两条命令:

/plugin marketplace add orieg/gws-connector
/plugin install gws@gws-connector

2. 设置 Google Cloud 凭据——交互式向导会引导您完成所有步骤:

/gws:configure

这会创建一个 GCP 项目、启用 API 并连接您的第一个账号。如果您更喜欢手动操作,请参阅Google Cloud 设置。

3. 连接其他账号:

/gws:add-account

每个账号都可以使用来自不同 GCP 项目的不同 OAuth 凭据。

Gemini CLI
gemini extensions install https://github.com/orieg/gws-connector

首次使用时会自动下载二进制文件。然后在 Gemini 中连接账号:

gws.accounts.add(label: "personal", clientId: "your-client-id", clientSecret: "your-secret")
其他客户端
GitHub Copilot / Cursor / Codex / 任意 MCP 客户端

下载预构建二进制文件,或从源代码构建:

git clone https://github.com/orieg/gws-connector && cd gws-connector && make build

然后配置客户端:

客户端配置
GitHub Copilot自动检测 .vscode/mcp.json,或在 VS Code MCP 设置中添加 "command": "/path/to/gws-mcp"
Cursor自动检测 .cursor/mcp.json,或通过“设置”→“MCP 服务”添加
Codex CLI自动检测 codex.json
Claude Code(仅 MCP)claude mcp add --transport stdio gws-connector --scope user -- /path/to/gws-mcp --use-dot-names
任意 MCP 客户端通过标准输入/输出运行 gws-mcp [--use-dot-names]

通过调用 MCP 工具连接账号:

gws.accounts.add(label: "personal", clientId: "your-client-id", clientSecret: "your-secret")

环境变量(均为可选):GWS_GOOGLE_CLIENT_ID、GWS_GOOGLE_CLIENT_SECRET、GWS_STATE_DIR

--use-dot-names 标志使用 gws.mail.search 命名;不使用时,工具采用 gws_mail_search 命名。

本地开发 / 测试
git clone https://github.com/orieg/gws-connector
cd gws-connector
make build
claude --plugin-dir ./

进行更改后,在会话中使用 /reload-plugins。运行 claude --debug --plugin-dir ./,排查插件加载问题。

Claude Desktop / MCPB 捆绑包

每个版本都会附带一个可一键安装的 gws-mcp.mcpb 捆绑包。下载后,用 Claude Desktop 打开(“设置”→“扩展”→“从文件安装”),或将其拖入。该捆绑包包含适用于 macOS 和 Linux 的二进制文件,并会自动选择适合你机器的版本。首次使用时,你仍需完成 Google Cloud 设置并连接账号。

该服务也已发布到官方 MCP Registry,名称为 io.github.orieg/gws-connector,因此浏览该注册表的 MCP 客户端可以直接找到并安装它。

Docker

每次发布时都会向 GHCR 发布多架构镜像:

docker run -i --rm ghcr.io/orieg/gws-connector:latest

该服务通过标准输入/输出使用 MCP。交互式 OAuth(accounts.add / reauth)会打开浏览器,并将密钥存储在操作系统密钥链中,因此需要访问宿主机——日常使用最好采用原生二进制文件、Claude Code 插件或 Gemini 扩展。该镜像非常适合无头标准输入/输出集成,以及注册表/内省检查。挂载卷并将 GWS_STATE_DIR 指向该卷,即可在多次运行之间保留账号注册表:

docker run -i --rm -v gws-state:/state -e GWS_STATE_DIR=/state \
  ghcr.io/orieg/gws-connector:latest

用法

所有 gws.* 工具都接受可选的 account 参数:

# Uses default account
gws.mail.search(q: "is:unread")

# Target by label
gws.cal.list_events(account: "work")

# Target by email
gws.drive.search(account: "[email protected]", q: "quarterly report")
可用工具
工具描述
gws.accounts.list列出所有已连接的账号
gws.accounts.add连接新账号(最多等待约 60s;如果耗时更长,则返回 pendingId)
gws.accounts.reauth重新授权账号(最多等待约 60s;如果耗时更长,则返回 pendingId)
gws.accounts.complete完成待处理的 OAuth 流程(仅当 add/reauth 返回 pendingId 时需要)
gws.accounts.remove断开账号连接
gws.accounts.set_default更改默认账号
gws.mail.search搜索邮件(Gmail 查询语法)
gws.mail.read_message读取指定邮件
gws.mail.read_thread读取整个邮件会话
gws.mail.create_draft创建邮件草稿
gws.mail.send_draft发送现有草稿
gws.mail.forward创建邮件转发草稿(不会发送)
gws.mail.get_attachment获取邮件附件的字节数据(base64)
gws.mail.list_labels列出 Gmail 标签
gws.mail.create_label创建新标签
gws.mail.modify_message为邮件添加或移除标签
gws.mail.get_profile获取账号个人资料信息
gws.cal.list_events列出日历活动
gws.cal.get_event获取活动详情
gws.cal.create_event创建日历活动
gws.cal.update_event更新或重新安排活动(patch 语义)
gws.cal.delete_event删除或取消活动
gws.cal.free_busy查询各日历的忙闲状态
gws.cal.list_calendars列出可用日历
gws.drive.search在 Drive 中搜索文件
gws.drive.read_file读取文件内容或元数据
gws.drive.list_folder列出文件夹内容
gws.sheets.read_range从电子表格中读取单个 A1 范围
gws.sheets.write_range向范围写入单元格值
gws.sheets.append在表格后追加行(仅追加,不会覆盖)
gws.sheets.clear清除范围内的值(保留格式)
gws.sheets.create创建新电子表格
gws.sheets.list_tabs列出电子表格中的工作表标签
gws.sheets.duplicate_tab在电子表格中复制工作表标签(保留格式)
gws.sheets.add_tab向电子表格添加新的空白工作表标签
gws.docs.read以纯文本形式读取文档
gws.docs.insert_text在指定位置插入纯文本
gws.docs.replace_text替换所有匹配的字面子字符串
gws.docs.create创建新文档
gws.contacts.search按姓名、电子邮件或电话号码搜索个人联系人(返回姓名、电子邮件和电话号码)
gws.contacts.directory_search搜索 Workspace 组织目录(返回姓名和电子邮件);仅限 Workspace 账号
gws.tasks.list_tasklists列出账号的任务列表
gws.tasks.list列出任务列表中的任务(已完成的任务需添加 showCompleted)
gws.tasks.create创建任务(due 使用 RFC3339 格式;仅存储日期)
gws.tasks.complete将任务标记为已完成(可撤销)
gws.tasks.delete永久删除任务
gws.slides.get读取演示文稿(幻灯片数量及每张幻灯片的文本)
gws.slides.create创建新演示文稿
gws.slides.batch_update对演示文稿应用原始 Slides API 请求
技能

Claude Code 和 Gemini CLI 中均可使用的交互式工作流:

技能描述Claude CodeGemini CLI
configure交互式设置向导/gws:configure"运行 GWS configure 技能"
add-account连接新账号/gws:add-account"添加新的 GWS 账号"
remove-account断开账号连接/gws:remove-account"移除 GWS 账号"
list-accounts显示已连接的账号/gws:list-accounts"列出我的 GWS 账号"
set-default更改默认账号/gws:set-default"设置我的默认 GWS 账号"
reauth刷新令牌和权限范围/gws:reauth"重新授权我的 GWS 账号"

使用示例

连接账户后,只需用自然语言向助手提出请求——它会选择工具和账户。示例:

  • 跨账户晨间整理 — “汇总我所有账户过去 24 小时内未读的邮件,按账户分组,并标出今天需要回复的邮件。”
  • 在线程中起草回复 — “在我的工作账户中找到与 Acme 讨论 Q3 发票的邮件线程,并起草一封确认新日期的回复。不要发送。”
  • 将邮件转为日历事件 — “阅读活动团队的最新消息,并根据其中的日期和地点,在我的个人日历上创建日历事件。”
  • 跨账户摘要 — “明天我的工作和个人日历上有哪些会议?按时间顺序列在一条时间线上。”
  • 查找并总结文档 — “在我的 client-acme Drive 中搜索最新的‘工作说明书’,并列出关键交付成果和日期。”
  • 记录到电子表格 — “在我个人 Drive 的‘Expenses’表格中追加一行:今天的日期、‘AWS’、42.50。”
  • 保持收件箱整洁 — “将来自 newsletters@ 的所有未读邮件标记为‘Newsletters’,并在我的个人账户中将其标记为已读。”

提示:

  • 明确指定账户标签(“在我的工作账户中”)、邮箱地址或域名,以选择目标账户;否则将使用默认账户。
  • 写入操作(草稿、事件、表格或文档编辑)会先预览并等待你确认,之后才会发送或更改任何内容。

Google Cloud 设置

一次性设置:

  1. 前往 Google Cloud Console 并创建一个新项目(例如,“GWS Connector”)

  2. 启用 API — 点击每个链接并点击“启用”:

  3. 配置 OAuth 同意屏幕:

    • 选择“External”(Google Workspace 组织可选择“Internal”)
    • 填写应用名称(例如,“Claude GWS”)和用于支持联系的邮箱
    • 点击“保存”
  4. 添加范围 — 前往 数据访问:

    • 点击“添加或移除范围”
    • 添加以下 11 个范围(粘贴到“手动添加范围”框中):
      • https://www.googleapis.com/auth/gmail.modify
      • https://www.googleapis.com/auth/calendar
      • https://www.googleapis.com/auth/drive
      • https://www.googleapis.com/auth/spreadsheets
      • https://www.googleapis.com/auth/documents
      • https://www.googleapis.com/auth/contacts.readonly
      • https://www.googleapis.com/auth/directory.readonly
      • https://www.googleapis.com/auth/tasks
      • https://www.googleapis.com/auth/presentations
      • https://www.googleapis.com/auth/userinfo.email
      • https://www.googleapis.com/auth/userinfo.profile
    • 点击“更新”,然后点击“保存”

    请求每个范围的原因:

    范围用途工具
    gmail.modify读取、起草和修改邮件及标签gws.mail.*
    calendar读取和创建/更新活动gws.cal.*
    drive搜索和读取 Drive 中的文件及元数据gws.drive.*
    spreadsheets读取和写入 Google Sheets 单元格数据及元数据gws.sheets.*
    documents读取和写入 Google Docs 内容gws.docs.*
    contacts.readonly只读搜索你自己的 Google Contactsgws.contacts.search
    directory.readonly只读搜索 Workspace 组织目录(仅限 Workspace 账号)gws.contacts.directory_search
    tasks读取和写入 Google Tasks 列表及任务gws.tasks.*
    presentations读取和写入 Google Slides 内容gws.slides.*
    userinfo.email识别授权账号(重新授权时匹配邮箱)账号管理
    userinfo.profile将显示名称与邮箱一同存储账号管理
  5. 添加测试用户 — 前往 受众群体:

    • 添加你计划连接的每个 Google 邮箱地址
    • ⚠️ 此步骤为必需 — 否则在 OAuth 过程中会出现“访问被拒:尚未完成 Google 验证流程”(错误 403)
  6. 创建 OAuth 凭据 — 前往 客户端:

    • 点击“+ 创建客户端” →“OAuth 客户端 ID”
    • 应用类型:桌面应用
    • 点击“创建”
    • 下载 JSON 文件(点击下载图标)— 其中包含你的客户端 ID 和客户端密钥
多个组织

如果你连接来自不同 Google Workspace 组织的账号,每个组织都需要自己的 GCP 项目。请在每个项目中创建 OAuth 凭据,并在连接时提供:

gws.accounts.add(label: "work", clientId: "work-client-id", clientSecret: "work-secret")
gws.accounts.add(label: "personal", clientId: "personal-client-id", clientSecret: "personal-secret")

客户端密钥存储在操作系统密钥链中。客户端 ID 存储在账号注册表中。

架构

gws-connector/
├── cmd/gws-mcp/                 # MCP server entrypoint
├── internal/
│   ├── accounts/                # Account registry & router
│   ├── auth/                    # OAuth flow, token store, client factory
│   ├── server/                  # MCP tool registration & dispatch
│   └── services/                # Gmail, Calendar, Drive API wrappers
│
├── .claude-plugin/              # Claude Code plugin manifest + marketplace
├── .mcp.json                    # Claude Code MCP config
├── gemini-extension.json        # Gemini CLI extension manifest
├── CONTEXT.md                   # Shared behavioral context (both agents)
├── skills/                      # Slash commands (Claude Code + Gemini CLI)
├── hooks/                       # Claude Code session hooks
├── agents/                      # Claude Code workspace agent
│
├── .vscode/mcp.json             # GitHub Copilot MCP config
├── .cursor/mcp.json             # Cursor MCP config
└── codex.json                   # OpenAI Codex CLI config
  • 令牌存储:使用 OS 密钥链(macOS Keychain、GNOME Keyring、Windows Credential Manager),并自动回退到文件存储
  • 客户端密钥:每个账户存储在 OS 密钥链中(不存储在配置文件中)
  • 账户注册表:位于 ~/.claude/channels/gws/accounts.json 的 JSON 文件(包含客户端 ID 和元数据,不含密钥)
  • 凭据解析:每个账户的凭据(密钥链)→ 回退到全局环境变量
  • 协议:通过 stdio 使用 MCP(Model Context Protocol)——兼容任何 MCP 客户端

开发

make build          # Build binary
make test           # Run tests with race detector
make test-verbose   # Run tests with verbose output
make lint           # Run go vet
make release        # Cross-compile for all platforms
make clean          # Remove build artifacts

许可证

MIT — 请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。