outbox について
outboxは、Slack、Telegram、メール、KakaoTalk、Discordにメッセージを送るMCP サーバーです。送信ツールを共通化し、環境変数またはMCPエリシテーションで認証情報を取得できます。
主な機能
- 01共通インターフェースによる複数チャネルへの送信
- 02設定済みメッセージチャネルの管理
- 03Slack、Telegram、メール、KakaoTalk、Discordに対応
- 04環境変数またはMCPエリシテーションによる認証情報の解決
- 05対話型コマンドラインによるチャネル設定
活用シーン
- 01エージェントのワークフローから複数チャネルへ通知
- 02複数サービスのメッセージチャネルを一元設定
- 03MicrosoftまたはKakaoTalkのメッセージ送信に使うOAuthの設定
MCP 対応
outboxはMCP サーバーとして、チャネル管理とメッセージ送信のための`list_channels`、`add_channel`、`send_message`、`remove_channel`ツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
FieldCure MCP Outbox Server
Slack、Telegram、メール(Gmail、Naver、Microsoft Graph API)、KakaoTalk、Discord を通じてメッセージを送信する、マルチチャネル対応の Model Context Protocol (MCP) サーバーです。C# と公式の MCP C# SDK で構築されています。
機能
- 複数のメッセージングチャネル — Slack、Telegram、メール(Gmail、Naver、Microsoft Graph API)、KakaoTalk、Discord
- 4 つの MCP ツール —
list_channels、add_channel、send_message、remove_channel - クロスプラットフォームの認証情報フロー — 実行時のシークレットは環境変数または MCP elicitation から取得でき、OAuth トークンは更新ライフサイクル用に別途保存されます
- CLI によるチャネル設定 — 対応する場合、ブラウザー/OAuth フロー用の対話型コンソールを使用します
- SMTP プリセット — Gmail、Naver をワンコマンドで設定できます
- Microsoft Graph API — Outlook/M365 メール用の OAuth 2.0 ブラウザーフローと、トークンの自動更新に対応します
- KakaoTalk OAuth — localhost コールバックフローと、トークンの自動更新に対応します
- Telegram Client API — WTelegramClient 経由で Saved Messages に送信します
- Stdio トランスポート — stdin/stdout 経由の JSON-RPC を使用する標準的な MCP サブプロセスモデルです
Outbox を選ぶ理由
既存の MCP サーバーはチャネルごとに分かれています。Slack 用、Gmail 用、Telegram 用というように、それぞれ別のサーバーが必要です。サーバーごとにインストールと設定が必要で、LLM はチャネルごとにどのツールを呼び出すかを把握しなければなりません。
Outbox は異なるアプローチを採用しています。
- 1 つのツールで複数のチャネルに対応 —
send_messageがチャネルごとの違いを抽象化します。LLM は Slack API、SMTP、Kakao REST の違いを把握する必要がありません。 - 認証情報の分離 — OAuth 更新トークンは、現在のユーザーだけがアクセスできるファイル権限を設定した
tokens.jsonに保存されます。MCP ツールのフローでは、実行時に環境変数または elicitation を使ってシークレットを解決できます。 - インストールは 1 回だけ —
dotnet tool install -gで 4 つのチャネルを利用できます。チャネルごとに別々のサーバーをインストールして設定する必要はありません。 - KakaoTalk 対応 — 現在、KakaoTalk メッセージングに対応する唯一の MCP サーバーです。韓国のユーザーにとって不可欠です。
インストール
dotnet tool(推奨)
dotnet tool install -g FieldCure.Mcp.Outbox
インストール後は、fieldcure-mcp-outbox コマンドをグローバルに使用できます。
ソースからインストール
git clone https://github.com/fieldcure/fieldcure-mcp-outbox.git
cd fieldcure-mcp-outbox
dotnet build
要件
- .NET 8.0 Runtime 以降
- クロスプラットフォーム対応(Windows、Linux、macOS)
設定
Claude Desktop
claude_desktop_config.json に追加します。
{
"mcpServers": {
"outbox": {
"command": "fieldcure-mcp-outbox"
}
}
}
VS Code(Copilot)
.vscode/mcp.json に追加します。
{
"servers": {
"outbox": {
"command": "fieldcure-mcp-outbox"
}
}
}
ソースからインストール(dotnet tool を使わない場合)
{
"mcpServers": {
"outbox": {
"command": "dotnet",
"args": [
"run",
"--project", "C:\\path\\to\\fieldcure-mcp-outbox\\src\\FieldCure.Mcp.Outbox"
]
}
}
}
ツール
| ツール | 説明 | 確認 |
|---|---|---|
list_channels | 設定済みのすべてのメッセージングチャネルを一覧表示します | — |
add_channel | 新しいチャネルを追加します(すべてのチャネルタイプで MCP elicitation を使用します。Microsoft/KakaoTalk では MCP ホスト上のローカルブラウザーが必要です) | — |
send_message | 設定済みのチャネルを通じてメッセージを送信します | 必須 |
remove_channel | チャネルと保存済みの認証情報を削除します | 必須 |
チャネル
Microsoft/KakaoTalk の OAuth トークンは tokens.json に保存されるため、サーバーは実行をまたいでトークンを更新できます(現在のユーザーのみがアクセスできるファイル権限 — Windows ACL/Unix 0600)。
静的シークレット(Slack ボットトークン、Discord ウェブフック URL、SMTP パスワードなど)は、送信時に次の順序で解決されます。メモリ内キャッシュ → 環境変数 OUTBOX_{CHANNEL_ID}_{FIELD} → channels.json 内の平文 → MCP エリシテーション。CLI の add_channel フローでは、設定なしですぐに使えるローカル環境を実現するため、channels.json に直接書き込みます。これは意図的にローカル環境を信頼する設計であり、ADR-001 の原則 2 に記載されているとおり、tokens.json と同じユーザー境界を適用します。共有ホスト、CI、またはヘッドレス環境では、環境変数を明示的に設定し、channels.json のシークレットフィールドは空のままにしてください。
| チャネル | プロトコル | セットアップ |
|---|---|---|
| Slack | Web API(chat.postMessage) | ガイド |
| Telegram | クライアント API(WTelegramClient) | ガイド |
| Gmail | SMTP | ガイド |
| Naver | SMTP | ガイド |
| Microsoft | Graph API(/me/sendMail) | ガイド |
| KakaoTalk | Kakao REST API | ガイド |
| Discord | ウェブフック API | ガイド |
| カスタム SMTP | ユーザー定義 | ガイド |
静的シークレットの環境変数
チャネルで送信時に静的シークレットが必要な場合、Outbox は次の名前の環境変数を検索します。
OUTBOX_<CHANNEL_ID>_<FIELD>
例:
OUTBOX_MICROSOFT_1_CLIENT_SECRETOUTBOX_KAKAOTALK_1_API_KEYOUTBOX_KAKAOTALK_1_CLIENT_SECRETOUTBOX_SMTP_GMAIL_1_PASSWORD
環境変数が設定されておらず、MCP クライアントがエリシテーションをサポートしている場合、Outbox は対話形式で入力を求め、現在のセッション中はその値をキャッシュします。
CLI コマンド
fieldcure-mcp-outbox # Start MCP server (stdio)
fieldcure-mcp-outbox add slack # Add Slack channel
fieldcure-mcp-outbox add telegram # Add Telegram channel
fieldcure-mcp-outbox add gmail # Add Gmail SMTP channel
fieldcure-mcp-outbox add naver # Add Naver SMTP channel
fieldcure-mcp-outbox add smtp # Add custom SMTP channel
fieldcure-mcp-outbox add microsoft # Add Microsoft (Outlook/M365) channel
fieldcure-mcp-outbox add kakaotalk # Add KakaoTalk channel
fieldcure-mcp-outbox add discord # Add Discord channel
fieldcure-mcp-outbox list # List configured channels
fieldcure-mcp-outbox remove <id> # Remove a channel
データの保存場所
| データ | 場所 |
|---|---|
| チャネルのメタデータ | %LOCALAPPDATA%\FieldCure\Mcp.Outbox\channels.json |
| OAuth トークン | %LOCALAPPDATA%\FieldCure\Mcp.Outbox\tokens.json |
| Telegram セッション | %LOCALAPPDATA%\FieldCure\Mcp.Outbox\sessions\ |
tokens.json はプレーンな JSON として保存され、ファイルシステムのアクセス権限によって保護されます。
- Windows:現在のユーザーのみに制限された ACL
- Linux/macOS:モード
0600
これにより、同じマシン上の他のローカルユーザーからは保護されますが、同じ OS ユーザーアカウントが侵害された場合は保護されません。
プロジェクト構成
src/FieldCure.Mcp.Outbox/
├── Program.cs # Entry point: MCP server vs CLI branching
├── Channels/
│ ├── IChannel.cs # Channel interface + SendRequest/SendResult
│ ├── ChannelFactory.cs # Channel instantiation by type
│ ├── SlackChannel.cs # Slack Web API
│ ├── TelegramChannel.cs # WTelegramClient
│ ├── SmtpChannel.cs # MailKit SMTP
│ ├── MicrosoftChannel.cs # Microsoft Graph API
│ ├── KakaoTalkChannel.cs # Kakao REST API
│ └── DiscordChannel.cs # Discord Webhook API
├── Tools/
│ ├── ListChannelsTool.cs # list_channels
│ ├── AddChannelTool.cs # add_channel (elicitation + browser OAuth for Kakao/Microsoft)
│ ├── RemoveChannelTool.cs # remove_channel
│ └── SendMessageTool.cs # send_message
├── Interaction/
│ ├── IElicitGate.cs # Minimal MCP elicitation surface for tests
│ └── McpServerElicitGate.cs # Production adapter around McpServer
├── OAuth/
│ └── BrowserOAuthFlow.cs # Localhost callback + Process.Start + elicit race (MCP and CLI entry points)
├── Credentials/
│ └── OutboxSecretResolver.cs # cache → env → channels.json → elicitation
├── Setup/
│ ├── SetupRunner.cs # CLI router (diagnostic path)
│ ├── ConsoleHelper.cs # Masked input, prompts
│ ├── SlackSetup.cs
│ ├── TelegramSetup.cs
│ ├── SmtpSetup.cs
│ ├── MicrosoftSetup.cs
│ ├── KakaoTalkSetup.cs
│ └── DiscordSetup.cs
└── Configuration/
├── ChannelStore.cs # channels.json persistence (metadata + static-secret fallback)
├── OAuthTokenStore.cs # tokens.json persistence (OAuth access/refresh, user-only file perms)
└── SmtpPresets.cs # SMTP preset definitions
開発
# Build
dotnet build
# Test
dotnet test
# Pack as dotnet tool
dotnet pack src/FieldCure.Mcp.Outbox -c Release
関連項目
AssistStudio エコシステムの一部です。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。