Skip to main content
Glama
lanfuli

multi-email

by lanfuli

Multi Email

Multi Email は、独立して認可された Gmail および Microsoft 365 メールボックス向けのオープンソースの Codex プラグイン兼 MCP サーバーです。すべての操作は明示的な account_alias を指定します。暗黙のアクティブメールボックスはありません。

検索、読み取り、下書き作成、アーカイブ、既読状態の変更、Gmail ラベル、Microsoft カテゴリ、およびサーバーが強制する localhost レビューウィンドウを介した送信をサポートしています。

リリースステータス: 0.1.2 は、lanfuli/multi-email の注釈付き v0.1.2 タグまたは対応する GitHub リリースからインストールした場合にのみ公式です。codex-multi-email npm パッケージはまだ公開されていません。インストール前にリポジトリの所有者とリリースタグを確認してください。

これが存在する理由

ほとんどのメール統合は、1 つのアクティブアカウントを前提としています。Multi Email はルーティングを明示的に保つため、メッセージ ID、下書き、ラベル、資格情報を混在させることなく、複数の独立して認可されたアカウントを 1 つのリクエストでカバーできます。

Codex task
  -> Multi Email skill and MCP tools
  -> local Node.js MCP process
  -> Gmail API or Microsoft Graph

OAuth tokens -> macOS Keychain
Account aliases and OAuth app settings -> local mode-0600 config
Mailbox content returned by tools -> Codex conversation/model context

MCP プロセスと資格情報ストアは Mac 上で実行されますが、エンドツーエンドのワークフローは必ずしもローカルのみではありません。プロンプトとツール結果(選択したメールコンテンツを含む)は、ユーザーの製品、アカウント、データ制御設定に応じて Codex/OpenAI によって処理される場合があります。Google と Microsoft もプロバイダー API トラフィックを処理します。セキュリティ、プライバシー、データフロー を参照してください。

Related MCP server: Agentic Mail Bridge

安全モデル

  • すべての操作には明示的な account_alias が必要です。

  • 読み取りはスキルのデフォルトです。変更には、現在の明示的なユーザーリクエストが必要です。

  • 完全な削除は公開されていません。

  • メール本文、添付ファイル、引用テキスト、署名、リンクは信頼できないデータとして扱われ、ツールの指示としては決して扱われません。

  • 検索、書き込みバッチ、受信者、本文のサイズには制限があります。

  • 送信は、ユーザーが 127.0.0.1 ウィンドウでサポートされている完全なプレーンテキストの下書きを確認し、[承認] をクリックするまでブロックされます。

  • 短命の approval_request_id は、実効送信マニフェスト(認証済みプリンシパル、メールボックス、実効送信者 ID、下書きとスレッド ID、すべての受信者、件名、完全な本文、プロバイダーリビジョン、添付ファイルがないことの検証済み確認)にバインドされます。承認は期限切れになり、1 回限りであり、バインドされた変更によって無効になります。

  • バージョン 0.1.2 は、プロバイダーの下書きに HTML、マルチパートまたは不明な MIME、インラインコンテンツ、添付ファイル、不正なメールボックスアドレス、サポートされていない From/Sender/Reply-To ID、または不完全なプロバイダーリビジョンが含まれている場合、レビューまたは送信の前にフェイルクローズします。

  • プロバイダーの送信リクエストは、承認された許可リストに登録されたプレーンテキストフィールドから構築されます。Gmail は、下書き送信リクエストでその凍結された生のメッセージを提供します。Microsoft は、変更可能なプロバイダーの下書きを送信する代わりに、1 つの MIME sendMail リクエストを使用します。

  • どの MCP ツールも、自身の送信リクエストを承認できません。

  • あいまいな結果の後、送信が自動的に再試行されることはありません。プロバイダーがすでに受け入れている可能性があるためです。

これらの制御により、偶発的およびプロンプトインジェクションによるアクションが軽減されますが、OAuth トークンが読み取り専用になるわけではありません。Google の gmail.modify と Microsoft の Mail.ReadWrite および Mail.Send は、実質的なメールボックスアクセスを許可します。

サポートされている操作

領域

Gmail

Microsoft 365

アカウント ID チェック

はい

はい

資格情報、トークン、スコープ、ID の診断

1 つのエイリアスまたはすべて(メールを読まずに)

1 つのエイリアスまたはすべて(メールを読まずに)

プロバイダー固有の検索とメッセージ読み取り

はい

はい

新規および返信の下書き

はい

はい

下書きの更新

はい

はい

アーカイブと既読/未読

はい

はい

ラベル/カテゴリ

ラベル ID の一覧表示と変更

既知の正確なカテゴリ名を変更

人間によるレビュー付き凍結送信

ローカル完全レビューウィンドウ

ローカル完全レビューウィンドウ; ソース下書きは保持

このプラグインは、プロバイダーの添付ファイルコンテンツエンドポイントを意図的に呼び出したり、MCP を介して添付ファイルのコンテンツを公開したり、メールを完全に削除したり、カレンダーを操作したり、任意のプロバイダー API を公開したり、送信者エイリアス、委任 ID、共有メールボックスを自動的に有効にしたりすることはありません。Gmail の format=full 応答は、小さなインライン MIME パートのバイトをローカルプロセスに配信できますが、ツールによって返されることはありません。メッセージの読み取りでは、添付ファイル名のみが公開されます。プラグインによって作成された下書きはプレーンテキストです。HTML、インラインコンテンツ、添付ファイル、不正なメールボックスアドレス、またはサポートされていない ID を含むプロバイダーの下書きは、バージョン 0.1.2 の送信レビューゲートを通過できません。

検索クエリはプロバイダー固有です。Google には Gmail 検索構文、Microsoft 365 には Microsoft Graph メール検索構文を使用します。

mail_list_accounts は、credentialPresent と connectionStatus(credential_present_unverified または not_authorized)を使用して、ローカル資格情報が存在するかどうかを報告します。これらのフィールドは認証の主張ではありません。現在のトークン、スコープ、プロバイダー ID の健全性を確認するには、mail_diagnose_accounts を使用してください。

要件

  • Apple Silicon または Intel 上の macOS

  • Node.js 22 以降

  • ローカル stdio MCP とプラグインをサポートする Codex デスクトップまたは CLI

  • Gmail アカウント用に Gmail API が有効な Google Cloud Desktop OAuth クライアント

  • Microsoft 365 アカウント用の Microsoft Entra パブリッククライアントアプリケーション

コミットされた dist/ バンドルには、JavaScript の依存関係と両方の macOS Keychain ネイティブバイナリが含まれているため、Git マーケットプレイスのスナップショットは、コミットされた node_modules/ ディレクトリなしで起動できます。開発と npm ライブラリのインポートでは、通常の npm 依存関係が引き続き使用されます。

GitHub からインストール

最も透過的なインストールは、ローカルクローンです。

git clone https://github.com/lanfuli/multi-email.git
cd multi-email
git checkout --detach v0.1.2
node ./scripts/multi-email --help
codex plugin marketplace add "$(pwd)"
codex plugin add multi-email@multi-email

インストール後、新しい Codex タスクを開始して、スキルと MCP ツールが検出されるようにします。

Codex は、リポジトリが存在すると Git マーケットプレイスソースも受け入れます。

codex plugin marketplace add lanfuli/multi-email --ref v0.1.2
codex plugin add multi-email@multi-email

明示的な --ref により、インストールされたスナップショットは、移動するデフォルトブランチではなく、レビュー済みのリリースに保持されます。リポジトリのマーケットプレイスエントリは、文書化されたリポジトリルートのローカルソース("./")を使用します。現在文書化されている Codex マーケットプレイススキーマには、URL、git-subdir、npm ソースの形式もあります。このリポジトリは、npm 公開が行われていないため、npm ソースを使用しません。

以下のセットアップ例は、一致するローカルクローンから実行されます。将来の npm インストールでは、同等の multi-email ... バイナリを直接使用できます。コンシューマプロジェクトから npm run setup を実行しないでください。

OAuth の構成

デフォルトの構成パスは次のとおりです。

~/.config/codex-multi-email/config.json

別の絶対パスを使用するには、CODEX_MULTI_EMAIL_CONFIG を設定します。セットアップ CLI は、存在しない構成ディレクトリをモード 0700 で作成し、既存の親ディレクトリの権限は変更せず、構成ファイルをモード 0600 で書き込み、シンボリックリンクまたは通常のファイルではない構成ターゲットを拒否します。

いずれかのプロバイダーを個別に初期化するか、両方のプロバイダー設定を 1 つのコマンドで指定します。

Google のみ:

node ./scripts/multi-email init \
  --google-client-json /absolute/path/to/desktop-oauth.json

Microsoft のみ:

node ./scripts/multi-email init \
  --microsoft-client-id <entra-application-client-id> \
  --microsoft-tenant organizations

両方のプロバイダー:

node ./scripts/multi-email init \
  --google-client-json /absolute/path/to/desktop-oauth.json \
  --microsoft-client-id <entra-application-client-id> \
  --microsoft-tenant organizations

後で Microsoft 設定を追加または置換するには:

node ./scripts/multi-email set-microsoft-client <entra-application-client-id> \
  --microsoft-tenant organizations

各メールボックスを個別に追加して認可します:

node ./scripts/multi-email add-account gmail-01 <gmail-address> google
node ./scripts/multi-email auth gmail-01

node ./scripts/multi-email add-account m365-main <microsoft-365-address> microsoft
node ./scripts/multi-email auth m365-main

node ./scripts/multi-email list
node ./scripts/multi-email doctor

プレースホルダーはドキュメントでのみ使用してください。実際のアドレス、OAuth クライアント JSON、生成された構成、認可 URL、コード、トークンをコミットしないでください。

Google OAuth

Google の認可は、ループバックデスクトップ OAuth フローを介して openid、email、gmail.modify を要求します。返された Gmail プロファイルは、トークンが Keychain に保存される前に、構成されたアドレスと完全に一致する必要があります。

独自の OAuth 資格情報を使用しても、アプリまたはユーザーが Google の検証、同意画面、テストユーザー、制限付きスコープ、組織、割り当て、保持要件を免除されるわけではありません。Testing のままの OAuth プロジェクトは、検証済みの本番アプリとは異なる動作をする可能性があり、個々のアカウントまたは管理者がアクセスをブロックすることもできます。

Microsoft OAuth

Microsoft の認可は、MSAL システムブラウザの対話型認可を使用し、委任された User.Read、Mail.ReadWrite、Mail.Send を要求します。MSAL キャッシュが保存される前に、/me プロファイルが構成された ID と一致する必要があります。テナントポリシーまたは管理者の同意により、これらのスコープがブロックされる場合があります。

Codex での使用

常にアカウントエイリアスを指定します:

  • 「gmail-01 を使用して、過去 2 日間の未読メッセージを検索してください。」

  • 「gmail-01 と m365-main にわたって、変更を加えずに返信が必要なメッセージを要約してください。」

  • 「m365-main に返信の下書きを作成してください。送信しないでください。」

  • 「メールを読んだり変更したりせずに、構成されているすべてのアカウントを診断してください。」

送信の場合:

  1. Codex に、選択した下書きをレビュー用に準備するよう依頼します。

  2. MCP サーバーによって開かれた localhost ウィンドウで、認証済み ID、実効 From/Sender/Reply-To、すべての受信者、件名、スレッドヘッダー、形式、添付ファイルのステータス、完全なプレーンテキスト本文を検査します。

  3. そのウィンドウで [承認] または [拒否] をクリックします。

  4. Codex に戻り、ローカルレビューが完了したことを明示的に確認します。

  5. サーバーは実効送信マニフェストを再構築し、1 回限りの承認を使用し、プロバイダーリビジョンを再確認し、承認された許可リストに登録されたフィールドを 1 つの送信リクエストに凍結します。

  6. Microsoft の凍結送信は、Graph の既存の下書き送信アクションに条件付きリビジョンガードがないため、元のソース下書きを意図的に保持します。結果フィールド sourceDraftRetained を確認してください。新しいレビューなしでその保持された下書きを再度送信しないでください。

ローカルレビュー URL、Cookie、ナンス、フィンガープリント、OAuth 値、Keychain の内容を Codex や issue に貼り付けないでください。

更新

ローカルクローンマーケットプレイスの場合:

git fetch origin --tags
git checkout --detach v0.1.2
codex plugin add multi-email@multi-email

v0.1.2 は、レビュー済みの新しい注釈付きリリースタグにのみ置き換えてください。--ref でインストールされた Git マーケットプレイスは固定されたままなので、新しいリリースに明示的に移動します:

codex plugin remove multi-email@multi-email
codex plugin marketplace remove multi-email
codex plugin marketplace add lanfuli/multi-email --ref v0.1.2
codex plugin add multi-email@multi-email

再インストール後、新しい Codex タスクを開始します。

アンインストールとローカルデータの削除

プラグインとマーケットプレイスを削除します:

codex plugin remove multi-email@multi-email
codex plugin marketplace remove multi-email

プラグインの削除では、OAuth 資格情報や構成は削除されません。クローンを削除する前に、保護されたライフサイクルコマンドを優先してください:

node ./scripts/multi-email logout <alias> --confirm
node ./scripts/multi-email revoke <alias> --confirm

logout はローカル資格情報を削除します。revoke は、プロバイダーが安全にサポートしている場合、プロバイダー側の失効も試みます。Microsoft では、Microsoft My Apps による削除とそれに続く logout が必要になる場合があります。プロバイダーの失効が成功したと想定せず、コマンドの結果を確認してください。

現在の Keychain 項目は、サービス io.github.lanfuli.multi-email を使用します。以前のインストールでは、com.openai.codex.multi-email の下に検証済みのレガシー項目がある場合もあります。資格情報ストアは、プロバイダー ID を検証した後にのみ移行します。doctor は意図的に読み取り専用であり、移行することはありません。オプションのレガシークリーンアップには macOS キーチェーンアクセスを使用し、~/.config/codex-multi-email/config.json を削除する前に正確な構成パスを確認してください。

開発

npm ci
npm run validate
npm run pack:check
npm audit --omit=dev --audit-level=high

npm run build は、package-lock.json の正確な @vercel/ncc バージョンを使用し、CommonJS バンドル dist/server.cjs を生成し、keyring.darwin-arm64.node と keyring.darwin-x64.node の両方を含みます。CommonJS は、ネイティブ Keychain ローダーが Node の __filename/createRequire 動作に依存しているため、意図的です。コールドインストールチェックでは、依存関係のない Git スナップショットとインストールされた npm ターボールの両方をテストします。

パッケージメタデータは、将来の公開 npm パッケージ codex-multi-email に構造的に準備されていますが、この README は、名前が予約されていることやパッケージが公開されていることを主張するものではありません。メンテナーは、認証し、所有権を確認し、npm publish --dry-run を検査し、明示的に公開する必要があります。

CONTRIBUTING.md、SECURITY.md、CHANGELOG.md を参照してください。

トラブルシューティング

  • 不明なエイリアス: node ./scripts/multi-email list を実行し、すべての呼び出しで正確なエイリアスを使用してください。

  • 接続の状態が不明確: 1つのエイリアスまたはすべてのエイリアスに対して mail_diagnose_accounts を呼び出します。メッセージを読み取ったり書き込みを行ったりせずに、資格情報の存在、トークンの使用可能性、スコープ、IDを確認します。

  • 未承認またはトークンの期限切れ: node ./scripts/multi-email auth <alias> を再実行してください。トークンをチャットに貼り付けないでください。

  • レビューリクエストの期限切れ/拒否: 新しいレビューを準備し、ローカルウィンドウで新しい決定を行ってください。

  • 承認後に下書きが変更された: 新しい下書き全体をもう一度レビューしてください。

  • レビューできない下書き: HTML、インラインコンテンツ、添付ファイル、代替送信者ID、追加のReply-To値を削除するか、Multi Email を使用してプレーンテキストの下書きとして再作成してください。ゲートを迂回しないでください。

  • 送信結果が不明確: 再試行しないでください。最初に下書きと送信済みを読み取り専用で確認してください。

  • Gmailの認可がブロックされた: OAuth同意画面、テストユーザーのステータス、要求されたGmailスコープ、アカウント/組織のポリシー、アプリの検証状態を確認してください。

  • Microsoftの同意がブロックされた: パブリッククライアント設定、テナントの選択、委任されたアクセス許可、管理者ポリシーを確認してください。

  • 共有メールボックスまたは代替Fromアドレス: 正確な委任IDとアクセス許可が実装され、エンドツーエンドで検証されるまでサポートされません。

ライセンス

MIT © 2026 Vincent_Lan。LICENSE を参照してください。

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    C
    maintenance
    Enables AI agents to search, read, and draft emails across multiple Gmail accounts using short aliases, while requiring human approval before any message is sent.
    12
    1
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables supervised reading, drafting, and sending of email across labeled Gmail, Google Workspace, and Purelymail accounts without a default sender, using explicit delivery authorizations and secure local credential storage.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables coding agents to search, read, analyse, draft, and organise Gmail across multiple mailboxes, with sending strictly gated behind user approval.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables natural-language interaction with Gmail, including reading, searching, drafting, and managing emails, with safety features like read-only mode and bounded reads.
    Apache 2.0