Skip to content

用于 ADK 的 e2a MCP 工具

Supported in ADKPythonTypeScript

e2a MCP 服务器将你的 ADK 智能体连接到 e2a——一个为 AI 智能体打造的认证邮件网关。此集成让智能体拥有自己的邮箱收件箱,可以使用自然语言发送、接收和回复邮件,并对入站邮件进行 SPF/DKIM/DMARC 验证,同时支持对出站消息进行可选的人工审批拦截。

该服务器托管在 https://api.e2a.dev/mcp,使用 Streamable HTTP 协议——无需本地安装或运行任何东西。

使用场景

  • 为智能体提供专属收件箱:配置专用电子邮件地址(如 support-bot@your-domain.com),让智能体像团队成员一样收发邮件。

  • 认证入站邮件:每条入站消息都携带 SPF、DKIM 和 DMARC 验证证据,因此智能体在处理邮件内容之前可以判断发件人是否属实。

  • 人工审核环路:启用审核拦截后,出站消息会以 pending_review 状态暂存,直到人工批准后才会发送——审批时还可以对主题、正文或收件人进行编辑。

  • 自动化会话线程:回复时保留 In-Reply-ToReferences 头信息,确保在收件人的邮件客户端中多轮对话的会话线程保持完整。

先决条件

  • 一个免费的 e2a 账户以及从控制台获取的 API 密钥

与智能体配合使用

from google.adk.agents import Agent
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import (
    StreamableHTTPConnectionParams,
)

E2A_API_KEY = "YOUR_E2A_API_KEY"

root_agent = Agent(
    model="gemini-flash-latest",
    name="e2a_agent",
    instruction=(
        "You manage email through the e2a tools. Call whoami once to "
        "learn your identity and inbox address. Use list_messages and "
        "get_message to read; use reply_to_message when replying to an "
        "existing thread (it preserves In-Reply-To and References), and "
        "send_message only to start a new thread. Both 'accepted' and "
        "'pending_review' are successful outcomes — never re-send after "
        "either one."
    ),
    tools=[
        McpToolset(
            connection_params=StreamableHTTPConnectionParams(
                url="https://api.e2a.dev/mcp",
                headers={"Authorization": f"Bearer {E2A_API_KEY}"},
                timeout=30,
            ),
        )
    ],
)
import { LlmAgent, MCPToolset } from "@google/adk";

const E2A_API_KEY = "YOUR_E2A_API_KEY";

const rootAgent = new LlmAgent({
    model: "gemini-flash-latest",
    name: "e2a_agent",
    instruction:
        "You manage email through the e2a tools. Call whoami once to " +
        "learn your identity and inbox address. Use list_messages and " +
        "get_message to read; use reply_to_message when replying to an " +
        "existing thread (it preserves In-Reply-To and References), and " +
        "send_message only to start a new thread. Both 'accepted' and " +
        "'pending_review' are successful outcomes — never re-send after " +
        "either one.",
    tools: [
        new MCPToolset({
            type: "StreamableHTTPConnectionParams",
            url: "https://api.e2a.dev/mcp",
            transportOptions: {
                requestInit: {
                    headers: {
                        Authorization: `Bearer ${E2A_API_KEY}`,
                    },
                },
            },
        }),
    ],
});

export { rootAgent };

生产环境中,请配合 e2a SDK 使用工具集

MCP 工具集将收件箱交给模型处理。将确定性的逻辑——验证 webhook 签名、处理至少一次投递保证、幂等发送——放在应用代码中,使用 PythonTypeScript SDK 实现。下面的 ADK webhook 示例就是这种架构的完整可运行版本。

可用工具

托管服务器提供 60 多个工具;调用端点的 tools/list 可获取权威工具列表。你看到的工具取决于你的密钥类型:智能体作用域密钥(e2a_agt_…)——推荐用于已部署的智能体——只能看到运行时工具,而账户作用域密钥(e2a_acct_…)还可以看到下面的管理工具。

运行时——收件箱工具

工具 描述
whoami 返回认证身份:用户、凭证范围、计划和用量限制,以及智能体作用域凭证的 agent_email
get_agent 获取单个智能体的完整记录
list_messages 列出收件箱或已发送邮件,支持按 directionread_status、搜索过滤器和游标分页
get_message 获取单条消息的完整正文、头部、附件元数据以及 SPF/DKIM/DMARC 验证证据
get_message_lifecycle 获取单条消息的重建投递历史
get_attachment 获取附件元数据,或使用 inline: true 获取内联字节
send_message 发送新邮件;返回 accepted,或被审核拦截时返回 pending_review——两者均为成功,都不应重试
reply_to_message 在会话线程中回复;保留 In-Reply-ToReferences
forward_message 将消息转发给新收件人
list_conversations / get_conversation 浏览会话线程而非单条消息
update_message_labels 在消息上添加或移除标签
delete_message / restore_message 软删除到回收站,以及恢复

管理——配置与设置

工具 描述
list_agentscreate_agentupdate_agentdelete_agentrestore_agent 管理智能体收件箱
get_protectionupdate_protection 按智能体配置筛选和审核拦截
list_domainsregister_domainget_domainverify_domaindelete_domain 自定义域名注册和 DNS 验证
list_reviewsget_reviewapprove_reviewreject_review 处理人工审核队列
list_webhookscreate_webhookupdate_webhookdelete_webhookrotate_webhook_secrettest_webhooklist_webhook_deliveries Webhook 订阅和投递历史
list_eventsget_eventredeliver_event 事件日志和重放
list_templatescreate_templateupdate_templatedelete_templatevalidate_template 服务端邮件模板(测试版)
list_api_keyscreate_api_keydelete_api_key API 密钥管理

配置

托管端点除了你的 API 密钥外不需要任何环境变量,ADK 通过上面所示的 Authorization 头传递该密钥。要使用自托管的 e2a 部署,只需将 url 改为该部署的 /mcp 端点。

交互式 MCP 客户端可以将 https://api.e2a.dev/mcp 添加为 OAuth 2.1 连接器,而无需粘贴密钥。要接收邮件,可以轮询 list_messages、使用 SDK 的 listen() 打开 WebSocket(无需公网 URL),或使用 create_webhook 订阅 HTTPS 端点。

其他资源