关于 Gmail Mcp
Gmail Mcp 是将 Gmail API 接入 AI 助手的 MCP 服务,支持邮件、线程、标签、筛选器、草稿和附件操作。它按 OAuth 权限筛选可用工具,并在服务端实施路径隔离和发送限制等防护。
主要功能
- 01读取、搜索和发送邮件
- 02管理草稿、标签和筛选器
- 03按线程查看与回复邮件
- 04下载邮件和附件
- 05按 OAuth 权限限制工具
适用场景
- 01搜索并整理 Gmail 邮件
- 02起草或发送受限收件人的邮件
- 03查看线程并撰写群组回复
- 04将邮件或附件保存到磁盘
MCP 相关
此 MCP 服务向 AI 客户端提供 Gmail 邮件、线程、标签、筛选器、草稿及附件工具。它根据已授权的 OAuth 范围筛选工具,并包含路径隔离等服务端防护。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
📧 gmail-mcp
通过任何支持 MCP 的 AI 助手读取、搜索、发送和起草 Gmail 邮件,以及管理标签、过滤器和邮件对话串。通过权限范围受控的工具和进程内防护机制封装 Gmail API。
说明
这是 GongRzhe/Gmail-MCP-Server(于 2026-03-03 归档)的强化增强分支,源自 ArtyMcLabin/Gmail-MCP-Server。自分叉以来:180 多次提交和大规模重写,涵盖安全加固、Gmail 功能改进(全部回复、发送别名、邮件对话串级工具、下载到磁盘、收件人配对、带重试的批量操作……)、供应链卫生以及 CI 门禁。每个 PR 在合并前都会经过 CodeRabbit 和双模型 Qodo Merge 审查。有关安全控制和威胁模型,请参阅 SECURITY.md;有关与上游分支的差异,请参阅下方的对比表。
一个 Model Context Protocol (MCP) 服务,让 AI 助手(Claude Desktop、Claude Code、Cursor、Continue、OpenClaw……)通过权限范围受控的工具读取和管理 Gmail 帐户。通过一次 npx 安装,即可提供实际所需的 Gmail v1 API 功能(邮件、对话串、标签、过滤器、附件、草稿、全部回复)。
重要
定位。 上游将此分支称为 极致主义 分支。从外部看,这个标签是准确的,但它歪曲了我们的初衷。
klodr/gmail-mcp围绕四项特性构建——代码、测试和 CI/CD 的存在,都是为了落实且只落实这四项特性:
- 安全 — 输入清理、收件人配对、速率限制、发件人解析和审计日志均由 服务端 强制执行(而非依赖操作者留意)。Gmail 的功能界面经过中介处理,而非原样暴露。
- 自主 — 专为无人监控每项操作时仍能保持安全而设计。其威胁模型不同于上游的“我在自己的工作流中每天使用它”;进程内中间件正是弥合这一差距的关键。
- 经过测试 — 43 个文件中共有 945 个 vitest 测试用例,语句覆盖率为 99.37%(分支覆盖率为 91%),另有 fast-check 基于属性的模糊测试套件和专门的加固测试文件。
- 在加速变化中保持韧性 — 17 个 CI/CD 工作流(CodeQL、OSV、Gitleaks、leak-detect、Scorecard、Socket、SLSA、锁文件 lint、签名发布……)以安全生态实际变化的速度跟踪它——有时以天计,有时甚至以小时计。近期的具体案例:qs CVE-2026-8723,该漏洞在公开公告发布后的数小时内,就已在 klodr/* MCP 系列中披露并修复上线。
完整的设计依据和各项工具的设计权衡见
docs/DESIGN_DECISIONS.md。
✨ 为什么选择这个 MCP?
对原始 Gmail MCP 服务的三个维护中分支进行比较,重点关注 Agent 平台的实际需求——提示词注入安全、供应链完整性和运维规范:
| 能力 | GongRzhe/Gmail-MCP-Server(原始版本,已停止维护) | ArtyMcLabin/Gmail-MCP-Server(中间分支) | klodr/gmail-mcp(本仓库) |
|---|---|---|---|
| Gmail 核心功能 | |||
| 发送/草拟/读取/搜索邮件 | ✅ | ✅ | ✅ |
| 标签增删改查 | ✅ | ✅ | ✅ |
| 过滤器增删改查 | ⚠️ list_filters 已损坏 | ✅ 已修复 | ✅ |
| 批量修改/删除 | ✅ | ✅ | ✅ |
回复线程(In-Reply-To / References) | ❌ 回复会脱离原线程 | ✅ | ✅ |
| 全部回复工具 | ❌ | ✅ | ✅ |
以别名发送(from 参数) | ❌ | ✅ | ✅ |
回复和转发会使用对话所用的别名发出,与 Gmail 网页界面一致;reply_all 不会抄送你自己的任何别名(前提是令牌可以读取发件人别名列表) | ❌ | ❌ | ✅ |
线程级工具(get_thread、list_inbox_threads、get_inbox_with_threads) | ❌ | ✅ | ✅ |
将邮件下载到磁盘(json/eml/txt/html) | ❌ | ✅ | ✅ |
| 下载附件 | ✅ | ✅ | ✅ |
| 一次性下载邮件的所有附件,可选打包为一个 ZIP(保留原始文件名) | ❌ | ❌ | ✅ |
read_email 会显示 Cc / Bcc 行(以便决定使用回复还是全部回复) | ❌ | ✅ | ✅ |
| OAuth/授权 | |||
用于最小权限授权的 --scopes 标志 | ❌ | ✅ | ✅ |
| 根据已授权的作用域过滤工具列表 | ❌ | ✅ | ✅ |
OAuth 凭据文件权限模式 0o600 | ❌ | ✅ | ✅ |
OAuth 回环回调使用 state 和 PKCE(S256)进行校验,因此被截获的授权码无法被兑换 | ❌ | ❌ | ✅ |
项目文件夹中遗留的 gcp-oauth.keys.json 仅会由 auth 导入,不会在普通启动时导入 | ❌ 每次启动都会复制 | ❌ 每次启动都会复制 | ✅ |
| 安全性 — 输入处理 | |||
清理 CRLF 标头注入(\r\n\0) | ❌ | ⚠️ 部分支持 | ✅ |
download_attachment 中的路径遍历防护 | ❌ | ✅ 已修复 | ✅ |
| 路径隔离区(附件源路径+下载目标路径),阻止提示词注入导致的数据外泄 | ❌ | ❌ | ✅ |
符号链接安全写入(O_NOFOLLOW + mkdir 后重新验证 realpath,防范 TOCTOU) | ❌ | ❌ | ✅ |
对 maxResults / batchSize / messageIds 长度设置 Zod 上限 | ❌ | ❌ | ✅ |
使用加密安全的 MIME 边界(crypto.randomBytes,而非 Math.random) | ❌ | ❌ | ✅ |
| 安全性 — 外发邮件和提示词注入 | |||
可选收件人允许列表(GMAIL_MCP_RECIPIENT_PAIRING):邮件发送、回复、转发和草稿只会发给已配对的地址 | ❌ | ❌ | ✅ |
启用允许列表后,模型无法通过 gmail-mcp 扩展允许列表:由用户在 MCP 客户端中确认,或运行 npx @klodr/gmail-mcp pair add | ❌ | ❌ | ✅ |
如果 from 不是该账户的发件人别名之一,则拒绝该请求(发件人别名列表可读且非空时),避免 Gmail 悄悄改用默认地址发送 | ❌ | ❌ | ✅ |
send_draft 会拒绝 To / Cc / Bcc 无法解析为地址的草稿 | —(无 send_draft) | ❌ | ✅ |
| 每种工具系列在 24 小时和 30 天内的写入上限;批量工具按每封邮件计数,而非按调用次数计数 | ❌ | ❌ | ✅ |
| 拒绝会转发邮件的过滤器(转发规则会悄悄重定向之后所有符合条件的邮件) | ❌ create_filter 接受 action.forward | ❌ create_filter 接受 action.forward | ✅ 拒绝并说明原因 |
| 为下载的文件标记其来自互联网(macOS 隔离属性、Windows Mark of the Web),与 Mail 和 Outlook 的做法相同 | ❌ | ❌ | ✅ |
| 导出的 HTML:屏蔽脚本、框架和表单;除非明确要求,否则屏蔽远程图像、样式表、字体和媒体(跟踪像素) | —(不支持 HTML 导出) | ❌ 无 CSP | ✅ |
| MCP 协议和工具功能 | |||
| MCP SDK 版本 | v0.4.x | v1.27.x | v1.32.x |
工具注释(readOnlyHint / destructiveHint / idempotentHint) | ❌ | ✅ | ✅ |
llms-install.md(供 LLM 阅读的安装指南) | ❌ | ❌ | ✅ |
| 发布/可发现性 | |||
| 已发布到 npm | ❌ 已过时 — 不会再发布新版本(仓库已归档) | ❌(作为来自中间分支的 GitHub 安装包使用) | ✅ 专用作用域包,发布版本已签名 |
| 持续维护(最近 30 天) | ❌(2026-03-03 已归档) | ⚠️ 不定期 | ✅ 每日审查周期(CodeRabbit +人工) |
| 供应链完整性 | |||
| Node.js 最低版本 | ❌ >=14(2023 年 4 月停止支持) | ❌ >=14(2023 年 4 月停止支持) | ✅ >=24.18.1(已在 Node 24 和 26 上测试) |
CI:CodeQL Advanced(javascript-typescript + actions) | ❌ | ❌ | ✅ |
| CI:OpenSSF Scorecard(每周扫描 + 徽章) | ❌ | ❌ | ✅ |
| CI:Socket Security 供应链警报 | ❌ | ❌ | ✅ |
| CI:每个 PR 均由 CodeRabbit 进行严格审查 | ❌ | ❌ | ✅ |
| 发布:签名构建(Sigstore + SLSA in-toto 证明 + npm 来源证明) | ❌ | ❌ | ✅ |
| 发布:单文件 ESM 包 | ❌ | ❌ | ✅ |
| 测试 | |||
| 单元/属性测试 | ❌(0 个测试) | ⚠️(97 个测试) | ✅(945 个测试,43 个文件) |
src/** 的语句覆盖率 | 0% | 16.14% | 99.37%(分支覆盖率 91%) |
| fast-check 基于属性的模糊测试套件 | ❌ | ❌ | ✅ |
| 专项强化测试文件(路径隔离区、CRLF、O_EXCL) | ❌ | ❌ | ✅ |
| CI/CD 强化 | |||
| 可防范 Shell 注入的 GitHub Actions 工作流 | ❌ | ✅ | ✅ |
工作流使用最小权限 permissions: 作用域 | ❌ | ✅ | ✅ |
| 所有 GitHub Actions 均固定到完整提交 SHA | ❌ | ❌ | ✅ |
| 运维 | |||
CHANGELOG.md(Keep-a-Changelog) | ❌ | ❌ | ✅ |
SECURITY.md(漏洞报告) | ❌ | ❌ | ✅ |
klodr/gmail-mcp 是三者中唯一具备以下特性的项目:(a) 通过源路径隔离,使提示词注入附件窃取数据的攻击失效;(b) 提供恶意邮件无法诱使模型绕过的出站护栏——可选的收件人允许列表(模型无法通过 gmail-mcp 扩展该列表)、不设转发筛选器,以及会统计每封邮件的写入上限;(c) 采用现代供应链工具(Scorecard、Socket、Sigstore);(d) 在仓库内设有审查策略(.coderabbit.yaml),每个 PR 都必须通过该策略才能合并。 |
Fork 对照列基于 GongRzhe a890d19(2025-08-06,已归档)和 ArtyMcLabin 83e8daf(main,2026-08-12)的代码核查得出。
📦 安装
npm install -g @klodr/gmail-mcp
也可以直接通过 npx 安装:
npx -y @klodr/gmail-mcp
需要 Node.js 24.18.1+(已在 Node 24 和 26 上测试)。
⚙️ 配置
1️⃣ Google Cloud OAuth 凭据
- 打开 Google Cloud Console。
- 创建项目并启用 Gmail API。
- 在 APIs & Services → Credentials 下创建 OAuth 2.0 Client ID(桌面或 Web)。如果选择 Web,请将
http://localhost:3000/oauth2callback添加到授权重定向 URI。 - 下载 JSON,将其重命名为
gcp-oauth.keys.json,并放在~/.gmail-mcp/gcp-oauth.keys.json(或通过GMAIL_OAUTH_PATH=/abs/path/gcp-oauth.keys.json覆盖)。
2️⃣ 进行身份验证(一次即可)
npx -y @klodr/gmail-mcp auth --scopes=gmail.readonly
始终通过 --scopes 指定实际所需的最小权限范围——MCP 会在启动时根据已授予的权限筛选工具列表,因此只读令牌不会向大模型暴露写入工具。浏览器会打开 Google 的授权流程页面;令牌会写入 ~/.gmail-mcp/credentials.json(模式 0o600)。
3️⃣ 在 MCP 客户端中注册服务
{
"mcpServers": {
"gmail": {
"command": "npx",
"args": ["-y", "@klodr/gmail-mcp"]
}
}
}
各客户端对应的配置文件:
- Claude Code:
~/.claude.json - Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)/%APPDATA%\Claude\claude_desktop_config.json(Windows) - Cursor:
~/.cursor/mcp.json - OpenClaw:
~/.openclaw/openclaw.json
请参阅 llms-install.md,了解适用于大模型的安装指南。
🔑 OAuth 权限范围
| 权限简称 | 完整 Gmail 权限范围 | 授予的权限 |
|---|---|---|
gmail.readonly | …/auth/gmail.readonly | 读取邮件、会话和标签(筛选工具需要 gmail.settings.basic) |
gmail.modify | …/auth/gmail.modify | 只读权限 + 应用/移除标签、删除邮件 |
gmail.compose | …/auth/gmail.compose | 创建草稿 |
gmail.send | …/auth/gmail.send | 发送邮件 |
gmail.labels | …/auth/gmail.labels | 仅管理标签 |
gmail.settings.basic | …/auth/gmail.settings.basic | 管理筛选器 |
配置示例:
# Read-only browsing
npx @klodr/gmail-mcp auth --scopes=gmail.readonly
# Read + send (mailing-list bot)
npx @klodr/gmail-mcp auth --scopes=gmail.readonly,gmail.send
# Everything (default; explicit)
npx @klodr/gmail-mcp auth --scopes=gmail.modify,gmail.settings.basic
# Default + permanent delete (delete_email / batch_delete_emails)
# gmail.modify authorizes trash; mail.google.com is the only scope
# that authorizes purging from Trash. Both are listed because the
# tool gate does exact scope-name matching — a token holding only
# mail.google.com would not enable the gmail.modify-gated tools,
# even though Google's scope hierarchy would technically accept the
# same calls.
npx @klodr/gmail-mcp auth --scopes=gmail.modify,mail.google.com,gmail.settings.basic
🛡️ 防护措施
进程内中间件(自主性限制)
自主运行的大模型客户端无法违反的运行时约束由服务端强制执行,而不是依赖操作人员时刻保持警惕。工具调用入口路径上设有七个进程内模块;仅选择启用的模块会在设置相应环境变量时激活。
始终启用(默认对每次调用生效):
sanitize.ts— 在输入到达 Gmail 标头、文件名或文件系统路径之前,对 LLM 提供的输入进行剥离和转义(CRLF 注入、控制字符、NUL 字节)。sender-resolver.ts— 当发件人别名列表可读取且非空时,仅根据账户已授权的发件人别名解析from参数,因此在调用 Gmail API 发送邮件之前就会拒绝伪造发件人字段的行为;当列表不可用或为空时,显式指定的from会原样传递。未指定from且发件人别名列表可读取时,回复、转发或带线程的send_email/draft_email会沿用对话已使用的别名(即源邮件的发件地址或收件地址,否则使用线程中最后使用的地址),与 Gmail 网页界面的行为一致;reply_all绝不会复制账户的任何别名。当列表不可用时(例如,令牌仅限于gmail.send或gmail.compose),发件人会回退到resolveDefaultSender,而reply_all仅排除账户自己的地址。rate-limit.ts— 按工具类别(send、delete、modify、drafts、labels、filters、pairing)限制滚动日/月窗口内的写入量。批量工具(batch_modify_emails、batch_delete_emails、move_to_spam_batch)会按处理的邮件逐封计数,因此对 1 000 封邮件调用一次会消耗 1 000 个单位,而非 1 个。状态会持久化到磁盘,因此重启后仍然保留。仅在测试运行时使用GMAIL_MCP_RATE_LIMIT_DISABLE=true禁用。quarantine.ts— 将download_attachment、download_all_attachments和download_email写入的每个文件都标记为从互联网下载,就像 Mail 和 Outlook 一样:在 macOS 上设置com.apple.quarantine属性(Gatekeeper 会在可执行文件或脚本打开时进行检查),在 Windows 上设置网络来源标记;Linux 上则不做处理。此功能不会阻止保存:如果无法设置标记,文件仍会保存。使用GMAIL_MCP_QUARANTINE=false关闭。- 拒绝转发过滤器(
filter-manager.ts)—create_filter和过滤器模板绝不会安装转发邮件的规则:此类规则会悄无声息地重定向所有之后匹配的邮件,而 Gmail 仅会转发到已验证的转发地址,其注册需要gmail.settings.sharing范围——该范围不在默认范围内,且此处没有工具会使用它;即使--scopes授予了该范围,仍会拒绝创建此类规则。请在 Gmail 网页界面中创建此类规则。 - 导出的 HTML(
email-export.ts)—download_email以html格式写入的文件会包含 Content-Security-Policy,禁止脚本、插件、框架、<base>重写和表单提交,并默认阻止所有远程内容获取——包括图像、样式表、字体、媒体等(default-src 'none')——因此跟踪像素或样式表无法报告副本何时、何地被打开(内联样式和图像仍可正常显示);发件人的<meta http-equiv="refresh">会被禁用。可通过单次调用指定allowRemoteImages: true,或全局设置GMAIL_MCP_EXPORT_REMOTE_IMAGES=true来允许远程内容。 send_draft收件人检查 — 发送前会读取暂存的草稿;如果 To / Cc / Bcc 标头无法解析为地址列表,则会拒绝发送,因此始终可以确定草稿的收件人。gmail-errors.ts— 将 Gmail API 的故障模式规范化为类型化错误,确保重试以及向 LLM 呈现错误的行为是确定的。middleware.ts— 组合始终启用的处理链,并将其绑定到每个工具入口点。新工具会自动继承整个处理管线。
可选启用(默认关闭,设置环境变量以启用):
recipient-pairing.ts— 拒绝向未列入操作员控制的允许列表(~/.gmail-mcp/paired.json)中的地址发送邮件。不会向凭空捏造的地址发送新邮件。当设置GMAIL_MCP_RECIPIENT_PAIRING=true时启用;对send_email/reply_*/forward_email/draft_email/update_draft/send_draft这一组工具进行限制。比较地址时会忽略名称(Name <address>与已配对的address匹配)。启用限制期间,模型无法通过 gmail-mcp 扩展列表:pair_recipient add会要求用户通过 MCP 客户端确认(询问);如果客户端无法发起询问,则会拒绝操作并指出终端命令——npx @klodr/gmail-mcp pair add <address>(也可使用pair remove、pair list)。否则,恶意邮件可能会指示 Agent 将其自身地址加入配对列表,然后向该地址发送邮件。此保证适用于 gmail-mcp 的功能范围:只要 MCP 客户端不允许模型运行终端命令(例如npx @klodr/gmail-mcp pair add)或未经你批准就写入paired.json,保证便持续有效。audit-log.ts— 仅追加的 JSONL 轨迹,记录每次工具调用(名称、已编辑的参数、结果),并在编辑时保留结构键,以便操作员事后重现决策。设置GMAIL_MCP_AUDIT_LOG=/abs/path/audit.jsonl时启用。
通过以下环境变量配置各模块:
| 项目 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
| 附件隔离目录 | GMAIL_MCP_ATTACHMENT_DIR=/abs/path | ~/GmailAttachments/(自动创建,权限模式为 0o700) | 每个附件路径(send_email、draft_email、update_draft、reply_all、reply_to_email、forward_email)在经过 realpath 规范化后都必须位于此目录内。拒绝指向目录外的符号链接。阻止提示词注入窃取 ~/.ssh/id_rsa、~/.gmail-mcp/credentials.json、~/.claude.json 等文件。 |
| 下载隔离目录 | GMAIL_MCP_DOWNLOAD_DIR=/abs/path | ~/GmailDownloads/(自动创建,权限模式为 0o700) | download_email、download_attachment 和 download_all_attachments(包括各个文件和 ZIP 文件)只能写入此目录。使用 O_NOFOLLOW 打开叶节点;mkdir 后会重新验证解析后的路径是否位于隔离目录根目录内(防止 TOCTOU 攻击)。 |
| OAuth 密钥路径 | GMAIL_OAUTH_PATH=/abs/path/gcp-oauth.keys.json | ~/.gmail-mcp/gcp-oauth.keys.json | Google Desktop/Web OAuth 客户端凭据。 |
| 凭据路径 | GMAIL_CREDENTIALS_PATH=/abs/path/credentials.json | ~/.gmail-mcp/credentials.json | 访问令牌和刷新令牌。文件权限模式为 0o600。 |
| 速率限制状态目录 | GMAIL_MCP_STATE_DIR=/abs/path | ~/.gmail-mcp/ | 保存速率限制滚动调用历史记录的位置(ratelimit.json,权限模式为 0o600)。未来的任何状态文件也会复用此目录。 |
| 速率限制覆盖值 | GMAIL_MCP_RATE_LIMIT_<bucket>=D/day,M/month | 见下文 | 覆盖各类别的每日/每月上限。类别:send(100/2000)、delete(1000/10000)、modify(5000/50000)、drafts(300/3000)、labels(50/500)、filters(20/200)、pairing(50/500)。对于批处理工具,delete 和 modify 按邮件数量计数:每日 5 000 次修改可处理 5 批各含 1 000 封邮件的完整批次(用于清理大型收件箱),同时仍能阻止失控循环;永久删除仍限制为每日 1 000 封。每个外发工具(send_email、reply_all、reply_to_email、forward_email、send_draft)共用 send 类别。send 上限按人类专业工作量的较高水平设置(每天约 40 封邮件,并留有 2.5 倍余量);如果需要 v0.30.2 之前的默认值,请通过 GMAIL_MCP_RATE_LIMIT_send=400/day,6000/month 调高上限。类别名称使用小写,并与工具系列名称一致。 |
| 禁用速率限制 | GMAIL_MCP_RATE_LIMIT_DISABLE=true | 未设置(限制器已启用) | 整个限制器的紧急关闭开关。仅用于测试套件或受控批处理操作。 |
| 收件人配对 | GMAIL_MCP_RECIPIENT_PAIRING=true | 未设置(无允许列表) | 仅向已配对的地址发送邮件(GMAIL_MCP_PAIRED_PATH,默认值为 ~/.gmail-mcp/paired.json)。可在终端中使用 npx @klodr/gmail-mcp pair add <address> 进行配对,也可通过 pair_recipient 配对,该工具会要求你确认。 |
| 配对确认等待时间 | GMAIL_MCP_PAIRING_CONFIRM_TIMEOUT_MS=600000 | 10 分钟 | pair_recipient add 等待你填写确认表单的时长,超时后将放弃(不会配对)。必须是以毫秒为单位的正整数;其他值均回退为默认值。MCP 客户端自身的工具调用超时可能会提前结束等待。 |
| 下载文件隔离 | GMAIL_MCP_QUARANTINE=false | 启用 | 为每个下载文件添加 macOS com.apple.quarantine/Windows Mark of the Web;Linux 上不执行任何操作。绝不会阻止下载。 |
| 导出 HTML 中的远程内容(图片、样式表、字体、媒体) | GMAIL_MCP_EXPORT_REMOTE_IMAGES=true | 已阻止 | html 格式下 download_email 的默认设置;单次调用的 allowRemoteImages 设置优先。 |
| 审计日志 | GMAIL_MCP_AUDIT_LOG=/abs/path/audit.jsonl | 未设置(无审计记录) | 选择启用的只追加 JSONL 日志,记录每次工具调用(名称、已脱敏的参数、结果)。文件权限模式为 0o600。必须使用绝对路径;启动时会拒绝相对路径。脱敏会保留结构性键,并移除允许列表之外的值。 |
| 试运行 | GMAIL_MCP_DRY_RUN=true | 未设置(执行实际调用) | 当值为 "true"(严格匹配)时,每个写入工具(send_email、reply_all、reply_to_email、forward_email、draft_email、update_draft、delete_draft、send_draft、delete_email、modify_email、batch_modify_emails、move_to_spam、move_to_spam_batch、batch_delete_emails、create_label、update_label、delete_label、get_or_create_label、create_filter、delete_filter、create_filter_from_template、modify_thread、pair_recipient)都会在调用 Gmail 前提前返回,并返回原本会发送的脱敏载荷。这与受速率限制的工具集合完全一致。pair_recipient 的所有操作(包括 list)都会提前返回。适用于 CI 冒烟测试、Agent 调试和人工审核工作流。读取工具和仅在本地运行的 download_* 工具会忽略此标志(邮箱中没有可预览的内容)。与同级服务中的 MERCURY_MCP_DRY_RUN/FAXDROP_MCP_DRY_RUN 行为一致。 |
🛠️ 工具
具体工具集取决于 auth 时授予的 OAuth 作用域。完整目录:
- 邮件 —
send_email、draft_email、read_email、search_emails、modify_email、delete_email、download_email、download_attachment、download_all_attachments、batch_modify_emails、batch_delete_emails、reply_all、reply_to_email、forward_email - 草稿 —
list_drafts、get_draft、update_draft、delete_draft、send_draft(完整的users.drafts.*接口;上面的draft_email用于创建初始草稿) - 邮件会话 —
get_thread、list_inbox_threads、get_inbox_with_threads、modify_thread - 标签 —
list_email_labels、create_label、update_label、delete_label、get_or_create_label - 过滤器 —
list_filters、get_filter、create_filter、delete_filter、create_filter_from_template - 收件人配对 —
pair_recipient(当GMAIL_MCP_RECIPIENT_PAIRING=true时,管理~/.gmail-mcp/paired.json允许名单)
根据 MCP 规范,每个写入工具都标注了 destructiveHint / readOnlyHint / idempotentHint,以便具备策略感知能力的客户端在执行前要求人工确认。
🔍 search_emails 查询语法
search_emails 支持 Gmail 原生搜索运算符——from:、to:、subject:、has:attachment、after:YYYY/MM/DD、before:YYYY/MM/DD、is:unread、label:<name> 等。它们可以自由组合:from:alice after:2026/01/01 has:attachment。完整参考:Google 的 Gmail 搜索运算符速查表。如果查询没有匹配结果,则会返回 No messages found for query: <query>,而不是空结果。
🗺️ 路线图
请参阅 ROADMAP.md。
🌐 生态系统
klodr 系列中的其他 MCP 服务
- 📧 klodr/gmail-mcp — Gmail(你正在查看此项目)
- 📠 klodr/faxdrop-mcp — 通过 FaxDrop 发送真实传真
- 🏦 klodr/mercury-invoicing-mcp — Mercury 银行服务 + 开票
更广泛的 Gmail-MCP 生态
docs/COMPETITORS.md 中评审了 29 个独立仓库以及原始 GongRzhe 服务的 349 个分支,介绍我们借鉴了哪些想法、决定不采用哪些想法,以及 klodr/gmail-mcp 在成熟度维度上的位置。
🤝 参与贡献
请参阅 CONTRIBUTING.md,了解测试 / 构建 / lint 检查清单和发布流程。
🔒 安全
请参阅 SECURITY.md,了解漏洞报告流程和当前安全模型;另请参阅 ASSURANCE_CASE.md,了解威胁模型、信任边界以及 CWE/OWASP 缓解措施表。
📋 项目延续
如果维护者无法继续维护,请参阅 CONTINUITY.md 了解交接计划。
📄 许可证
MIT — 请参阅 LICENSE。
📜 历史
klodr/gmail-mcp 是沿两步上游链维护的分支:
- GongRzhe/Gmail-MCP-Server — 原始服务。自 2025 年 8 月起停止维护(7 个多月没有维护者活动,且有 72 个以上未合并的拉取请求)。
- ArtyMcLabin/Gmail-MCP-Server — Arty MacKiewicz 积极维护的分支。自与 Gong 分道扬镳后,该分支合并了社区贡献,包括:全部回复(#3,作者 @MaxGhenis)、
list_filters修复(#4,作者 @nicholas-anthony-ai)、CI/CD shell 注入加固(#9,作者 @JF10R)、download_email(#13,作者 @icanhasjonas)、工具注释(#14,作者 @bryankthompson)、read_email中的 CC/BCC 字段(#21,作者 @panghy),以及草稿生命周期工具send_draft/delete_draft/update_draft(#30,作者 @thisisambros)。回复线程自动解析和--scopes标志则由维护者直接纳入。
klodr/gmail-mcp 延续了上述所有改进,并增加了供应链/路径隔离/审核策略层(见上方对比表)。感谢这条贡献链上的每一位 PR 作者。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。