はじめに
Slackは、チームコミュニケーションを効率化する人気のプラットフォームです。チャンネル、ダイレクトメッセージ、アプリ連携を通じて、プロジェクト管理やコラボレーションをサポートします。強力なAPIとWebhookにより、メッセージの取得やボットの構築が可能です。一方、**Model Context Protocol(MCP)**は、AI(例:Claude)を外部データやツールと標準化された方法で接続するプロトコルです。このシリーズでは、SlackとMCPを統合し、メッセージやチャンネルデータを活用するエージェントAIを構築する方法を学びます。たとえば、AIがチームの会話からインサイトを抽出したり、自動応答したりできます。
第1章では、SlackとMCPの基本を理解し、Slackからメッセージデータを取得するシンプルなMCPサーバーを構築します。Claude Desktopと接続して、コミュニケーション管理の第一歩を踏み出しましょう。
SlackとMCPの概要
Slackとは?
Slackは、以下のような特徴を持つコミュニケーションツールです:
- チャンネルベース:プロジェクトやトピックごとにチャンネルを整理。
- 強力なAPI:REST APIでメッセージ、チャンネル、ユーザーデータにアクセス。
- Webhookサポート:リアルタイムイベント(メッセージ投稿など)を検知。
- 多用途:チームコラボレーション、タスク通知、アプリ統合に対応。
MCPの役割
MCPは、AIにSlackのデータを提供する橋渡し役です。MCPサーバーを通じて、AIは以下を行えます:
- データ取得:メッセージやチャンネル情報を取得。
- アクション実行:メッセージ送信、チャンネル作成、ボット応答。
- 分析:会話パターンやチームのエンゲージメントを評価。
なぜSlackとMCPを組み合わせる?
この組み合わせは、以下のようなシナリオで強力です:
- 自動応答:AIがFAQに答えるボットを運営。
- 会話分析:AIがチームのコミュニケーション頻度やトピックを分析。
- 通知最適化:AIが重要なメッセージを要約し、Notionやメールに送信。
開発環境の準備
MCPサーバーとSlackを統合するには、以下の環境を準備します:
- Python 3.8以降:サーバー開発用。
- mcpライブラリ:JSON-RPC通信を処理(仮定のライブラリ、公式ドキュメントを参照)。
- requestsライブラリ:Slack APIとの通信用。
- Claude Desktop:MCP対応のAIクライアント。
- テキストエディタ:VS Code推奨。
インストールコマンド:
pip install mcp jsonrpcserver requests python-dotenv
Slackのセットアップ
-
Slackアプリ作成:
-
Slack APIにアクセスし、新しいアプリを作成(例:
MCP-Bot
)。 - スコープを設定(例:
channels:history
、channels:read
でメッセージとチャンネルデータにアクセス)。 - Bot User OAuth Tokenを生成(
xoxb-
で始まるトークン)。 - アプリをワークスペースにインストールし、チャンネル(例:
#mcp-project
)に追加。
-
Slack APIにアクセスし、新しいアプリを作成(例:
-
チャンネル準備:
- テスト用チャンネル(例:
#mcp-project
)を作成。 - メッセージをいくつか投稿(例:「プロジェクト計画を議論」)。
- チャンネルIDを記録(Slack APIの
channels.list
で取得可能)。
- テスト用チャンネル(例:
-
環境変数の設定:
.env
ファイルに以下を追加:SLACK_TOKEN=your_bot_token SLACK_CHANNEL_ID=your_channel_id
コード例:Slack用MCPサーバー
from mcp import MCPServer
import os
from dotenv import load_dotenv
import requests
class SlackServer(MCPServer):
def __init__(self, host, port, token, channel_id):
super().__init__(host, port)
self.token = token
self.channel_id = channel_id
self.base_url = "https://slack.com/api"
self.headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
self.register_resource("get_messages", self.get_messages)
def get_messages(self, params):
try:
url = f"{self.base_url}/conversations.history"
query = {"channel": self.channel_id, "limit": params.get("limit", 10)}
response = requests.get(url, headers=self.headers, params=query)
response.raise_for_status()
messages = response.json()["messages"]
message_list = [
{
"text": msg["text"],
"user": msg.get("user", "unknown"),
"timestamp": msg["ts"]
}
for msg in messages
]
return {"status": "success", "messages": message_list}
except Exception as e:
return {"status": "error", "message": str(e)}
if __name__ == "__main__":
load_dotenv()
server = SlackServer(
host="localhost",
port=8122,
token=os.getenv("SLACK_TOKEN"),
channel_id=os.getenv("SLACK_CHANNEL_ID")
)
print("Slack MCPサーバーを起動中: http://localhost:8122")
server.start()
コードの説明
- requests:Slack APIにGETリクエストを送信し、チャンネルのメッセージを取得。
- get_messages:指定したチャンネルの最新メッセージ(テキスト、ユーザー、タイムスタンプ)を取得。
- register_resource:メッセージ取得をリソースとして登録。
- start():サーバーを起動。
前提条件
- Slackアプリがワークスペースにインストール済み。
- チャンネルが存在し、メッセージが投稿されている。
-
.env
ファイルに正しいSLACK_TOKEN
とSLACK_CHANNEL_ID
が設定済み。 - アプリに
channels:history
とchannels:read
スコープが付与されている。
サーバーのテスト
サーバーが正しく動作するか確認します:
-
サーバー起動:
python slack_server.py
コンソールに「Slack MCPサーバーを起動中: http://localhost:8122」と表示。
-
メッセージ取得のテスト:
Pythonでリクエストを送信:import requests import json url = "http://localhost:8122" payload = { "jsonrpc": "2.0", "method": "get_messages", "params": {"limit": 5}, "id": 1 } response = requests.post(url, json=payload) print(json.dumps(response.json(), indent=2, ensure_ascii=False))
期待されるレスポンス:
{ "jsonrpc": "2.0", "result": { "status": "success", "messages": [ { "text": "プロジェクト計画を議論", "user": "U123456", "timestamp": "1617187200.000100" }, { "text": "タスク割り当てを確認", "user": "U789012", "timestamp": "1617187100.000200" } ] }, "id": 1 }
Claude Desktopとの接続
サーバーをClaude Desktopに接続します:
-
設定ファイルの編集:
Claude Desktopの設定ファイル(例:claude_desktop_config.json
)に以下を追加:{ "mcp_servers": [ { "name": "SlackServer", "url": "http://localhost:8122", "auth": "none" } ] }
-
Claudeでテスト:
Claude Desktopを起動し、プロンプトを入力:チャンネルの最新メッセージを教えてください。
レスポンス例:
チャンネル #mcp-project の最新メッセージ: - ユーザー U123456: プロジェクト計画を議論 - ユーザー U789012: タスク割り当てを確認
次のステップ
このMCPサーバーは、SlackとAIの連携の基礎です。次の第2章では、Slackにメッセージを送信したり、ボットを介して自動応答したりする機能を実装し、コミュニケーションを自動化するエージェントを構築します。たとえば、AIが特定のキーワードに反応して返信したり、Notionにタスクを追加したりできます。
まとめ
この第1章では、SlackとMCPの基本を学び、シンプルなMCPサーバーを構築してメッセージデータを取得しました。Slackの強力なAPIとMCPの柔軟性を組み合わせることで、AIをチームコミュニケーションの強力なアシスタントに変えられます。次章以降では、メッセージ送信、会話分析、リアルタイム管理へと進化させます。
役に立ったと思ったら、「いいね」や「ストック」をしていただけると嬉しいです!次の章でまたお会いしましょう!