使用说明
Gmail MCP服务器(IMAP/SMTP)
一种模型上下文协议(MCP)服务器,为Claude提供了使用IMAP(用于读取)和SMTP(用于发送)协议与Gmail交互的工具。不需要谷歌云控制台或OAuth,只需要Gmail应用程序密码。功能包括阅读电子邮件、发送电子邮件、回复帖子、搜索和定时电子邮件处理。
特性
- 📧 电子邮件管理:使用IMAP/SMTP列出、阅读、发送、回复和搜索电子邮件
- 🔍 IMAP搜索:使用IMAP搜索条件进行高级电子邮件搜索
- ⏰ 计划任务:在指定时间自动获取和处理未读电子邮件(默认:下午3点和7点)
- 🔐 简单身份验证:使用Gmail应用程序密码(不需要OAuth2设置)
- 🛡️ 错误处理:具有重试逻辑的全面错误处理
- 📊 双格式:返回人类可读的文本摘要和结构化JSON数据
- 🔒 安全:对所有连接使用TLS/SSL
先决条件
- Node.js 18+和npm
- 启用两步验证的Gmail帐户
- Gmail应用程序密码(请参阅下面的设置说明)
安装
-
克隆或导航到项目目录:
cd gmail-mcp-server -
安装依赖项:
npm install -
构建项目:
npm run build
Gmail应用程序密码设置
步骤1:启用两步验证
- 首选 Google帐户安全
- 在“登录谷歌”下,单击“两步验证”
- 按照提示启用两步验证
步骤2:生成应用程序密码
- 首选 应用程序密码
- 或者导航:谷歌帐户>安全>两步验证>应用程序密码
- 选择“邮件”作为应用程序
- 选择“其他(自定义名称)”作为设备
- 输入“MCP服务器”作为名称
- 点击“生成”
- 复制16个字符的密码 (你只会看到一次!)
应用程序密码如下: abcd efgh ijkl mnop (空格是可选的)
配置
- 创建一个
.env文件 在项目根目录中:
# Gmail IMAP/SMTP Credentials
GMAIL_USER=your.email@gmail.com
GMAIL_APP_PASSWORD=abcdefghijklmnop
# Scheduling Configuration
SCHEDULE_ENABLED=true
SCHEDULE_TIMES=15:00,19:00
TIMEZONE=Europe/Berlin
- 填写您的凭据:
GMAIL_USER:您的Gmail电子邮件地址GMAIL_APP_PASSWORD:您生成的16个字符的应用程序密码SCHEDULE_TIMES:HH:mm格式的逗号分隔时间(24小时)TIMEZONE:您的时区(例如,“美洲/纽约”、“欧洲/伦敦”、“亚洲/东京”)
用法
发展模式
在热重载的开发模式下运行:
npm run dev
生产模式
构建并运行:
npm run build
npm start
类型检查
在不构建的情况下检查TypeScript类型:
npm run type-check
MCP工具
服务器为Claude提供了以下工具:
只读工具
gmail_list_emails:使用可选过滤器(未读、发件人、日期范围等)列出最近的电子邮件gmail_read_email:通过IMAP UID读取完整的电子邮件内容gmail_search_emails:使用IMAP搜索条件搜索电子邮件
写入工具
gmail_send_email:发送一封包含可选CC、BCC、HTML正文和附件的新电子邮件gmail_reply_email:回复特定的电子邮件帖子gmail_mark_read:将一封或多封电子邮件标记为已读
IMAP搜索条件
这 gmail_search_emails 和 gmail_list_emails 工具支持IMAP搜索条件:
通用标准
["UNSEEN"]-未读电子邮件["SEEN"]-阅读电子邮件["FROM", "example@gmail.com"]-来自特定发件人的电子邮件["TO", "example@gmail.com"]-发送给特定收件人的电子邮件["SUBJECT", "meeting"]-主题为“会议”的电子邮件["SINCE", "01-Jan-2024"]-自某个日期(DD-MMM-YYYY)以来的电子邮件["BEFORE", "31-Dec-2024"]-约会前的电子邮件["ALL"]-所有电子邮件
组合标准
您可以组合多个条件:
["UNSEEN", "FROM", "boss@company.com"]-老板的未读电子邮件["SINCE", "01-Jan-2024", "SUBJECT", "urgent"]-自1月1日以来主题为“紧急”的电子邮件
日期格式
日期应在 DD-MMM-YYYY 格式(例如,“2024年1月1日”、“2023年12月15日”)。
计划任务
服务器可以在指定时间自动获取和处理未读电子邮件。默认情况下,它每天在下午3点(15:00)和晚上7点(19:00)运行。
配置
产生 .env:
SCHEDULE_ENABLED=true
SCHEDULE_TIMES=15:00,19:00
TIMEZONE=Europe/Berlin
定制
您可以在 .env 文件。时间应该在 HH:mm 格式(24小时):
SCHEDULE_TIMES=09:00,12:00,18:00,21:00
要禁用日程安排,请执行以下操作:
SCHEDULE_ENABLED=false
计划任务行为
当计划任务运行时,它:
- 使用IMAP获取过去24小时内未读的电子邮件
- 将摘要记录到控制台
- 输出结构化JSON数据以进行潜在的自动处理
您可以在中扩展调度程序 src/scheduler.ts 添加自定义自动处理规则(例如,自动分类、自动回复、自动转发)。
错误处理
服务器包括全面的错误处理:
- 身份验证错误:清除带有设置说明的消息
- 连接错误:使用指数回退自动重试
- 验证错误:详细的字段级错误消息
- 未找到错误:特定资源标识
IMAP/SMTP配置
服务器使用以下Gmail服务器设置:
- 互联网邮件访问协议:
imap.gmail.com:993(SSL/TLS) - SMTP:
smtp.gmail.com:587(TLS)
这些是自动配置的,应该适用于任何启用了两步验证和应用程序密码的Gmail帐户。
故障排除
“IMAP连接错误”或“SMTP验证失败”
- 验证您的
GMAIL_USER和GMAIL_APP_PASSWORD在.env - 确保您使用的是应用程序密码(而不是常规Gmail密码)
- 检查您的Google帐户是否启用了两步验证
- 验证是否为“邮件”生成了应用程序密码
“身份验证失败”
- 确保您使用的是16个字符的应用程序密码(而不是常规密码)
- 如果需要,重新生成应用程序密码
- 确保没有多余的空间
.env文件
“未找到电子邮件”错误
- 验证指定邮箱中是否存在UID
- 检查您是否使用了正确的邮箱名称(默认为“收件箱”)
- UID是特定于邮箱的,如果电子邮件被移动,UID可能会发生变化
计划任务未运行
- 验证
SCHEDULE_ENABLED=true在.env - 检查
SCHEDULE_TIMES格式正确(HH:mm) - 确保服务器持续运行(而不仅仅是单个请求)
- 验证
TIMEZONE设置正确(使用IANA时区名称)
连接超时
- 检查您的互联网连接
- 验证Gmail IMAP/SMTP访问未被防火墙阻止
- 某些网络可能会阻止IMAP/SMTP端口-考虑使用VPN或其他网络
项目结构
gmail-mcp-server/
├── src/
│ ├── index.ts # MCP server initialization
│ ├── email/
│ │ ├── imap-client.ts # IMAP connection for reading
│ │ ├── smtp-client.ts # SMTP connection for sending
│ │ └── types.ts # TypeScript interfaces
│ ├── tools/
│ │ ├── list-emails.ts # List emails tool
│ │ ├── read-email.ts # Read email tool
│ │ ├── send-email.ts # Send email tool
│ │ ├── reply-email.ts # Reply tool
│ │ ├── search-emails.ts # Search tool
│ │ └── mark-read.ts # Mark as read tool
│ ├── scheduler.ts # Cron job configuration
│ └── utils/
│ ├── errors.ts # Error handling
│ └── formatters.ts # Response formatting
├── package.json
├── tsconfig.json
├── .env.example
└── README.md
与Gmail API版本的差异
此IMAP/SMTP版本:
- ✅ 不需要OAuth2设置 -只需使用应用程序密码
- ✅ 无谷歌云控制台 -无需创建项目
- ✅ 更简单的身份验证 -仅限用户名和应用程序密码
- ✅ 直接协议访问 -使用标准电子邮件协议
- ⚠️ 无草稿管理 -IMAP/SMTP不支持草稿
- ⚠️ 不同的搜索语法 -使用IMAP搜索条件而不是Gmail搜索
安全说明
- 永不承诺
.env文件 到版本控制(它在.gitignore) - 确保您的应用密码安全 -它允许访问您的Gmail帐户
- 使用特定于环境的凭据 用于开发、分期和生产
- 重新生成应用程序密码 如果他们曾经妥协
- 应用程序密码是特定于帐户的 -每个用户都需要自己的
许可证
麻省理工学院
贡献
欢迎投稿!请随时提交拉取请求。
支持
对于问题、疑问或功能请求,请在存储库上打开问题。
