FieldCure MCP发件箱服务器
 
特性
- 多个消息传递渠道 -Slack、Telegram、电子邮件(Gmail、Naver、Microsoft Graph API)、KakaoTalk、Discord
- 4个MCP工具 —
list_channels,add_channel,send_message,remove_channel - 跨平台凭证流 --运行时秘密可以来自env变量或MCP启发;OAuth令牌在刷新生命周期中单独存储
- CLI通道设置 --在适用的情况下,用于浏览器/Outho流的交互式控制台
- SMTP预设 --Gmail、Naver,只需一个命令设置
- Microsoft Graph API --用于Outlook/M365电子邮件的OAuth 2.0浏览器流,具有自动令牌刷新功能
- KakaoTalk OAuth --带有自动令牌刷新的localhost回调流
- 电报客户端API --通过WTelegramClient发送到已保存的消息
- 标准运输 --通过stdin/stdout上的JSON-RPC实现标准MCP子流程模型
为什么发件箱?
现有的MCP服务器是特定于频道的——一个用于Slack,另一个用于Gmail,还有一个用于Telegram。每个通道都需要单独的安装、配置,LLM必须知道为每个通道调用哪个工具。
发件箱采用了不同的方法:
- 一个工具,多个渠道 —
send_message抽象出渠道差异。LLM不需要知道Slack API vs SMTP vs Kakao REST。 - 凭证隔离 --OAuth刷新令牌存在
tokens.json仅限当前用户的文件权限;MCP工具流可以通过环境变量或启发在运行时解析秘密。 - 单次安装 —
dotnet tool install -g给你4个频道。无需为每个通道安装和配置单独的服务器。 - KakaoTalk支持 --目前唯一支持KakaoTalk消息传递的MCP服务器,对韩国用户至关重要。
安装
.net工具(推荐)
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运行时 或之后
- 跨平台(Windows、Linux、macOS)
配置
克劳德桌面版
添加 claude_desktop_config.json:
{
"mcpServers": {
"outbox": {
"command": "fieldcure-mcp-outbox"
}
}
}VS代码(副本)
添加 .vscode/mcp.json:
{
"servers": {
"outbox": {
"command": "fieldcure-mcp-outbox"
}
}
}来自源代码(不含.NET工具)
{
"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 bot令牌、Discord webhook URL、SMTP密码等)在发送时按以下顺序解析:内存缓存→ 环境变量 OUTBOX_{CHANNEL_ID}_{FIELD} → 明文在 channels.json → MCP诱导。CLI add_channel 流直接写入 channels.json 以获得零配置的本地体验。这是一个有意的本地信任选择,具有与相同的用户边界 tokens.json,记录在 ADR-001 原则2。对于共享主机、CI或无头部署,显式设置env变量并保留 channels.json 秘密字段为空。
| 通道 | 协议 | 设置 |
|---|---|---|
| Slack | Web API(chat.postMessage) | 指南 |
| 电报 | 客户API(WTelegramClient) | 指南 |
| Gmail | SMTP | 指南 |
| Naver | SMTP | 指南 |
| Microsoft | Graph API(/me/sendMail) | 指南 |
| KakaoTalk | Kakao REST API | 指南 |
| Discord | Webhook API | 指南 |
| 自定义SMTP | 用户定义 | 指南 |
静态秘密环境变量
当通道在发送时需要静态机密时,发件箱会查找一个名为的环境变量:
OUTBOX__示例:
OUTBOX_MICROSOFT_1_CLIENT_SECRETOUTBOX_KAKAOTALK_1_API_KEYOUTBOX_KAKAOTALK_1_CLIENT_SECRETOUTBOX_SMTP_GMAIL_1_PASSWORD
如果变量未设置,并且MCP客户端支持启发,则发件箱会交互式地提示输入该变量,并为当前会话缓存该变量。
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 # Remove a channel数据存储
| 数据 | 位置 |
|---|---|
| 频道元数据 | %LOCALAPPDATA%\FieldCure\Mcp.Outbox\channels.json |
| OAuth令牌 | %LOCALAPPDATA%\FieldCure\Mcp.Outbox\tokens.json |
| 电报会话 | %LOCALAPPDATA%\FieldCure\Mcp.Outbox\sessions\ |
tokens.json 以纯JSON格式存储,并受文件系统权限保护:
- Windows:ACL仅限于当前用户
- Linux/macOS:模式
0600
这可以防止同一台机器上的其他本地用户,但不能防止同一操作系统用户帐户的泄露。
项目结构
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生态系统.
