Google Workspace MCP 服务器

Google Workspace MCP 服务器是一个生产就绪的 MCP 服务器,集成了所有主要的 Google Workspace 服务与 AI 助手,支持单用户操作和多用户 OAuth 2.1 认证,适用于自定义应用程序的后端。

  • by hastigarraga
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 hastigarraga/google_workspace_mcp

使用说明

谷歌工作区MCP服务器

通过所有MCP客户端、人工智能助手和开发工具,对谷歌日历、云端硬盘、Gmail、文档、表格、幻灯片、表单、任务和聊天进行完全自然语言控制。

功能最齐全的Google Workspace MCP服务器,现在支持Remote OAuth2.1多用户支持,一键安装Claude。

支持所有免费的谷歌帐户(Gmail、Docs、Drive等)和谷歌工作区计划(Starter、Standard、Plus、Enterprise、Non-Prefit),并提供聊天和共享空间等扩展应用程序选项。
对私有云实例感兴趣? 这是可以安排的。

看看它在行动:


AI增强文档的快速插件

◆ But why?

本自述是在人工智能的帮助下编写的,这就是为什么这很重要

作为构建开源工具的独立开发人员,如果没有人工智能的帮助,通常不会有全面的文档。使用代理开发工具,如 鲁 & 克劳德代码 AI能够理解整个代码库,它不仅会重复通用内容,还会提取真正的实现细节,并创建准确、具体的文档。

在这种情况下,十四行诗4通过了验证,一个人(我)在25年8月16日验证了它们。

概述

一个生产就绪的MCP服务器,将所有主要的谷歌工作区服务与人工智能助手集成在一起。它通过OAuth 2.1支持单用户操作和多用户身份验证,使其成为定制应用程序的强大后端。采用FastMCP构建,可实现最佳性能,具有高级身份验证处理、服务缓存和简化的开发模式。

简化设置:现在使用谷歌桌面OAuth客户端-无需重定向URI或端口配置!

特性

@ Gmail • ≡ 驾驶 • ⧖ 日历 ≡ 文档

  • 完整的Gmail管理,端到端覆盖
  • 具有高级功能的完整日历管理
  • 支持Office格式的文件操作
  • 文档创建、编辑和评论
  • 对细粒度编辑的深入、详尽的支持

≡ 表单 • @ 聊天 • ≡ 表格 • ≡ 幻灯片

  • 表单创建、发布设置和响应管理
  • 空间管理和消息传递功能
  • 具有灵活单元格管理的电子表格操作
  • 演示文稿的创建、更新和内容操作

⊠ 身份验证和安全

  • 高级OAuth 2.0和OAuth 2.1支持
  • 自动令牌刷新和会话管理
  • 传输感知回调处理
  • 多用户承载令牌认证
  • 创新的CORS代理架构

✓ 任务 • ◆ 自定义搜索 • ↻ 运输支持

  • 全面支持所有MCP传输
  • 具有层次结构的任务和任务列表管理
  • 可编程搜索引擎(PSE)集成

▶ 快速开始

≡ Quick Reference Card← Essential commands & configs at a glance

⊠证书

export GOOGLE_OAUTH_CLIENT_ID="..."
export GOOGLE_OAUTH_CLIENT_SECRET="..."

完整设置→

▶ 启动命令

uvx workspace-mcp --tool-tier core
uv run main.py --tools gmail drive

更多选项→

★ 工具层

  • ● core -基本工具
  • ◐ extended -核心+附加
  • ○ complete -一切 详情→

1.一键式Claude桌面安装(推荐)

  1. 下载: 获取最新消息 google_workspace_mcp.dxt 从“发布”页面
  2. 安装: 双击文件–Claude Desktop打开并提示您 安装
  3. 配置: 在克劳德桌面→ 设置→ 扩展→ 谷歌工作区MCP,粘贴您的Google OAuth凭据
  4. 使用它: 开始一个新的克劳德聊天,并调用任何谷歌工作区工具

为什么选择DXT?

桌面扩展(.dxt)捆绑服务器、依赖项和清单,以便用户从下载→ 工作MCP 一键 -没有终端,没有JSON编辑,没有版本冲突。

所需配置

◆ Environment Variables ← Click to configure in Claude Desktop

必需

变量 目的
GOOGLE_OAUTH_CLIENT_ID 来自Google Cloud的OAuth客户端ID
GOOGLE_OAUTH_CLIENT_SECRET OAuth客户端密钥
OAUTHLIB_INSECURE_TRANSPORT=1 仅限开发(允许 http:// 重定向)

可选的

变量 目的
USER_GOOGLE_EMAIL 单用户身份验证的默认电子邮件
GOOGLE_PSE_API_KEY 用于自定义搜索的API密钥
GOOGLE_PSE_ENGINE_ID 自定义搜索的搜索引擎ID
MCP_ENABLE_OAUTH21 设置为 true 支持OAuth 2.1
EXTERNAL_OAUTH21_PROVIDER 设置为 true 用于具有承载令牌的外部OAuth流(需要OAuth 2.1)
WORKSPACE_MCP_STATELESS_MODE 设置为 true 用于无状态操作(需要OAuth 2.1)

Claude Desktop将这些安全地存储在操作系统钥匙链中;在扩展窗格中设置一次。



先决条件

  • Python 3.10+
  • uvx (用于即时安装)或 紫外线 (用于发展)
  • 谷歌云项目 使用OAuth 2.0凭据

配置

◆ Google Cloud Setup ← OAuth 2.0 credentials & API enablement

1.创建项目

console.cloud.google.com

→ Create new project
→ Note project name

打开控制台→

2.OAuth凭据

APIs & Services → Credentials
→ Create Credentials
→ OAuth Client ID
→ Desktop Application

下载并保存凭据

3.启用API

APIs & Services → Library

Search & enable:
Calendar, Drive, Gmail,
Docs, Sheets, Slides,
Forms, Tasks, Chat, Search

查看下面的快速链接

≡ OAuth Credential Setup Guide ← Step-by-step instructions

完成设置过程:

  1. 创建OAuth 2.0凭据 -参观 谷歌云控制台

    • 创建新项目(或使用现有项目)
    • 引导到 API和服务→ 凭证
    • 点击 创建凭据→ OAuth客户端ID
    • 选择 桌面应用程序 作为应用程序类型(不需要重定向URI!)
    • 下载凭据并记下客户端ID和客户端密码
  2. 启用所需的API -In API和服务→ 图书馆

    • 搜索并启用每个所需的API
    • 或者使用下面的快速链接一键启用
  3. 配置环境 -设置您的凭据:

    export GOOGLE_OAUTH_CLIENT_ID="your-client-id"
    export GOOGLE_OAUTH_CLIENT_SECRET="your-secret"
    

≡ 全部文件→

⊥ Quick API Enable Links ← One-click enable each Google API You can enable each one by clicking the links below (make sure you're logged into the Google Cloud Console and have the correct project selected):

1.1. 凭证:参见 凭证配置 有关详细的设置选项

  1. 环境配置:
◆ Environment Variables ← Configure your runtime environment

◆ 发展模式

export OAUTHLIB_INSECURE_TRANSPORT=1

允许HTTP重定向URI

@默认用户

export USER_GOOGLE_EMAIL=\
  your.email@gmail.com

单用户身份验证

◆ 自定义搜索

export GOOGLE_PSE_API_KEY=xxx
export GOOGLE_PSE_ENGINE_ID=yyy

可选:搜索API设置

  1. 服务器配置:
◆ Server Settings ← Customize ports, URIs & proxies

◆ 基础配置

export WORKSPACE_MCP_BASE_URI=
  http://localhost
export WORKSPACE_MCP_PORT=8000

服务器URL和端口设置

↻ 代理支持

export MCP_ENABLE_OAUTH21=
  true

利用多用户OAuth2.1客户端

@默认电子邮件

export USER_GOOGLE_EMAIL=\
  your.email@gmail.com

在单用户模式下的身份验证流中跳过电子邮件

≡ Configuration Details ← Learn more about each setting
变量 描述 默认值
WORKSPACE_MCP_BASE_URI 基本服务器URI(无端口) http://localhost
WORKSPACE_MCP_PORT 服务器侦听端口 8000
WORKSPACE_EXTERNAL_URL 反向代理设置的外部URL 无
GOOGLE_OAUTH_REDIRECT_URI 覆盖OAuth回调URL 自动构造
USER_GOOGLE_EMAIL 默认身份验证电子邮件 无

Google自定义搜索设置

◆ Custom Search Configuration ← Enable web search capabilities

1.创建搜索引擎

programmablesearchengine.google.com
/controlpanel/create

→ Configure sites or entire web
→ Note your Engine ID (cx)

打开控制面板→

2.获取API密钥

developers.google.com
/custom-search/v1/overview

→ Create/select project
→ Enable Custom Search API
→ Create credentials (API Key)

获取API密钥→

3.设置变量

export GOOGLE_PSE_API_KEY=\
  "your-api-key"
export GOOGLE_PSE_ENGINE_ID=\
  "your-engine-id"

在环境中配置

≡ Quick Setup Guide ← Step-by-step instructions

完成设置过程:

  1. 创建搜索引擎 -访问 控制面板

    • 选择“搜索整个网络”或指定网站
    • 复制搜索引擎ID(看起来像: 017643444788157684527:6ivsjbpxpqw)
  2. 启用API并获取密钥 -参观 谷歌开发者控制台

    • 在项目中启用“自定义搜索API”
    • 创建凭据→ API密钥
    • 将密钥限制为自定义搜索API(推荐)
  3. 配置环境 -添加到您的shell或 .env:

    export GOOGLE_PSE_API_KEY="AIzaSy..."
    export GOOGLE_PSE_ENGINE_ID="01764344478..."
    

≡ 全部文件→

启动服务器

▶ Launch Commands ← Choose your startup mode

▶ 快速开始

uv run main.py

默认stdio模式

◆ HTTP模式

uv run main.py \
  --transport streamable-http

Web界面和调试

@单用户

uv run main.py \
  --single-user

简化身份验证

◆ Advanced Options ← Tool selection, tiers & Docker

▶ 选择性工具加载

# Load specific services only
uv run main.py --tools gmail drive calendar
uv run main.py --tools sheets docs

# Combine with other flags
uv run main.py --single-user --tools gmail

★ 工具层

uv run main.py --tool-tier core      # ● Essential tools only
uv run main.py --tool-tier extended  # ◐ Core + additional
uv run main.py --tool-tier complete  # ○ All available tools

◆ Docker部署

docker build -t workspace-mcp .
docker run -p 8000:8000 -v $(pwd):/app \
  workspace-mcp --transport streamable-http

# With tool selection via environment variables
docker run -e TOOL_TIER=core workspace-mcp
docker run -e TOOLS="gmail drive calendar" workspace-mcp

可用服务: gmail • drive • calendar • docs • sheets • forms • tasks • chat • search

工具层

服务器将工具组织成 三个渐进的层次 以简化部署。选择与您的使用需求和API配额要求相匹配的层。

可用层

● 核心 (--tool-tier core) 日常任务的必备工具。非常适合API配额最少的轻度使用。包括跨所有服务的搜索、读取、创建和基本修改操作。

● 扩展的 (--tool-tier extended) 核心功能加上管理工具。添加标签、文件夹、批处理操作和高级搜索。非常适合有中等API需求的常规使用。

● 完成 (--tool-tier complete) API完全访问,包括注释、页眉/页脚、发布设置和管理功能。适用于需要最大功能的高级用户。

重要说明

▶ 从开始 core 并根据需要进行升级 ▶ 层次是累积的 –每个都包括之前的所有内容 ▶ 混搭 随着 --tools 针对特定服务 ▶ 配置 在 core/tool_tiers.yaml ▶ 认证 包含在所有级别中

用法示例

# Basic tier selection
uv run main.py --tool-tier core                            # Start with essential tools only
uv run main.py --tool-tier extended                        # Expand to include management features
uv run main.py --tool-tier complete                        # Enable all available functionality

# Selective service loading with tiers
uv run main.py --tools gmail drive --tool-tier core        # Core tools for specific services
uv run main.py --tools gmail --tool-tier extended          # Extended Gmail functionality only
uv run main.py --tools docs sheets --tool-tier complete    # Full access to Docs and Sheets

📋 凭证配置

🔑 OAuth Credentials Setup ← Essential for all installations

🚀 环境变量

export GOOGLE_OAUTH_CLIENT_ID=\
  "your-client-id"
export GOOGLE_OAUTH_CLIENT_SECRET=\
  "your-secret"

最适合生产

📁 基于文件

# Download & place in project root
client_secret.json

# Or specify custom path
export GOOGLE_CLIENT_SECRET_PATH=\
  /path/to/secret.json

传统方法

⚡ .env文件

cp .env.oauth21 .env
# Edit .env with credentials

最有利于发展

📖 Credential Loading Details ← Understanding priority & best practices

加载优先级

  1. 环境变量(export VAR=value)
  2. .env 项目根目录中的文件(警告-如果通过运行 uvx 而非 uv run 从repo目录中,您正在生成一个与您的repo克隆无关的独立进程,如果不直接指定,它将找不到您的.env文件)
  3. client_secret.json 通过 GOOGLE_CLIENT_SECRET_PATH
  4. 默认 client_secret.json 在项目根中

为什么是环境变量?

  • ✅ Docker/K8s就绪 -原生容器支持
  • ✅ 云平台 -Heroku,铁路,Vercel
  • ✅ CI/CD管道 -GitHub Actions、Jenkins
  • ✅ git中没有秘密 -确保凭据安全
  • ✅ 易于旋转 -无需更改代码即可更新

🧰 可用工具

备注:所有工具都支持通过以下方式进行自动身份验证 @require_google_service() 带有30分钟服务缓存的装饰器。

📅 Google 日历 calendar_tools.py

工具 层级 描述
list_calendars 核心 列出可访问的日历
get_events 核心 使用时间范围过滤检索事件
create_event 核心 创建带有附件和提醒的事件
modify_event 核心 更新现有事件
delete_event 扩展 删除事件

📁 Google 云端硬盘 drive_tools.py

工具 层级 描述
search_drive_files 核心 使用查询语法搜索文件
get_drive_file_content 核心 读取文件内容(Office格式)
create_drive_file 核心 创建文件或从URL获取
list_drive_items 扩展 列出文件夹内容
update_drive_file 扩展 更新文件元数据,在文件夹之间移动

📧 Gmail gmail_tools.py

工具 层级 描述
search_gmail_messages 核心 通过Gmail运营商进行搜索
get_gmail_message_content 核心 检索邮件内容
get_gmail_messages_content_batch 核心 批量检索邮件内容
send_gmail_message 核心 发送电子邮件
get_gmail_thread_content 扩展 获取完整的线程内容
modify_gmail_message_labels 扩展 修改邮件标签
list_gmail_labels 扩展 列出可用标签
manage_gmail_label 扩展 创建/更新/删除标签
draft_gmail_message 扩展 创建草稿
get_gmail_threads_content_batch 完成 批量检索线程内容
batch_modify_gmail_message_labels 完成 批量修改标签
start_google_auth 完成 初始化身份验证

📝 谷歌文档 docs_tools.py

工具 层级 描述
get_doc_content 核心 提取文档文本
create_doc 核心 创建新文档
modify_doc_text 核心 修改文档文本
search_docs 扩展 按名称查找文档
find_and_replace_doc 扩展 查找和替换文本
list_docs_in_folder 扩展 列出文件夹中的文档
insert_doc_elements 扩展 添加表格、列表、分页符
insert_doc_image 完成 从驱动器/URL插入图像
update_doc_headers_footers 完成 修改页眉和页脚
batch_update_doc 完成 执行多个操作
inspect_doc_structure 完成 分析文档结构
export_doc_to_pdf 扩展 将文档导出为PDF
create_table_with_data 完成 创建数据表
debug_table_structure 完成 调试表问题
*_document_comments 完成 阅读、回复、创建、解决

📊 谷歌表格 sheets_tools.py

工具 层级 描述
read_sheet_values 核心 读取单元格范围
modify_sheet_values 核心 写入/更新/清除单元格
create_spreadsheet 核心 创建新的电子表格
list_spreadsheets 扩展 列出可访问的电子表格
get_spreadsheet_info 扩展 获取电子表格元数据
create_sheet 完成 将图纸添加到现有文件
*_sheet_comment 完成 阅读/创建/回复/解决评论

🖼️ 谷歌幻灯片 slides_tools.py

工具 层级 描述
create_presentation 核心 创建新演示文稿
get_presentation 核心 检索演示文稿详细信息
batch_update_presentation 扩展 应用多个更新
get_page 扩展 获取特定幻灯片信息
get_page_thumbnail 扩展 生成幻灯片缩略图
*_presentation_comment 完成 阅读/创建/回复/解决评论

📝 谷歌表单 forms_tools.py

工具 层级 描述
create_form 核心 创建新表单
get_form 核心 检索表单详细信息和URL
set_publish_settings 完成 配置表单设置
get_form_response 完成 获取个人回复
list_form_responses 扩展 列出所有带页码的回复

✓ 工作表 tasks_tools.py

工具 层级 描述
list_tasks 核心 列出带有筛选功能的任务
get_task 核心 检索任务详细信息
create_task 核心 创建具有层次结构的任务
update_task 核心 修改任务属性
delete_task 扩展 删除任务
move_task 完成 重新定位任务
clear_completed_tasks 完成 隐藏已完成的任务
*_task_list 完成 列出/获取/创建/更新/删除任务列表

💬 谷歌聊天 chat_tools.py

工具 层级 描述
list_spaces 扩展 列出聊天空间/房间
get_messages 核心 检索空间消息
send_message 核心 向空间发送消息
search_messages 核心 在聊天记录中搜索

🔍 谷歌自定义搜索 search_tools.py

工具 层级 描述
search_custom 核心 执行网络搜索
get_search_engine_info 完成 检索搜索引擎元数据
search_custom_siterestrict 扩展 在特定域内搜索

工具层图例:

  • • 核心:基本功能的基本工具•API使用率最低•入门
  • • 扩展的:核心工具+附加功能•常规使用•扩展功能
  • • 完成:所有可用工具,包括高级功能•高级用户•API完全访问

连接到克劳德桌面

服务器支持两种传输模式:

标准模式(默认-建议用于Claude Desktop)

一般来说,您应该使用Claude Desktop的一键式DXT安装程序包。 如果您因某种原因无法配置,可以通过手动配置 claude_desktop_config.json

手动克劳德配置(备选)

📝 Claude Desktop JSON Config ← Click for manual setup instructions
  1. 打开克劳德桌面设置→ 开发者→ 编辑配置

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • 视窗: %APPDATA%\Claude\claude_desktop_config.json
  2. 添加服务器配置:

{
  "mcpServers": {
    "google_workspace": {
      "command": "uvx",
      "args": ["workspace-mcp"],
      "env": {
        "GOOGLE_OAUTH_CLIENT_ID": "your-client-id",
        "GOOGLE_OAUTH_CLIENT_SECRET": "your-secret",
        "OAUTHLIB_INSECURE_TRANSPORT": "1"
      }
    }
  }
}

2.高级/跨平台安装

如果您正在开发、部署到服务器或使用另一个支持MCP的客户端,请继续阅读。

即时命令行界面(uvx)

⚡ Quick Start with uvx ← No installation required!
# Requires Python 3.10+ and uvx
# First, set credentials (see Credential Configuration above)
uvx workspace-mcp --tool-tier core  # or --tools gmail drive calendar

备注:配置 OAuth凭据 跑步前。支持环境变量, .env 文件,或 client_secret.json.

地方发展设置

🛠️ Developer Workflow ← Install deps, lint, and test
# Install everything needed for linting, tests, and release tooling
uv sync --group dev

# Run the same linter that git hooks invoke automatically
uv run ruff check .

# Execute the full test suite (async fixtures require pytest-asyncio)
uv run pytest
  • uv sync --group test 如果你需要一个更精简的环境,只安装测试栈。
  • uv run main.py --transport streamable-http 使用您签出的代码启动服务器进行手动验证。
  • Ruff是 dev 组,因为预推挂钩调用 ruff check automatic——在提交之前在本地运行它,以避免钩子失败。

OAuth 2.1支持(多用户承载令牌身份验证)

该服务器包括对承载令牌身份验证的OAuth 2.1支持,支持多用户会话管理。 OAuth 2.1会自动重用您现有的 GOOGLE_OAUTH_CLIENT_ID 和 GOOGLE_OAUTH_CLIENT_SECRET 凭证 -无需额外配置!

何时使用OAuth 2.1:

  • 多个用户访问同一MCP服务器实例
  • 需要进行承载令牌身份验证,而不是传递用户电子邮件
  • 在MCP服务器上构建web应用程序或API
  • 需要安全会话管理的生产环境
  • 需要CORS支持的基于浏览器的客户端

启用OAuth 2.1: 要启用OAuth 2.1,请设置 MCP_ENABLE_OAUTH21 环境变量 true.

# OAuth 2.1 requires HTTP transport mode
export MCP_ENABLE_OAUTH21=true
uv run main.py --transport streamable-http

如果 MCP_ENABLE_OAUTH21 未设置为 true,服务器将使用传统身份验证,这适用于不支持OAuth 2.1的客户端。

🔐 How the FastMCP GoogleProvider handles OAuth ← Advanced OAuth 2.1 details

FastMCP运送本地 GoogleProvider 我们现在直接依赖它。它解决了在MCP客户端上使用Google OAuth的两个棘手部分:

  1. 动态客户端注册:谷歌仍然不支持OAuth 2.1 DCR,但FastMCP提供商公开了完整的DCR表面,并使用您的固定凭据将注册转发给谷歌。MCP客户端像往常一样注册,提供商会私下向他们提供您的谷歌客户端ID/秘密。

  2. CORS和浏览器兼容性:提供程序包括一个OAuth代理,该代理使用适当的CORS标头为所有发现、授权和令牌端点提供服务。我们不再维持习俗 /oauth2/* 路由——提供者安全地处理上游交换,并向客户端通告正确的元数据。

结果是一个更精简的服务器,仍然允许任何符合OAuth 2.1的客户端(包括基于浏览器的客户端)通过谷歌进行身份验证,而无需定制代码。

无状态模式(容器友好)

服务器支持为容器化环境设计的无状态模式,在这种环境中应避免文件系统写入:

启用无状态模式:

# Stateless mode requires OAuth 2.1 to be enabled
export MCP_ENABLE_OAUTH21=true
export WORKSPACE_MCP_STATELESS_MODE=true
uv run main.py --transport streamable-http

主要特点:

  • 无文件系统写入:凭据永远不会写入磁盘
  • 无调试日志:完全禁用基于文件的日志记录
  • 仅内存会话:通过OAuth 2.1会话存储存储在内存中的所有令牌
  • 集装箱准备就绪:非常适合Docker、Kubernetes和无服务器部署
  • 每个请求的令牌:每个请求都必须包含一个有效的Bearer令牌

要求:

  • 必须与 MCP_ENABLE_OAUTH21=true
  • 与单用户模式不兼容
  • 客户端必须处理OAuth流,并在每次请求时发送有效令牌

此模式非常适合:

  • 持久存储不可用的云部署
  • 需要严格隔离的多租户环境
  • 具有只读文件系统的容器化应用程序
  • 无服务器功能和临时计算环境

MCP检查员:桌面OAuth客户端不需要额外配置。

Claude代码检查器:桌面OAuth客户端不需要额外配置。

外部OAuth 2.1提供者模式

对于由外部系统处理身份验证的场景,服务器支持外部OAuth 2.1提供程序模式。在这种模式下,MCP服务器本身并不管理OAuth流,而是希望在工具调用的Authorization标头中有有效的承载令牌。

启用外部OAuth 2.1提供程序模式:

# External OAuth provider mode requires OAuth 2.1 to be enabled
export MCP_ENABLE_OAUTH21=true
export EXTERNAL_OAUTH21_PROVIDER=true
uv run main.py --transport streamable-http

工作原理:

  • 协议级身份验证已禁用:MCP握手(initialize)以及 tools/list 不需要身份验证
  • 需要工具级身份验证:所有工具调用必须包括 Authorization: Bearer <token> 头球
  • 外部OAuth流:您的外部系统处理OAuth流并获取Google访问令牌
  • 令牌验证:服务器通过Google的tokeninfo API验证承载令牌
  • 多用户支持:每个请求都根据其承载令牌独立进行身份验证

主要特点:

  • 没有本地OAuth流:服务器不提供OAuth回调端点或管理OAuth状态
  • 仅限持有者代币:所有身份验证均通过授权标头进行
  • 设计无状态:与无缝协作 WORKSPACE_MCP_STATELESS_MODE=true
  • 外部身份提供者:与您现有的身份验证基础架构集成
  • 工具发现:客户端可以在不进行身份验证的情况下列出可用工具

要求:

  • 必须与 MCP_ENABLE_OAUTH21=true
  • 令牌验证仍然需要OAuth凭据(GOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET)
  • 外部系统必须获得有效的Google OAuth访问令牌(ya29.*)
  • 每个工具调用请求都必须包含有效的承载令牌

使用案例:

  • 与现有身份验证系统集成
  • 由您的应用程序管理的自定义OAuth流
  • 处理上游身份验证的API网关
  • 具有集中身份验证的多租户SaaS应用程序
  • 具有自己的OAuth实现的移动或web应用程序

VS代码MCP客户端支持

🆚 VS Code Configuration ← Setup for VS Code MCP extension
{
    "servers": {
        "google-workspace": {
            "url": "http://localhost:8000/mcp/",
            "type": "http"
        }
    }
}

反向代理设置

如果你在反向代理(nginx、Apache、Cloudflare等)后面运行MCP服务器,你有两个配置选项:

问题:当在反向代理后面时,服务器使用内部端口(例如。, http://localhost:8000)但是外部客户端需要公共URL(例如。, https://your-domain.com).

解决方案1:设置 WORKSPACE_EXTERNAL_URL 对于所有OAuth端点:

# This configures all OAuth endpoints to use your external URL
export WORKSPACE_EXTERNAL_URL="https://your-domain.com"

解决方案2:设置 GOOGLE_OAUTH_REDIRECT_URI 对于回调:

# This only overrides the OAuth callback URL
export GOOGLE_OAUTH_REDIRECT_URI="https://your-domain.com/oauth2callback"

您还可以选择: | OAUTH_CUSTOM_REDIRECT_URIS (可选) |以逗号分隔的附加重定向URI列表| | OAUTH_ALLOWED_ORIGINS (可选) |逗号分隔的其他CORS源列表|

重要:

  • 使用 WORKSPACE_EXTERNAL_URL 当所有OAuth端点都应该使用外部URL时(建议用于反向代理设置)
  • 使用 GOOGLE_OAUTH_REDIRECT_URI 当您只需要覆盖回调URL时
  • 重定向URI必须与您的Google Cloud控制台中配置的完全匹配
  • 您的反向代理必须转发与OAuth相关的请求(/oauth2callback, /oauth2/*, /.well-known/*)到MCP服务器
🚀 Advanced uvx Commands ← More startup options
# Configure credentials first (see Credential Configuration section)

# Start with specific tools only
uvx workspace-mcp --tools gmail drive calendar tasks

# Start with tool tiers (recommended for most users)
uvx workspace-mcp --tool-tier core      # Essential tools
uvx workspace-mcp --tool-tier extended  # Core + additional features
uvx workspace-mcp --tool-tier complete  # All tools

# Start in HTTP mode for debugging
uvx workspace-mcp --transport streamable-http

需要Python 3.10+和 uvx。该套餐可在 PyPI.

开发安装

对于开发或定制:

git clone https://github.com/taylorwilsdon/google_workspace_mcp.git
cd google_workspace_mcp
uv run main.py

开发安装(供贡献者使用):

🔧 Developer Setup JSON ← For contributors & customization
{
  "mcpServers": {
    "google_workspace": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/repo/google_workspace_mcp",
        "main.py"
      ],
      "env": {
        "GOOGLE_OAUTH_CLIENT_ID": "your-client-id",
        "GOOGLE_OAUTH_CLIENT_SECRET": "your-secret",
        "OAUTHLIB_INSECURE_TRANSPORT": "1"
      }
    }
  }
}

HTTP模式(用于调试或web界面)

如果您需要在Claude Desktop中使用HTTP模式:

{
  "mcpServers": {
    "google_workspace": {
      "command": "npx",
      "args": ["mcp-remote", "http://localhost:8000/mcp"]
    }
  }
}

注意:请确保使用以下命令启动服务器 --transport streamable-http 当使用HTTP模式时。

首次身份验证

服务器使用 谷歌桌面OAuth 为了简化身份验证:

  • 不需要重定向URI:桌面OAuth客户端无需复杂的回调URL即可处理身份验证
  • 自动流量:服务器透明地管理整个OAuth过程
  • 运输无关:可在stdio和HTTP模式下无缝工作

调用工具时:

  1. 服务器返回授权URL
  2. 在浏览器中打开URL并授权
  3. Google提供授权码
  4. 在提示时粘贴代码(或自动处理)
  5. 服务器完成身份验证并重试您的请求

◆ 发展

项目结构

google_workspace_mcp/
├── auth/              # Authentication system with decorators
├── core/              # MCP server and utilities
├── g{service}/        # Service-specific tools
├── main.py            # Server entry point
├── client_secret.json # OAuth credentials (not committed)
└── pyproject.toml     # Dependencies

添加新工具

from auth.service_decorator import require_google_service

@require_google_service("drive", "drive_read")  # Service + scope group
async def your_new_tool(service, param1: str, param2: int = 10):
    """Tool description"""
    # service is automatically injected and cached
    result = service.files().list().execute()
    return result  # Return native Python objects

建筑亮点

  • 服务缓存:30分钟TTL减少了身份验证开销
  • 范围管理:集中在 SCOPE_GROUPS 便于维护
  • 错误处理:本机异常,而不是手动错误构造
  • 多服务支持: @require_multiple_services() 用于复杂工具

凭证存储系统

该服务器包括一个抽象凭证存储API和一个用于管理Google OAuth的默认后端 支持多个存储后端的凭据:

特征:

  • 抽象接口: CredentialStore 基类定义了标准操作(获取、存储、删除、列出用户)
  • 本地文件存储: LocalDirectoryCredentialStore 实现将凭据存储为JSON文件
  • 可配置存储:环境变量 GOOGLE_MCP_CREDENTIALS_DIR 设置存储位置
  • 多用户支持:存储和管理多个Google帐户的凭据
  • 自动目录创建:如果存储目录不存在,则会自动创建

配置:

# Optional: Set custom credentials directory
export GOOGLE_MCP_CREDENTIALS_DIR="/path/to/credentials"

# Default locations (if GOOGLE_MCP_CREDENTIALS_DIR not set):
# - ~/.google_workspace_mcp/credentials (if home directory accessible)
# - ./.credentials (fallback)

使用示例:

from auth.credential_store import get_credential_store

# Get the global credential store instance
store = get_credential_store()

# Store credentials for a user
store.store_credential("user@example.com", credentials)

# Retrieve credentials
creds = store.get_credential("user@example.com")

# List all users with stored credentials
users = store.list_users()

凭证存储会自动处理凭证序列化、过期解析,并为存储操作提供错误处理。


⊠安全

  • 凭证:从不承诺 .env, client_secret.json 或 .credentials/ 目录到源代码管理!
  • OAuth回调:用途 http://localhost:8000/oauth2callback 发展(需要 OAUTHLIB_INSECURE_TRANSPORT=1)
  • 传输感知回调:Stdio模式仅为OAuth启动一个最小的HTTP服务器,确保回调在所有模式下都能工作
  • 生产:使用HTTPS和OAuth 2.1并相应配置
  • 范围最小化:工具仅请求必要的权限


≡许可证

MIT许可证-请参阅 LICENSE 文件以获取详细信息。


验证: