关于 agenticmail
AgenticMail MCP 服务为 MCP 兼容的 AI 客户端提供邮件与短信能力,包括发送、回复、转发邮件,接收验证码等。它面向需要让 AI Agent 处理真实邮箱和短信的用户与多 Agent 系统,需要运行 AgenticMail API 服务。
主要功能
- 01收发邮件与短信
- 02读取收件箱并接收验证码
- 03管理联系人与定时邮件
- 04通过 wait_for_email 过滤等待指定回复
- 05多 Agent 任务分派与线程记忆
- 06默认 stdio 传输,可选 HTTP 传输并启用鉴权
适用场景
- 01Agent 接收并读取网站注册的验证码
- 02让 Agent 自动回复或转发指定邮件
- 03在多个 Agent 之间通过邮件协调任务
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @agenticmail/mcpAGENTICMAIL_API_KEY密钥Per-agent API key issued when you create the agent. Scopes every tool call to that agent's mailbox and outbound. Either AGENTICMAIL_API_KEY or AGENTICMAIL_MASTER_KEY must be set.AGENTICMAIL_MASTER_KEY密钥Master key for admin operations (creating agents, listing all accounts, deleting agents). Set this when the MCP client needs admin tools; otherwise prefer the per-agent AGENTICMAIL_API_KEY.AGENTICMAIL_API_URLBase URL of the AgenticMail HTTP API. Defaults to http://127.0.0.1:3100 (the port the local CLI binds). Override when the API runs on a different host or port.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
62收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cc | string | 否 | 抄送收件人(可选) |
| to | string | 是 | 收件人电子邮件地址 |
| html | string | 否 | HTML 正文(可选) |
| text | string | 否 | 纯文本正文 |
| subject | string | 是 | 电子邮件主题行 |
| inReplyTo | string | 否 | 要回复的 Message-ID(可选) |
| references | array | 否 | 用于串联邮件的 Message-ID(可选) |
| attachments | array | 否 | 文件附件 |
详细介绍
@agenticmail/mcp
适用于 AgenticMail 的 MCP(模型上下文协议)服务——为任何兼容 MCP 的 AI 客户端提供完整的电子邮件和短信功能。
连接后,你的 AI Agent 可以通过自然语言发送电子邮件和短信、检查收件箱、回复消息、接收验证码、管理联系人、安排邮件发送时间、向其他 Agent 分配任务等。该服务提供 100 个工具,涵盖电子邮件、短信和 Agent 管理的所有操作。
✨ 安全性 — 0.9.27
修复了 GHSA-63gr-g7jc-v8rg — 可选的 Streamable HTTP 传输(--http / MCP_HTTP=1)缺少身份验证。
--http模式现在默认绑定到127.0.0.1,并且每个/mcp请求都必须携带Authorization: Bearer <token>。- 首次启动时会自动生成 Bearer 令牌,并将其保存到
~/.agenticmail/mcp-http-token(chmod 600)。可通过MCP_HTTP_TOKEN环境变量或--token=<value>覆盖。 - 使用
--host=0.0.0.0或MCP_HTTP_HOST=...绑定到其他接口——如果端点可从网络访问,启动日志会明确发出警告。 --insecure可恢复旧版无身份验证行为,但仅适用于沙箱测试环境。启动时会打印醒目的警告。- Stdio 模式(默认模式)从未受到影响。
如果你没有使用 --http / MCP_HTTP=1,则无需采取任何操作。
✨ 0.9.0 版本新功能
- 🧠
get_thread_id+save_thread_memory—multi_agent_extras层级新增的两个工具。Worker 在读取新消息后调用一次get_thread_id({uid}),然后在唤醒结束时调用save_thread_memory({threadId, summary, commitments?, openQuestions?, lastAction?, lastUid?})。调度器会自动将记忆读回下一次唤醒的提示词中。它与调度器端的 ThreadCache 配合,可降低唤醒成本——Agent 不再需要每次都重新读取此前的 10 条消息。 - 🎯 已更新
send_email/reply_email/forward_email/template_send文档,说明新的wake默认值。默认情况下,抄送的本地 Agent 不再唤醒;设置wake: 'all'可恢复 0.9.0 之前的行为。
✨ 更早版本 — 0.7.9
- 📐
call_agent支持outputSchema— 传入描述交付内容结构的 JSON Schema(draft-7 子集),API 会据此验证submit_result;如果不匹配,会返回验证器错误,让 Worker 使用正确的结构重试,而不是返回自由格式的文本。该 Schema 会预先呈现在 Worker 的唤醒提示词中。示例:await call_agent({ target: 'vesper', task: 'Audit row 34 of the YAML patch.', outputSchema: { type: 'object', required: ['summary', 'findings', 'recommendation'], properties: { summary: { type: 'string' }, findings: { type: 'array', items: { type: 'string' } }, recommendation: { type: 'string', enum: ['proceed', 'block'] }, }, }, }); - 📥
tail_worker(workerId, lines?)— 与check_activity配套使用。当 Worker 显示为长时间运行或状态过期时,tail_worker会返回其日志末尾的 N 行(每次工具调用、结果和助手内容块各占一行)。仅限主密钥使用。该工具位于multi_agent_extras层级,因此默认工具集会为负责委派工作的宿主提供此工具。 - 📊
check_activity显示实时进度 — 输出现在包含最后使用的工具、工具调用次数、以Xh Ym Zs表示的持续时间,以及根据心跳间隔得出的stale标记。Worker 不再自动从注册表中移除;过期状态仅用于诊断。
✨ 早前 — 0.7.7
- 每个发送工具都支持
wake参数 —send_email、reply_email、forward_email、template_send、manage_drafts(send)都接受wake: ["alice", "bob"](或逗号分隔的字符串)。调度器只会让列出的 Agent 开始一轮 Claude 对话;其他 Agent 仍会收到邮件,但保持休眠。这是多 Agent 线程中最有效的 Token 节省方式。 check_activity工具(属于essential集合)— 查看调度器此刻唤醒了哪些 Agent、它们正在处理什么、已运行多久,以及最近完成工作的预览。无需等待回复,即可确认“我刚发邮件的 Agent 是否真的开始工作了?”- 线程关闭标记 — 在主题中添加
[FINAL]、[DONE]、[CLOSED]或[WRAP],告知调度器该线程已结束;之后收到的任何回复都不会再触发唤醒。唤醒提示词会引导 Agent 在工作结束时添加这些标记。 - 兼容大模型的输入类型转换 —
batch_mark_read({ uids: "[1,2,3,4]" })、wait_for_email({ timeout: "120" })、manage_drafts({ where: '{"id":"abc"}' })、manage_pending({ allowSensitive: "true" })现在都能正常使用。字符串会在 zod 验证前完成解析。不再需要因“期望数组,收到字符串”而重试。 - 通过
initialize发送服务端instructions字段 — 每个连接的 MCP 客户端(Claude Code、ChatGPT、Cursor、Grok……)在调用任何工具之前,都会在上下文中获取协作协议。与提供方无关。 wait_for_email筛选条件 — 可等待特定回复,而不仅是“任何新事件”。支持from、subject、inReplyTo、participants、includeTasks。
安装
npm install -g @agenticmail/mcp
要求: Node.js 22+,且 AgenticMail API 服务正在运行
此软件包的功能
这是 AI 客户端与 AgenticMail 系统之间的桥梁。它以子进程的形式运行,AI 通过标准输入/输出与其通信(不会开放网络端口)。每次工具调用都会转换为发送到 AgenticMail 服务的 API 请求,响应则会以 AI 能理解的格式化文本返回。
可以这样理解:你的 AI Agent 本身并不知道如何发送电子邮件。这个 MCP 服务通过提供一组工具来教会它,例如 “send_email”、“list_inbox”、“reply_email” 等。你提出与电子邮件相关的任务时,AI 就可以调用这些工具。
设置
MCP 客户端设置(基于 CLI)
将以下内容添加到 MCP 客户端配置中(例如 .mcp.json 或项目设置):
{
"mcpServers": {
"agenticmail": {
"command": "npx",
"args": ["agenticmail-mcp"],
"env": {
"AGENTICMAIL_API_URL": "http://127.0.0.1:3829",
"AGENTICMAIL_API_KEY": "ak_your_agent_key"
}
}
}
}
桌面客户端
对于桌面 AI 应用,将以下内容添加到 MCP 配置文件中。路径示例:
- macOS:
~/Library/Application Support/<app>/config.json - Windows:
%APPDATA%\<app>\config.json
{
"mcpServers": {
"agenticmail": {
"command": "npx",
"args": ["agenticmail-mcp"],
"env": {
"AGENTICMAIL_API_URL": "http://127.0.0.1:3829",
"AGENTICMAIL_API_KEY": "ak_your_agent_key"
}
}
}
}
环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
AGENTICMAIL_API_URL | 是 | AgenticMail API 服务 URL。默认端口为 3829(在 @agenticmail/[email protected] 中从 3100 更改而来,以避免与常见开发工具发生冲突)。示例:http://127.0.0.1:3829。 |
AGENTICMAIL_API_KEY | 是¹ | Agent API 密钥(ak_...)。当工具调用未传入 _account 时,它决定此 MCP 服务默认使用的身份。 |
AGENTICMAIL_MASTER_KEY | 否 | 主密钥(mk_...)。管理操作(创建/删除 Agent、批准邮件、配置网关)需要此密钥。它还支持按需解析 _account——任何传入 _account: "<name>" 的工具调用,都会在首次遇到该名称时通过主密钥延迟获取对应 Agent 的 API 密钥,因此新创建的 create_account Agent 无需重启 MCP 服务即可使用。 |
AGENTICMAIL_ACCOUNT_KEYS_JSON | 否 | 用于按调用切换身份的 JSON 映射,格式为 {"<agentName>": "<apiKey>"}。调用方传入 _account: "Fola"(等)时,服务会在该次调用期间以该 Agent 的身份进行身份验证。agenticmail claudecode install 会为 Claude Code 集成自动填充此项。 |
¹ 必须设置 AGENTICMAIL_API_KEY、AGENTICMAIL_MASTER_KEY 或 AGENTICMAIL_ACCOUNT_KEYS_JSON 中的至少一项,但不必三项都设置。
可选的 Streamable HTTP 传输(--http)
大多数用户应继续使用默认的 stdio 传输——上方所有 MCP 客户端配置都使用此传输。对于需要长期运行的 HTTP 端点的环境(基于浏览器的客户端、远程开发隧道、多主机设置),请传入 --http:
agenticmail-mcp --http # 127.0.0.1:8014, auth required
agenticmail-mcp --http --port=9001
agenticmail-mcp --http --host=0.0.0.0 # expose on network (token still required)
agenticmail-mcp --http --token=mcphttp_xxx # use a known token instead of the minted one
agenticmail-mcp --http --insecure # sandbox/test only — disables auth
令牌按以下顺序读取:--token=... 标志、MCP_HTTP_TOKEN 环境变量、~/.agenticmail/mcp-http-token(首次运行时自动生成)。客户端必须在每个发往 /mcp 的请求中发送 Authorization: Bearer <token>。GET /health 保持开放,只返回会话数量。
按调用切换身份(_account)
每个工具的输入架构都接受可选参数 _account: "<name>"。传入此参数时,服务会将该名称解析为 apiKey(先从 AGENTICMAIL_ACCOUNT_KEYS_JSON 获取;若未找到,则通过实时主密钥查询 /accounts),并以该 Agent 的身份执行调用。未传入 _account 时,调用会使用 AGENTICMAIL_API_KEY 作为默认身份。
@agenticmail/claudecode 集成正是通过此方式实现的:一个 MCP 服务进程,多个 AgenticMail 身份。身份为 Fola 的 Claude Code 子 Agent 会在每次调用中传入 _account: "Fola",从而读取 Fola 的真实收件箱、以 fola@localhost 的身份发送邮件,等等。
用于低成本发现的元工具(request_tools + invoke)
为缩小宿主上下文窗口,典型子 Agent 的 tools: 白名单中只预先声明约 100 个工具中的 10 个。其余约 50 个工具仍可通过两个常驻元工具访问:
request_tools({ query?, sets? })— 返回未加载工具的文本目录,按集合分组(mail_extras、mail_compose、sms、account_admin等)。可选子字符串筛选器或集合名称筛选器。invoke({ tool, args, _account? })— 按名称分派到 100 个工具中的任意一个。Agent 使用request_tools发现工具,再使用invoke调用。
令牌影响:典型子 Agent 启动时加载的工具架构约为 3K 个令牌,而非约 15K 个。代价是执行不常用操作时需要额外一次往返(发现 → 调用),但这几乎总是值得的权衡。
工作原理
MCP 服务位于你的 AI 与 AgenticMail API 之间:
AI Client → MCP tool call → agenticmail-mcp → HTTP request → AgenticMail API → Stalwart Mail Server
每次工具调用都会:
- 接收来自 AI 的结构化参数
- 验证输入(UID 必须为正整数,数组不能为空,等等)
- 向 AgenticMail API 发送 HTTP 请求,超时时间为 30 秒
- 将格式化的文本结果返回给 AI
服务使用 stdio 传输方式运行——AI 客户端通过 stdin 发送 JSON-RPC 消息,服务通过 stdout 响应。MCP 服务本身不会打开任何网络端口。收到 SIGTERM 或 SIGINT 时,服务会正常关闭。
工具
电子邮件 — 核心操作(13 个工具)
| 工具 | 描述 | 示例提示词 |
|---|---|---|
send_email | 发送电子邮件,可包含收件人、主题、纯文本/HTML 和附件,并抄送 | "给 [email protected] 发一封关于会议的邮件" |
list_inbox | 列出最近的收件箱邮件(支持分页,最多 100 封) | "查看我的收件箱" |
read_email | 阅读完整邮件内容并进行安全分析 | "阅读邮件 #42" |
reply_email | 回复邮件(或回复所有人),并保留邮件会话关系 | "回复那封邮件,说我会参加" |
forward_email | 转发邮件并附上原始附件 | "把那封邮件转发给 [email protected]" |
search_emails | 按发件人、主题、正文、日期范围和中继搜索 | "查找 John 发来的关于预算的邮件" |
delete_email | 根据 UID 删除指定邮件 | "删除那封垃圾邮件" |
move_email | 将邮件移至文件夹 | "把这封邮件移到 Archive" |
mark_read | 将邮件标记为已读 | "将邮件 #15 标记为已读" |
mark_unread | 将邮件标记为未读 | "将那封邮件标记为未读" |
inbox_digest | 获取包含正文预览的收件箱摘要 | "给我一份收件箱摘要" |
wait_for_email | 实时等待新邮件(最长 5 分钟) | "等待 [email protected] 的回复" |
import_relay_email | 从已连接的 Gmail/Outlook 导入邮件 | "从 Gmail 导入 UID 500 的邮件" |
电子邮件 — 批量操作(5 个工具)
| 工具 | 描述 |
|---|---|
batch_delete | 根据 UID 列表删除多封邮件 |
batch_mark_read | 将多封邮件标记为已读 |
batch_mark_unread | 将多封邮件标记为未读 |
batch_move | 将多封邮件移至文件夹 |
batch_read | 一次阅读多封邮件的完整内容 |
电子邮件 — 管理(14 个工具)
| 工具 | 描述 |
|---|---|
manage_contacts | 在通讯录中添加、移除和列出联系人 |
manage_drafts | 创建、列出、编辑、删除和发送草稿 |
manage_tags | 创建标签、为邮件分配标签、移除标签和列出标签 |
manage_rules | 创建电子邮件筛选规则(自动移动、自动删除、标记为已读) |
manage_signatures | 创建、列出和删除电子邮件签名 |
manage_templates | 创建、列出和删除电子邮件模板 |
manage_scheduled | 预约未来发送的电子邮件、列出预约邮件和取消预约 |
manage_spam | 列出垃圾邮件文件夹、举报垃圾邮件、标记为非垃圾邮件和获取垃圾邮件评分 |
manage_pending_emails | 查看等待审批的受阻发件邮件 |
template_send | 使用已保存的模板发送电子邮件,并替换变量 |
create_folder | 创建新的 IMAP 文件夹 |
list_folder | 列出指定文件夹中的邮件 |
list_folders | 列出所有可用文件夹 |
check_health | 检查 AgenticMail 服务和 Stalwart 的运行状况 |
多 Agent 通信(8 个工具)
| 工具 | 描述 | 示例提示词 |
|---|---|---|
list_agents | 列出所有 Agent 的姓名、电子邮件和角色 | “显示所有 Agent” |
message_agent | 向另一个 Agent 发送电子邮件(含优先级) | “告诉研究员查找定价数据” |
check_messages | 检查来自 Agent 和外部人员的新消息 | “有新消息吗?” |
call_agent | 向另一个 Agent 分配任务(同步或异步) | “让分析师研究这个主题” |
claim_task | 认领分配给你的待处理任务 | “认领那个任务” |
submit_result | 提交已认领任务的结果 | “提交研究结果” |
check_tasks | 检查收到或发出的任务 | “我有待处理的任务吗?” |
call_agent | 同步 RPC — 等待结果(最长 5 分钟) | “让研究员查找定价信息并等待” |
管理(7 个工具)
这些工具需要主密钥(AGENTICMAIL_MASTER_KEY):
| 工具 | 描述 |
|---|---|
create_account | 创建具有指定姓名和角色的新 Agent |
delete_agent | 删除 Agent(归档电子邮件并记录报告) |
stop_agent | 在 Agent 执行任务期间软停止它 — 调度器不会唤醒它,邮件仍会送达收件箱(保留审计记录) |
resume_agent | 撤销 stop_agent — 调度器恢复唤醒 Agent;停止期间收到的邮件会留在收件箱中,并在下次唤醒时处理 |
cleanup_agents | 列出非活跃 Agent、清理并设为持久化 |
deletion_reports | 查看过去的 Agent 删除报告 |
update_metadata | 更新 Agent 元数据(显示名称、所有者等) |
whoami | 获取当前 Agent 信息(姓名、电子邮件、角色、ID) |
setup_payment | 获取 Cloudflare 付款设置说明 |
网关配置(6 个工具)
这些工具需要主密钥:
| 工具 | 描述 |
|---|---|
check_gateway_status | 检查当前电子邮件网关模式和运行状况 |
setup_email_relay | 配置 Gmail/Outlook 中继模式 |
setup_email_domain | 使用 Cloudflare 配置自定义域名 |
setup_gmail_alias | 获取 Gmail“以此身份发送邮件”别名的设置说明 |
setup_guide | 显示中继与域名的对比指南 |
send_test_email | 发送测试邮件以验证网关 |
purchase_domain | 搜索并购买域名 |
短信 / 电话号码(8 个工具)
| 工具 | 描述 |
|---|---|
sms_setup | 配置 Google Voice 或 46elks 电话号码访问权限 |
sms_send | 通过 46elks API 发送短信,或返回 Google Voice 发送说明 |
sms_messages | 列出收到和发出的短信 |
sms_check_code | 从近期短信中提取验证码/一次性密码 |
sms_read_voice | 直接从 Google Voice 网页读取短信(最快的方法) |
sms_record | 记录从 Google Voice 网页或任何来源读取的短信 |
sms_parse_email | 解析从 Google Voice 转发邮件中的短信(备用方法) |
sms_config | 获取当前短信配置 |
出站安全扫描
通过 send_email、reply_email 或 forward_email 发送的每封邮件都会在发出前进行扫描。扫描器会检查以下内容:
会检测哪些内容
个人身份信息(PII) — 社会安全号码、信用卡号码、电话号码、银行路由号码、驾驶证号码、护照号码、税务识别号、Medicare/Medicaid 识别号、移民号码、PIN、安全问题答案、IBAN/SWIFT 代码、加密货币钱包地址、电汇指令
凭据 — API 密钥、AWS 密钥、密码、私钥(PEM 格式)、Bearer 令牌、数据库连接字符串、GitHub 令牌、Stripe 密钥、JWT、Webhook URL、环境变量块、加密货币助记词、双重身份验证(2FA)备用代码、用户名/密码组合、OAuth 令牌、VPN 凭据
系统内部信息 — 私有 IP 地址、常见系统目录中的文件路径、环境变量赋值
所有者隐私 — 提及所有者的个人信息、泄露创建或运营该 Agent 的人员身份
高风险附件 — 私钥文件(.pem、.key、.p12、.pfx)、环境文件(.env、.credentials)、数据库文件(.db、.sqlite)、可执行文件(.exe、.bat、.sh、.ps1)等
发现问题时会发生什么
- 中等严重性 — 邮件会发送,但 AI 会在响应中收到警告
- 高严重性 — 邮件会被拦截,并保存以供人工审核
邮件被拦截时,AI 会收到待处理 ID,并被指示告知用户。用户(所有者)会收到一封通知邮件,其中包含完整的拦截内容和操作说明。
仅限人工审批
AI 不能批准或拒绝自己拦截的邮件。manage_pending_emails 工具只允许列出和查看邮件——对于批准/拒绝操作,系统会明确拒绝并给出清晰的错误消息。只有人工所有者可以批准(通过 API、交互式 Shell,或回复通知邮件中的“approve”或“yes”)。
自动后续提醒
邮件被拦截时,MCP 服务会自动为 AI 安排逐步递增的后续提醒:
- 12 小时 — 第一次提醒
- 6 小时 — 第二次提醒
- 3 小时 — 第三次提醒
- 1 小时 — 冷却期前的最后一次提醒
- 3 天冷却期 — 随后重新开始循环
这些提醒会注入工具响应中,提示 AI 询问用户是否批准待处理事项。后台心跳机制每隔 5 分钟检查一次所有者是否已批准或拒绝邮件;如果已处理,则会取消提醒。
入站安全
AI 使用 read_email 读取邮件时,响应会包含一份安全分析:
- 垃圾邮件评分 — 邮件属于垃圾邮件或恶意邮件的可能性(0-100)
- 类别 — 检测到的威胁类型(网络钓鱼、社会工程、提示词注入等)
- 清理 — 是否发现并清理了不可见 Unicode 字符或隐藏的 HTML
- 附件警告 — 标记可执行文件、存档文件、HTML 文件以及伪装的文件扩展名(例如
report.pdf.exe)
同一系统中 Agent 之间的内部邮件受信任,不进行垃圾邮件评分。
实时等待邮件
wait_for_email 工具会向 API 建立服务器发送事件(SSE)连接,并监听新邮件或任务通知。如果 SSE 不可用,则会改为轮询收件箱。这适用于 AI 需要等待回复后再继续的工作流。
等待时长可以配置(默认 2 分钟,最长 5 分钟)。收到邮件时,工具会返回消息详情。如果收到的是任务通知,工具则会返回任务信息。
中继电子邮件集成
所有者将 Gmail 或 Outlook 账户连接为中继后,AI 可以:
- 搜索中继账户 — 使用
search_emails并将searchRelay: true设为启用,即可同时搜索本地收件箱和已连接的 Gmail/Outlook 账户。中继搜索结果会返回一组单独的 UID,并标明所属账户。 - 从中继账户导入 —
import_relay_email会将中继账户中的指定邮件导入本地收件箱,并保留所有标头,以便正确串联邮件。
这样一来,AI 就可以在所有者的真实 Gmail/Outlook 收件箱中查找并导入邮件,然后通过 AgenticMail 系统正常回复。
定时发送邮件
manage_scheduled 工具接受灵活的时间格式:
- ISO 8601:
2026-02-14T10:00:00Z - 相对时间:
in 30 minutes、in 2 hours - 指定时间:
tomorrow 8am、tomorrow 2pm - 星期:
next monday 9am、next friday 2pm - 人类可读格式:
02-14-2026 3:30 PM EST - 日常表达:
tonight、this evening
API 服务每隔 30 秒检查一次是否有到达发送时间的定时邮件,并自动发送。
Agent 间通信
消息优先级
使用 message_agent 时,AI 可以设置优先级:
- 普通 — 不添加前缀
- 高 — 在主题前添加
[HIGH] - 紧急 — 在主题前添加
[URGENT]
同步 RPC
call_agent 工具独具特色——它会将任务分配给另一个 Agent,然后保持连接打开,直到该 Agent 响应(最长 5 分钟)。当 AI 需要先获得另一个 Agent 的答复才能继续时,这一工具就很有用。
在底层,API 服务每隔 2 秒轮询一次,同时还使用即时解析机制——目标 Agent 提交结果时,等待中的连接会立即解析。
任务生命周期
任务会依次经历以下状态:pending → claimed → completed 或 failed。任何知道任务 ID 的 Agent 都可以领取任务,因此也支持由子 Agent 代表父 Agent 处理任务的架构。
资源
MCP 服务提供一项资源:
| URI | 名称 | 描述 |
|---|---|---|
agenticmail://inbox | Agent 收件箱 | 浏览当前 Agent 最近收到的 20 条收件箱消息 |
对话示例
User: Check my email and summarize anything important
AI: [calls list_inbox]
You have 5 new emails:
1. [email protected] - "Q2 Budget Review" (2 hours ago)
2. [email protected] - "Re: Project Timeline" (4 hours ago)
3. [email protected] - "[repo] PR #123 merged" (5 hours ago)
...
[calls read_email for #1]
[calls read_email for #2]
Here's a summary of the important emails:
1. **Q2 Budget Review** from John — He's requesting approval for the revised
budget. The total is $45K, up from $38K due to infrastructure costs.
He needs a response by Friday.
2. **Project Timeline** from Sarah — She confirmed the new deadline is March 15.
The design phase is complete and development starts Monday.
User: Reply to John saying I approve the budget
AI: [calls reply_email]
Reply sent to [email protected] with subject "Re: Q2 Budget Review"
外部收件箱暴露——在引导操作员设置中继前,先说明这一点
用于配置中继的 MCP 工具(
setup_operator_email,以及建议操作员运行agenticmail setup-email或setup-relay的任何 Agent)会通过 Gmail / Outlook 加号寻址,让所有子 Agent 都能从公共互联网接收邮件。 操作员不一定会意识到这一点——主机 Agent 应明确提醒:
- 加号地址很容易被公开猜到。 配置中继后,任何人都可以向
[email protected]、[email protected]等地址发邮件,相应的 AgenticMail Agent 都会收到邮件。+sub部分并非秘密。 - 外部邮件会像内部
@localhost邮件一样唤醒主机调度器。 MCP 服务不会按来源过滤;对于任何入站邮件,API 都会发布 SSEnew-mail事件,主机集成则会启动一个工作线程轮次。 - 主机桥接会走不同的路径。 发往
[email protected]/[email protected]的邮件会路由到handleBridgeMail,它会使用主机 SDK 的resume选项,在后台唤醒操作员最近一次会话。如果恢复失败,则会回退到向setup_operator_email发送桥接升级邮件——这正是该 MCP 工具存在的原因。 - 垃圾邮件 = 工作线程轮次。 按升级顺序排列的限流措施:调度器中的
wake-budget防护(自动)、中继级垃圾邮件过滤器,以及基于metadata.host的隔离机制,用于限制仅应在内部使用的 Agent。
当主机 Agent 准备调用任何中继设置工具,或指示操作员运行 setup-email 时,应先转述以上内容,让操作员有意识地选择是否启用,而不是等收到第一封垃圾邮件唤醒后才发现这一点。
许可证
MIT - Ope Olatunji (@ope-olatunji)
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。