agenticmail について
AgenticMail MCP サーバーは、MCP に対応する AI クライアントにメールと SMS の機能を提供します。メールの送信、返信、転送、認証コードの受信などに対応しています。実際のメールボックスや SMS を AI エージェントに扱わせたいユーザーや、複数エージェントのシステム向けです。AgenticMail API サーバーの起動が必要です。
主な機能
- 01メールと SMS の送受信
- 02受信トレイの読み取りと認証コードの受信
- 03連絡先の管理と予約送信
- 04wait_for_email による条件付きの返信待機
- 05複数エージェント間のタスク割り当てとスレッドメモリ
- 06標準入出力がデフォルト、認証付き HTTP トランスポートにも対応
活用シーン
- 01エージェントが会員登録メールの認証コードを読み取る
- 02特定のメッセージへの返信や転送をエージェントに任せる
- 03メールスレッドを通じてエージェント間の作業を調整する
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの 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 | いいえ | CC の宛先(任意) |
| to | string | はい | 受信者のメールアドレス |
| html | string | いいえ | HTML 本文(任意) |
| text | string | いいえ | プレーンテキスト本文 |
| subject | string | はい | メールの件名 |
| inReplyTo | string | いいえ | 返信対象の Message-ID(任意) |
| references | array | いいえ | スレッド化に使用する Message-ID(任意) |
| attachments | array | いいえ | ファイル添付 |
詳細
@agenticmail/mcp
AgenticMail 用の MCP(Model Context Protocol)サーバーです。MCP 互換の AI クライアントに、メールと SMS のすべての機能を提供します。
接続すると、AI エージェントは自然言語を通じて、メールやテキストメッセージの送信、受信トレイの確認、メッセージへの返信、認証コードの受信、連絡先の管理、メールの予約送信、ほかのエージェントへのタスクの割り当てなどを実行できます。サーバーは、メール、SMS、エージェント管理に関するあらゆる操作を網羅する 100 個のツールを提供します。
✨ セキュリティ — 0.9.27
GHSA-63gr-g7jc-v8rg を修正 — オプションの Streamable HTTP トランスポート(--http / MCP_HTTP=1)で認証が欠落していました。
--httpモードは、デフォルトで127.0.0.1にバインドし、すべての/mcpリクエストでAuthorization: Bearer <token>を必須とするようになりました。- ベアラートークンは初回起動時に自動生成され、
~/.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ティアに 2 つの新しいツールが追加されました。ワーカーは新しいメッセージを読んだ後に一度get_thread_id({uid})を呼び出し、起動処理の最後にsave_thread_memory({threadId, summary, commitments?, openQuestions?, lastAction?, lastUid?})を呼び出します。ディスパッチャーは次回の起動時に、メモリをプロンプトに自動で読み込みます。ディスパッチャー側の ThreadCache と組み合わせることで、起動コストを平準化できます。エージェントが毎回、過去 10 件のメッセージを読み直す必要はなくなります。 - 🎯
send_email/reply_email/forward_email/template_sendのドキュメントを更新し、新しいwakeのデフォルト値に対応しました。CC されたローカルエージェントはデフォルトでは起動しなくなりました。wake: 'all'を指定すると、0.9.0 より前の動作に戻せます。
✨ 以前の更新 — 0.7.9
- 📐
call_agentがoutputSchemaを受け付けるようになりました — 成果物の形式を定義した JSON Schema(draft-7 のサブセット)を渡すと、API がsubmit_resultを検証します。形式が一致しない場合はバリデーターエラーが返されるため、ワーカーは自由形式の文章を返す代わりに、正しい形式で再試行できます。スキーマは事前にワーカーの起動プロンプトに組み込まれます。例: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と組み合わせて使用します。ワーカーが長時間実行中または停止状態と判定された場合、tail_workerはログの末尾 N 行を返します(すべてのツール呼び出し、結果、アシスタントの出力チャンクがそれぞれ 1 行にまとめられます)。マスターキーが必要です。multi_agent_extrasティアに含まれているため、作業を委任するホストのデフォルトのツールセットで利用できます。 - 📊
check_activityで進捗状況をリアルタイムに確認できるようになりました — 出力に、最後に使用したツール、ツール呼び出し回数、Xh Ym Zs形式の実行時間、ハートビートの経過時間から算出されるstaleフラグが含まれるようになりました。ワーカーがレジストリから自動削除されることはなくなりました。停止状態は診断情報として扱われます。
✨ 以前のバージョン — 0.7.7
- すべての送信ツールの
wakeパラメーター —send_email、reply_email、forward_email、template_send、manage_drafts(send)はすべてwake: ["alice", "bob"](またはカンマ区切りの文字列)を受け付けます。ディスパッチャーは、指定されたエージェントにのみ Claude のターンを渡します。ほかのエージェントもメールを受信しますが、起動しません。複数エージェントが参加するスレッドで、最も大きくトークンを節約できます。 check_activityツール(essentialセットに含まれます)— ディスパッチャーが現在起動しているエージェント、その作業内容、実行時間に加え、最近完了した作業のプレビューを確認できます。「今メールしたエージェントは実際に作業を開始したか?」を、返信を待たずに確認できます。- スレッド終了マーカー — 件名に
[FINAL]、[DONE]、[CLOSED]、または[WRAP]を含めると、ディスパッチャーにこのスレッドが終了したことを伝えられます。そのスレッドへの返信があっても、以後エージェントは起動しません。起動プロンプトでは、作業を終える際にエージェントがこれらのマーカーを追加するよう指示します。 - LLM に対応した入力の型変換 —
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 エージェントは、標準ではメールを送信する方法を知りません。この 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 | はい¹ | エージェントの API キー(ak_...)です。ツール呼び出しで _account が渡されない場合に、この MCP サーバーが動作するデフォルトの ID を決定します。 |
AGENTICMAIL_MASTER_KEY | いいえ | マスターキー(mk_...)です。管理者操作(エージェントの作成/削除、メールの承認、ゲートウェイ設定)に必要です。オンデマンドの _account 解決も有効になります — _account: "<name>" を渡すツール呼び出しがあると、その名前を初めて認識したときにマスターキーを使って該当エージェントの API キーを遅延取得するため、作成直後の create_account エージェントも MCP サーバーを再起動せずに指定できます。 |
AGENTICMAIL_ACCOUNT_KEYS_JSON | いいえ | 呼び出しごとの ID 切り替えに使う {"<agentName>": "<apiKey>"} の JSON マップです。呼び出し側が _account: "Fola" などを渡すと、サーバーはその呼び出しの間、そのエージェントとして認証します。Claude Code 連携用に agenticmail claudecode install が自動的に設定します。 |
¹ AGENTICMAIL_API_KEY、AGENTICMAIL_MASTER_KEY、または AGENTICMAIL_ACCOUNT_KEYS_JSON のいずれかを設定する必要がありますが、3 つすべてを設定する必要はありません。
オプションの 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 は認証なしで利用でき、セッション数のみを返します。
呼び出しごとの ID 切り替え(_account)
すべてのツールの入力スキーマでは、任意の _account: "<name>" パラメーターを受け付けます。渡された場合、サーバーはその名前を API キー(AGENTICMAIL_ACCOUNT_KEYS_JSON から取得し、見つからない場合はマスターキーを使って /accounts をリアルタイムに検索)に解決し、そのエージェントとして呼び出しを実行します。_account がない場合、呼び出しにはデフォルトの ID として AGENTICMAIL_API_KEY が使われます。
これにより、@agenticmail/claudecode 連携が実現します。1 つの MCP サーバープロセスで、複数の AgenticMail ID を扱えます。「Fola」として動作する Claude Code サブエージェントは、すべての呼び出しで _account: "Fola" を渡すことで、Fola の実際の受信トレイを読み取り、fola@localhost からメールを送信するなどの操作ができます。
手軽にツールを見つけるためのメタツール(request_tools + invoke)
ホストのコンテキストウィンドウを小さく保つため、通常、サブエージェントの tools: 許可リストで事前宣言されるのは 100 個のツールのうち約 10 個だけです。残りの約 50 個には、常時利用可能な次の 2 つのメタツールからアクセスできます。
request_tools({ query?, sets? })— 読み込まれていないツールのテキストカタログを、セット(mail_extras、mail_compose、sms、account_admin、…)ごとにまとめて返します。部分文字列またはセット名による任意の絞り込みができます。invoke({ tool, args, _account? })— 名前を指定して、100 個のツールのいずれかを呼び出します。エージェントはツールの発見にrequest_toolsを、呼び出しにinvokeを使います。
トークンへの影響:通常のサブエージェントの起動時に読み込まれるツールスキーマは約 15K トークンから約 3K トークンに減ります。その代わり、あまり使わない操作では追加のラウンドトリップ(発見 → 呼び出し)が 1 回発生しますが、ほとんどの場合、その価値は十分にあります。
仕組み
MCP サーバーは、AI と AgenticMail API の間で動作します。
AI Client → MCP tool call → agenticmail-mcp → HTTP request → AgenticMail API → Stalwart Mail Server
各ツール呼び出しでは、次の処理を行います。
- AI から構造化された引数を受け取ります
- 入力を検証します(UID は正の整数であること、配列は空でないことなど)
- 30 秒のタイムアウトを設定して、AgenticMail API に HTTP リクエストを送信します
- 書式設定されたテキストの結果を AI に返します
サーバーは stdio トランスポートで動作します。AI クライアントは stdin 経由で JSON-RPC メッセージを送信し、サーバーは stdout 経由で応答します。MCP サーバー自体はネットワークポートを開きません。SIGTERM または SIGINT を受信すると、正常にシャットダウンします。
ツール
メール — 基本操作(13 ツール)
| ツール | 説明 | プロンプトの例 |
|---|---|---|
send_email | 宛先、件名、テキスト/HTML、添付ファイル、CC を指定してメールを送信します | 「[email protected] に会議についてのメールを送って」 |
list_inbox | 受信トレイの最近のメッセージを一覧表示します(ページネーション対応、最大 100 件) | 「受信トレイを確認して」 |
read_email | セキュリティ分析付きでメールの全文を読みます | 「メール #42 を読んで」 |
reply_email | スレッドを維持して返信(または全員に返信)します | 「そのメールに出席すると返信して」 |
forward_email | 元の添付ファイルを含めてメールを転送します | 「それを [email protected] に転送して」 |
search_emails | 差出人、件名、本文、期間、リレーで検索します | 「John からの予算に関するメールを探して」 |
delete_email | UID を指定して特定のメールを削除します | 「そのスパムメールを削除して」 |
move_email | メールをフォルダーに移動します | 「これをアーカイブに移動して」 |
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 の状態を確認します |
マルチエージェント通信(8 ツール)
| ツール | 説明 | プロンプトの例 |
|---|---|---|
list_agents | 名前、メールアドレス、役割を含むすべてのエージェントを一覧表示します | 「すべてのエージェントを表示して」 |
message_agent | 別のエージェントにメールを送信します(優先度レベルを指定可能) | 「調査担当者に料金データを調べるよう伝えて」 |
check_messages | エージェントや外部からの新着メッセージを確認します | 「新着メッセージはある?」 |
call_agent | タスクを依頼して別のエージェントを呼び出します(同期または非同期) | 「このトピックを調査するため、アナリストを呼び出して」 |
claim_task | 自分に割り当てられた保留中のタスクを引き受けます | 「そのタスクを引き受けて」 |
submit_result | 引き受けたタスクの結果を提出します | 「調査結果を提出して」 |
check_tasks | 受信または送信したタスクを確認します | 「保留中のタスクはある?」 |
call_agent | 同期 RPC — 結果が返るまで待機します(最大 5 分) | 「調査担当者に料金を調べてもらい、結果を待って」 |
管理(7 ツール)
これらのツールにはマスターキー(AGENTICMAIL_MASTER_KEY)が必要です。
| ツール | 説明 |
|---|---|
create_account | 名前と役割を指定して新しいエージェントを作成します |
delete_agent | エージェントを削除します(メールをアーカイブし、レポートを記録します) |
stop_agent | タスクの途中でエージェントをソフト停止します — ディスパッチャーはエージェントの起動を拒否しますが、メールは引き続き受信トレイに届きます(監査証跡は保持されます) |
resume_agent | stop_agent を取り消します — ディスパッチャーはエージェントの起動を再開します。停止中に受信したメールは受信トレイに残り、次回の起動時に処理されます |
cleanup_agents | 非アクティブなエージェントを一覧表示し、クリーンアップして、永続化します |
deletion_reports | 過去のエージェント削除レポートを表示します |
update_metadata | エージェントのメタデータ(表示名、所有者など)を更新します |
whoami | 現在のエージェント情報(名前、メールアドレス、役割、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 | ドメインを検索して購入します |
SMS/電話番号(8 ツール)
| ツール | 説明 |
|---|---|
sms_setup | Google Voice または 46elks の電話番号へのアクセスを設定します |
sms_send | 46elks API 経由で SMS を送信するか、Google Voice で送信する手順を返します |
sms_messages | 受信または送信した SMS メッセージを一覧表示します |
sms_check_code | 最近の SMS から認証コード/OTP コードを抽出します |
sms_read_voice | Google Voice のウェブから SMS を直接読み取ります(最速の方法) |
sms_record | Google Voice のウェブまたは任意のソースから読み取った SMS を記録します |
sms_parse_email | 転送された Google Voice メールから SMS を解析します(代替手段) |
sms_config | 現在の SMS 設定を取得します |
送信メールのセキュリティスキャン
send_email、reply_email、forward_email を通じて送信されるすべてのメールは、送信前にスキャンされます。スキャナーは次の内容を確認します。
検出対象
個人情報(PII) — 社会保障番号、クレジットカード番号、電話番号、銀行ルーティング番号、運転免許証番号、パスポート番号、納税者番号、メディケア/メディケイド ID、移民関連番号、PIN、秘密の質問への回答、IBAN/SWIFT コード、暗号通貨ウォレットアドレス、電信送金の指示
認証情報 — API キー、AWS キー、パスワード、秘密鍵(PEM 形式)、ベアラートークン、データベース接続文字列、GitHub トークン、Stripe キー、JWT、Webhook URL、環境変数ブロック、暗号資産のシードフレーズ、2FA バックアップコード、ユーザー名とパスワードの組み合わせ、OAuth トークン、VPN 認証情報
システム内部情報 — プライベート IP アドレス、一般的なシステムディレクトリ内のファイルパス、環境変数の割り当て
所有者のプライバシー — 所有者の個人情報への言及、エージェントを作成または運用している人物の暴露
リスクのある添付ファイル — 秘密鍵ファイル(.pem、.key、.p12、.pfx)、環境ファイル(.env、.credentials)、データベースファイル(.db、.sqlite)、実行ファイル(.exe、.bat、.sh、.ps1)など
検出された場合の動作
- 中程度の重大度 — メールは送信されますが、AI は応答で警告を受け取ります
- 重大度:高 — メールはブロックされ、人間による確認のために保存されます
メールがブロックされると、AI には保留中 ID が通知され、ユーザーに知らせるよう指示されます。ユーザー(所有者)には、ブロックされた内容の全文と手順を記載した通知メールが届きます。
人間のみが承認可能
AI は、自身がブロックしたメールを承認または拒否できません。manage_pending_emails ツールでできるのは一覧表示と閲覧のみです。承認/拒否の操作は、明確なエラーメッセージとともに明示的に拒否されます。承認できるのは人間の所有者だけです(API、対話型シェル、または通知メールへの「approve」や「yes」の返信を通じて行います)。
自動フォローアップリマインダー
メールがブロックされると、MCP サーバーはAI向けのフォローアップリマインダーを段階的に自動設定します。
- 12 時間後 — 最初のリマインダー
- 6 時間後 — 2 回目のリマインダー
- 3 時間後 — 3 回目のリマインダー
- 1 時間後 — クールダウン前の最後のリマインダー
- 3 日間のクールダウン — その後、サイクルが再開します
これらのリマインダーはツールの応答に挿入され、保留中の承認についてユーザーに確認するようAIに促します。バックグラウンドのハートビートが 5 分ごとに確認を行い、所有者がすでにメールを承認または拒否しているかを検出します。承認または拒否済みの場合、リマインダーはキャンセルされます。
受信時のセキュリティ
AI が read_email でメールを読むと、応答にセキュリティ分析が含まれます。
- スパムスコア — メールがスパムまたは悪意のあるメールである可能性(0~100)
- カテゴリ — 検出された脅威の種類(フィッシング、ソーシャルエンジニアリング、プロンプトインジェクションなど)
- サニタイズ — 不可視の Unicode 文字や隠し HTML が検出され、除去されたかどうか
- 添付ファイルの警告 — 実行ファイル、アーカイブ、HTML ファイル、偽装されたファイル拡張子(
report.pdf.exeなど)のフラグ
同じシステム上のエージェント間の内部メールは信頼されているため、スパムスコアの判定をスキップします。
リアルタイムでメールを待機
wait_for_email ツールは、API への Server-Sent Events(SSE)接続を開き、新着メールやタスク通知を待ち受けます。SSE を利用できない場合は、受信トレイのポーリングに切り替わります。これは、返信を待ってから処理を続ける必要があるワークフローで役立ちます。
待機時間は設定可能なタイムアウトで制御されます(デフォルトは 2 分、最大 5 分)。メールが届くと、ツールはメッセージの詳細を返します。代わりにタスク通知が届いた場合は、タスク情報を返します。
Relay メール連携
所有者が Gmail または Outlook アカウントをリレーとして接続すると、AI は次のことができます。
- リレーを検索する —
searchRelay: trueを指定したsearch_emailsは、ローカルの受信トレイと接続済みの 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 秒ごとに、送信時刻になったスケジュール済みメールを確認し、自動的に送信します。
エージェント間通信
メッセージの優先度
message_agent を使用する際、AI は優先度を設定できます。
- 通常 — プレフィックスなし
- 高 — 件名に
[HIGH]を付加 - 緊急 — 件名に
[URGENT]を付加
同期 RPC
call_agent ツールは独特なツールです。別のエージェントにタスクを割り当て、そのエージェントが応答するまで接続を開いたままにします(最長 5 分)。AI が処理を続ける前に別のエージェントから回答を得る必要がある場合に便利です。
内部では、API サーバーが 2 秒ごとにポーリングし、即時解決の仕組みも使用します。対象のエージェントが結果を送信すると、待機中の接続は直ちに解決されます。
タスクのライフサイクル
タスクは pending → claimed → completed または failed の状態を経ます。タスク ID を知っているエージェントであれば、どのエージェントでもタスクを引き受けられます。これにより、サブエージェントが親エージェントに代わってタスクを処理するアーキテクチャが可能になります。
リソース
MCP サーバーは、次の 1 つのリソースを提供します。
| URI | 名前 | 説明 |
|---|---|---|
agenticmail://inbox | エージェントの受信トレイ | 現在のエージェントの最新 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の実行を勧めるエージェント)は、Gmail/Outlook のプラスアドレスを通じて、すべてのサブエージェントをパブリックインターネットに公開します。 オペレーターがこの点に気づいていないこともあるため、ホストエージェントは明確に警告してください。
- プラスアドレスは誰でも推測できます。 リレーを設定すると、誰でも
[email protected]、[email protected]などにメールを送信でき、対応する AgenticMail エージェントがそのメールを受信します。+subの部分は秘密ではありません。 - 外部からのメールでも、内部の
@localhostメールと同じようにホストのディスパッチャーが起動します。 MCP サーバーは送信元によるフィルタリングを行いません。API は受信したメールすべてについて SSE のnew-mailイベントを発行し、ホスト統合がワーカーのターンを開始します。 - ホストのブリッジは別の経路を通ります。
[email protected]/[email protected]宛てのメールはhandleBridgeMailにルーティングされ、ホスト SDK のresumeオプションを使って、オペレーターの最後のセッションをヘッドレスで再開します。再開に失敗すると、setup_operator_emailのブリッジエスカレーション用メールにフォールバックします。これこそ、その MCP ツールが存在する理由です。 - スパムはワーカーのターンを発生させます。 エスカレーション順のスロットルは、ディスパッチャーの
wake-budgetガード(自動)、リレーレベルのスパムフィルター、内部専用にすべきエージェントを対象とするmetadata.hostベースのフェンシングです。
ホストエージェントがリレー設定ツールを呼び出そうとしているときや、オペレーターに setup-email の実行を案内するときは、オペレーターが最初のスパムによる起動を受けて初めて気づくのではなく、意図を理解して選択できるよう、事前にこの内容を言い換えて伝えてください。
ライセンス
MIT - Ope Olatunji (@ope-olatunji)
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。