ADK 向け e2a MCP ツール¶
e2a MCP Server は、ADK エージェントを AI エージェント専用に構築された認証メール ゲートウェイである e2a に接続します。この統合により、エージェントは同僚のように自然言語を使用してメッセージを送信、受信、返信できる専用のメール受信トレイを持つことができ、受信メールの SPF/DKIM/DMARC 検証および送信メッセージに対するオプションの人間によるレビュー保留機能を提供します。
サーバーは https://api.e2a.dev/mcp でホストされており、Streamable HTTP で通信するため、ローカルにインストールしたり実行したりする必要はありません。
ユースケース¶
-
エージェントに専用の受信トレイを付与: 専用のメール アドレス(例:
support-bot@your-domain.com)をプロビジョニングし、エージェントがチームメンバーのようにメールを送受信できるようにします。 -
認証された受信メール: すべての受信メッセージには SPF、DKIM、DMARC の証拠が付与されているため、エージェントはコンテンツに基づいてアクションを実行する前に、送信者が主張する人物であるかどうかを確認できます。
-
人間によるレビュー (Human-in-the-loop): レビュー保留機能を有効にすると、人間が承認するまで送信メッセージが
pending_reviewとして保留されます。必要に応じて、送信前に件名、本文、宛先を編集できます。 -
スレッド会話の自動化:
In-Reply-ToおよびReferencesヘッダーを保持して返信するため、受信者のメール クライアントで複数のターンにわたってスレッドが維持されます。
前提条件¶
- 無料の 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 ツールセットは受信トレイをモデルに渡します。ウェブフック署名の検証、少なくとも 1 回の配信 (at-least-once delivery) の処理、べき等な送信などの決定論的な部分は、Python または TypeScript SDK を使用してアプリケーション コード内に保持します。以下の ADK Webhook の例は、その形式の完全な動作例です。
利用可能なツール¶
ホスト型サーバーは 60 以上のツールを露出します。決定的なセットについては、エンドポイントに対して tools/list を呼び出してください。表示されるツールはキーによって異なります。デプロイされたエージェントに推奨される エージェント スコープ キー(e2a_agt_…)はランタイム ツールのみを表示し、アカウント スコープ キー(e2a_acct_…)は以下の管理ツールも表示します。
ランタイム — 受信トレイ ツール¶
| ツール | 説明 |
|---|---|
whoami |
認証された ID(ユーザー、資格情報スコープ、プランと使用制限、エージェント スコープの資格情報の場合は agent_email)を返します。 |
get_agent |
1 つのエージェントの完全なレコードを取得します。 |
list_messages |
direction、read_status、検索フィルター、カーソル ページネーションを使用して受信または送信メールを一覧表示します。 |
get_message |
1 つのメッセージの完全な本文、ヘッダー、添付ファイル メタデータ、SPF/DKIM/DMARC 検証結果を取得します。 |
get_message_lifecycle |
1 つのメッセージの再構築された配信履歴を取得します。 |
get_attachment |
添付ファイルのメタデータ、または inline: true のバイトデータを取得します。 |
send_message |
新しいメールを送信します。レビュー保留にヒットした場合は accepted または pending_review を返します。どちらも成功であり、再送信しないでください。 |
reply_to_message |
スレッド内で返信します。In-Reply-To および References を保持します。 |
forward_message |
メッセージを新しい受信者に転送します。 |
list_conversations / get_conversation |
個々のメッセージではなくスレッドを参照します。 |
update_message_labels |
メッセージのラベルを追加または削除します。 |
delete_message / restore_message |
ゴミ箱へのソフト削除および復元を行います。 |
管理 — プロビジョニングとセットアップ¶
| ツール | 説明 |
|---|---|
list_agents, create_agent, update_agent, delete_agent, restore_agent |
エージェントの受信トレイを管理します。 |
get_protection, update_protection |
エージェントごとのスクリーニングおよびレビュー保留構成を管理します。 |
list_domains, register_domain, get_domain, verify_domain, delete_domain |
カスタム ドメインの登録および DNS 検証を管理します。 |
list_reviews, get_review, approve_review, reject_review |
人間によるレビュー キューを処理します。 |
list_webhooks, create_webhook, update_webhook, delete_webhook, rotate_webhook_secret, test_webhook, list_webhook_deliveries |
Webhook サブスクリプションおよび配信履歴を管理します。 |
list_events, get_event, redeliver_event |
イベント ログおよび再配信を管理します。 |
list_templates, create_template, update_template, delete_template, validate_template |
サーバーサイドのメール テンプレートを管理します(ベータ)。 |
list_api_keys, create_api_key, delete_api_key |
API キー管理を行います。 |
構成¶
ホスト型エンドポイントは、上記の Authorization ヘッダーに渡す API キー以外の環境変数は必要ありません。セルフホストの e2a デプロイメントを使用するには、url をそのデプロイメントの /mcp エンドポイントに変更します。
インタラクティブな MCP クライアントは、キーを貼り付ける代わりに https://api.e2a.dev/mcp を OAuth 2.1 コネクタとして追加できます。メールを受信するには、list_messages をポーリングするか、SDK の listen() で WebSocket を開くか(公開 URL 不要)、create_webhook で HTTPS エンドポイントをサブスクライブします。