邮寄mcp
用于AI代理的通用IMAP+SMTP MCP服务器--v0.2.4
将任何电子邮件帐户连接到任何AI代理(Claude、Gemini、Codex、Copilot、Vibe……)。 意图优先设计:与真实用户工作流程相匹配的高级工具,由干净的IMAP/SMTP核心支持 和一个完整的 三重管理界面 (CLI+HTTP+电报)。
Problem: AI agents have no native email access.
Why: IMAP+SMTP are universal, server-agnostic, no OAuth2 dance required.
How: FastMCP tools layer, pure stdlib SMTP, imapclient for IMAP, bw-env secrets.
Admin: mail-admin CLI + /admin/* HTTP routes + Telegram bot + SSH exec.回购协议 · GitLab
______________________________________________________________________
建筑
mail_mcp/
├── config.yaml # Non-sensitive settings (hosts, ports, env var names)
├── config.py # @lru_cache loader + 3-tier secret resolution + admin env
│
├── admin/
│ ├── service.py # Shared backend: status, credentials CRUD, logs, summaries
│ ├── cli.py # mail-admin — Typer+Rich admin CLI
│ └── telegram.py # Telegram long-poll bot (in-process thread)
│
├── core/
│ ├── models.py # Pydantic: Message, MessageSummary, Folder, Address…
│ ├── imap_client.py # IMAPClient context-manager — search, fetch, flags, move
│ └── smtp_client.py # SMTPClient — send, reply, forward, draft
│
├── tools/
│ ├── guide.py # mail_guide() — agent orientation entry point
│ ├── read.py # check_inbox, daily_digest, search_messages, get_thread…
│ ├── compose.py # send_message, reply_message, forward_message, save_draft
│ └── manage.py # list_folders, mark_messages, move/archive/delete/spam
│
├── server.py # FastMCP root — mounts all sub-MCPs
├── http_app.py # Starlette app: MCP + /health + /admin/* routes
├── daemon.py # PID file lifecycle
└── cli.py # Typer CLI: serve, serve-http, stop, status, inbox, folders秘密解析(3层)
1. Admin env file → /data/mail-admin.env (Docker volume, persistent credential overrides)
2. Process env → fastest (shell injection or MCP host)
3. bw-env login → zsh -l -c 'printf "%s" "${VAR}"' (Bitwarden GLOBAL_ENV_VARS)______________________________________________________________________
运输
| 传输 | URL/命令 | 描述 |
|---|---|---|
| HTTP(家庭实验室) | https://mail.kpihx-labs.com/mcp | 流式HTTP——生产,始终在线 |
| stdio(回退) | mail-mcp serve | 直接进程——本地开发或HTTP关闭时 |
______________________________________________________________________
支持的帐户
| 帐户 | IMAP | SMTP | 服务器 |
|---|---|---|---|
| 综合理工学院(X) | webmail.polytechnique.fr:993 TLS | :587 星星 | Zimbra |
更多帐户:在中添加条目 config.yaml --无需更改代码。
______________________________________________________________________
快速开始
# Install (editable for live dev)
uv tool install --editable .
# Admin CLI
mail-admin status # credential status table
mail-admin logs 20 # last 20 log lines
mail-admin credentials set poly
# live update without restart
mail-admin help # full capability map
# MCP stdio server
mail-mcp serve
# MCP HTTP server (port 8094)
mail-mcp serve-http______________________________________________________________________
管理界面
1.CLI-- mail-admin
mail-admin status [--account ] # Rich table: env var, value (masked), source
mail-admin logs [N] # tail last N lines (default 40)
mail-admin credentials set
mail-admin credentials unset
mail-admin help # full capability map2.HTTP路由
| 路线 | 方法 | 描述 |
|---|---|---|
/health | GET | 就绪探测--每个帐户的身份验证存在 |
/admin/status | GET | 完整状态:pid、传输、Telegram运行时、凭据 |
/admin/help | GET | 完整功能图(CLI/HTTP/Telegram/SSH) |
/admin/logs?lines=40 | GET | 管理日志的尾部 |
/admin/credentials/set | POST | 设置 {account_id, login, password} |
/admin/credentials/unset | POST | 清除凭据 {account_id} |
/mcp | GET/POST | 可流式HTTP MCP传输 |
3.电报机器人
令牌环境: TELEGRAM_MAIL_HOMELAB_TOKEN --身份验证门: TELEGRAM_CHAT_IDS
| 命令 | 参数 | 效果 |
|---|---|---|
/start /help | -- | 完整功能图 |
/status | [account_id] | 凭证状态 |
/health | -- | 快速健康摘要 |
/urls | -- | 传输URL |
/logs | [N] | 最后N行记录 |
/credentials_set | ` | |
| ` | 实时凭证更新 | |
/credentials_unset | `` | 清除凭据 |
/restart | -- | 优雅的服务重启 |
4.SSH执行器
docker compose exec -T mail-mcp mail-admin status
docker compose logs --tail=100 mail-mcp______________________________________________________________________
MCP代理注册
克劳德代码(~/.claude.json)
"mail-mcp": {
"url": "https://mail.kpihx-labs.com/mcp"
},
"mail-mcp--fallback": {
"command": "zsh",
"args": ["-l", "-c", "/home/kpihx/.local/bin/mail-mcp serve"]
}食品法典委员会(~/.codex/config.toml)
[mcp_servers.mail_mcp]
url = "https://mail.kpihx-labs.com/mcp"
[mcp_servers.mail_mcp_fallback]
command = "zsh"
args = ["-l", "-c", "/home/kpihx/.local/bin/mail-mcp serve"]维贝/米斯特拉尔(~/.vibe/config.toml)
[[mcp_servers]]
name = "mail"
transport = "http"
url = "https://mail.kpihx-labs.com/mcp"
[[mcp_servers]]
name = "mail_fallback"
transport = "stdio"
command = "zsh"
args = ["-l", "-c", "/home/kpihx/.local/bin/mail-mcp serve"]双子座(~/.gemini/settings.json)
"mcpServers": {
"mail-mcp": { "url": "https://mail.kpihx-labs.com/mcp" },
"mail-mcp--fallback": {
"command": "zsh",
"args": ["-l", "-c", "/home/kpihx/.local/bin/mail-mcp serve"]
}
}______________________________________________________________________
工具参考
| 工具 | 意图 |
|---|---|
mail_guide | 代理定向——从这里开始 |
check_inbox | 未读计数+最后N个摘要 |
daily_digest | 结构化晨间概览 |
list_messages | 浏览文件夹 |
get_message | 全身UID |
search_messages | 灵活的搜索(查询、发件人、日期、标记) |
find_unread | 未读快捷方式 |
get_thread | 按消息ID显示完整线程 |
send_message | 新电子邮件(+自动复制到 Sent,可选反弹探头 verify_bounce_window_seconds) |
reply_message | 通过UID回复(+自动复制到 Sent,可选反弹探头 verify_bounce_window_seconds) |
forward_message | 通过UID转发(+自动复制到 Sent,可选反弹探头 verify_bounce_window_seconds) |
save_draft | 草稿到草稿文件夹 |
list_folders | 所有IMAP文件夹 |
list_labels | 别名为 list_folders |
create_folder | 创建IMAP文件夹 |
rename_folder | 重命名IMAP文件夹 |
delete_folder | 删除IMAP文件夹 |
mark_messages | 看到/标记/回答标志 |
move_messages | 将UID移动到文件夹 |
archive_messages | 移动到存档 |
trash_messages | 移至垃圾箱 |
delete_messages | 永久删除+删除 |
mark_as_spam | 转到垃圾邮件/垃圾 |
download_attachment | 下载到文件(默认)或以Base64格式摄取(ingest_base64=True) |
set_labels | 别名为 move_messages |
______________________________________________________________________
安全
- 凭据是 从不 存储在
config.yaml--只有环境变量名称。 - 秘密住在Bitwarden(
GLOBAL_ENV_VARS)并通过以下方式注入bw-env/登录shell。 - 管理员凭据覆盖持续存在
/data/mail-admin.env(Docker卷)——从未提交。 - 无OAuth2,无刷新令牌存储——仅通过TLS进行IMAP密码认证。
______________________________________________________________________
部署(Docker/homelab)
看 deploy/ 为了 docker-compose.yml 和 .env.example.
# Required env vars
X_LOGIN=your_imap_username
X_PASS=your_imap_password
TELEGRAM_MAIL_HOMELAB_TOKEN= # optional
TELEGRAM_CHAT_IDS= # optional
MAIL_MCP_ADMIN_ENV_FILE=/data/mail-admin.envGitLab CI自动部署 master 通过以下方式发送给家庭实验室跑步者 docker compose up -d --build.
