使用说明
Gmail MCP服务器
Node.js服务器,将模型上下文协议(MCP)连接到Gmail,使大型语言模型能够使用Gmail API安全地发送、读取和管理电子邮件。
特性
- 📤 通过Gmail API发送电子邮件
- 📥 使用筛选选项获取收件箱电子邮件
- 🔍 使用Gmail查询语法进行高级电子邮件搜索
- 📧 按ID检索包含完整内容的特定电子邮件
- 📝 访问电子邮件草稿
- 📬 查看已发送的电子邮件
- 📎 支持HTML和纯文本电子邮件
- 📁 附件支持(发送和查看)
- 👥 CC和BCC收件人
- 🔐 使用Google进行OAuth2身份验证
- 🛡️ 安全的凭证管理
- ⚡ 具有元数据缓存的快速电子邮件操作
设置
1.安装依赖项
npm install
2.谷歌云设置
-
转到 谷歌云控制台
-
创建新项目或选择现有项目
-
启用Gmail API:
- 转到“API和服务”>“库”
- 搜索“Gmail API”并启用它
-
创建凭据:
- 转到“API和服务”>“凭据”
- 点击“创建凭据”>“OAuth 2.0客户端ID”
- 选择“桌面应用程序”
- 下载JSON文件并将其重命名为
credentials.json - 将其放置在此项目的根目录中
备注:桌面应用程序自动使用带外身份验证流,因此不需要额外的重定向URI配置。
-
配置OAuth同意屏幕:
- 转到“API和服务”>“OAuth同意屏幕”
- 选择“外部”用户类型(除非您有谷歌工作区)
- 填写必填字段:
- 应用程序名称:“Gmail MCP服务器”(或您的首选名称)
- 用户支持电子邮件:您的电子邮件地址
- 开发者联系信息:您的电子邮件地址
- 将您的Gmail地址添加到“测试用户”部分
- 这允许您在测试模式下使用应用程序
3.身份验证设置
完成OAuth身份验证以允许服务器发送电子邮件:
npm run setup
这将:
- 检查一下
credentials.json存在 - 生成授权URL
- 引导您完成OAuth流程
- 保存身份验证令牌
🔍 查找您的授权码
在Google OAuth屏幕中单击“允许”后,您将被重定向。以下是如何查找您的授权码:
方法1:直接代码显示(最常见于桌面应用程序)
- 点击“允许”后,谷歌直接在页面上显示授权码
- 查找类似“请复制此代码,切换到您的应用程序并将其粘贴到那里:”的文本
- 从文本框或突出显示的区域复制代码
授权代码示例:
4/0AbCD1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
⚠️ 重要:代码通常很长(50+个字符),以 4/0
备注:服务器直接从以下位置读取OAuth凭据 credentials.json。您不需要创建 .env 文件,除非您想设置可选配置。
可选:环境配置
您可以选择创建 .env 其他设置文件:
# Optional: Default sender email (will use authenticated user's email if not set)
DEFAULT_SENDER_EMAIL=your-email@gmail.com
# Optional: Authorization code (for automated setup)
AUTH_CODE=your_auth_code_here
首次运行服务器以完成OAuth身份验证:
npm start
按照浏览器中的身份验证流程进行操作,并在提示时粘贴授权码。
用法
MCP客户端配置
将此服务器添加到MCP客户端配置中:
{
"mcpServers": {
"gmail": {
"command": "node",
"args": ["/path/to/gmail-mcp-server/src/index.js"],
"env": {}
}
}
}
可用工具
send_邮件
通过Gmail发送电子邮件。
参数:
to(必填):收件人电子邮件地址-字符串或字符串数组subject(必填):电子邮件主题行body(必填):电子邮件正文内容cc(可选):CC收件人电子邮件地址-字符串或字符串数组bcc(可选):BCC收件人电子邮件地址-字符串或字符串数组html(可选):如果正文包含HTML内容,则设置为true(默认值:false)attachments(可选):要附加的文件路径数组
例子:
{
"name": "send_email",
"arguments": {
"to": "recipient@example.com",
"subject": "Hello from MCP Server",
"body": "This is a test email sent through the Gmail MCP server.",
"html": false
}
}
get_box_emails
使用可选过滤功能从收件箱中检索电子邮件。
参数:
maxResults(可选):要检索的最大电子邮件数(默认值:10)query(可选):用于过滤电子邮件的Gmail搜索查询(默认:“收件箱”)includeSpamTrash(可选):包括垃圾邮件和垃圾电子邮件(默认值:false)
例子:
{
"name": "get_inbox_emails",
"arguments": {
"maxResults": 5,
"query": "is:unread"
}
}
get_email_by_id
通过ID获取包含正文和附件在内的完整内容的特定电子邮件。
参数:
emailId(必填):要检索的电子邮件的IDformat(可选):电子邮件数据的格式-“完整”、“元数据”或“最小”(默认值:“完整”)
例子:
{
"name": "get_email_by_id",
"arguments": {
"emailId": "1234567890abcdef",
"format": "full"
}
}
搜索邮件
使用Gmail强大的搜索查询语法搜索电子邮件。
参数:
query(必填):Gmail搜索查询(例如,“发件人:example@gmail.com“,”主题:重要“,”有:附件“)maxResults(可选):要检索的最大电子邮件数(默认值:10)
例子:
{
"name": "search_emails",
"arguments": {
"query": "from:boss@company.com has:attachment",
"maxResults": 20
}
}
get_sent_emails
从您的已发送文件夹中检索电子邮件。
参数:
maxResults(可选):要检索的最大电子邮件数(默认值:10)
例子:
{
"name": "get_sent_emails",
"arguments": {
"maxResults": 15
}
}
get_draft_emails
检索电子邮件草稿。
参数:
maxResults(可选):要检索的最大草稿电子邮件数(默认值:10)
例子:
{
"name": "get_draft_emails",
"arguments": {
"maxResults": 5
}
}
Gmail搜索查询示例
这 search_emails 和 get_inbox_emails 工具支持Gmail强大的搜索语法:
from:sender@example.com-来自特定发件人的电子邮件to:recipient@example.com-发送给特定收件人的电子邮件subject:keyword-主题中包含关键字的电子邮件has:attachment-带附件的电子邮件is:unread-未读电子邮件is:important-重要电子邮件newer_than:7d-超过7天的电子邮件older_than:1m-超过1个月的电子邮件size:larger_than:10M-大于10MB的电子邮件
您可以组合多个条件:
from:boss@company.com is:unread has:attachmentsubject:meeting newer_than:3dto:me filename:pdf older_than:1w
安全说明
- OAuth2令牌存储在本地
token.json - 永不承诺
credentials.json,token.json,或.env文件到版本控制 - 服务器需要用户明确同意才能访问Gmail
- 所有API呼叫都使用谷歌官方的Gmail API,并进行正确的身份验证
故障排除
“权限不足”错误
这是从仅发送升级到完全电子邮件访问时最常见的问题。
快速修复:
# Delete old token and re-authenticate
rm token.json
npm run setup
或者使用专用的重新认证脚本:
npm run reauth
为什么会发生这种情况: 仅请求原始身份验证 gmail.send 许可。新的电子邮件阅读功能需要额外的作用域(gmail.readonly 和 gmail.modify).
OAuth 403:访问错误
如果您遇到“错误403:access_denied”或“应用程序当前正在测试中”,请按照以下步骤操作:
快速修复(建议个人使用):
-
将自己添加为测试用户:
- 首选 谷歌云控制台
- 导航到“API和服务”>“OAuth同意屏幕”
- 向下滚动到“测试用户”部分
- 点击“添加用户”并添加您的Gmail地址
- 保存更改
-
确保用户类型正确:
- 在OAuth同意屏幕中,确保您选择了“外部”用户类型
- 如果您选择了“内部”但没有谷歌工作区,请更改为“外部”
-
清除浏览器缓存,然后重试:
- 清除浏览器缓存和Google帐户的Cookie
- 请重试身份验证流程
替代方案:使用应用程序密码(特定于Gmail)
如果OAuth仍然存在问题,您可以使用Gmail应用程序密码:
- 启用双因素身份验证 在您的Google帐户上
- 生成应用程序密码:
- 转到Google帐户设置
- 安全>两步验证>应用密码
- 为“邮件”生成密码
- 使用SMTP而不是Gmail API (需要修改代码)
用于生产用途:
要永久取消测试限制:
- 使用所有必需的信息完成OAuth同意屏幕
- 提交谷歌验证(需要1-4周)
- 提供隐私政策、服务条款和应用程序主页
- 验证后,任何Gmail用户都可以授权您的应用程序
其他常见问题
“未找到credentials.json”
- 确保文件位于项目根目录中
- 检查文件名是否准确
credentials.json - 验证文件是否包含有效的JSON
“令牌刷新失败”
- 删除
token.json文件 - 跑
npm run setup重新验证 - 确保您的OAuth2凭据仍然有效
“未启用Gmail API”
- 转到谷歌云控制台
- 导航到“API和服务”>“库”
- 搜索“Gmail API”并确保其已启用
🔄 重要提示:阅读电子邮件需要重新验证
如果您之前将此服务器设置为仅发送电子邮件,您需要重新验证才能访问收件箱和电子邮件阅读功能。仅请求了原始设置 gmail.send 权限,但新功能需要额外的作用域。
快速修复“权限不足”错误:
-
删除现有令牌:
rm token.json -
重新运行安装程序 (这将请求额外的权限):
npm run setup -
再次遵循OAuth流程 -这次它将请求以下权限:
- 发送电子邮件(
gmail.send) - 阅读电子邮件(
gmail.readonly) - 修改电子邮件(
gmail.modify)
- 发送电子邮件(
替代方案:强制重新身份验证脚本
如果您更喜欢专用脚本:
npm run reauth
发展
# Start with auto-reload
npm run dev
# Run tests
npm run test
贡献
我们欢迎对Gmail MCP服务器的贡献!以下是您可以提供帮助的方式:
🚀 入门指南
- 分叉存储库 在GitHub上
- 克隆你的叉子 本地:
git clone https://github.com/your-username/email-mcp-server.git cd email-mcp-server - 安装依赖项:
npm install - 设置身份验证 (请参阅上面的设置部分):
npm run setup
🔧 开发工作流程
- 创建要素分支:
git checkout -b feature/your-feature-name - 进行更改 遵循我们的编码标准
- 测试您的更改:
npm run test - 在本地运行服务器 验证功能:
npm run dev - 提交您的更改 带有描述性信息:
git commit -m "feat: add support for email labels" - 推你的叉子:
git push origin feature/your-feature-name - 创建拉取请求 在GitHub上
📝 编码标准
- JavaScript样式:使用现代ES6+语法
- 格式化:运行
npm run lint(如有)在承诺之前 - 评论:为函数和复杂逻辑添加JSDoc注释
- 错误处理:始终包括正确的错误处理和验证
- 安全:切勿记录或公开敏感凭据
🧪 测试指南
- 编写测试 对于中的新功能
test/目录 - 测试电子邮件功能 使用提供的测试脚本:
node test/send-test-email.js node test/email-operations-test.js - 验证MCP集成 使用测试客户端:
node test/mcp-test-client.js
📋 我们正在寻找什么
高优先级:
- 📎 增强的附件处理(多个文件,大小限制)
- 🏷️ 电子邮件标签管理(创建、应用、删除标签)
- 📤 草稿管理(创建、编辑、发送草稿)
- 🔄 通过webhooks实时发送电子邮件通知
- 📊 电子邮件分析和报告功能
中等优先级:
- 🎨 HTML电子邮件模板支持
- 📋 电子邮件签名管理
- 🔍 高级搜索过滤器和排序
- 📱 移动友好的身份验证流程
- 🌐 多语言支持
欢迎光临:
- 🐛 Bug修复和安全改进
- 📚 文档增强
- ⚡ 性能优化
- 🧪 附加测试覆盖率
🐛 报告问题
报告错误时,请包括:
- 清晰的描述 关于这个问题
- 重现步骤 问题
- 预期行为与实际行为
- 环境详细信息:
- Node.js版本(
node --version) - npm版本(
npm --version) - 操作系统
- Node.js版本(
- 错误消息 或日志(删除敏感信息)
- 代码片段 如果相关
📋 问题模板
我们提供问题模板,以帮助您有效地报告错误和请求功能:
🐛 Bug报告模板
报告错误或意外行为时使用此模板:
- 总结:问题的简要说明
- 环境:Node.js版本、操作系统、npm版本
- 重现问题的步骤:重新创建问题的编号步骤
- 预期行为:应该发生什么
- 实际行为:实际发生了什么
- 错误消息:任何错误日志或消息
- 附加上下文:屏幕截图、代码片段或其他相关信息
✨ 功能请求模板
建议新功能时使用此模板:
- 功能摘要:拟议功能的简要说明
- 问题陈述:这解决了什么问题?
- 建议的解决方案:此功能应如何工作?
- 用例:这将有所帮助的真实世界场景
- 考虑的替代方案:您考虑过的其他解决方案
- 附加上下文:模型、示例或参考
📚 文档发布模板
使用此模板改进文档:
- 文件科:哪个部分需要改进
- 问题描述:什么不清楚或缺失
- 建议改进:如何让它变得更好
- 目标受众:谁将从这一变化中受益
🔧 如何创建问题
- 访问问题页面:转到存储库的 问题选项卡
- 点击“新问题”:开始创建新问题
- 选择模板:选择合适的模板(Bug报告、功能请求等)
- 填写模板:完成所有相关章节
- 添加标签:应用适当的标签(bug、增强、文档等)
- 提交:单击“提交新问题”
📝 问题标签指南
我们使用这些标签对问题进行分类:
类型标签:
bug-有些东西不起作用enhancement-新功能或请求documentation-文件的改进或补充question-要求提供更多信息help wanted-需要额外注意good first issue-对新人有好处
优先级标签:
priority: high-需要立即关注的关键问题priority: medium-应尽快解决的重要问题priority: low-很高兴有改进
组件标签:
gmail-api-与Gmail API集成相关authentication-OAuth和凭据管理mcp-模型上下文协议功能testing-测试相关问题security-安全相关问题
🔍 创建问题之前
先搜索:检查是否有人已经报告了相同的问题或请求了相同的功能。
对于Bug:
- 尝试最新版本,查看问题是否已修复
- 查看README中的故障排除部分
- 如果可能,使用不同的配置进行测试
功能:
- 考虑这是否符合项目的范围和目标
- 思考它将如何影响现有功能
- 在相关项目中查找类似功能
💡 功能请求
有关新功能:
- 检查现有问题 避免重复
- 描述用例 以及为什么它很有价值
- 提供示例 它将如何工作
- 考虑向后兼容性
🏷️ 提交消息格式
我们遵循常规承诺:
type(scope): description
[optional body]
[optional footer]
类型:
feat:新功能fix:Bug修复docs:文件更改style:代码样式更改(无逻辑更改)refactor:代码重构test:添加或更新测试chore:维护任务
示例:
feat(gmail): add support for email labels
fix(auth): handle token refresh edge case
docs(readme): update API documentation
test(email): add unit tests for validation
📄 许可证
通过贡献,您同意您的贡献将根据MIT许可证获得许可。
🤝 行为准则
- 尊重他人,包容他人
- 注重建设性反馈
- 帮助他人学习和成长
- 遵循黄金法则
❓ 问题?
- 打开一个问题来回答有关代码库的问题
- 首先检查现有文档
- 明确你想要实现的目标
👤 作者
尼萨尔·古纳瓦德纳
欢迎随时联系或关注更新和新项目!
感谢您对Gmail MCP服务器的贡献! 🚀
