这是一个使用IMAP与Gmail集成的Model Context Protocol(MCP)服务器。该服务器允许AI助手与Gmail账户进行交互,提供读取、搜索和管理邮件的功能。
在运行Gmail IMAP MCP服务器之前,请确保您具备以下条件:
克隆仓库:
git clone https://github.com/yourusername/gmail-imap-mcp.git
cd gmail-imap-mcp
创建并激活虚拟环境:
python -m venv .venv
# 在Windows上
.venv\Scripts\activate
# 在Unix/MacOS上
source .venv/bin/activate
安装包:
pip install -e .
client_secret.json在凭据目录中:
mkdir -p ~/.gmail_imap_mcp_credentials
# 将下载的文件移动到 ~/.gmail_imap_mcp_credentials/client_secret.json
Gmail IMAP MCP服务器将OAuth2凭证存储在用户的主目录下的~/.gmail_imap_mcp_credentials/。这种方法具有以下优点:
凭证目录包含:
client_secret.json:来自Google Cloud控制台的OAuth客户端凭据token_{email_address}.json)服务器使用Python的imaplib2库来执行与Gmail的IMAP操作。关键实现细节包括:
imap.gmail.com)email模块解析系统中的邮件ID遵循以下格式:
email://message/{account}_{mailbox}_{id}
其中:
{account}:Gmail账户地址{mailbox}:包含邮件的邮箱/标签{id}:邮件的唯一IMAP ID这种格式允许系统跨不同账户和邮箱唯一标识邮件。
运行Gmail IMAP MCP服务器:
gmail-imap-mcp
authenticate-gmail工具和您的电子邮件地址Gmail IMAP MCP服务器提供了一整套工具用于与Gmail账户交互。以下是所有可用工具的详细列表以及如何使用它们的示例。
认证一个Gmail账户以与MCP服务器一起使用。
参数:
email:要认证的电子邮件地址示例:
{
"name": "authenticate-gmail",
"arguments": {
"email": "your.email@gmail.com"
}
}
使用各种搜索标准在Gmail账户中搜索邮件。
参数:
account:要搜索的电子邮件账户mailbox:要搜索的邮箱(默认:INBOX)query:搜索查询limit:返回的最大邮件数(默认:10)示例 - 搜索来自特定发件人的邮件:
{
"name": "search-emails",
"arguments": {
"account": "your.email@gmail.com",
"mailbox": "INBOX",
"query": "from:sender@example.com",
"limit": 5
}
}
示例 - 搜索具有特定主题的邮件:
{
"name": "search-emails",
"arguments": {
"account": "your.email@gmail.com",
"query": "subject:\"Meeting Invitation\""
}
}
示例 - 搜索邮件正文中有特定文本的邮件:
{
"name": "search-emails",
"arguments": {
"account": "your.email@gmail.com",
"query": "TEXT \"project update\""
}
}
获取Gmail账户中的未读邮件。
参数:
account:要获取邮件的电子邮件账户mailbox:要获取邮件的邮箱(默认:INBOX)limit:返回的最大邮件数(默认:10)示例:
{
"name": "get-unread-emails",
"arguments": {
"account": "your.email@gmail.com",
"limit": 20
}
}
从Gmail账户发送邮件,可选带有附件和HTML内容。
参数:
account:发送邮件的电子邮件账户to:收件人电子邮件地址,多个地址用逗号分隔subject:邮件主题body:纯文本邮件正文cc:抄送收件人(可选)bcc:密送收件人(可选)html_body:邮件正文的HTML版本(可选)attachments:附件对象列表(可选)
path:文件路径filename:自定义文件名(可选)content_type:MIME类型(可选)示例 - 简单邮件:
{
"name": "send-email",
"arguments": {
"account": "your.email@gmail.com",
"to": "recipient@example.com",
"subject": "Hello from Gmail MCP",
"body": "这是一封通过Gmail IMAP MCP服务器发送的测试邮件。"
}
}
示例 - 带有CC、BCC和HTML内容的邮件:
{
"name": "send-email",
"arguments": {
"account": "your.email@gmail.com",
"to": "recipient@example.com",
"subject": "会议议程",
"body": "请查看我们即将举行的会议议程。",
"cc": "manager@example.com",
"bcc": "archive@example.com",
"html_body": "<h1>会议议程</h1><p>请查看我们<b>即将举行的会议</b>的议程。</p>"
}
}
示例 - 带有附件的邮件:
{
"name": "send-email",
"arguments": {
"account": "your.email@gmail.com",
"to": "recipient@example.com",
"subject": "附带文档",
"body": "请查看附带的文档。",
"attachments": [
{
"path": "/path/to/document.pdf",
"filename": "重要文档.pdf",
"content_type": "application/pdf"
}
]
}
}
在Gmail账户中创建新的标签/邮箱。
参数:
account:要创建标签的电子邮件账户label_name:要创建的标签名称示例:
{
"name": "create-label",
"arguments": {
"account": "your.email@gmail.com",
"label_name": "项目X"
}
}
从Gmail账户中删除标签/邮箱。
参数:
account:要删除标签的电子邮件账户label_name:要删除的标签名称示例:
{
"name": "delete-label",
"arguments": {
"account": "your.email@gmail.com",
"label_name": "旧项目"
}
}
列出Gmail账户中的所有标签/邮箱。
参数:
account:要列出标签的电子邮件账户示例:
{
"name": "list-labels",
"arguments": {
"account": "your.email@gmail.com"
}
}
将邮件从一个标签/邮箱移动到另一个。
参数:
account:电子邮件账户email_id:要移动的邮件ID(格式:email://message/{account}_{mailbox}_{id})source_mailbox:源邮箱target_mailbox:目标邮箱示例:
{
"name": "move-email",
"arguments": {
"account": "your.email@gmail.com",
"email_id": "email://message/your.email@gmail.com_INBOX_12345",
"source_mailbox": "INBOX",
"target_mailbox": "项目X"
}
}
从邮件中下载附件。
参数:
account:电子邮件账户email_id:邮件ID(格式:email://message/{account}_{mailbox}_{id})attachment_index:要下载的附件索引(基于0)mailbox:包含邮件的邮箱(默认:INBOX)download_dir:保存附件的目录(默认:“downloads”)示例:
{
"name": "download-attachment",
"arguments": {
"account": "your.email@gmail.com",
"email_id": "email://message/your.email@gmail.com_INBOX_12345",
"attachment_index": 0,
"download_dir": "我的附件"
}
}
将邮件标记为已读。
参数:
account:电子邮件账户email_id:邮件ID(格式:email://message/{account}_{mailbox}_{id})mailbox:包含邮件的邮箱(默认:INBOX)示例:
{
"name": "mark-as-read",
"arguments": {
"account": "your.email@gmail.com",
"email_id": "email://message/your.email@gmail.com_INBOX_12345"
}
}
将邮件标记为未读。
参数:
account:电子邮件账户email_id:邮件ID(格式:email://message/{account}_{mailbox}_{id})mailbox:包含邮件的邮箱(默认:INBOX)示例:
{
"name": "mark-as-unread",
"arguments": {
"account": "your.email@gmail.com",
"email_id": "email://message/your.email@gmail.com_INBOX_12345"
}
}
服务器提供了以下提示供AI助手使用:
创建最近邮件的摘要。
参数:
account:要汇总的电子邮件账户mailbox:要汇总的邮箱(默认:INBOX)count:要汇总的邮件数量(默认:5)示例:
{
"name": "summarize-emails",
"arguments": {
"account": "your.email@gmail.com",
"mailbox": "INBOX",
"count": 10
}
}
Gmail IMAP MCP服务器可以与支持Model Context Protocol(MCP)的AI助手集成。这里是一个典型的流程:
authenticate-gmail工具对用户的Gmail账户进行认证。summarize-emails提示来总结邮件。要将Gmail IMAP MCP服务器与Claude Desktop连接:
启动Gmail IMAP MCP服务器:
python -m gmail_imap_mcp.server
打开Claude Desktop并导航到设置(齿轮图标)
向下滚动到“高级”部分并点击“编辑MCP配置”
添加Gmail IMAP MCP服务器配置:
{
"servers": [
{
"name": "Gmail IMAP",
"url": "http://localhost:8080",
"tools": [
"list-emails",
"get-email",
"search-emails",
"send-email",
"list-mailboxes",
"create-label",
"move-email",
"mark-as-read",
"download-attachment"
]
}
]
}
点击“保存”并重新启动Claude Desktop
您现在可以要求Claude与您的Gmail账户互动,例如:
要将Gmail IMAP MCP服务器与Windsurf IDE连接:
启动Gmail IMAP MCP服务器:
python -m gmail_imap_mcp.server
打开Windsurf IDE并导航到设置
找到“AI流”或“MCP配置”部分
添加Gmail IMAP MCP服务器配置:
{
"servers": [
{
"name": "Gmail IMAP",
"url": "http://localhost:8080",
"tools": [
"list-emails",
"get-email",
"search-emails",
"send-email",
"list-mailboxes",
"create-label",
"move-email",
"mark-as-read",
"download-attachment"
]
}
]
}
保存设置,如有必要,重启Windsurf
您现在可以要求Cascade(Windsurf的AI助手)使用与Claude Desktop相同的命令与您的Gmail账户互动
助手:我将帮助您筛选未读邮件。
用户:是的,请检查我的未读邮件。
助手:[使用get-unread-emails工具]
助手:您有5封未读邮件。最紧急的一封似乎是来自您的老板关于明天到期的季度报告。
用户:将其标记为已读,我会立即查看。
助手:[使用mark-as-read工具]
助手:您想要我找到特定的邮件吗?
用户:是的,找到所有来自john@example.com关于项目预算的邮件。
助手:[使用search-emails工具,查询“from:john@example.com 项目预算”]
助手:我找到了3封来自John关于项目预算的邮件。您想要我为此创建一个标签吗?
用户:是的,创建一个“预算”标签并将它们移过去。
助手:[使用create-label工具,然后为每封邮件使用move-email工具]
助手:您想要我为您起草一封邮件吗?
用户:是的,写一封给市场团队关于我们的活动结果的跟进邮件。
助手:[起草邮件内容]
助手:这是草稿。您想要我发送吗?
用户:是的,但添加Sarah为抄送。
助手:[使用send-email工具,带有草稿内容和抄送]
Gmail对标签名有一些具体要求:
此MCP服务器使用的邮件ID格式为:
email://message/{account}_{mailbox}_{id}
当使用需要邮件ID的工具(如`