Mailbox について
Mailboxは、複数のIMAP/SMTPアカウントにアクセスするためのHTTP APIとMCPエンドポイントを提供します。メール操作を制御したいエージェントやワークフロー向けに、トークンの権限範囲で操作とメールボックスを制限し、送信、削除、監査に制約を設けます。
主な機能
- 01複数メールボックスの閲覧・検索・整理
- 02下書き、返信、メール送信
- 03操作とメールボックスによるトークン制限
- 04削除時は既定でTrashへ移動
- 05認証結果と不審な内容の検査
- 06書き込みと拒否操作の監査記録
活用シーン
- 01許可されたアカウント内でのエージェントによるメール検索
- 02人が送信する返信下書きの作成
- 03自動送信権限の制限と操作記録
- 04メール認証情報や偽装的な内容の確認
MCP 対応
MailboxはHTTP APIと同じポートで`/mcp`エンドポイントを提供します。MCPとRESTではトークンの権限範囲とメールボックス許可リストを共有します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mailbox
複数の IMAP/SMTP アカウントのメールを、単一の HTTP API と同じポート上の /mcp にある MCP エンドポイント経由で、閲覧、整理、下書きの作成、送信ができます。各ベアラートークンによって、クライアントがアクセスできる操作とメールボックスが制御されます。
エージェントからアクセスする場合は、明示的な権限を持つトークンを設定してください。
- スコープ付きトークン。
read、draft、organizeを持つトークンでは、送信も削除もできず、それらのツールは表示されません。 - 削除すると、デフォルトでゴミ箱に移動します。 メッセージを削除すると、ゴミ箱に移動します。完全に消去するには
deleteスコープが必要で、ゴミ箱フォルダーからのみ実行できます。このサービスがフォルダー全体に対してEXPUNGEを発行することはありません。 - 下書きは2段階で作成します。 エージェントが返信を準備し、人間(または
send権限を持つトークン)が送信します。 - 送信ガード。 1時間あたりのレート制限、ドライランモード、設定済みの完全一致する ID またはオプトインのドメインパターンによって認可された送信者アドレスを使用します。
- メッセージ分析。 SPF/DKIM/DMARC の判定、ヘッダーの不一致、隠しテキスト、偽装リンクを調べます。判定を信頼するのは、受信サーバーが設定と一致する場合に限られます。必要に応じてサニタイズ済み HTML をリクエストできます。
- 監査ログ。 すべての書き込みと、拒否されたすべての書き込みを記録します(メッセージ本文は記録しません)。
メール本文と下書きは IMAP 上に保持されます。共有 SQLite データベースには、監査記録、送信カウンター、チェックポイント、下書き送信要求の記録、Webhook 配信メタデータが保存されます。API リクエストは使用後にメールサーバーへの接続を閉じます。通知を受け取るため、ウォッチャーは IMAP 接続を開いたままにします。
このサービスでは、Python の imaplib と smtplib、FastAPI、公式の MCP Python SDK、HTML のサニタイズに nh3 を使用します。依存関係の更新では、uv の exclude-newer 設定により、リリースから7日間の猶予期間を設けています。
目次
クイックスタート
config.example.yamlをconfig.yamlに、.env.exampleを.envにコピーします。アカウントを設定し、.envのすべてのプレースホルダーをパスワード、またはopenssl rand -hex 32で生成した新しいトークンに置き換えます。両方のファイルのアクセス権をchmod 600で制限します。- コンテナーを起動します。名前付きボリュームにより、再起動後も運用状態が保持されます。
docker run --rm \
-p 127.0.0.1:8000:8000 \
--env-file .env \
-v "$PWD/config.yaml:/etc/mailboxd/config.yaml:ro" \
-v mailboxd-state:/var/lib/mailboxd \
psyb0t/mailbox:latest
- ヘルス状態を確認し、メールを一覧表示します。
TOKEN="paste-the-token-here"
curl -s http://localhost:8000/health | jq # health is always open
curl -s -H "Authorization: Bearer $TOKEN" http://localhost:8000/mailboxes | jq
curl -s -H "Authorization: Bearer $TOKEN" 'http://localhost:8000/inbox?limit=5' | jq
Docker Compose
リポジトリに含まれる docker-compose.yml は、127.0.0.1:${PORT:-8000} で公開し、./config.yaml(または $MAILBOXD_CONFIG)を読み取り専用でマウントし、mailboxd-state ボリュームを作成します。
services:
mailboxd:
image: psyb0t/mailbox:latest
ports: ["127.0.0.1:8000:8000"]
volumes:
# Keep config.yaml out of Git and restrict access to its credentials.
- ./config.yaml:/etc/mailboxd/config.yaml:ro
- mailboxd-state:/var/lib/mailboxd
volumes:
mailboxd-state:
オプションの Webhook ウォッチャーは、同じファイル内の2つ目のサービスとして用意されており、デフォルトでは無効です。docker compose --profile watch up -d で起動できます。
機能
| 領域 | 操作 |
|---|---|
| 閲覧 | 統合受信トレイ、構造化検索、ソースの生データ、ヘッダー、添付ファイル、スレッド |
| 整理 | 既読フラグ、ラベル、移動、メールボックスの作成、ゴミ箱 |
| 送信 | 設定済みの ID、署名、返信、IMAP の下書き、送信済みメールのコピー |
| アクセス | REST と MCP で共有される、トークンごとのスコープとメールボックスの許可リスト |
| 運用 | SQLite 監査記録、共有送信制限、チェックポイント、永続的な署名付き Webhook |
永続的な運用状態を保存するには、/var/lib/mailboxd をマウントします。HTTP ワーカーとオプションのウォッチャーは、ローカルファイルシステム上の1つの SQLite データベースを共有します。ステートレスなデプロイを置き換える前に、移行に関する注意事項をお読みください。
開発
make lint # flake8 and mypy
make test-coverage # full suite, production container and coverage floor
make audit # frozen runtime and dev dependency advisories
make build # production image
make help # all available targets
すべてのプロジェクトツールは開発イメージ内で実行されます。テストでは、ソケットレベルのIMAP/SMTPフィクスチャー、ローカルHTTPレシーバー、実際のSQLiteファイル、本番コンテナーのスモークテストを使用します。詳細は開発をご覧ください。
ライセンス
WTFPL。LICENSEとサードパーティコンポーネントをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。