IMAP邮件访问协议服务器

一个基于Model Context Protocol (MCP)的服务器,为Claude和其他AI助手提供IMAP邮件访问功能,支持多账户管理、邮件操作和SMTP发送。

  • by chrisallenlane
  • Go
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 chrisallenlane/imap-mcp

使用说明

imap-mcp

A. 模型上下文协议(MCP) 为Claude和其他AI助手提供IMAP电子邮件访问的服务器。

特性

  • 完成MCP实施:通过stdio实现完整的JSON-RPC 2.0
  • 多账户支持:在单个TOML文件中配置多个IMAP帐户
  • 懒惰连接:IMAP连接在首次使用时建立并重复使用
  • TLS支持:每个帐户可配置TLS或明文连接
  • SMTP发送:可选的每个帐户SMTP支持,用于发送、起草和回复
  • 工具系统:用于添加新电子邮件功能的干净界面

可用工具

工具 说明
list_accounts 列出所有已配置的IMAP帐户及其连接状态
list_mailboxes 列出具有特殊用途注释和邮件计数的帐户邮箱
list_messages 列出带分页的邮件信封(每页100个,最新的放在第一位)
get_message 按UID检索完整邮件(邮件头、正文、附件)
get_attachment 通过邮件UID和附件号将电子邮件附件下载到磁盘
search_messages 按发件人、收件人、主题、正文、日期范围和标志搜索邮件
mark_messages 设置或清除邮件的已读/标记状态
move_messages 在邮箱之间移动邮件
copy_messages 在邮箱之间复制邮件
delete_messages 删除邮件(移至垃圾箱或永久删除)
create_mailbox 创建新邮箱(文件夹)
delete_mailbox 删除邮箱(具有特殊用途保护)
send_message 通过SMTP发送电子邮件(需要 smtp_enabled = true)
save_draft 撰写邮件并将其保存到“草稿”文件夹(需要 smtp_enabled = true)
reply_message 回复、全部回复或转发消息(需要 smtp_enabled = true)

项目结构

imap-mcp/
├── cmd/
│   └── imap-mcp/        # Main application entry point
├── internal/
│   ├── config/          # TOML configuration parsing
│   ├── imap/            # IMAP connection manager
│   ├── smtp/            # SMTP sending manager
│   ├── server/          # MCP JSON-RPC server
│   └── tools/           # Tool implementations
├── scripts/             # Helper scripts (fuzz testing)
├── config.example.toml  # Example configuration
├── Makefile             # Build automation
├── CLAUDE.md            # Development guidance for AI assistants
├── SETUP.md             # Setup and integration guide
└── README.md            # This file

快速开始

  1. 克隆和构建:

    git clone https://github.com/chrisallenlane/imap-mcp.git
    cd imap-mcp
    make build
    
  2. 配置:

    cp config.example.toml config.toml
    # Edit config.toml with your IMAP credentials
    
  3. 注册克劳德代码:

    make setup
    

就是这样。MCP工具现在可以在Claude Code中使用。

看 设置.md 用于Claude Desktop集成和手动设置选项。

先决条件

  • 转到1.24或更高版本
  • Make(可选,但推荐)

配置

每 [accounts.<name>] 部分 config.toml 定义IMAP帐户:

[accounts.gmail]
host     = "imap.gmail.com"
port     = 993
username = "user@gmail.com"
password = "app-password"
tls      = true

[accounts.protonmail]
host     = "127.0.0.1"
port     = 1143
username = "user@proton.me"
password = "bridge-password"
tls      = false

IMAP字段(主机、端口、用户名、密码)是必需的。这 tls 字段控制是使用TLS还是明文。

要启用发送,请向帐户添加SMTP字段:

[accounts.gmail]
# ... IMAP fields above ...
smtp_enabled = true
smtp_host    = "smtp.gmail.com"
smtp_port    = 587
smtp_tls     = "starttls"   # "starttls", "implicit", or "none"
# smtp_from = "user@gmail.com"  # defaults to username
# save_sent = false             # save sent messages via IMAP APPEND

当 smtp_enabled = true, smtp_host 和 smtp_port 是必需的。 smtp_tls 默认为 "starttls" 如果省略;有效值为 "starttls", "implicit",或 "none".SMTP工具(send_message, save_draft, reply_message)仅当至少有一个帐户已注册时才注册 smtp_enabled = true.

config.toml 被忽略,因为它包含凭据。看 config.example.toml 举个完整的例子。

跑步

MCP服务器通过stdin/stdout进行通信:

./dist/imap-mcp --config /path/to/config.toml

这 --config 旗帜是必需的。使用 --version 打印版本并退出。

经过测试的供应商

此项目已针对以下提供商进行了测试:

其他标准的IMAP/SMTP提供程序应该可以工作,但尚未经过验证。

发展

构建

make build

测试

# Run all tests
make test

# Run tests with coverage
make coverage

代码质量

# Format code
make fmt

# Lint code
make lint

# Vet code
make vet

# Run all checks
make check

项目惯例

  • 格式化:80根柱子用golines+gofumpt包裹
  • 测试:标准库 testing 包裹
  • 错误处理:始终用上下文包装错误

建筑

MCP协议流

Claude -> stdin -> JSON-RPC Request -> Tool Execution -> JSON-RPC Response -> stdout -> Claude

关键组件

  • 服务器 (internal/server):处理JSON-RPC协议
  • 配置 (internal/config):解析TOML配置
  • IMAP管理器 (internal/imap):管理持久IMAP连接
  • SMTP管理器 (internal/smtp):管理SMTP发送(每个操作连接)
  • 工具 (internal/tools):实施MCP工具

资源

有关详细的开发指导,请参阅 CLAUDE.md.