# messaging-mcp-server **Repository Path**: yanxi-mcp/messaging-mcp-server ## Basic Information - **Project Name**: messaging-mcp-server - **Description**: messaging-mcp-server - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-01 - **Last Updated**: 2026-10-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Messaging MCP 面向 Slack、Microsoft Teams、飞书和企业微信的 Python MCP Server。`main.py` 通过 stdio 提供 AI 工具;`web_main.py` 接收平台回调,保存事件并运行自动回复和日报任务。四个平台的凭据与权限彼此隔离,所有写操作默认关闭。 ## 功能与限制 | 能力 | Slack | Teams 聊天 | 飞书 | 企业微信自建应用 | |---|---|---|---|---| | 列会话、读取最近消息 | Bot 可见范围 | 委托用户可见范围 | 机器人可见范围 | 仅本服务记录的群与收到的单聊回调 | | 发送文本、创建群 | 支持 | 支持 | 支持 | 支持;创建应用群要求根部门可见范围 | | 回复线程 | 支持 | 普通聊天不支持 | 支持 | 不支持 | | @成员 | 支持 | 支持 | 支持 | 应用群不支持可靠的 @ | | 搜索、通知、每日摘要 | 本地已保存消息 | 本地已保存消息 | 本地已保存消息 | 本地已保存消息 | | 自动回复 | 回调消息 | Graph 回调消息 | 回调消息 | 应用单聊回调消息 | `search_messages` 和 `daily_summary` 查询本地数据库。先通过回调接收消息或调用 `read_messages` 缓存历史;它们不会声称检索平台全部历史。每日自动推送是基于消息摘录的确定性摘要;AI 可以调用 `daily_summary` 对摘录做进一步总结。企业微信普通应用不能拉取普通群聊历史或接收群聊消息;需要会话内容存档权限及额外 SDK 才能覆盖这类场景,本工程未包含该付费能力。 ## 安装与运行 需要 Python 3.12 或 3.13。PowerShell 示例: ```powershell cd D:\python_workplace\messaging-mcp python -m venv .venv .\.venv\Scripts\python.exe -m pip install -e ".[dev]" # 在进程环境中注入所需平台凭据和会话白名单;参见 .env.example。 .\.venv\Scripts\python.exe -m main ``` MCP 客户端的命令可设为该虚拟环境的 `python.exe`,参数为 `-m main`,工作目录为本工程。诊断只写 stderr,stdout 留给 stdio 协议。 回调服务另启一个进程,使用相同的数据库路径和环境配置: ```powershell .\.venv\Scripts\python.exe -m web_main --host 127.0.0.1 --port 8080 ``` 公网部署时由反向代理向平台提供 HTTPS,并将路径转发到此服务:`/webhooks/slack`、`/webhooks/teams`、`/webhooks/lark`、`/webhooks/wecom`。反向代理也应限制请求体为 1 MB。应用必须在相应平台配置事件订阅。Slack 和飞书在开发者后台填回调 URL;企业微信启用自建应用接收消息并填写 Token 与 EncodingAESKey。Teams 需用 Graph 创建 `/chats/{chat-id}/messages` 订阅,将 `notificationUrl` 指向 `/webhooks/teams`,`clientState` 与本服务配置一致,并在到期前续订。当前工程不代替平台管理订阅生命周期。没有公网 HTTPS 地址时,只能本地模拟回调。 ## 权限和写入 - 默认仅列出 `list_channels`、`read_messages`、`search_messages`、`notifications`、`daily_summary`。 - 设置 `MESSAGING_ENABLE_WRITES=true` 并配置 `MESSAGING_ALLOWED_CHANNELS=provider:channel_id,...` 后,才会出现 `send_message`、`reply_thread`、`mention_user`、`create_group`、`add_auto_reply_rule`、`send_daily_digest`。每次 MCP 写入要求客户端进行真人确认;客户端不支持确认时不得执行写入。 - 创建群聊需在允许列表中显式添加 `provider:*`,这也允许该平台所有目标会话写入,适合专用测试租户;生产环境建议创建后收紧为具体会话 ID。 - 自动回复还需 `MESSAGING_ENABLE_AUTOMATION=true`,然后通过 `add_auto_reply_rule` 配置关键词、回复文本和至少 60 秒冷却时间。`MESSAGING_DAILY_SUMMARY_TARGETS` 使用 `provider:channel_id` 逗号分隔;到达 `MESSAGING_DAILY_SUMMARY_HOUR_UTC` 时推送前一天 UTC 日报。后台自动发送受同一白名单和长度限制约束。 - Teams 采用外部获取的工作/学校账户委托 OAuth token,至少按实际操作授予 `Chat.Read`、`ChatMessage.Send`、`Chat.Create`;令牌过期后需由部署环境更新并重启进程。启用 Teams 自动回复需配置 `MESSAGING_TEAMS_SELF_USER_ID`,以跳过本人发送的消息。 - Slack 使用安装后取得的 Bot OAuth token,并只申请加入会话所需的 `channels:read`、相关 `*:history`、`chat:write` 等最小 scopes。飞书使用内部应用的 tenant token,自动刷新。企业微信使用自建应用 `corp_id`、secret 和 agent ID。 回调认证使用 Slack 签名、Teams `clientState`、飞书验证 Token、企业微信签名与 AES 解密。数据库文件可能含敏感正文,应放在受限目录并按组织的保留政策清理;不要把真实凭据写入 `.env.example`、Git 或 MCP 对话。 自动发送使用 SQLite 持久化队列与租约,进程中断后会重试。若平台已接受消息、但服务在记录成功前崩溃,重试可能造成重复发送;生产部署应监控队列和平台实际消息。日报按目标与日期去重入队。 ## 验证 ```powershell .\.venv\Scripts\python.exe -m pytest -q .\.venv\Scripts\python.exe -m ruff check . .\.venv\Scripts\python.exe -m ruff format --check . ``` 测试使用本地模拟 API 和 ASGI 回调,不需要真实凭据或公网。上线前仍需在各租户完成授权、订阅、回调和消息发送联调。 ## 平台文档 - [Slack Events API 与签名](https://docs.slack.dev/apis/events-api/)、[Slack Web API](https://docs.slack.dev/reference/methods/) - [Microsoft Graph 聊天消息](https://learn.microsoft.com/en-us/graph/api/chat-list-messages?view=graph-rest-1.0)、[更改通知](https://learn.microsoft.com/en-us/graph/change-notifications-delivery-webhooks) - [飞书开放平台 IM API](https://open.feishu.cn/search?from=header&page=1&pageSize=10&q=%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF) - [企业微信开发者中心](https://developer.work.weixin.qq.com/)