mcpField
A
agentic-slackbot

agentic-slackbot

github.com/john-linフレームワーク・SDK729 週間前に更新

agentic-slackbot について

agentic-slackbotはOpenAI Agents SDKを使ったSlackボットクライアントで、チャンネルやダイレクトメッセージで会話できます。設定したMCPサーバーに接続し、会話ごとに上限付きの履歴を保持します。

主な機能

  1. 01チャンネルでのメンションとDMに対応
  2. 02同じスレッドで会話を継続
  3. 03設定ファイルからMCPサーバーに接続
  4. 04OpenAI互換エンドポイントに対応
  5. 05会話別の履歴保持と切り詰め
  6. 06任意でローカルシェルツールを有効化

活用シーン

  1. 01Slackチャンネルでメンションしてボットと対話
  2. 02DMで継続的な会話を行う
  3. 03Slackエージェントから設定済みMCPサーバーを利用

MCP 対応

servers_config.jsonで設定したローカルまたはHTTPベースのMCPサーバーに接続します。各サーバーには有効状態とタイムアウトを設定できます。

詳細

agentic-slackbot

OpenAI Agents SDK を使用して、Model Context Protocol(MCP) サーバーとやり取りするシンプルな Slack ボットです。

こちらもご覧ください:agentic-telegram-bot — Telegram 向けの同様のデモボットです。

機能

  • チャンネルでの @メンションと DM に対応
  • スレッドを考慮した会話(追加のやり取りも同じスレッド内で継続します)
  • servers_config.json を介して任意の MCP サーバーに接続
  • SHELL_ENABLED と SHELL_SKILLS_DIR で制御する、オプションのローカルシェル(ShellTool)
  • OpenAI および OpenAI 互換エンドポイント(Azure OpenAI v1 API を含む)に対応
  • 会話ごとの履歴を保持し、自動的に切り詰め(直近 10 ターン)

依存関係のインストール

uv sync

Slack アプリのセットアップ

  1. api.slack.com/apps で新しい Slack アプリを作成します。
  2. Socket Mode を有効にし、アプリレベルのトークン(xapp-...)を生成します。
  3. OAuth & Permissions で、以下のボットトークンスコープを追加します。
    • app_mentions:read
    • chat:write
    • im:history
    • users:read
  4. Event Subscriptions で、以下を購読します。
    • app_mention
    • message.im
  5. アプリをワークスペースにインストールし、ボットトークン(xoxb-...)をコピーします。

環境変数

ルートディレクトリに .envrc または .env ファイルを作成します。

export SLACK_BOT_TOKEN=""
export SLACK_APP_TOKEN=""
export OPENAI_API_KEY=""

# Local shell (disabled by default)
# export SHELL_ENABLED=1
# export SHELL_SKILLS_DIR="./skills"  # optional; mount skills alongside the shell

Azure OpenAI(v1 API)または別の OpenAI 互換エンドポイントを使用する場合:

export OPENAI_API_KEY=""
export OPENAI_BASE_URL="https://<resource-name>.openai.azure.com/openai/v1/"

送信リクエスト用のオプションの HTTP プロキシ:

export HTTP_PROXY=""

OpenAI Agents SDK のオプションの詳細ログ:

export AGENT_VERBOSE_LOG=1

AGENT_VERBOSE_LOG はこのプロジェクトで定義されています。真と判定される値を設定すると、アプリの起動時に SDK の enable_verbose_stdout_logging() ヘルパーを呼び出します。0、false、no、off(大文字と小文字を区別しません)などの値は無効として扱われます。

以下は OpenAI Agents SDK が直接読み取る環境変数であり、このプロジェクトのものではありません。デフォルトでは、SDK はモデルやツールのペイロードをログに記録しません。デバッグのために一時的に記録するには:

export OPENAI_AGENTS_DONT_LOG_MODEL_DATA=0
export OPENAI_AGENTS_DONT_LOG_TOOL_DATA=0

これらのペイロードログには機密データが含まれる場合があります。デバッグ後はデフォルト設定に戻してください:

export OPENAI_AGENTS_DONT_LOG_MODEL_DATA=1
export OPENAI_AGENTS_DONT_LOG_TOOL_DATA=1

エージェントへの指示

プロジェクトのルートに、エージェントのシステムプロンプトを記述した instructions.md ファイルを作成します。

You are a helpful assistant in a Slack workspace.
When responding, you must strictly use Slack's `mrkdwn` formatting syntax only.
Keep responses concise and well-structured.

instructions.md.example に例が用意されています。このファイルがない場合、ボットは起動に失敗します。

MCP サーバーの設定(オプション)

MCP サーバーを追加するには、servers_config.json ファイルを作成します。このファイルを指定しない場合、ボットは MCP サーバーが設定されていない状態で起動します。

{
  "model": "gpt-5.4",
  "mcpServers": {
    "my-server": {
      "command": "uvx",
      "args": ["my-mcp-server"]
    }
  }
}

model はオプションで、デフォルトは gpt-5.4 です。各 MCP サーバーでは、timeout(秒、デフォルトは 30.0)と enabled(デフォルトは true)も指定できます。

HTTP ベースの MCP サーバー(Streamable HTTP)では、url を使用します。

{
  "mcpServers": {
    "my-server": {
      "url": "https://mcp.example.com/mcp",
      "headers": {
        "Accept": "application/json, text/event-stream"
      }
    }
  }
}

ローカル MCP サーバーでは、uv --directory を使用します。

{
  "mcpServers": {
    "my-server": {
      "command": "uv",
      "args": ["--directory", "/path/to/my-server", "run", "my-entrypoint"]
    }
  }
}

ボットの実行

uv run bot

ローカルシェル(オプション)

ボットはローカルの ShellTool を公開できます。デフォルトでは無効です。次のようにして有効にします。

export SHELL_ENABLED=1

SHELL_ENABLED=1 のみを設定した場合、エージェントは事前定義されたスキルのない、基本的なローカルシェルにアクセスできます。

シェルスキル(オプション)

必要に応じて、シェルとあわせてスキルディレクトリをマウントできます。SKILL.md ファイルを含む直下の各サブディレクトリがスキルとして登録され、エージェントへのヒントとして公開されます(スキルは参考情報のメタデータであり、コマンドの実行をサンドボックス化するものではありません)。

export SHELL_ENABLED=1
export SHELL_SKILLS_DIR="./skills"

SHELL_ENABLED が設定されていない場合、SHELL_SKILLS_DIR は無視されます。ディレクトリがない場合、または有効なスキルが含まれていない場合、ボットは基本的なシェルにフォールバックし、警告をログに記録します。

Docker イメージを使用する場合は、実行時にスキルディレクトリをマウントしてください(イメージのビルド時にはデフォルトで除外されます)。

-v /path/to/skills:/app/skills:ro

SKILL.md ファイルには、name と description フィールドを含む YAML フロントマターを記述してください。

---
name: my-skill
description: A brief description of what this skill does
---

Detailed instructions for the agent...

Docker

docker build -t agentic-slackbot .

docker run -d \
  --name slackbot \
  -e SLACK_BOT_TOKEN="" \
  -e SLACK_APP_TOKEN="" \
  -e OPENAI_API_KEY="" \
  -e SHELL_ENABLED=1 \
  -e SHELL_SKILLS_DIR=/app/skills \
  -v /path/to/instructions.md:/app/instructions.md \
  -v /path/to/skills:/app/skills:ro \
  agentic-slackbot

MCP サーバーを使用するには、設定ファイルもマウントしてください。

docker run -d \
  --name slackbot \
  -e SLACK_BOT_TOKEN="" \
  -e SLACK_APP_TOKEN="" \
  -e OPENAI_API_KEY="" \
  -e SHELL_ENABLED=1 \
  -e SHELL_SKILLS_DIR=/app/skills \
  -v /path/to/instructions.md:/app/instructions.md \
  -v /path/to/skills:/app/skills:ro \
  -v /path/to/servers_config.json:/app/servers_config.json \
  agentic-slackbot

クレジット

このプロジェクトは、sooperset/mcp-client-slackbot の例をベースにしています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。