MCPInstall
slack-mcp-agent logo

slack-mcp-agent

by yutashx 3 stars yutashx/slack-mcp-agent

A Slack bot that dynamically interacts with multiple MCP Servers to process user requests.

READMEmain

Slack-MCP-Agent

概要

Slack の Bot をフロントエンドとして、Model Context Protocol (MCP) Server をツールとして動的に呼び出す Agent です。
ユーザーが Slack のメンションでリクエストを送信すると、OpenAI Agent SDK の Agent Loop によって複数の MCP Server(Slack, Notion, Perplexity など)および独自の Function Tool を連携させ、自然言語のままの指示を柔軟に実行します。

動作例

Slackでメッセージ付きでAgentをメンションすると、Agentが起動し、メッセージを処理します。 LLMにはGPT-4.1-miniを利用しているため、モデル単体では先週のダウ平均株価を知る方法はありません。 Agentは一度ユーザーに時間がかかることを伝え、Perplexity MCP Serverを呼び出し、先週のダウ平均株価を取得します。 Agentは取得した内容をまとめ、再度Slackに投稿します。

再びユーザーからメンションされたAgentは、Slack MCP Serverを呼び出し、スレッド内の過去のメッセージを把握し、Notion MCP Serverを呼び出し、Notionのデータベースに先週のダウ平均株価を記録します。

主な特徴

  • Slack 連携:app_mention イベントをトリガーに Agent を起動
  • MCP Server 統合:
  • Function Tool:
    • 現在時刻取得 (clock)
    • 文字列長取得 (get_str_lenth)
    • 標準出力/標準エラー読み込み (read_stdout,read_stderr)
  • リアルタイム進捗:Agent Loop の各ステップ結果を Slack スレッドに都度投稿

アーキテクチャ

graph LR
    Slack -->|app_mention| Agent["Agent(app.py)"]
    Agent --> FunctionTools["Function Tools (tools.py)"]
    Agent --> MCPServers["MCP Servers (config.jsonで定義)"]
    MCPServers --> SlackMCP["Slack-MCP-Server (stdio)"]
    MCPServers --> PerplexityMCP["Perplexity-Ask MCP-Server"]
    MCPServers --> NotionMCP["Notion MCP-Server"]
  • app.py:Slack Bolt + Socket Mode で Bot サーバーを起動
  • agents:OpenAI Agent SDK ベースの Agent 定義
  • tools.py:@function_tool デコレータで関数をツール化
  • utils.py:Slack イベント整形・プロンプト生成ロジック
  • config.json:MCP Server 情報・環境変数を定義

前提条件

  • Python 3.13 環境
  • Slack アプリ(Bot Token, App Token)を取得済み
  • MCP Server(Slack, Perplexity, Notion など)が起動可能
  • 以下のディレクトリ/ファイルを用意
    • config.json(下記例を参照)

起動方法

config.jsonの作成とSlack Botのインストール

config.jsonのサンプルをコピーして、config.jsonを作成してください。 最低限SlackのMCP Serverを入れれば動作するので、好みに応じて追加・削除してください

Slack BotをSlack Workspaceにインストールする方法はBolt入門ガイドを参考にすること。 またSlack MCP Server用にも追加で権限が必要なので以下のようにまとめて列挙する(抜けがあったらごめんなさい)。 Slack Botが反応しないことがあれば、Bolt入門ガイドを丁寧に見直すことをお勧めします(実体験)。

  • OAuth & Permission -> Bot Token Scopes -> Add an Oauth Scope で以下の権限を付与する
    • chat:write’
    • channels:history
    • channels:read
    • reactions:write
    • users:read
    • users.profile:read
  • OAtuh & Permission -> Install App to Workspace -> WorkspaceにBotをインストールする
  • インストール後に OAuth & Permissions -> Bot User OAuth Access Token -> SLACK_BOT_TOKENを入手
  • Socket Mode -> ON
  • Basic Information -> App Level Token -> Token & Scope Generation -> SLACK_APP_TOKENを入手
    • connections:write
  • Event Subscription -> ON
    • message.channels
    • app_mention

スクリプトの実行

初期化

$ git clone https://github.com/yutashx/slack-mcp-agent
$ cd slack-mcp-agent
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install -r requirements.txt

Slack BotとAgentの起動

$ CONFIG_PATH=./config.json python3 ./src/app.py

DBの初期化

SQLiteを使います 以下のschemaを利用して、DBを初期化します

$ mkdir db
$ sqlite3 db/app.db < schema.sql
-- Slackの会話データを保存するテーブル
CREATE TABLE conversation (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    thread_id TEXT NOT NULL,
    user_id TEXT NOT NULL,
    slack_channel_id TEXT NOT NULL,
    messages TEXT NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- ユーザー情報を保存するテーブル
CREATE TABLE user (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    slack_user_id TEXT NOT NULL,
    conversation_count INTEGER NOT NULL DEFAULT 0,
    user_name TEXT NOT NULL,
    user_email TEXT NOT NULL,
    user_role TEXT NOT NULL,
    user_department TEXT NOT NULL,
    user_position TEXT NOT NULL,
    user_birthday TEXT NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- Agentが自由に利用できるメモリー
CREATE TABLE agent_memory (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    memory_id TEXT NOT NULL,
    memory_name TEXT NOT NULL,
    memory_description TEXT NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

More Communication MCP servers

Similar servers from the same category.

Meeting BaaS

meeting-baas

Automates meeting management across Zoom, Google Meet, and Microsoft Teams with tools for recording, transcribing, searching, and sharing meeting content without manual note-taking.

search

Votars

scarletlabs-ai

Integrates with Votars platform to provide access to meeting transcripts, enabling retrieval and analysis of voice recordings through transcript fetching tools.

Communication

Nylas

nylas-samples

Bridges email, calendar, and contact APIs across multiple providers, enabling dynamic code generation and authentication abstraction for unified communication integrations.

authentication

Slack

modelcontextprotocol

Channel management and messaging capabilities

managementmessaging