关于 outbox
outbox 是一个通过单一 MCP 服务发送多渠道消息的工具,支持 Slack、Telegram、电子邮件、KakaoTalk 和 Discord。它提供统一的发送工具,并可通过环境变量或 MCP 交互获取凭据。
主要功能
- 01通过统一接口发送多渠道消息
- 02管理已配置的消息渠道
- 03支持 Slack、Telegram、电子邮件、KakaoTalk 和 Discord
- 04通过环境变量或 MCP 交互解析凭据
- 05提供交互式命令行渠道配置
适用场景
- 01从 Agent 工作流向多个渠道发送通知
- 02集中配置不同服务的消息渠道
- 03为 Microsoft 或 KakaoTalk 邮件和消息设置 OAuth
MCP 相关
outbox 是 MCP 服务,提供 `list_channels`、`add_channel`、`send_message` 和 `remove_channel` 工具,用于管理渠道并发送消息。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
FieldCure MCP Outbox 服务
一款多渠道消息传递 Model Context Protocol (MCP) 服务,可通过 Slack、Telegram、电子邮件(Gmail、Naver、Microsoft Graph API)、KakaoTalk 和 Discord 发送消息。使用 C# 和官方 MCP C# SDK 构建。
功能
- 多个消息渠道 — Slack、Telegram、电子邮件(Gmail、Naver、Microsoft Graph API)、KakaoTalk、Discord
- 4 个 MCP 工具 —
list_channels、add_channel、send_message、remove_channel - 跨平台凭据流程 — 运行时密钥可来自环境变量或 MCP 信息收集;OAuth 令牌单独存储,以支持令牌刷新生命周期
- CLI 渠道设置 — 在适用场景下,通过交互式控制台完成浏览器/OAuth 流程
- SMTP 预设 — 一条命令即可设置 Gmail、Naver
- Microsoft Graph API — 通过浏览器完成 Outlook / M365 电子邮件的 OAuth 2.0 流程,并自动刷新令牌
- KakaoTalk OAuth — 通过 localhost 回调流程完成授权,并自动刷新令牌
- Telegram Client API — 通过 WTelegramClient 发送消息到已保存的消息
- Stdio 传输 — 通过 stdin/stdout 上的 JSON-RPC 使用标准 MCP 子进程模型
为什么选择 Outbox?
现有的 MCP 服务都是特定于某个渠道的——一个用于 Slack,另一个用于 Gmail,还有一个用于 Telegram。每个服务都需要单独安装和配置,而且大模型必须知道每个渠道该调用哪个工具。
Outbox 采用了不同的方法:
- 一个工具,多个渠道 —
send_message抽象了各渠道的差异。大模型无需了解 Slack API、SMTP 或 Kakao REST。 - 凭据隔离 — OAuth 刷新令牌存储在
tokens.json中,并设置仅当前用户可访问的文件权限;MCP 工具流程可在运行时通过环境变量或信息收集来解析密钥。 - 只需安装一次 —
dotnet tool install -g即可使用 4 个渠道。无需针对每个渠道分别安装和配置服务。 - 支持 KakaoTalk — 目前唯一支持 KakaoTalk 消息传递的 MCP 服务,对韩国用户至关重要。
安装
dotnet 工具(推荐)
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 工具)
{
"mcpServers": {
"outbox": {
"command": "dotnet",
"args": [
"run",
"--project", "C:\\path\\to\\fieldcure-mcp-outbox\\src\\FieldCure.Mcp.Outbox"
]
}
}
}
工具
| 工具 | 描述 | 确认 |
|---|---|---|
list_channels | 列出所有已配置的消息渠道 | — |
add_channel | 添加新渠道(所有渠道类型均通过 MCP 信息收集;Microsoft/KakaoTalk 需要在 MCP 主机上使用本地浏览器) | — |
send_message | 通过已配置的渠道发送消息 | 必需 |
remove_channel | 移除渠道及其存储的凭据 | 必需 |
渠道
Microsoft/KakaoTalk 的 OAuth 令牌存储在 tokens.json 中,以便服务在多次运行之间刷新令牌(文件权限仅限当前用户——Windows ACL / Unix 0600)。
静态机密(Slack 机器人令牌、Discord webhook URL、SMTP 密码等)在发送时按以下顺序获取:内存缓存 → 环境变量 OUTBOX_{CHANNEL_ID}_{FIELD} → channels.json 中的明文 → MCP 询问。CLI add_channel 流程会直接写入 channels.json,提供零配置的本地体验。这是有意采用的本地信任策略,与 tokens.json 具有相同的同一用户边界,详见 ADR-001 原则 2。对于共享主机、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 | Webhook 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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。