名称: gmail-automation 描述: “通过Rube MCP(Composio)自动化Gmail任务:发送/回复、搜索、标签、草稿、附件。始终先搜索工具以获取当前模式。” 要求: mcp: [rube]
通过Rube MCP实现Gmail自动化
通过Composio的Gmail工具包,经由Rube MCP自动化Gmail操作。
先决条件
- Rube MCP必须已连接(RUBE_SEARCH_TOOLS可用)
- 通过
RUBE_MANAGE_CONNECTIONS与工具包gmail建立活跃的Gmail连接 - 始终先调用
RUBE_SEARCH_TOOLS以获取当前工具模式
设置
获取Rube MCP:在客户端配置中添加https://rube.app/mcp作为MCP服务器。无需API密钥——只需添加端点即可工作。
- 通过确认
RUBE_SEARCH_TOOLS响应,验证Rube MCP可用 - 使用工具包
gmail调用RUBE_MANAGE_CONNECTIONS - 如果连接不活跃,按照返回的认证链接完成Google OAuth
- 在运行任何工作流前,确认连接状态显示为活跃
核心工作流
1. 发送邮件
使用时机:用户希望撰写并发送新邮件
工具序列:
GMAIL_SEARCH_PEOPLE- 将联系人名称解析为电子邮件地址 [可选]GMAIL_SEND_EMAIL- 发送邮件 [必需]
关键参数:
recipient_email:电子邮件地址或’self’表示自己subject:邮件主题行body:邮件内容(纯文本或HTML)is_html:如果正文包含HTML标记,必须设为truecc/bcc:电子邮件地址数组attachment:带有之前下载的{s3key, mimetype, name}的对象
陷阱:
- 至少需要
recipient_email、cc或bcc中的一个 - 至少需要
subject或body中的一个 - 附件
mimetype必须包含’/‘(例如,‘application/pdf’,而非’pdf’) - 总消息大小限制约25MB(base64编码后)
- 仅对Gmail“以…发送邮件”设置中已验证的别名使用
from_email
2. 回复线程
使用时机:用户希望回复现有邮件对话
工具序列:
GMAIL_FETCH_EMAILS- 查找要回复的邮件/线程 [先决条件]GMAIL_REPLY_TO_THREAD- 在线程内发送回复 [必需]
关键参数:
thread_id:来自FETCH_EMAILS的十六进制字符串(例如,‘169eefc8138e68ca’)message_body:回复内容recipient_email:回复收件人is_html:设为true用于HTML内容
陷阱:
thread_id必须是十六进制字符串;像’msg-f:'这样的前缀会自动去除- 不支持旧版Gmail网页UI ID(例如,‘FMfcgz…’)
- 主题从原始线程继承;设置主题会创建新线程
- 不要包含主题参数以保持在线程内
3. 搜索和过滤邮件
使用时机:用户希望通过发件人、主题、日期、标签等查找特定邮件
工具序列:
GMAIL_FETCH_EMAILS- 使用Gmail查询语法搜索 [必需]GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID- 获取选定结果的完整消息详情 [可选]
关键参数:
query:Gmail搜索语法(from:, to:, subject:, is:unread, has:attachment, after:YYYY/MM/DD, before:YYYY/MM/DD)max_results:每页1-500条消息label_ids:系统ID如’INBOX’、‘UNREAD’include_payload:设为true以获取完整消息内容ids_only:设为true仅获取消息IDpage_token:用于分页(来自nextPageToken)
陷阱:
- 每页最多返回约500条;通过
page_token跟随nextPageToken直到不存在 resultSizeEstimate是近似值,非精确计数- 使用’is:'表示状态(is:unread, is:snoozed, is:starred)
- 仅对用户创建的标签使用’label:’
- 常见错误:‘label:snoozed’是错误的——应使用’is:snoozed’
include_payload=true在广泛搜索时会产生巨大响应;默认使用元数据- 自定义标签需要标签ID(例如,‘Label_123’),而非标签名称
4. 管理标签
使用时机:用户希望创建、修改或组织标签
工具序列:
GMAIL_LIST_LABELS- 列出所有标签以查找ID和检测冲突 [必需]GMAIL_CREATE_LABEL- 创建新标签 [可选]GMAIL_PATCH_LABEL- 重命名或更改标签颜色/可见性 [可选]GMAIL_DELETE_LABEL- 删除用户创建的标签(不可逆) [可选]
关键参数:
label_name:最多225字符,无逗号,使用’/'表示嵌套(例如,‘Work/Projects’)background_color/text_color:来自Gmail预定义调色板的十六进制值id:用于PATCH/DELETE操作的标签ID
陷阱:
- 如果名称为空、重复或保留(INBOX、SPAM、CATEGORY_*),会返回400/409错误
- 颜色规范必须使用Gmail预定义的102种十六进制值调色板
- DELETE是永久的,并从所有消息中移除标签
- 无法删除系统标签(INBOX、SENT、DRAFT等)
5. 在消息上应用/移除标签
使用时机:用户希望标记、归档或将邮件标记为已读/未读
工具序列:
GMAIL_LIST_LABELS- 获取自定义标签的ID [先决条件]GMAIL_FETCH_EMAILS- 查找目标消息 [先决条件]GMAIL_BATCH_MODIFY_MESSAGES- 批量添加/移除标签(最多1000条消息) [必需]GMAIL_ADD_LABEL_TO_EMAIL- 单条消息标签更改 [备用]
关键参数:
messageIds:消息ID数组(最多1000)addLabelIds:要添加的标签ID数组removeLabelIds:要移除的标签ID数组message_id:用于单次操作的15-16字符十六进制字符串
陷阱:
- BATCH调用最多1000个messageIds;较大集合需分块处理
- 使用’CATEGORY_UPDATES’而非’UPDATES’;类别标签需要完整前缀
- SENT、DRAFT、CHAT是固定的——无法添加/移除
- 标记为已读:移除’UNREAD’。归档:移除’INBOX’
message_id必须是15-16字符十六进制字符串,非UUID或网页UI ID
6. 处理草稿和附件
使用时机:用户希望创建、编辑或发送邮件草稿,可能带有附件
工具序列:
GMAIL_CREATE_EMAIL_DRAFT- 创建新草稿 [必需]GMAIL_UPDATE_DRAFT- 编辑草稿内容 [可选]GMAIL_LIST_DRAFTS- 列出现有草稿 [可选]GMAIL_SEND_DRAFT- 发送草稿(需要明确的用户批准) [可选]GMAIL_GET_ATTACHMENT- 从现有消息下载附件 [可选]
关键参数:
recipient_email:草稿收件人subject:草稿主题(对于回复草稿省略以保持在线程内)body:草稿内容is_html:设为true用于HTML内容attachment:带有{s3key, mimetype, name}的对象thread_id:用于回复草稿(留空主题以保持在线程内)
陷阱:
- 响应包括
data.id(draft_id)和data.message.id;对草稿操作使用data.id - 在线程回复草稿上设置主题会创建新线程
- 附件上限约25MB;base64开销可能使接近限制的文件超出
- UPDATE_DRAFT替换整个内容,非补丁;包括所有要保留的字段
- 批量创建草稿时可能返回HTTP 429;使用指数退避
常见模式
ID解析
标签名称 → 标签ID:
1. 调用GMAIL_LIST_LABELS
2. 在响应中按名称查找标签
3. 提取id字段(例如,'Label_123')
联系人名称 → 电子邮件:
1. 使用query=contact_name调用GMAIL_SEARCH_PEOPLE
2. 从响应中提取emailAddresses
搜索中的线程ID:
1. 调用GMAIL_FETCH_EMAILS或GMAIL_LIST_THREADS
2. 提取threadId(15-16字符十六进制字符串)
分页
- 设置
max_results每页最多500 - 检查响应中的
nextPageToken - 在下一次请求中将令牌作为
page_token传递 - 继续直到
nextPageToken不存在或为空字符串 resultSizeEstimate是近似值,非精确
Gmail查询语法
运算符:
from:sender@example.com- 来自发件人的邮件to:recipient@example.com- 发送给收件人的邮件subject:"exact phrase"- 主题包含确切短语is:unread- 未读消息is:starred- 星标消息is:snoozed- 已休眠消息has:attachment- 有附件after:2024/01/01- 在日期之后(YYYY/MM/DD)before:2024/12/31- 在日期之前label:custom_label- 用户创建的标签(使用标签ID)in:sent- 在已发送文件夹中category:primary- 主要类别
组合器:
AND- 两个条件(默认)OR- 任一条件NOT- 排除条件()- 分组条件
示例:
from:boss@company.com is:unread- 来自老板的未读邮件subject:invoice has:attachment after:2024/01/01- 今年有附件的发票(from:alice OR from:bob) is:starred- 来自Alice或Bob的星标邮件
已知陷阱
ID格式:
- 自定义标签操作需要标签ID(例如,‘Label_123’),而非显示名称
- 始终先调用LIST_LABELS以将名称解析为ID
- 消息ID是15-16字符十六进制字符串
- 不要使用UUID、网页UI ID或’thread-f:'前缀
查询语法:
- 对状态使用’is:'(unread、snoozed、starred)
- 仅对用户创建的标签使用’label:’
- 系统标签使用’is:‘或’in:’(例如,‘is:sent’、‘in:inbox’)
速率限制:
- BATCH_MODIFY_MESSAGES每次调用最多1000条消息
- 大量使用会触发403/429速率限制
- 对批量操作实施指数退避
响应解析:
- 响应数据可能嵌套在
data_preview或data.messages下 - 使用备用方案防御性解析
- 时间戳
messageTimestamp使用带’Z’后缀的RFC3339 - 如果需要解析,标准化为’+00:00’
附件:
- 来自先前下载的附件
s3key可能过期 - 检索后及时使用
- Mimetype必须包含’/'分隔符
快速参考
| 任务 | 工具Slug | 关键参数 |
|---|---|---|
| 发送邮件 | GMAIL_SEND_EMAIL | recipient_email, subject, body, is_html |
| 回复线程 | GMAIL_REPLY_TO_THREAD | thread_id, message_body, recipient_email |
| 搜索邮件 | GMAIL_FETCH_EMAILS | query, max_results, label_ids, page_token |
| 获取消息详情 | GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID | message_id |
| 列出标签 | GMAIL_LIST_LABELS | (无) |
| 创建标签 | GMAIL_CREATE_LABEL | label_name, background_color, text_color |
| 批量修改标签 | GMAIL_BATCH_MODIFY_MESSAGES | messageIds, addLabelIds, removeLabelIds |
| 创建草稿 | GMAIL_CREATE_EMAIL_DRAFT | recipient_email, subject, body, thread_id |
| 发送草稿 | GMAIL_SEND_DRAFT | draft_id |
| 获取附件 | GMAIL_GET_ATTACHMENT | message_id, attachment_id |
| 搜索联系人 | GMAIL_SEARCH_PEOPLE | query |
| 获取个人资料 | GMAIL_GET_PROFILE | (无) |