README
🚀 mcp-slack-agent-team
这是一个基于Slack的Claude Code远程控制及多智能体团队管理MCP服务器。可以在Slack频道中向Claude Code智能体发送命令、接收结果,并协调多智能体团队。
🚀 快速开始
# 1. 克隆项目并安装依赖
git clone https://github.com/berrzebb/mcp-slack-agent-team.git
cd mcp-slack-agent-team/mcp-servers/slack
npm install
npm run build
# 2. 进行连接测试
cp .env.example .env
# 在.env文件中输入SLACK_BOT_TOKEN和SLACK_DEFAULT_CHANNEL
npx tsx src/test.ts
注册到Claude Code
在 .claude/settings.json 或 ~/.claude.json 中进行如下配置:
{
"mcpServers": {
"slack": {
"command": "node",
"args": ["path/to/mcp-slack-agent-team/mcp-servers/slack/dist/wrapper.js"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-bot-token",
"SLACK_DEFAULT_CHANNEL": "C채널ID"
}
}
}
}
✨ 主要特性
- 远程控制:在Slack中输入命令,智能体执行并将结果以线程形式回复。
- 命令循环:使用
slack_command_loop完全替代聊天界面。 - 非阻塞检查:通过
slack_command_loop(timeout=0)和slack_team_wait(timeout=0)避免在工作时错过Slack命令。 - 多智能体团队:创建专用频道,设置角色名称和图标,支持广播和存档。
- 智能体角色:提供12种命名角色(如Aria、Sage、Forge等),自动显示角色专属名称和表情符号。
- @提及系统:使用角色名称、角色和成员ID进行@提及,提及信息会存入队列,等待接收者确认。
- 反应命令:将Slack表情符号反应(✅❌🚀🔄🗑️❓)自动转换为命令。
- 后台收集:每10秒自动轮询消息,防止在不调用工具的情况下丢失Slack消息。
- 多进程安全:采用SQLite WAL、busy_timeout、轮询器DB列表和按团队单独存储。
- 永久上下文管理:基于SQLite存储任务、决策和智能体上下文,压缩上下文后可立即恢复。
- 热重载:使用
slack_reload进行代码构建和服务器重启,通过wrapper.js保持与Claude Code的连接。 - 通用审批钩子:支持Bash命令、MCP工具和权限请求,自动绕过安全命令。
- 速率限制器:集中控制Slack API调用(令牌桶 + 429自动退避)。
- 仪表盘:以可视化仪表盘展示团队进度、智能体状态和速率限制器指标。
- 心跳监测:监测智能体存活状态,自动检测并通知无响应的智能体。
- DM和定时消息:支持个人DM、定时发送和消息固定。
- 收件箱搜索:使用FTS5全文搜索功能搜索收件箱消息。
- 优雅关闭:在接收到SIGINT/SIGTERM信号时自动保存状态并发送Slack通知。
- 文件传输:支持在Slack中下载和上传文件(如图像、文档、日志等)。
- 长消息自动处理:自动分割发送或上传文件。
- 成本报告:通过与ccusage集成,在Slack中报告Claude Code令牌和成本。
- 会话恢复:在压缩或重启后自动恢复状态。
📦 安装指南
# 1. 克隆项目并安装依赖
git clone https://github.com/berrzebb/mcp-slack-agent-team.git
cd mcp-slack-agent-team/mcp-servers/slack
npm install
npm run build
# 2. 进行连接测试
cp .env.example .env
# 在.env文件中输入SLACK_BOT_TOKEN和SLACK_DEFAULT_CHANNEL
npx tsx src/test.ts
💻 使用示例
基础用法
# 克隆项目并安装依赖
git clone https://github.com/berrzebb/mcp-slack-agent-team.git
cd mcp-slack-agent-team/mcp-servers/slack
npm install
npm run build
# 进行连接测试并配置环境变量
cp .env.example .env
# 在.env文件中输入SLACK_BOT_TOKEN和SLACK_DEFAULT_CHANNEL
npx tsx src/test.ts
高级用法
{
"mcpServers": {
"slack": {
"command": "node",
"args": ["path/to/mcp-slack-agent-team/mcp-servers/slack/dist/wrapper.js"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-bot-token",
"SLACK_DEFAULT_CHANNEL": "C채널ID"
}
}
}
}
📚 详细文档
项目结构
commands/ # Claude Code斜杠命令
├── slack-loop.md # /slack-loop — Slack命令等待循环
└── slack-team-resume.md # /slack-team-resume — 团队会话恢复
mcp-servers/slack/ # Slack MCP服务器
├── src/
│ ├── index.ts # 入口点 (工具注册 + 服务器启动)
│ ├── wrapper.ts # 自动重启包装器 (支持热重载)
│ ├── background-poller.ts # 后台消息收集器 (每10秒一次)
│ ├── types.ts # 接口、常量、类型定义 + 智能体角色
│ ├── db.ts # SQLite初始化 + 数据访问助手
│ ├── state.ts # 基于SQLite的状态管理 + 团队注册表
│ ├── slack-client.ts # WebClient + sendSmart + 消息分割
│ ├── formatting.ts # 消息格式 + 富格式实用工具
│ ├── rate-limiter.ts # 集中式速率限制器 (令牌桶 + 自动退避)
│ ├── approval-hook.ts # 通用Slack审批钩子 (Bash + 工具 + 权限)
│ ├── test.ts # 连接测试
│ ├── check.ts # 简单连接检查
│ └── tools/ # 工具模块 (共55个)
│ ├── basic.ts # 基本通信 + 反应管理 + 诊断 (11个)
│ ├── content.ts # 代码/代码片段上传 (2个)
│ ├── loop.ts # 命令循环 + 收件箱 + 反应命令 (3个)
│ ├── team.ts # 团队管理 + 提及 + 通知集成 (14个)
│ ├── context.ts # 团队上下文管理 + whoami (8个)
│ ├── approval.ts # 审批请求 (1个)
│ ├── file.ts # 文件下载/上传 (2个)
│ ├── state.ts # 状态保存/恢复 + 成本报告 (3个)
│ └── dashboard.ts # 仪表盘 + 心跳 + DM + 预约/权限 (11个)
├── package.json
├── tsconfig.json
└── .env.example
工作流程
用户 (Slack) 智能体 (Claude Code)
│ │
├─── 输入命令 ────────────→│ slack_command_loop
│ ├── 👀 确认接收
│ ├── 执行任务
│ ├── 发送结果 (线程)
│←── 接收结果 ────────────┤ ✅ 完成
├─── 提供反馈 ──────────────→│ slack_wait_for_reply
│ └── 等待下一个命令
提供的工具 (55个)
| 类别 | 工具 |
|----------|------|
| 基本通信 + 反应 (11) | slack_send_message, slack_respond, slack_update_message, slack_read_messages, slack_reply_thread, slack_add_reaction, slack_remove_reaction, slack_list_channels, slack_get_thread, slack_reload, slack_inbox_status |
| 内容 (2) | slack_upload_snippet, slack_send_code |
| 命令循环 + 收件箱 (3) | slack_command_loop, slack_check_inbox, slack_wait_for_reply |
| 团队管理 + 通知 (14) | slack_team_create, slack_team_register, slack_team_send, slack_team_read, slack_team_wait, slack_team_thread, slack_team_status, slack_team_broadcast, slack_team_report, slack_team_close, slack_mention_check, slack_check_all_notifications, slack_team_update_message, slack_team_delete_message |
| 团队上下文 (8) | slack_team_assign_task, slack_team_update_task, slack_team_list_tasks, slack_team_save_context, slack_team_get_context, slack_team_log_decision, slack_team_decisions, slack_whoami |
| 审批 (1) | slack_request_approval |
| 文件 (2) | slack_download_file, slack_upload_file |
| 状态 + 成本 (3) | slack_save_state, slack_load_state, slack_cost_report |
| 仪表盘 + 运营 (11) | slack_progress_dashboard, slack_heartbeat, slack_heartbeat_status, slack_thread_summary, slack_search_inbox, slack_pin_message, slack_send_dm, slack_schedule_message, slack_team_request_permission, slack_list_permissions, slack_resolve_permission |
所需的Slack Bot Token权限范围
| 权限范围 | 用途 |
|-------|------|
| chat:write | 发送消息 |
| chat:write.customize | 显示智能体角色专属名称和图标 |
| channels:history | 读取频道消息 |
| groups:history | 读取私有频道消息 |
| reactions:write | 添加反应 |
| reactions:read | 读取反应 (审批钩子) |
| channels:read / groups:read | 查看频道列表 |
| channels:manage | 创建/存档团队频道 |
| channels:join | 自动加入频道 |
| users:read | 自动检测机器人ID |
| files:write | 上传文件 |
| pins:write | 固定/解除固定消息 |
| im:write | 发送DM(直接消息) |
详细设置指南:mcp-servers/slack/README.md
📄 许可证
本项目采用MIT许可证。
扫码联系在线客服