zoho-multi-mcp
zoho-multi-mcp
MCP (Model Context Protocol) サーバーで、Claude などの AI アシスタントを Zoho Mail アカウントに接続します。AI ワークフローから直接、メールの読み取り、送信、検索、返信、削除を実行できます。さらに、メールボックスごとに1つのプロセスを使うのではなく、1つの軽量プロセスから任意の数の Zoho メールボックスを実行できます。
これは FujiwaraChoki/zoho-mail-mcp(MIT ライセンス、LICENSE 参照)にマルチアカウント対応を追加したフォークです。元のシングルアカウントサーバーの功績はすべてアップストリームの作者に帰属します。
このフォークが存在する理由
MCP 経由で複数の Zoho メールボックスを実行している場合(チーム用、プロジェクト専用の送信者用など)、自然な構成はメールボックスごとに1つのサーバープロセスを立てることです。これで動作はしますが、各プロセスは、メールボックスがどれほど小さく、またアイドル状態であっても、同じ固定の Bun/V8 ランライムメモリオーバーヘッド(約75〜85MB の RSS)を支払います。メールボックスが3つあれば、そのベースラインの3倍のコストを払うことになりますが、実際のアカウントごとの状態(OAuth トークンやフォルダキャッシュ)はわずかなので、そのコストに見合う利益はありません。
このフォークは、オプトイン方式のマルチアカウントモードを追加します。1つのプロセスで複数の Zoho アカウントを処理でき、呼び出し側が呼び出しごとにアカウントを指定する単一のエンドポイントとして動かすか、既存のセットアップにとってはより安全な選択肢として、それぞれ専用の固定ポートを持つ複数のリスナーを立て、各リスナーが素のシングルアカウントサーバーとまったく同じに動作させることができます。本番環境での測定結果: シングルアカウントの3プロセスを並列実行すると合計 RSS は約 230MB でしたが、同じ3つのメールボックスを提供する1つのプロセスに集約すると約 90MB の RSS になりました。「マルチアカウントモード」セクションより後ろの内容はすべてアップストリームから変更されておらず、メールボックスが1つだけで十分な場合は、従来どおりの動作になります。
Related MCP server: Mailing Manager MCP
ツール
ツール | 説明 |
| すべてのメールフォルダを一覧表示する |
| フィルタリングとページネーション付きでフォルダ内のメールを一覧表示する |
| 指定したメールの完全な内容を読み取る |
| すべてのフォルダからキーワードでメールを検索する |
| 新しいメールを送信する |
| 既存のメールに返信する(返信 / 全員に返信) |
| メールを削除する(ゴミ箱または完全削除) |
セットアップ
1. Zoho API クライアントを作成する
Zoho API Console にアクセスします(米国データセンターの場合は
.comを使用します)Add Client > Self client の順にクリックします
Client ID と Client Secret を控えます
2. リフレッシュトークンを生成する
対話的なセットアップヘルパーを実行します:
bun run setup.tsまたは手動の場合:
Self Client 内で、次のスコープの認可コードを生成します:
ZohoMail.accounts.READ,ZohoMail.folders.READ,ZohoMail.messages.READ,ZohoMail.messages.CREATE,ZohoMail.messages.DELETE有効期間を10分に設定し、説明を追加して、Create をクリックします
生成されたコードをコピーし、セットアップスクリプトで使って交換します
3. 認証情報を確認する
ZOHO_CLIENT_ID=your_id ZOHO_CLIENT_SECRET=your_secret ZOHO_REFRESH_TOKEN=your_token bun run setup.ts --verify4. MCP クライアントを設定する
シングルアカウント — Claude Code(~/.claude.json)
{
"mcpServers": {
"zoho-mail": {
"command": "bun",
"args": ["run", "/path/to/zoho-multi-mcp/src/index.ts"],
"env": {
"ZOHO_CLIENT_ID": "your_client_id",
"ZOHO_CLIENT_SECRET": "your_client_secret",
"ZOHO_REFRESH_TOKEN": "your_refresh_token",
"ZOHO_DATACENTER": "eu"
}
}
}
}Claude Desktop の claude_desktop_config.json も同じ構成です。
マルチアカウントモード
このサーバーで実行する Zoho アカウントごとに、上記のいずれかの手順を一度実行し、それから2つのモードのどちらかを選択します。
モードA — 単一エンドポイント、呼び出し側がアカウントを選ぶ
ZOHO_ACCOUNTS_JSON にアカウントの JSON 配列を設定し、サーバーを通常どおり ZOHO_HTTP_PORT を指定して起動します(または stdio)。すべてのツールに必須の account フィールド(指定した id の文字列 enum)が付き、すべての呼び出しでどのアカウント向けかを指定する必要があります。
export ZOHO_ACCOUNTS_JSON='[
{"id": "work", "clientId": "...", "clientSecret": "...", "refreshToken": "..."},
{"id": "personal", "clientId": "...", "clientSecret": "...", "refreshToken": "..."}
]'
export ZOHO_HTTP_PORT=8010
bun run src/index.tsMCP クライアントが毎回の呼び出しで明示的な account 引数を受け入れ、設定用に single の URL で済みたい場合に適しています。
モードB — 1つのプロセスで複数の固定アカウントリスナーを立てる
上と同様に ZOHO_ACCOUNTS_JSON を設定し、各アカウントを固有のポートに結び付ける ZOHO_MULTI_PORT_JSON を設定します。各リスナーは生粋のシングルアカウントサーバーとして動作します。どのツールも account フィールドを持たず、そのポートの素のシングルアカウント構成とバイト単位で同一です。
export ZOHO_ACCOUNTS_JSON='[
{"id": "work", "clientId": "...", "clientSecret": "...", "refreshToken": "..."},
{"id": "personal", "clientId": "...", "clientSecret": "...", "refreshToken": "..."}
]'
export ZOHO_MULTI_PORT_JSON='[
{"id": "work", "port": 8010, "name": "zoho-mail-work"},
{"id": "personal", "port": 8011, "name": "zoho-mail-personal"}
]'
bun run src/index.ts既存のマルチプロセス構成を移行するときに使うのがこのモードです。MCP クライアントの設定はに使っているのと同じポートを向いたままで、これまで動かしていた複数のプロセスの代わりにこの1つのプロセスを起動するだけで、ほかに変更するものはありません。name は任意で、ログ行のラベルにのみ影響します。
どちらのモードも必須ではありません。ZOHO_ACCOUNTS_JSON と ZOHO_MULTI_PORT_JSON の両方を設定しなければ、サーバーは従来のシングルアカウントのアップストリームプロジェクトとまったく同じに動作し、ZOHO_CLIENT_ID / ZOHO_CLIENT_SECRET / ZOHO_REFRESH_TOKEN を直接読み取ります。
環境変数
変数 | 必須 | 説明 |
| シングルアカウントモードのみ | Zoho API コンソールからの OAuth2 Client ID |
| シングルアカウントモードのみ | OAuth2 Client Secret |
| シングルアカウントモードのみ | OAuth2 Refresh Token(セットアップ時に生成) |
| いいえ | Zoho データセンター: |
| マルチアカウントモードのみ |
|
| マルチポートモードのみ |
|
| いいえ | stdio の代わりに、このポートで HTTP サーバーとして起動します |
| いいえ | stdio / シングルポート HTTP モード用のログ行のラベル |
特徴
自動更新付き OAuth2 - トークンは自動的に更新され、手動での操作は不要。マルチアカウントモードではアカウントごとにキャッシュされます
レート制限 - Zoho API の制限内に収まるよう、組み込みの sliding window レートリミッター(30 リクエスト/分)を搭載
401 でのリトライ - 認証失敗時は自動的にトークンを更新して再試行します
HTML をプレーンテキストに変換 - メール本文は AI が扱いやすいクリーンなプレーンテキストに変換されます
マルチアカウント対応・低メモリ - 上記の「このフォークが存在する理由」を参照
要件
Bun ランライム
API アクセスが有効な Zoho Mail アカウントが 1つ以上
ライセンス
MIT (c) 2026 Sami Hindi — LICENSE を参照してください。このフォークで追加されたマルチアカウント / マルチポート部分は同じライセンスの下で公開されています。
This server cannot be deployed
Maintenance
Related MCP Connectors
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Gmail, Outlook, iCloud, Fastmail and any IMAP mailbox for your agent. Scoped OAuth, no send tool.
1Email inboxes for AI agents: send, receive, search, drafts with owner approval, and webhooks.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to email accounts via IMAP/SMTP, enabling reading, searching, sending, and organizing emails with features like smart drafts, scheduling, and attachment handling.95 npm2MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage multiple email accounts with secure credentials, local full-text search, thread-aware replies, and automation.8 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read, search, send, and reply to Zoho Mail via IMAP/SMTP using an application-specific password.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read, send, search, reply to, and delete emails directly from a Zoho Mail account.8MIT