Envelope について
Envelopeは、既存のIMAP・SMTPメールボックスを統合受信箱と、エージェント向けのCLI・MCPツールに接続します。複数アカウントのメール操作に対応し、エージェントが作成したメールは送信前に承認待ちとなります。
主な機能
- 01複数アカウントの統合受信箱
- 02IMAP・SMTPメールボックスへのアクセス
- 03JSON出力対応のCLI
- 04エージェント向けMCPツール
- 05下書きの承認と送信予約
- 06検索、アーカイブ、スヌーズ
活用シーン
- 01複数のメールボックスをまとめて閲覧・検索
- 02エージェントに承認待ちメールを作成させる
- 03複数アカウントのメールをアーカイブまたはスヌーズ
MCP 対応
接続済みメールボックスを操作するメールツールをMCPクライアントに提供します。エージェントによる送信には下書きと承認の制御があります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
📧 Envelope
U+1F4E7 — 知っている人にはわかる、というものです。
すべてのメールアカウントを一つの受信トレイにまとめ、エージェントと共有できます。
なぜ U1F4E7 なのですか? 📧 の Unicode コードポイントだからです。人間にはリポジトリ名に見えますが、エージェントには封筒に見えます。
セットアップ • 出先での利用 • CLI • ルール • MCP • エージェント用プラグイン • 代替手段との比較 • ダッシュボード • 商用ライセンス • ライセンス
Envelope は、お使いのメールアカウント(Gmail、Fastmail、iCloud、ご自身のドメイン、任意の IMAP サーバー)に接続し、すべてを一か所にまとめます。ブラウザーで統合受信トレイを開けば、すべてのアカウントのメールをまとめて読んだり、一括検索したり、アカウントをまたいでまとめてアーカイブやスヌーズを設定したりできます。エージェントも CLI から JSON 出力を使って、または MCP 経由で同じメールボックスを操作できます。エージェントが作成したメールは、承認されるまで送信されません。
DNS の変更も、新しいドメインの設定も、メッセージごとの料金も不要です。各メールアドレスにアプリパスワードを追加すれば使い始められます。
envelope accounts add --email [email protected]
envelope accounts add --email [email protected]
envelope serve # every account in one inbox at http://localhost:3141
envelope inbox --account [email protected] --json # the same mail, for your agent
インストール
# macOS or Linux: downloads the release binary for your OS and CPU, checks it
# against the release's SHA-256 file, and installs it to ~/.local/bin (no sudo).
curl -fsSL https://u1f4e7.com/install.sh | bash
# Homebrew (macOS or Linux) installs the same release binary.
brew install tymrtn/u1f4e7/envelope
# `tymrtn/u1f4e7/u1f4e7` is a live compat alias for the same formula.
自分でビルドする場合:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh && source "$HOME/.cargo/env"
git clone https://github.com/tymrtn/U1F4E7
cd U1F4E7
cargo build --release
# Add `--features governor` to build in the Governor send gate (see below).
cp target/release/envelope ~/.local/bin/envelope
リリースワークフローは、Apple の認証情報を設定すると macOS バイナリに署名して公証します(docs/release-signing.md)。設定されるまでは、macOS のリリースバイナリは署名されません。ブラウザーでダウンロードした未署名の tarball を macOS が実行しない場合は、隔離フラグを解除してください:xattr -d com.apple.quarantine ~/.local/bin/envelope。
クイックスタート
Envelope は、IMAP と SMTP にはパスワードまたはアプリパスワードで、Gmail には Google サインインで認証します。認証方法によって、現在利用できるメールボックスが決まります。
- Fastmail と iCloud Mail: プロバイダーのセキュリティ設定でアプリパスワードを作成してください。
- Gmail:
envelope accounts add --provider google --email [email protected]を実行すると、ブラウザーで Google にサインインします。パスワードで追加したアカウントを切り替えるには、envelope accounts reauth [email protected] --provider googleを実行してください。Envelope の Google アプリが Google のテスト段階にある間は、テストユーザーリストに登録されたアドレスのみサインインでき、Google は7日ごとに再認証を求めます。アプリパスワードを作成できるアカウントでは、引き続き利用できます。別のデバイスから操作する場合は--pasteを追加してください(SSH では自動的に使用されます)。または、今--paste --no-waitを実行し、24時間以内に--finish -を実行してください。 - Migadu、セルフホストの Dovecot、その他ほとんどの IMAP ホスト: 通常のメールボックスパスワードを使用します。
- Proton Mail: 有料の Proton プランが必要な Proton Mail Bridge 経由で接続します。セットアップについてはProton Mailをご覧ください。
- Outlook.com、Hotmail、Live、Microsoft 365: 現時点ではサポートされていません。Microsoft は Outlook.com アカウントと Exchange Onlineで IMAP のパスワードサインインを無効にしたため、アプリパスワードを使っても解決しません。
Envelope は保存する認証情報をパスフレーズで暗号化します。ターミナルではパスフレーズの入力を求められます。スクリプト、エージェント、および以下のパイプコマンドには入力を求めるターミナルがないため、あらかじめパスフレーズファイルを用意してください。
# Create a random passphrase readable only by you, and point Envelope at it.
# Add the export line to your shell profile, and back the file up: without it
# the saved credentials cannot be decrypted.
(umask 077 && openssl rand -base64 32 > "$HOME/.envelope-passphrase")
export ENVELOPE_MASTER_PASSPHRASE_FILE="$HOME/.envelope-passphrase"
# Add an account. Envelope finds the IMAP/SMTP servers from the email domain
# and logs in before saving; a rejected login fails here and prints what to fix.
# (--skip-login-check saves without logging in, for offline setup.)
printf '%s\n' "$APP_PASSWORD" | envelope accounts add --email [email protected] --password-stdin
# Verify setup end-to-end (paths → account → IMAP auth → inbox peek)
envelope quickstart
# See folders with unread counts
envelope folders
# Read the inbox
envelope inbox --limit 20
# Read a message (does not mark it as read)
envelope read 42
# Send with attachment
envelope send --to [email protected] --subject "Report" --body "Attached." --attach report.pdf
# Reply in-thread as a reviewable draft
envelope draft reply 42 --body "Thanks."
# Snooze until Monday
envelope snooze set 42 --until monday --reason waiting-reply
# Watch for new mail in real time (IMAP IDLE push)
envelope watch --json
# Retrieve a verification-code JSON result for unattended automation (bounded and fail-closed)
envelope --json code --account [email protected] --from [email protected] --wait 60
# Schedule a send for business hours
envelope send --to [email protected] --subject "Report" --body "..." --at "monday 9am"
# Import contacts from your inbox, then create a contact-based rule
envelope contacts import --from-inbox
envelope rule create --name "VIP" --match-contact-tag vip --action flag=\\Flagged
# Agent scores a message, creates a rule, Envelope enforces it forever
envelope tag set 42 --score urgent=0.1 --tag newsletter
envelope rule create --name "Junk newsletters" --match-tag newsletter --match-score-below interesting=0.3 --action move=Junk
envelope rule run --confirm
# Unsubscribe from a mailing list (dry-run by default)
envelope unsubscribe 99
# Open the local dashboard at http://localhost:3141 (loopback, no auth — single-user local trust)
envelope serve
# Expose it to agents/devices on your tailnet — REQUIRES auth first.
# Option A (humans): allowlist tailnet identities; `tailscale serve` proves them.
envelope config set dashboard.tailscale_allow "[email protected],[email protected]"
# Option B (agents/scripts): a bearer token (stored 0600, never echoed).
envelope config set dashboard.auth_token "$(openssl rand -hex 32)"
tailscale serve --bg 3141
# See where Envelope is storing local state
envelope paths
ダッシュボードは、3ペイン構成のメールシェルとして開きます。Unified Inbox はデフォルトの読み取り専用画面で、ローカルのメッセージインデックスから読み込みます。実際の IMAP メールボックスにアクセスするのは、明示的な更新やアカウント/フォルダーの選択時のみです。
実際の送信は、まず送信トレイに追加されます。デフォルトでは、許可された送信は安全性確保のためのクールダウン付きでキューに入り、後からスケジュール送信の処理で SMTP 送信されます。エージェントが送信する際は、必ず事実に基づく属性を申告する必要があります。Envelope は、キューへの追加や送信の前に、申告された属性を観測可能な情報と照合します。
Governor によるスコアリングは、デフォルトでは無効のビルド時 Cargo 機能です。Homebrew とリリースアーカイブはこの機能なしでビルドされるため、そこでの送信は Governor によるスコアリングを受けず、送信結果と監査イベントにはゲートが mode: "off" として記録されます。これらのビルドでも、エージェントトークンを持つ MCP セッションには下書きのみという上限が適用されますが、シェルアクセスを持つエージェントは envelope send(デフォルトは autonomous-send)経由で送信できるため、エージェントにはシェルではなくエージェントトークン付きの MCP を提供してください。cargo build --release --bin envelope --features governor(または cargo install --path crates/cli --features governor)でビルドした場合、SMTP 送信の直前にサニタイズ済みのコンテキスト属性が導出され、governor score --catalog envelope を使って Governor によるスコアリングが行われます。不透明な Governor の allow が返された場合に限り、送信されます。これらのビルドでは、SMTP_GOVERNOR_BIN(crates/email/src/outbound.rs)で指定されたパスに Governor バイナリが存在する必要があり、存在しない場合はすべての送信がフェイルクローズします。メッセージ本文、受信者の完全なアドレス、添付ファイルのバイト列、シークレットが Governor のリクエストに含まれることはありません。
--json 出力のダッシュボード URL メタデータは、UI の構築時またはリクエストごとに、ルートプロキシが http://127.0.0.1:3141 を指す、アクティブなローカルの tailscale serve HTTPS ルートから新たに検出されます。検出できない場合は http://localhost:3141 にフォールバックします。
エージェント向けの各 ui オブジェクトには、この判定が dashboard_origin_source(tailscale_serve または localhost_fallback)として記録されます。検出に対応が必要な場合に限り、シークレットを含まない dashboard_origin_warning が追加されます。
MCP の結果では ui オブジェクトは省略され、呼び出しで include_ui_links: true が指定されない限り Tailscale の検出も行われません。そのため、デフォルトではホストの tailnet 名がモデルのコンテキストに含まれません。
dashboard_path は常にポータブルで、エージェント用の正規の参照先として使われます。dashboard.base_url と従来のダッシュボードベース URL 用環境変数は互換性のためだけに残されており、エージェントに出力される UI リンクには影響しません。
Tailscale Serve を使うとダッシュボードは tailnet 内に限定されます。Tailscale Funnel を使うとパブリックインターネットに公開されるため、その公開を意図していない限り、メールボックスのダッシュボードに Funnel を使用しないでください。
認証(ループバック以外に公開する前に必須)
127.0.0.1 では、ダッシュボードは認証なしで使える単一ユーザー向けのローカルインターフェースです。信頼境界はシェルと同じです。REST API ではメールの読み取りと削除、アカウントの管理、送信のキュー登録を行うため、別のデバイスからアクセス可能になった時点(ループバック以外への --bind、または tailscale serve のフロントエンド)で、必ず認証情報を要求する必要があります。次のいずれかを設定してください。
- Tailscale ID の許可リスト(
dashboard.tailscale_allow)—Tailscale-User-Loginヘッダー(tailscale serveが挿入)に含まれる値が許可リストにあれば、そのリクエストは認証されます。人間は.ts.netの URL を開くだけでよく、トークンを入力する必要はありません。tailscale serveの背後でのみ安全に使用できます。このヘッダーを設定し、除去するのはtailscale serveです。 - Bearer トークン(
dashboard.auth_tokenまたはENVELOPE_DASHBOARD_TOKEN)—Authorization: Bearer <token>(またはX-Envelope-Token)として送信し、定数時間で比較されます。Hermes/OpenClaw エージェントやスクリプト向けの方法です。
どちらかを設定すると、tailscale serve がループバックをフロントエンドとして使用する場合も含め、有効な認証情報がなければすべての /api ルートが 401 を返します。認証方式が設定されていない場合、envelope serve --bind <non-loopback> は起動を拒否します。/api/health は稼働確認プローブから引き続きアクセスできますが、ローカルのファイルシステムパスが開示されるのは認証済みの呼び出し元のみです。CORS の許可リストはブラウザー専用の防御であり、アクセス制御ではありません。
Himalaya / Cloudflare / Resend ではなく、なぜこれを選ぶのか?
Himalaya との比較
Himalaya は優れた CLI メールクライアントです。Envelope はエージェント向けに構築された CLI メールクライアントです。
| Envelope | Himalaya | |
|---|---|---|
| メールの作成/返信/転送 | ✅ | ✅ |
| 受信トレイ/検索/フォルダー | ✅ | ✅ |
| 移動/コピー/削除/フラグ設定 | ✅ | ✅ |
| 添付ファイル(送信+ダウンロード) | ✅ | ✅ |
| JSON 出力 | ✅ | ✅ |
| 複数アカウント | ✅ | ✅ |
| 自動検出(メールアドレス+パスワードだけで完了) | ✅ | ❌ 手動設定 |
| スヌーズ+スヌーズ解除 | ✅ | ❌ |
| スレッド化(11 言語の件名正規化) | ✅ | ❌ |
| ルールエンジン(エージェントが学習する迷惑メールフィルター) | ✅ | ❌ |
| メッセージのスコアリング+タグ付け | ✅ | ❌ |
| 配信停止(RFC 8058 ワンクリック) | ✅ | ❌ |
| Sieve エクスポート | ✅ | ❌ |
IMAP IDLE プッシュ(envelope watch) | ✅ | ❌ |
| 確認コードの抽出 | ✅ | ❌ |
| MCP サーバー(Claude Code、Cursor、Zed) | ✅ | ❌ |
送信予約(--at) | ✅ | ❌ |
| ルールと連携する連絡先 | ✅ | ❌ |
| Webhook ルールアクション | ✅ | ❌ |
| ローカルホストのダッシュボード(Web UI) | ✅ | ❌ |
Cloudflare Email Service との比較
Cloudflare の Email Service(2026 年 4 月にパブリックベータ開始)は、Cloudflare プラットフォーム向けのメールインフラストラクチャです。Envelope は、既存のメールボックスを使いこなすためのものです。
| Envelope | Cloudflare Email | |
|---|---|---|
| 既存のメールボックスを持ち込んで使用 | ✅ | ❌ Cloudflare のルーティング |
| DNS 設定が必要 | 不要 | Cloudflare DNS |
| 受信トレイの読み取り(完全な IMAP) | ✅ | ❌ インバウンドルーティングのみ |
| セルフホスト可能 | ✅ | ❌ Workers プラットフォーム |
| メッセージごとの料金 | $0 | 有料の Workers プラン |
| エージェント向け | ✅ CLI+JSON | ✅ Workers SDK |
| ルールエンジン | ✅ ローカル+Sieve | Workers AI |
| オフラインで動作 | ✅ | ❌ Cloudflare のみ |
| あらゆるプロバイダーに対応 | ✅ Gmail、Fastmail、iCloud、Migadu、パスワード認証を使うあらゆる IMAP ホスト | ❌ Cloudflare のみ |
| オープンソース | ✅ FSL-1.1-ALv2 | リファレンスアプリのみ |
Resend / Mailgun / SendGrid との比較
| Envelope | Resend | Mailgun | SendGrid | |
|---|---|---|---|---|
| 既存のメールボックスを持ち込んで使用 | ✅ 既存のメールアドレス | ❌ 新しいドメイン | ❌ 新しいドメイン | ❌ 新しいドメイン |
| DNS 設定 | 不要 | SPF/DKIM/DMARC | SPF/DKIM/DMARC | SPF/DKIM/DMARC |
| メッセージごとの料金 | $0 | $0.001 以上 | $0.001 以上 | $0.001 以上 |
| 受信トレイの読み取り | ✅ 完全な IMAP | ❌ 送信のみ | ⚠️ 限定的 | ⚠️ 限定的 |
| セルフホスト可能 | ✅ | ❌ | ❌ | ❌ |
| オープンソース | ✅ | ❌ | ❌ | ❌ |
プロバイダーのサポート
Envelope はメールドメインの DNS を調べて、IMAP/SMTP を自動検出します。以下のプロバイダーでテスト済みです。
| プロバイダー | 認証 | 備考 |
|---|---|---|
| Gmail | Google サインインまたはアプリパスワード | [Gmail]/ フォルダープレフィックスは自動的に処理されます |
| Outlook.com / Microsoft 365 | 現時点では未対応 | Microsoft は IMAP に OAuth サインインを要求しますが、Envelope はまだ OAuth に対応していません |
| Migadu | パスワード | 標準フォルダー |
| Fastmail | アプリパスワード | 標準フォルダー |
| iCloud Mail | アプリ専用パスワード | 標準フォルダー |
| Proton Mail | Proton Mail Bridge 経由の Bridge パスワード(有料の Proton プランが必要) | --trust-cert で Bridge の証明書を信頼してください。詳しくはProton Mailを参照してください |
| セルフホストの Dovecot | パスワード | INBOX. のドット区切りを検出します |
| 汎用 IMAP | パスワード | RFC 3501 に準拠するもの |
Proton Mail
Proton Mail Bridge はコンピューター上で動作し、127.0.0.1 で IMAP と SMTP を介して Proton のメールボックスを提供します。Bridge は有料の Proton Mail プランでのみ利用できます。Envelope の Bridge サポートは、Bridge のものに似た証明書を提示する代替サーバーでテストされています。Bridge 自体で試した人はいないため、確認できた内容をぜひお知らせください。
- Bridge をインストールしてサインインし、アカウントの Mailbox details を開きます。そこに表示されるパスワードを控えてください。Envelope はそのパスワードで Bridge にサインインします。Proton アカウントのパスワードは使えません。Bridge は、デフォルトで IMAP にポート 1143、SMTP にポート 1025 を使用し、接続モードを変更しない限り、どちらも STARTTLS を使用します。
- Bridge は、セットアップ時に生成した自己署名証明書でこれらの接続を暗号化します。Settings → Advanced settings → Export TLS certificates から証明書をエクスポートします。Bridge は選択したフォルダーに
cert.pemとkey.pemを書き込みます。Envelope が必要とするのはcert.pemだけです。ファイル内の秘密鍵はスキップされ、保存されることもありません。 - アカウントを追加します。
printf '%s\n' "$BRIDGE_PASSWORD" | envelope accounts add \
--email [email protected] --password-stdin \
--imap-host 127.0.0.1 --imap-port 1143 --imap-security starttls \
--smtp-host 127.0.0.1 --smtp-port 1025 \
--trust-cert ~/Downloads/cert.pem
--trust-cert を指定すると、このアカウントは IMAP、SMTP、ManageSieve 接続で、公開認証局の証明書の代わりに、指定した証明書だけを信頼するようになります。それ以外のアカウントでは、これまでどおり証明書が検証されます。Bridge の IMAP 接続モードを SSL に設定した場合は、--imap-security tls を使用してください。Bridge の SMTP は STARTTLS のままにしてください。Envelope が SMTP に SSL を使用するのはポート 465 の場合だけです。
Bridge の証明書が変更されると、Envelope はサインイン前に接続を拒否し、信頼済み証明書と提示された証明書のフィンガープリントを表示します。新しい証明書をエクスポートし、envelope accounts tls --account [email protected] --trust-cert cert.pem で信頼するよう設定してください。envelope accounts tls --account [email protected] を実行すると、アカウントが現在信頼している証明書を確認できます。また、openssl x509 -noout -fingerprint -sha256 -in cert.pem を実行すると、ファイルのフィンガープリントが同じ形式で表示されます。
MCP サーバー
envelope mcp は、stdio 経由で Model Context Protocol サーバーを起動します。Claude Code、Cursor、Zed、またはあらゆる MCP ランタイムで、そのまま使えるメール機能を提供します。
フレーミングは MCP stdio 仕様に準拠しています。stdout には、1 行につき 1 つの改行区切り JSON-RPC メッセージだけを出力し、それ以外は出力しません(ログは stderr に出力されます)。stdin では、サーバーは改行区切り JSON と、1.1.0 より前のバージョンを前提に実装された呼び出し元向けのレガシーな Content-Length: フレーミングを受け付けます。どちらを使うかはメッセージごとに判定されます。
# Print a ready-to-paste config snippet
envelope mcp --config
# Output (paste into your MCP config):
# {
# "mcpServers": {
# "envelope": {
# "command": "/path/to/envelope",
# "args": ["mcp"]
# }
# }
# }
ツールには、inbox、read、search、send、reply、create_reply_draft、create_forward_draft、modify_draft、get_draft、send_draft、move_message、flag、folders、tag、contacts、accounts、bulk、thread、rules_preview、rules_run、watch_status、snoozeに加えて、threat_showとgovernor_catalogがあります。Envelope は、あらゆる IMAP プロバイダーで動作する唯一の MCP メールサーバーです。
新しいエージェントに渡せる、配布用の単一の運用ガイドについては、Envelope エージェントスキルをご覧ください。
スコープ付きポリシーを使い、1 つの共有受信トレイから複数のエージェントを実行する手順については、エージェントの概要をご覧ください。
Dockerfile は MCP サーバーをコンテナー内で実行します(docker build -t envelope . を実行し、続けて docker run -i --rm envelope を実行します)。/home/envelope/data にデータディレクトリをマウントし、その中に作成したエージェントの ENVELOPE_AGENT_TOKEN を渡してください。トークンがない場合、データベースがまだ存在しないときに限り、コンテナーが起動します。その後、メールアカウントを持たない使い捨てエージェントを空のストアに作成するため、MCP ディレクトリはサーバーを起動してツールを一覧表示できます。
エージェントから Envelope を使う
Envelope は、Claude Code、Codex、Cursor 向けプラグインとして、また skills.sh のスキルとして提供されています。インストールすると、メール操作用の envelope と、初回セットアップ用の envelope-setup の 2 つのスキルが追加されます。また、ローカル MCP サーバー(envelope mcp)も追加されます。
前提条件: PATH 上に envelope バイナリがあることです。バイナリがない場合は、envelope-setup スキルがインストール方法を案内します。
curl -fsSL https://u1f4e7.com/install.sh | bash
# or
brew install tymrtn/u1f4e7/envelope
tymrtn/u1f4e7/u1f4e7 は、同じフォーミュラを指す有効な Homebrew 互換エイリアスです。
次に、アカウントを追加し、エージェント用のトークンを作成します。パスワードとトークンがエージェントを経由しないよう、両方ともご自身のターミナルで実行してください。
envelope accounts add --email [email protected]
envelope agent create claude-code
エージェント名は一意である必要があり、無料プランではアクティブなエージェントを 2 つまで利用できます(envelope agent list で確認できます)。ツールごとに異なる名前を使うか、複数のツールで 1 つのエージェントのトークンを再利用してください。
Claude Code(インストール時にトークンの入力を求められます):
/plugin marketplace add tymrtn/U1F4E7
/plugin install envelope@envelope
Codex(シェル環境から ENVELOPE_AGENT_TOKEN を引き継ぎます):
codex plugin marketplace add tymrtn/U1F4E7
codex plugin add envelope@envelope
次に、エディターで、Codex を起動するシェルプロファイル(例:~/.zshrc)にトークンを追加します。プロンプトで入力すると、シェルの履歴に残ってしまいます。
export ENVELOPE_AGENT_TOKEN=<token>
Cursor Marketplace プラグイン: マーケットプレイスから Envelope をインストールし、Plugins → Configure で ENVELOPE_AGENT_TOKEN を設定します。掲載文はMARKETPLACE.mdにあります。
Claude Desktop(MCP Bundle):最新リリースから envelope-<version>.mcpb をダウンロードして開きます。トークンを設定するよう Claude から求められます。また、ENVELOPE_MASTER_PASSPHRASE_FILE を設定している場合は、パスフレーズファイルも求められます。このバンドルには macOS と Linux 用の envelope バイナリが同梱されており、CLI と同じアカウントとデータを使用します。
スキルのみ(skills.sh がサポートするすべてのエージェント向け):
npx skills add https://github.com/tymrtn/U1F4E7/tree/main/skills
| パス | 役割 |
|---|---|
skills/envelope/、skills/envelope-setup/ | すべてのツールで共有されるスキル |
.claude-plugin/ | Claude Code のマニフェストとマーケットプレイス |
.codex-plugin/、.agents/plugins/marketplace.json | Codex のマニフェスト、MCP 設定、マーケットプレイス |
.cursor-plugin/plugin.json、mcp.json | Cursor のマニフェストと MCP 設定 |
packaging/mcpb/ | MCP Bundle のマニフェスト、ランチャー、アイコン。リリース時に scripts/package-mcpb.sh でパッケージ化します |
プラグインのバージョンは Envelope のリリースに合わせられます。ci/check-agent-plugins.sh によって整合性が確認されます。
ルールエンジン
エージェントは知能を担います。Envelope は実行を担います。
# 1. Agent reads inbox and scores each message
envelope inbox --json | jq -r '.[].uid' | while read uid; do
envelope tag set "$uid" --score urgent=0.1 --score interesting=0.2 --tag newsletter
done
# 2. Agent creates rules from observed patterns
envelope rule create --name "Junk newsletters" \
--match-tag newsletter --match-score-below interesting=0.3 \
--action move=Junk
# 3. Preview, then explicitly confirm rule execution
# Preview is read-only; --confirm is required for mailbox mutation.
envelope rule preview
envelope rule run --confirm
# 4. Export to Sieve for server-side filtering
envelope rule export
LLM は Envelope に、何を探すべきかを教えます。Envelope はそのパターンを決定論的に適用します。新しいものが現れたときだけ、LLM が再び処理に加わります。
rShield
rShield は、マシン上のすべてのメッセージについて、フィッシングやマルウェアのスコアを判定します。結果は clean、suspicious、dangerous、または回答が必要なアナライザーから回答を得られなかった場合の unavailable です。6 つのローカルアナライザーがデフォルトで有効になっており、どこにもデータを送信しません。
envelope threat scan # score the newest INBOX messages
envelope threat explain 4812 # the signals and arithmetic behind a verdict
envelope threat report 4812 # draft a report to APWG (never sends)
2 つのオプションのアナライザーは、有効にするまで無効になっています。
| アナライザー | 有効化方法 | マシンから送信されるデータ |
|---|---|---|
| ClamAV | brew install clamav を実行して clamd を起動し、envelope config set threat.clamd.address unix:/path/to/clamd.sock を実行します | 添付ファイルのバイトデータ。設定した clamd に送信されます |
| Spamhaus DBL | envelope config set threat.reputation.provider spamhaus-dbl を実行します(必要に応じて threat.reputation.dqs_key も設定します) | 送信者とリンクのドメイン名。DNS クエリとして Spamhaus に送信されます |
threat report は RDAP を通じて、送信元ドメインと、該当する場合は偽装対象のドメインの不正利用に関する連絡先も検索し、それらのドメイン名を各ドメインのレジストリに送信します。外部への検索はすべて lookup_performed イベントとして記録されます。Spamhaus はブロックリストの無料および商用利用を制限しています。まず利用規約をご確認ください。セットアップの詳細、重み付け、clamd の手順については、docs/rshield.mdをご覧ください。
ダッシュボード
envelope serve を実行すると、http://localhost:3141 で localhost のウェブ UI が起動します。
- 左側のメールボックスサイドバーには、Unified Inbox、Today/Needs Attention、Snoozed、 Sent、Drafts、All Mail、アカウントのメールボックスが表示されます
- 中央のメッセージ一覧と、右側に常時表示されるリーダー
- 承認待ちのエージェントの下書きを確認する Review ページと、 各エージェントの履歴を表示する Logs ページ
- ヘッダーのスレッド情報を自動処理する Reply/Reply-all
- テキスト/HTML の切り替えとファイル添付に対応した作成機能
- ★ 期限超過を強調表示する Snoozed 仮想フォルダー
- Gmail 形式の演算子(
from:、subject:、is:unread、before:)を使ってすべてのアカウントを横断検索
旅行
Envelope Travel は、/travel にあるセルフホスト可能な旅程・家族間調整用ワークスペースです。すでにお持ちの Gmail または Google Workspace のメールアドレスを使用するため、転送用アドレスや新しい旅行用アカウントは必要ありません。
- Google の 2 段階認証プロセスを有効にして、アプリ パスワードを作成します。
envelope serveを実行して Travel を開き、メールアドレスとアプリ パスワードを入力します。Envelope は暗号化された認証情報を保存する前に Gmail を検証します。新規の macOS インストールでは自動的に Keychain が使用されます。既存の暗号化ファイルストアはそのまま使われます。ヘッドレスの Linux ホストでは、サービスを起動する前にENVELOPE_MASTER_KEYまたはENVELOPE_MASTER_PASSPHRASE_FILEを設定してください。- 確認メールを設定済みの Gmail フォルダー(デフォルトでは INBOX)に残すか、Travel の設定で
[Gmail]/All Mailを選択してアーカイブ済みの確認メールも含めるか、確認メールをレシートデスクに貼り付けます。メールボックスのスキャンは読み取り専用です。IMAP のEXAMINEとBODY.PEEK[]を使用するため、メールが既読になることはありません。
このワークスペースでは、フライト、宿泊施設、鉄道、レンタカー、アクティビティを旅行ごとにまとめ、元のレシートとパーサーの来歴を保持し、確実でない情報を承認待ちに隔離し、メールで届いた変更やキャンセルを検出して、リマインダーをスケジュールし、共有タスクを提供します。家族用リンクは取り消し可能で、確認コード、レシート本文、非公開メモ、パーサーのメタデータは構造上含まれません。共有ごとに個別の読み取り専用 .ics アクセス機能も用意されるため、Apple Calendar、Google Calendar などのカレンダー購読先にタスクを編集する権限が渡ることはありません。
コンピューターのみでインストールする場合、同期、アラート、家族向けページ、カレンダーの更新が必要な間は envelope serve を実行したままにしてください。スリープ中のノートパソコンでは Gmail をポーリングできません。家族のデバイスからアクセスするには、「クイックスタート」にある Tailscale の設定を推奨します。常時稼働する Linux ホストでは、docs/install-linux.md に従って systemd ユーザーサービスをインストールし、ENVELOPE_HOME を永続的な暗号化ストレージに設定し、ダッシュボード認証を必須にして、Tailscale Serve または信頼できるリバースプロキシで TLS を終端してください。メールボックスのダッシュボードを認証なしで公開しないでください。Envelope がループバック以外のアドレスに直接バインドされている場合、Gmail のオンボーディングは意図的に無効になります。アプリ パスワードは localhost 経由でのみ入力するか、Envelope のリスナーがループバック上にある HTTPS/Tailscale プロキシ経由で入力してください。カスタムプロキシでは、X-Forwarded-Proto をクライアント側で実際に使用されるスキームで上書きする必要があります。平文のプロキシリクエストや、競合する HTTP ブラウザーオリジンからのリクエストは、Gmail 認証情報の設定時に拒否されます。
現在、旅行の変更や遅延は Gmail で受信したメッセージに基づいています。ゲート、航空機、手荷物受取ベルト、運航遅延のリアルタイム情報を取得するには別途フライト状況プロバイダーが必要です。航空会社から更新メールが届いていない場合、その情報が推測されることはありません。スケジュールされたアラートは Travel ワークスペースに表示されます。このビルドでは、ブラウザーを閉じている間のプッシュ通知にはまだ対応していません。
商用ライセンス
個人利用は無料です。商用展開では、1 つのプライマリドメイン上のメールボックスユーザー数に応じた年額固定ライセンスが適用されます。
| プラン | 価格 | 対象範囲 | サポート |
|---|---|---|---|
| Personal | 無料 | ご自身が所有・運用するメールボックスでの個人による非商用利用 | GitHub の Issue を通じたコミュニティサポート |
| Team | $240/year | 1 組織での商用利用、1 つのプライマリドメイン上でメールボックスユーザー最大 10 人 | メールサポート、可能な限り翌営業日までに回答 |
| Growth | $960/year | 1 組織での商用利用、1 つのプライマリドメイン上でメールボックスユーザー最大 25 人 | 優先メールサポート、翌営業日までの回答を目標 |
| Enterprise | お問い合わせください | 26 人以上のユーザー、複数ドメインでの展開、組み込み/OEM、再販条件、またはカスタムセキュリティレビュー | カスタムサポート契約 |
「商用利用」とは、社内業務、顧客向けワークフロー、製品への Envelope の組み込みなど、企業、チーム、代理店、または有償プロジェクトによる、もしくはそのための Envelope のあらゆる利用を意味します。「メールボックスユーザー」とは、Envelope が読み取り、送信、または自動化するように設定されている、ライセンス対象ドメイン上の個人またはサービス用メールボックスの一意の ID を意味します。同じメールボックスで複数のエイリアスを持つ 1 人のユーザーは、1 人として数えます。「ドメイン」とは 1 つのプライマリメールドメインを意味します。そのプライマリドメインのサブドメインは含まれますが、関連のない追加ドメインには Enterprise が必要です。
ライセンスは年単位で、組織間で譲渡できず、発行日の記念日に更新されます。年次ライセンスは [email protected] までお申し込みください。
証拠バンドル
envelope evidence は、ソースメールボックスを読み取り専用のままにして、クエリ対象を限定したローカル証拠バンドルを収集します。収集では、IMAP EXAMINE を使用して指定されたフォルダーを開き、BODY.PEEK[] で RFC822 形式の正規の生データを取得します。
envelope evidence collect \
--account [email protected] \
--folder '[Gmail]/All Mail' \
--query 'FROM "[email protected]" SUBJECT "contract"' \
--include-thread \
--out ./evidence-bundle
envelope evidence verify --from ./evidence-bundle
envelope evidence verify --from ./evidence-bundle --strict
構造化フィルターは --query の代わりに使用することも、組み合わせて使用することもできます。フィルターは --from-address、--to-address、--subject、--since、--before、--body、および繰り返し指定可能な --keyword です。生クエリに明示的に ALL を指定する場合を除き、少なくとも 1 つのフィルターが必要です。
スレッドの展開はヘッダーに基づき、上限が設けられています。デフォルトでは、--include-thread は Message-ID、In-Reply-To、References のリンクをたどりながら、最大 500 件のメッセージを取得します。--max-thread-messages で上限を変更できます。上限に達した場合、バンドルに警告が記録されます。
証拠バンドルには、来歴を示すため、意図的にメッセージのメタデータ、アカウント ID、IMAP ホスト/ユーザー名、ローカルソースパスが含まれます。パスワード、OAuth トークン、認証情報ファイルのパスはシリアライズされませんが、バンドルは機密情報として扱ってください。
バンドルの構成:
evidence-bundle/
manifest.json
index.csv
README.md
SHA256SUMS
bundle.sha256
messages/<encoded-folder>/<uidvalidity>-<uid>.eml
スレッドの包含は Message-ID、In-Reply-To、References のみを基準とします。件名の一致を代替手段として使用することはありません。ハッシュファイルはローカルでの改ざん検出を提供するものであり、外部署名ではありません。MVP の対象外:ZIP パッケージ化、分離署名、PST/mbox 変換、複数アカウントからの収集、メールボックスの変更、メールボックスへの復元/インポート。
CLI リファレンス
| コマンド | 説明 |
|---|---|
envelope accounts add/list/remove | アカウントを管理します(ホストを自動検出します) |
envelope accounts tls --account <a> [--trust-cert <pem>] [--imap-security tls|starttls] | アカウントのピン留めされた証明書と IMAP STARTTLS の選択を表示または変更します |
envelope folders | 未読数と合計数を含むフォルダーの一覧を表示します |
envelope inbox [--folder] [--limit] | メッセージの一覧を表示します |
envelope read <uid> | メッセージを読み取ります(BODY.PEEK — 自動で既読にしません) |
envelope search "<query>" | IMAP 検索 |
envelope send --to --subject --body [--attach] | 送信トレイ経由でメールをキューに追加/送信します(governor ビルドでは Governor のゲートを通過します) |
envelope move/copy/delete <uid> | メッセージを管理します |
envelope flag add/remove <uid> <flag> | IMAP フラグ |
envelope attachment list/download <uid> | 添付ファイル |
envelope draft create/list/send/discard | 下書き(IMAP を使用) |
envelope snooze set/list/cancel | 柔軟な時刻指定でスヌーズします。cancel --forget はメッセージが存在しないスヌーズを削除し、何も移動しません |
envelope unsnooze [--once] | スヌーズ期間が終了したメッセージを戻します |
envelope thread show/list/build | 会話スレッド |
envelope tag set/show/list | メッセージをスコアリングしてタグ付けします |
envelope rule create/list/test/run/export | メールルール(Webhook アクションに対応) |
envelope backup export/verify/restore | メールボックスをローカルの RFC822 アーカイブにステージングします(オフライン検証、追記のみの復元) |
envelope evidence collect/verify | クエリ対象を限定した RFC822 証拠バンドルを作成し、オフラインで検証します |
envelope unsubscribe <uid> [--confirm] | List-Unsubscribe(デフォルトはドライラン) |
envelope watch [--webhook] [--json] | IMAP IDLE プッシュ — 新着メールイベントをリアルタイムで通知します |
envelope code --from <sender> [--wait 120] | メールプロバイダーが From ドメインを認証した送信者(DMARC または整合する DKIM)から確認コード/OTP コードを抽出します。自動化で --json を使う場合は --account も必要で、返す前に安定化を行います。オペレーターは envelope config set otp.allow_unverified_senders <account> で、アカウントごとに未認証の送信者を許可できます |
envelope paths | 解決済みのデータベース/認証情報のパスと HOME の変動に関する警告を表示します |
envelope contract [--surface <name>] | バージョン管理されたエージェント JSON/MCP コントラクトをエクスポートします |
envelope mcp [--config] | Claude Code、Cursor、Zed 用 MCP サーバー(stdio) |
envelope send --at "monday 9am" | 柔軟な日時指定で送信をスケジュールします |
envelope scheduled list/hold/cancel | スケジュール済みメッセージを管理します(hold はキューから外して下書きを保持し、cancel は破棄します) |
envelope contacts add/list/show/tag/import | ルールと連携する連絡先ストア |
envelope serve | ローカルホストのダッシュボード |
すべてのコマンドで、エージェントによる利用向けに --json を指定できます。
アーキテクチャ
┌──────────────┐ ┌────────────────────────────┐ ┌──────────────┐
│ AI Agent │────▶│ Envelope (Rust) │────▶│ Your SMTP │
│ │ │ │ │ (Gmail, │
│ CLI / JSON │ │ crates/cli binary │ │ Migadu, │
│ │◀────│ crates/email IMAP/SMTP │◀────│ Fastmail) │
│ │ │ crates/store SQLite │ │ │
│ │ │ crates/dashboard web UI │ │ IMAP/SMTP │
└──────────────┘ └────────────────────────────┘ └──────────────┘
開発
cargo build # Build all crates
cargo build --release # Optimized release binary
cargo test --all --features governor # Also test with the Governor gate built in
cargo test # 194 tests, 0 failures
cargo clippy # Lint
./ci/check-orphans.sh # Verify every .rs file is reachable via mod
リリースごとの変更点については、CHANGELOG.md を参照してください。
ライセンス
FSL-1.1-ALv2 — ソースを入手できますが、競合するサービスの提供は禁止されています。 組織での展開、サポート、Enterprise/OEM 条件、およびパブリックライセンスの範囲外の用途には、個別の年間商用ライセンスをご利用いただけます。パブリックライセンスは、各リリースから 2 年後に Apache 2.0 になります。
Copyright © 2026 Tyler Martin.
Tyler Martin が開発
メールを送るためだけに、エージェントに月額 50 ドルの Resend プランを必要とさせるべきではありません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。