🚀 mcp-slack-agent-team
SlackベースのClaude Codeのリモート制御とマルチエージェントチーム管理を行うMCPサーバーです。
SlackチャンネルからClaude Codeエージェントにコマンドを送信し、結果を受け取り、マルチエージェントチームを調整することができます。
🚀 クイックスタート
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
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ツール + 権限要求をすべてサポートし、安全なコマンドは自動的にバイパス
- Rate Limiter — Slack API呼び出しの集中制御 (トークンバケット + 429自動バックオフ)
- ダッシュボード — チームの進捗状況、エージェントの状態、Rate Limiterのメトリクスを視覚的なダッシュボードで表示
- ハートビート — エージェントの生存を監視し、無応答のエージェントを自動的に検出して通知
- DM + 予約メッセージ — 個人DM、予約送信、メッセージの固定
- インボックス検索 — FTS5全文検索でインボックスのメッセージを検索
- グレースフルシャットダウン — SIGINT/SIGTERM時に状態を自動的に保存 + Slack通知
- ファイル転送 — Slackでファイルをダウンロード/アップロード (画像、文書、ログなど)
- 長いメッセージの自動処理 — 分割送信またはファイルアップロード
- コストレポート — ccusageと連携してClaude Codeのトークン/コストをSlackで報告
- セッション復元 — compact/再起動後に状態を自動的に復元
📦 インストール
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
npx tsx src/test.ts
📚 ドキュメント
構成
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 # 集中型Rate Limiter (トークンバケット + 自動バックオフ)
│ ├── 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