IMAP 迷你 MCP
一个轻量级的MCP(模型上下文协议)服务器,用于读取IMAP电子邮件并创建草稿回复。适用于任何标准IMAP服务器(Gmail、Outlook、Fastmail等)和本地网桥,如 ProtonMail桥.
代理人可以阅读、搜索、移动、标记和组织电子邮件,并撰写草稿,但不能发送或删除电子邮件。
看 更改日志.md 最近添加的功能。
工作流建议
我强烈建议使用语音转文本工具(例如。 SuperWhisper 在Mac或 Whisperlow 在Windows上)并将您的AI桌面应用程序(Claude、Codex等)连接到此MCP服务器。这样,您就可以使用语音与电子邮件收件箱进行对话,这将大大加快您的工作流程。
如何使用
代理配置
添加到MCP客户端配置中(例如。 claude_desktop_config.json):
{
"mcpServers": {
"imap-mini-mcp": {
"command": "node",
"args": ["/path/to/imap-mini-mcp/dist/index.js"],
"env": {
"IMAP_HOST": "imap.example.com",
"IMAP_USER": "you@example.com",
"IMAP_PASS": "your-password"
}
}
}
}这 args 路径必须指向已建 dist/index.js.将任何可选变量添加到 env 根据需要阻塞。
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
IMAP_HOST | yes | -- | IMAP服务器主机名(例如。 imap.gmail.com) |
IMAP_USER | 是 | -- | 电子邮件地址或用户名 |
IMAP_PASS | 是 | -- | 密码或特定于应用程序的密码 |
IMAP_PORT | 没有 | 993 | IMAP服务器端口 |
IMAP_SECURE | 没有 | true | 使用TLS进行连接 |
IMAP_STARTTLS | 没有 | true | 通过STARTTLS升级到TLS(当 IMAP_SECURE=false) |
IMAP_TLS_REJECT_UNAUTHORIZED | 没有 | true | 拒绝自签名TLS证书 |
对于大多数提供商(Gmail、Outlook、Fastmail),默认设置是有效的——只需设置主机、用户和密码。
对于 ProtonMail桥 --以下五个设置都是必需的(网桥在没有TLS的本地主机上侦听,使用自签名证书,不支持STARTTLS):
IMAP_HOST=127.0.0.1
IMAP_PORT=1143
IMAP_SECURE=false
IMAP_STARTTLS=false
IMAP_TLS_REJECT_UNAUTHORIZED=false或者作为MCP客户端配置:
{
"mcpServers": {
"imap-mini-mcp": {
"command": "node",
"args": ["/path/to/imap-mini-mcp/dist/index.js"],
"env": {
"IMAP_HOST": "127.0.0.1",
"IMAP_PORT": "1143",
"IMAP_SECURE": "false",
"IMAP_STARTTLS": "false",
"IMAP_TLS_REJECT_UNAUTHORIZED": "false",
"IMAP_USER": "you@proton.me",
"IMAP_PASS": "your-bridge-password"
}
}
}
}工具
每封电子邮件都由一个复合标识 ID (YYYY-MM-DDTHH:mm:ss.)这在文件夹移动中是全局唯一且稳定的。使用 id 返回由 find_emails 获取内容、下载附件、移动电子邮件或创建回复草稿。操作工具接受可选 mailbox 提示更快的查找;如果省略,则搜索所有文件夹。
find_emails
搜索和过滤电子邮件。所有参数都是可选的——不带参数的调用将返回来自INBOX的所有电子邮件,并将最新的电子邮件排在第一位。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
after | string | -- | 仅限此时间之后的电子邮件。相对("30m", "2h", "7d")或ISO日期("2026-02-20") |
before | string | -- | 仅限此时间之前的电子邮件。格式与 after |
from | string | -- | 在发件人地址上进行子字符串匹配(例如。 "alice@example.com", "@stripe.com") |
subject | string | -- | 主题行上的子字符串匹配 |
unread_only | 布尔值 | false | 仅返回未读电子邮件 |
has_attachment | 布尔值 | false | 仅返回带有附件的电子邮件 |
folder | 字符串 | "INBOX" | 要搜索的文件夹 |
limit | number | -- | 最大结果数(最新的第一个) |
示例:
| 用例 | 参数 |
|---|---|
| 过去24小时 | {after: "24h"} |
| 最近7天,最多10天 | {after: "7d", limit: 10} |
| 未读电子邮件 | {unread_only: true} |
| 来自域名 | {from: "@stripe.com"} |
| 附附件,上个月 | {after: "30d", has_attachment: true} |
| 特定发件人,位于“已发送”文件夹中 | {from: "alice@example.com", folder: "Sent"} |
其他工具
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_starred_emails | 所有文件夹中的带星号电子邮件 | -- |
fetch_email_content | 按id列出的完整电子邮件内容 | id, mailbox? |
fetch_email_attachment | 下载附件 | id, attachment_id, mailbox? |
list_folders | 列出所有文件夹 | -- |
create_folder | 创建新文件夹 | path |
move_email | 将电子邮件移动到另一个文件夹 | id, destination_folder, source_folder? |
bulk_move_by_sender_email | 移动发件人的所有电子邮件 | sender, source_folder, destination_folder |
bulk_move_by_sender_domain | 从域中移动所有电子邮件 | domain, source_folder, destination_folder |
star_email | 发送电子邮件 | id, mailbox? |
unstar_email | 取消标记电子邮件 | id, mailbox? |
mark_read | 将电子邮件标记为已读 | id, mailbox? |
mark_unread | 将电子邮件标记为未读 | id, mailbox? |
create_draft | 创建新草稿 | to, subject, body, cc?, bcc?, in_reply_to? |
draft_reply | 从现有电子邮件创建回复草稿 | id, body, reply_all?, mailbox? |
update_draft | 替换现有草稿(仅限草稿文件夹) | id, to, subject, body, cc?, bcc?, in_reply_to? |
故障排除
“IMAP连接意外关闭”或“服务器已断开连接”
这几乎总是意味着服务器由于TLS/STARTTLS不匹配而拒绝了连接。验证这些环境变量是否在MCP客户端配置中正确设置:
| 变量 | 检查 |
|---|---|
IMAP_HOST | 正确的主机名或IP |
IMAP_PORT | 匹配您的服务器(TLS为993,普通为143/1143) |
IMAP_SECURE | true 对于端口993, false 用于普通连接 |
IMAP_STARTTLS | false 如果您的服务器不支持STARTTLS |
IMAP_TLS_REJECT_UNAUTHORIZED | false 如果您的服务器使用自签名证书 |
本地IMAP网桥(例如ProtonMail网桥)通常需要 IMAP_SECURE=false, IMAP_STARTTLS=false,以及 IMAP_TLS_REJECT_UNAUTHORIZED=false。请参阅中的ProtonMail Bridge配置示例 环境变量 上面的部分。
“IMAP身份验证失败”
检查一下 IMAP_USER 和 IMAP_PASS 是正确的。一些提供商(如Gmail)要求特定于应用程序的密码,而不是您的帐户密码。
“无法访问IMAP服务器--连接被拒绝”
IMAP服务器未在配置的主机和端口上运行或未侦听。对于本地网桥,请确保网桥应用程序正在运行。
发展
构建并运行
npm install
npm run build地方发展与 .env
要直接运行服务器(在MCP客户端之外),请复制 .env.example 到 .env 并填写您的凭据,然后:
npm start当通过MCP客户端使用时,凭据通过客户端配置提供 env 取而代之的是块。
测试
测试使用 请柬 并模拟IMAP层——不需要真正的服务器连接:
npm test # run once
npm run test:watch # watch mode
npm run lint # type-check only