该项目实现了一个模型上下文协议(MCP)服务器,允许通过IMAP和SMTP与Gmail账户进行交互。它提供了搜索邮件、检索内容、管理标签(创建、删除、重命名、应用、移除)以及发送/转发邮件的工具。
X-GM-RAW扩展进行高效的收件箱搜索(例如,通过category:primary过滤)。.
├── .gitignore # 指定Git应忽略的有意未跟踪的文件
├── .python-version # 指定Python版本(由pyenv使用)
├── LICENSE # 项目许可证文件
├── pyproject.toml # Python项目配置(依赖项、构建系统)
├── README.md # 此文件
├── task_list.md # 跟踪开发进度
├── uv.lock # uv包管理器的锁文件
├── src/
│ └── email_client/
│ ├── __init__.py
│ ├── config.py # 处理从环境变量(.env)加载配置
│ ├── handlers.py # 实现处理MCP工具调用的逻辑
│ ├── imap_client.py # 包含与IMAP服务器交互的函数
│ ├── server.py # 主MCP服务器脚本,使用@modelcontextprotocol/sdk
│ ├── smtp_client.py # 包含与SMTP服务器交互的函数
│ ├── tool_definitions.py # 定义可用的MCP工具及其模式
│ └── utils.py # 工具函数(如邮件解析、日期格式化)
└── ... (其他可能的文件,如测试脚本、辅助脚本)
克隆仓库(如果适用):
git clone https://github.com/david-strejc/gmail-mcp-server.git
cd gmail-mcp-server
安装依赖项: 该项目使用uv进行包管理。
# 确保已安装uv(例如,pip install uv)
uv venv # 创建虚拟环境(.venv)
uv sync # 根据pyproject.toml和uv.lock安装依赖项
source .venv/bin/activate # 激活虚拟环境
(如果不使用uv,可以创建一个虚拟环境,并使用pip install -r requirements.txt安装,如果生成了requirements.txt文件的话)。
配置环境变量: 在项目根目录下创建一个.env文件,并添加您的Gmail凭据和服务器设置:
# .env 文件
GMAIL_EMAIL=your_email@gmail.com
GMAIL_PASSWORD=your_app_password # 如果启用了两步验证,请使用应用密码
GMAIL_IMAP_SERVER=imap.gmail.com
GMAIL_SMTP_SERVER=smtp.gmail.com
GMAIL_SMTP_PORT=587 # 或者使用SSL的465
激活虚拟环境并运行服务器脚本:
source .venv/bin/activate
python src/email_client/server.py
服务器将启动并监听标准输入/输出的MCP请求。
在您的MCP客户端设置文件(例如cline_mcp_settings.json或claude_desktop_config.json)中添加服务器配置。
示例cline_mcp_settings.json条目:
{
"mcpServers": {
"gmail": {
"command": "/path/to/your/project/gmail-mcp-server/.venv/bin/python",
"args": ["/path/to/your/project/gmail-mcp-server/src/email_client/server.py"],
"env": {}, // 环境变量由脚本从.env加载
"enabled": true, // 设置为true以启用
"autoApprove": [] // 如有需要,配置自动批准
}
// ... 其他服务器
}
}
/path/to/your/project/gmail-mcp-server替换为此项目的实际绝对路径。command指向项目虚拟环境中的Python可执行文件(.venv/bin/python)。配置并启用后,客户端应连接到服务器,定义的工具将变得可用。
search-emails: 搜索邮件。get-email-content: 获取完整的邮件详情。count-daily-emails: 计算每天的邮件数量。list-labels: 列出所有标签/文件夹。create-label: 创建新的标签。rename-label: 重命名现有的标签。delete-label: 删除标签。apply-label: 将标签应用于一封邮件。remove-label: 从一封邮件中移除标签。apply-label-batch: 将标签应用于多封邮件。remove-label-batch: 从多封邮件中移除标签。move-email: 将一封邮件移动到一个标签。move-email-batch: 将多封邮件移动到一个标签。send-email: 发送一封新邮件。forward-email: 转发一封现有邮件。参考src/email_client/tool_definitions.py了解每个工具的详细输入模式。