gmail-mcp-server
gmail-mcp-server
这是一个 MCP 服务器,对外公开一个工具 send_email,通过 Gmail API 发送 Gmail 邮件(可附带文件附件)。专为在 Claude Code 中作为本地 stdio MCP 服务器使用而构建。
范围刻意保持狭窄:仅 gmail.send(无邮箱读取/修改权限)——对于一个唯一职责是发送邮件的工具而言,这是最小权限。
这份 README 根据实际首次配置的过程编写,包含过程中出现的每一个错误。按顺序从头到尾操作,你应该不会碰到其中任何一个。
PowerShell 注意:
&&在 Windows PowerShell 中不能用作命令分隔符(那是 bash/cmd 的语法)。下面的每一条多命令行都写成独立行,如果想写成一行,请使用;:cd C:\Users\GaneshGupta\gmail-mcp-server; python auth_setup.py
1. Google Cloud — 启用 API 并创建 OAuth 凭据
Google 的控制台界面最近已将“OAuth consent screen”更名为 Google Auth Platform,设置分布在左侧导航的不同页面中(Branding / Audience / Clients / Data Access / Verification Center)。以下步骤使用当前名称。
打开 console.cloud.google.com。创建新项目或复用现有项目。
APIs & Services → Library → 搜索“Gmail API” → Enable。
APIs & Services → OAuth consent screen(这会进入新的 Google Auth Platform 部分)→ 填写 Branding 页面:
App name:任意内容,例如
gmail-mcp-toolUser support email:你的 Gmail 地址
Developer contact email:你的 Gmail 地址
暂时将 logo/App domain 字段留空 —— 如果遇到“incomplete configuration”错误,第 4 步再回来填写 App domain。 不要预先猜测填写;只有确实看到该错误时才填写。
Audience 页面(左侧导航)→ 在 Test users 下 → + Add users → 输入你自己的 Gmail 地址(将用于发送邮件的那个)→ Save。
如果“Add users”被黄色横幅拦截,提示 “Your app's OAuth configuration is incomplete... Please visit the Branding page” —— 这是因为
gmail.send是敏感范围(sensitive scope),即使对于仅处于 Testing 状态的应用,也要求 App domain 字段非空。解决方法:进入 Branding → App domain,填写:
Application home page:
https://example.comApplication privacy policy link:
https://example.com/privacyApplication terms of service link:
https://example.com/terms
这将显示出一个 Authorized domains 字段。只输入裸域名——不要加
https://前缀:正确:
example.com错误(会提示“Invalid domain: must not specify the scheme”):
https://example.com
在 Branding 页面保存(你应该会看到“Branding changes saved!”通知)。
回到 Audience → Add users 再试一次 —— 这次会成功。
这些 URL 不需要真实/可用 —— 只要应用仍处于 Testing 状态,Google 就不会验证它们,只是要求字段已填写。
Clients 页面(左侧导航)→ + Create client:
Application type:Desktop app
Name:任意内容,例如
gmail-mcp-desktopCreate → Download JSON(创建后立即出现该按钮)
下载的文件名类似
client_secret_<long-id>.apps.googleusercontent.com.json。将其完全重命名为client_secret.json,并移动到:C:\Users\GaneshGupta\gmail-mcp-server\credentials\client_secret.json确切的文件名很重要 ——
gmail_auth.py会按该名称查找,如果名称不匹配,会抛出FileNotFoundError(这是这里最容易出错的地方)。
Related MCP server: Gmail MCP Server
2. 安装依赖
cd C:\Users\GaneshGupta\gmail-mcp-server
pip install -r requirements.txt3. 一次性登录
python auth_setup.py流程如下:
浏览器窗口会打开一个正常的 Google 登录页面。
你会看到 “Google hasn't verified this app”。这是预期情况 —— 这是你自己的 OAuth 客户端,处于 Testing 模式,正在请求敏感范围。点击 Continue(旧版界面:Advanced → Go to [app name] (unsafe))。
授予“Send email on your behalf”权限。
浏览器显示 “The authentication flow has completed. You may close this window.”
终端会输出
Authorized. Token saved to ...credentials\token.json。
如果第 2 步反而显示 Error 403: access_denied / “has not completed the Google verification process... can only be accessed by developer-approved testers” —— 说明你的 Gmail 地址还没有加入 Audience → Test users 列表。请回到上面的步骤 1.4。
只需执行一次。之后,server.py 只会静默刷新已保存的 token,绝不再自行打开浏览器。
4. 检查 token 是否正常(可选但推荐)
python -c "from gmail_auth import load_credentials; c = load_credentials(); print('valid:', c.valid); print('scopes:', c.scopes); print('has refresh token:', bool(c.refresh_token))"期望看到 valid: True、scopes: ['https://www.googleapis.com/auth/gmail.send']、has refresh token: True。
5. 注册到 Claude Code
claude mcp add gmail-sender --scope user -- python C:\Users\GaneshGupta\gmail-mcp-server\server.py--scope user 会全局注册 —— 从那时起,它在这台机器的每个 Claude Code 会话中都可用,而不只是你运行命令的那个会话。它不会追溯出现在已运行的会话中 —— MCP 服务器在会话启动时加载,因此要使用新的终端 / 新的 claude 会话才能看到它。
验证:
claude mcp list你应该在列表中看到 gmail-sender。
6. 使用
在任意 Claude Code 会话中(完成上述注册后),直接用自然语言提出需求即可:
向 jane@example.com 发送一封邮件,主题为“跟进”,正文为“...”,并附上 C:\path\to\file.pdf
Claude Code 会直接调用 send_email 工具。每个会话无需额外配置。
工具参考
send_email(to, subject, body, attachments=None, cc=None, bcc=None, html=False)
to/cc/bcc:逗号分隔的地址attachments:绝对本地文件路径列表,合计限制 15MB(Gmail 的原始发送上限为 25MB;15MB 原始文件为 base64 膨胀 + 邮件头留出了余量)html:设为 true 则发送 HTML 正文,而不是纯文本返回
{status, message_id, thread_id, to, subject, attachment_count}
故障排查索引
症状 | 原因 | 解决方法 |
| 下载的 JSON 保留了 Google 默认的长文件名 | 重命名为 |
| 你的账户还不是测试用户 | Audience → Test users → 添加你的 Gmail 地址 |
Audience 页面:“Your app's OAuth configuration is incomplete”横幅阻止了 Add users | 敏感范围( | 在 Branding → App domain 中填写任意 |
Authorized domain 字段报“Invalid domain: must not specify the scheme” | 输入了 | 只输入 |
登录时出现“Google hasn't verified this app”警告 | 预期情况 —— 你自己的 OAuth 客户端处于 Testing 模式 | 点击 Continue(或 Advanced → Go to app),这是正常现象,不是错误 |
| 那是 bash 语法,不是 PowerShell | 使用 |
| 注册发生在当前会话启动之后,或 scope 错误 | 打开新的 |
需要使用不同的 Gmail 账户发送 | token 绑定在你登录时使用的账户上 | 删除 |
附件被拒绝 / 大文件发送失败 | 附件合计超过 15MB | 拆分为多封邮件,或压缩文件 |
注意事项
credentials/client_secret.json和credentials/token.json已被 gitignore —— 切勿提交它们。要从不同的 Gmail 账户发送,请删除
credentials/token.json并重新运行auth_setup.py。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage Gmail messages, threads, labels, drafts, and settings from your workflows. Send and organiz…
Send transactional email over a verified domain — templates, attachments, custom headers.
Manage Gmail end-to-end: search, read, send, draft, label, and organize threads. Automate workflow…
Permissioned access to Gmail, Drive and Calendar via the user's own Google account
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables comprehensive Gmail management including sending, reading, and organizing emails, managing labels, drafts, threads, and configuring account settings through the Gmail API with secure OAuth2 authentication.641,723MIT
- AlicenseNot gradedqualityBmaintenanceEnables reading, sending, archiving, and managing Gmail emails and labels through Google OAuth authentication, acting as an OAuth proxy to the Gmail API.20511MIT
- FlicenseNot gradedqualityDmaintenanceEnables sending emails through Gmail using Google's Gmail API. Requires OAuth authentication setup through Google Cloud Console.
- AlicenseNot gradedqualityDmaintenanceEnables programmatic interaction with Gmail using OAuth 2.0 authentication, allowing users to search, read, send, and manage emails through a standardized interface.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ganeshhgupta/gmail-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server