用途:从 Gmail 邮件中批量提取结构化数据,全程直接调用 Gmail REST API,仅依赖 Python 标准库,并可在写入 git 仓库前做合规扫描。
主要能力:
- 令牌刷新:读取 ~/.gmail-mcp/oauth-env.json 的客户端凭据与 ~/.gmail-{account}/credentials.json 的已保存令牌,向 https://oauth2.googleapis.com/token 换取新 access_token 并回写文件。
- 搜索与获取:用 gmail_get 调用 users/me/messages?q=...(支持 Gmail 查询语法、maxResults=500),列表用 format=metadata 只取 From/Subject/Date 头。
- 正文提取:extract_text_body 递归遍历 MIME payload,解码 base64.urlsafe_b64decode 后的 text/plain。
- 附件:find_attachments 递归收集 filename、mimeType、attachmentId、size;download_attachment 按 ID 下载原始字节。
- 主题行结构化:extract_subject_data 用正则提取 CAP、价格($800K/$3.2M/$500,000)、面积 SF、租期年数、VPD、州缩写,并按管道符拆分主副信息。
- 线索草稿:create_threaded_draft 用 MIMEMultipart 设置原 Subject、In-Reply-To、References,创建与现有会话同一 thread 的草稿。
- 合规扫描:legal_scan 依据 .legal-deny-list.yaml,在 git add 前检查 client_references 中的禁用模式。
必要用法:先配置 OAuth(凭据路径见上),再 refresh_token(账户) 取令牌,随后搜索、提取、扫描、保存到最后一步才提交。命令与代码保持原样。
限制:Gmail API 约 250 请求/秒/用户,需分批并翻页(pageToken);format=full 较慢,仅取正文/附件时用;token 1 小时过期,刷新后必须更新 credentials.json;OAuth 密钥不得硬编码;主题行解析仅为启发式,许多邮件不遵循模式;Gmail 的 thread ID 与 Message-ID 不同,两者都需用于线索;附件 ID 每条消息独立,不能跨消息复用;合规扫描必须在 git add 之前完成,一旦提交历史即含该数据。