2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SlackでAIを強化する | 第1章:メッセージデータの第一歩

Posted at

はじめに

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のセットアップ

  1. Slackアプリ作成
    • Slack APIにアクセスし、新しいアプリを作成(例:MCP-Bot)。
    • スコープを設定(例:channels:historychannels:readでメッセージとチャンネルデータにアクセス)。
    • Bot User OAuth Tokenを生成(xoxb-で始まるトークン)。
    • アプリをワークスペースにインストールし、チャンネル(例:#mcp-project)に追加。
  2. チャンネル準備
    • テスト用チャンネル(例:#mcp-project)を作成。
    • メッセージをいくつか投稿(例:「プロジェクト計画を議論」)。
    • チャンネルIDを記録(Slack APIのchannels.listで取得可能)。
  3. 環境変数の設定
    .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_TOKENSLACK_CHANNEL_IDが設定済み。
  • アプリにchannels:historychannels:readスコープが付与されている。

サーバーのテスト

サーバーが正しく動作するか確認します:

  1. サーバー起動

    python slack_server.py
    

    コンソールに「Slack MCPサーバーを起動中: http://localhost:8122」と表示。

  2. メッセージ取得のテスト
    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に接続します:

  1. 設定ファイルの編集
    Claude Desktopの設定ファイル(例:claude_desktop_config.json)に以下を追加:

    {
      "mcp_servers": [
        {
          "name": "SlackServer",
          "url": "http://localhost:8122",
          "auth": "none"
        }
      ]
    }
    
  2. Claudeでテスト
    Claude Desktopを起動し、プロンプトを入力:

    チャンネルの最新メッセージを教えてください。
    

    レスポンス例:

    チャンネル #mcp-project の最新メッセージ:
    - ユーザー U123456: プロジェクト計画を議論
    - ユーザー U789012: タスク割り当てを確認
    

次のステップ

このMCPサーバーは、SlackとAIの連携の基礎です。次の第2章では、Slackにメッセージを送信したり、ボットを介して自動応答したりする機能を実装し、コミュニケーションを自動化するエージェントを構築します。たとえば、AIが特定のキーワードに反応して返信したり、Notionにタスクを追加したりできます。

まとめ

この第1章では、SlackとMCPの基本を学び、シンプルなMCPサーバーを構築してメッセージデータを取得しました。Slackの強力なAPIとMCPの柔軟性を組み合わせることで、AIをチームコミュニケーションの強力なアシスタントに変えられます。次章以降では、メッセージ送信、会話分析、リアルタイム管理へと進化させます。


役に立ったと思ったら、「いいね」や「ストック」をしていただけると嬉しいです!次の章でまたお会いしましょう!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?