mcpField
S
SLACK MCP CLIENT

SLACK MCP CLIENT

github.com/tuannvmフレームワーク・SDK17247 週間前に更新

SLACK MCP CLIENT について

Slack MCP Client は、Slack をインターフェースとして LLM と MCP サーバーを接続する Slack ボットおよび MCP クライアントです。Slack の会話から運用ツールや開発ツールを利用したいチームに向いています。

主な機能

  1. 01HTTP、SSE、stdio のトランスポートに対応
  2. 02OpenAI、Anthropic、Ollama のモデルに対応
  3. 03マルチステップの推論とツール呼び出しを行うエージェントモード
  4. 04Slack スレッドごとに分けた会話コンテキスト
  5. 05環境変数に対応した統合 JSON 設定ファイル

活用シーン

  1. 01Slack からのデータベース照会やシステム状態の確認
  2. 02チャットを通じた Kubernetes と Git の操作
  3. 03ナレッジベースを使ったチームからの質問への回答

MCP 対応

複数の MCP サーバーに設定により接続する MCP クライアントです。サーバー名をツール名の接頭辞として付与し、サーバー間の名前衝突を防ぎます。

詳細

Slack MCP Client

Slack と AI モデルをつなぐ、本番環境対応の完全な MCP 互換ブリッジです。

このクライアントを使うと、AI モデル(OpenAI GPT-4.1、Anthropic Claude 4.5、Ollama のローカルモデル)が Slack の会話を通じて、実際のツールやシステムを操作できます。業界標準の Model Context Protocol(MCP)に基づいて構築されており、ファイルシステム、データベース、Kubernetes クラスター、Git リポジトリ、カスタムツールへのセキュアなアクセスを提供します。

GitHub Workflow Status Go Version Trivy Scan Docker Image GitHub Release License: MIT

MCP Specification 2025-06-18 に対応 — 最新の Model Context Protocol 標準に準拠しています

最近の更新

2025年10月:ストリーミングの修正、エージェントの解析機能の強化、API キーのサニタイズを含む langchaingo v0.1.14。

主な機能

  • あらゆる MCP との互換性 — すべてのトランスポート方式(HTTP、SSE、stdio)に対応
  • 複数のプロバイダーの LLM に対応 — OpenAI GPT-4.1/4o、Anthropic Claude 4.5、Ollama(Llama 3.3、Qwen、Mistral、DeepSeek)
  • エージェントモード — LangChain による複雑なワークフロー向けのマルチステップ推論
  • RAG 連携 — セマンティック検索機能を備えたナレッジベース
  • スレッド対応コンテキスト — Slack のスレッドごとに個別の会話履歴を保持
  • ユーザーコンテキスト連携 — ユーザー情報をキャッシュし、パーソナライズされた応答を提供
  • 一意なツール名 — サーバー名を接頭辞に付けたツール名で、MCP サーバー間の競合を防止
  • 本番環境対応 — 包括的な設定、監視、セキュリティ

ユースケース

  • DevOps チーム — Slack を通じたインフラストラクチャの自動化と監視
  • 開発チーム — コードレビュー、Git 操作、ファイル管理
  • サポートチーム — データベースクエリ、システムの状態確認、トラブルシューティング
  • 一般用途 — 実際のツールやシステムと連携する AI アシスタンス

MCP との互換性

公式の Model Context Protocol(2025-06-18 仕様)に準拠しています:

  • すべてのトランスポート方式 — HTTP、SSE、stdio プロトコル
  • JSON-RPC 2.0 — 標準通信プロトコル
  • 公式 MCP サーバー — すべての modelcontextprotocol/servers と互換性があります
  • カスタム MCP サーバー — MCP に準拠するあらゆるサーバーで動作します
  • セキュリティ標準 — ユーザーの同意、データプライバシー、ツールの安全性に関する要件を実装

SSE MCP サーバーの認証

Server-Sent Events(SSE)を使用する MCP サーバーの認証は、次の設定で行えます。

例:

{
  "httpHeaders": {
    "Authorization": "Bearer YOUR_TOKEN_HERE"
  }
}

認証用の実際のトークンに合わせて、YOUR_TOKEN_HERE を置き換えてください。

仕組み

画像

flowchart LR
    User([👤 User]) --> Slack{🔗 Slack Interface}

    subgraph Infrastructure[Observability]
        Config[📋 Unified Config<br/>JSON Schema]
        Monitoring[📊 Monitoring<br/>Prometheus Metrics]
        Tracing[🔍 OpenTelemetry Tracing<br/>Langfuse & OTLP]
        Logging[📝 Structured Logging<br/>Debug & Analytics]
    end
    
    subgraph Core[Features]
        Slack --> Bridge[🌉 LLM-MCP Bridge<br/>Orchestration Layer]
        
        subgraph LLM[🤖 AI Processing]
            Bridge --> LLMRegistry[LLM Provider Registry]
            LLMRegistry --> OpenAI[OpenAI<br/>GPT-4o]
            LLMRegistry --> Anthropic[Anthropic<br/>Claude]
            LLMRegistry --> Ollama[Ollama<br/>Local Models]
            
            Bridge --> Agent{🎯 Agent Mode?}
            Agent -->|Yes| LangChain[🔄 LangChain Agent<br/>Multi-step Reasoning]
            Agent -->|No| Standard[⚡ Standard Mode<br/>Single Response]
        end
        
        subgraph Knowledge[📚 Knowledge & Memory]
            Bridge --> RAG[🧠 RAG System]
            RAG --> SimpleRAG[📄 JSON Store<br/>Simple Documents]
            RAG --> VectorRAG[🔍 OpenAI Vector Store<br/>Semantic Search]
        end
        
        subgraph Tools[🛠️ MCP Mode]
            Bridge --> MCPManager[MCP Client]
            MCPManager --> FileSystem[📁 Filesystem MCP Server<br/>Read/Write Files]
            MCPManager --> Git[🌿 Git MCP Server <br/>Repository Tools]
            MCPManager --> Kubernetes[☸️ Kubernetes MCP Server<br/>Cluster Management]
        end
    end
    
    
    Config -.-> Core
    Core -.-> Monitoring
    Core -.-> Tracing
    Core -.-> Logging
    
    style Core fill:#F8F9FA,stroke:#6C757D,stroke-width:3px
    style LLM fill:#E3F2FD,stroke:#1976D2,stroke-width:2px
    style Knowledge fill:#E8F5E8,stroke:#388E3C,stroke-width:2px
    style Tools fill:#FFF3E0,stroke:#F57C00,stroke-width:2px
    style Infrastructure fill:#F3E5F5,stroke:#7B1FA2,stroke-width:2px
    
    style User fill:#4CAF50,stroke:#2E7D32,stroke-width:2px,color:#fff
    style Slack fill:#4A90E2,stroke:#1565C0,stroke-width:2px,color:#fff
    style Bridge fill:#FF9800,stroke:#E65100,stroke-width:2px,color:#fff
    style LangChain fill:#9C27B0,stroke:#4A148C,stroke-width:2px,color:#fff
    style RAG fill:#2196F3,stroke:#0D47A1,stroke-width:2px,color:#fff
  1. ユーザーは Slack を通じてメッセージを送信し、インテリジェントな AI ワークフローを起動します。
  2. LLM-MCP Bridgeはインテリジェントなオーケストレーション層として、次の処理を行います。
    • リクエストを適切な LLM プロバイダー(OpenAI、Anthropic、Ollama)にルーティングします。
    • エージェントモード(複数ステップの推論)と標準モード(単一の応答)のどちらを使用するかを選択します。
    • RAG システムを統合して、ナレッジの検索とコンテキストの強化を行います。
    • 複数の MCP サーバーにまたがるツールの検出と実行を管理します。
  3. ナレッジとメモリシステムが、コンテキストに応じたインテリジェンスを提供します。
    • 軽量なドキュメント保存に対応するシンプルな JSON ストア
    • セマンティック検索とエンタープライズグレードの RAG に対応する OpenAI Vector Store
  4. ツールエコシステムが、さまざまな外部システムに接続します。
    • ファイル管理のためのファイルシステム操作
    • リポジトリとのやり取りのための Git 統合
    • Kubernetes クラスターの管理と監視
    • HTTP、SSE、stdio プロトコルを介したカスタムツール
  5. インフラストラクチャが、本番環境に対応したデプロイを実現します。
    • 環境変数をサポートする統合 JSON 設定
    • 可観測性と監視のための Prometheus メトリクス
    • Langfuse および OTLP プロバイダーによる OpenTelemetry トレース
    • デバッグと分析のための構造化ログ

機能

  • ✅ マルチモード MCP クライアント:
    • 自動再試行機能を備えたリアルタイム通信向け Server-Sent Events(SSE)
    • JSON-RPC 向け HTTP トランスポート
    • ローカル開発とテスト向けの stdio
  • ✅ Slack 統合:
    • セキュアでファイアウォールに優しい通信のために Socket Mode を使用
    • チャンネルとダイレクトメッセージの両方に対応
    • Markdown と Block Kit によるリッチなメッセージ形式
    • スレッドごとに個別のコンテキストを使用した、スレッド対応の会話追跡
    • パーソナライズされたやり取りのためのユーザーコンテキストのキャッシュ
    • カスタマイズ可能なボットの動作とメッセージ履歴
  • ✅ マルチプロバイダー LLM 対応:
    • OpenAI(GPT-4.1、GPT-4o、o3-pro)
    • Anthropic(Claude Sonnet 4.5、Opus 4.1)
    • Ollama(Llama 3.3、Qwen2.5、Mistral、DeepSeek)
    • ネイティブのツール呼び出しと統合 LangChain ゲートウェイ
  • ✅ エージェントモード:
    • LangChain(langchaingo v0.1.14)を活用した自律型 AI エージェント
    • 強化された複数ステップの推論とツールのオーケストレーション
    • 複雑な複数行のツール呼び出しに対応する解析の改善
    • 設定可能なエージェントの反復処理と動作
    • メモリリークを修正した、信頼性の高いストリーミング応答
    • 高度なプロンプトエンジニアリング機能
  • ✅ RAG(検索拡張生成):
    • 複数のプロバイダーに対応:シンプルな JSON ストレージ、OpenAI Vector Store
    • vectorStoreId に対応した再利用可能なベクトルストア
    • 設定可能な検索パラメーターと類似度メトリクス
    • インテリジェントなチャンク分割による PDF の取り込み
    • ドキュメント管理用の CLI ツール
  • ✅ 統合設定:
    • JSON Schema 検証に対応した単一の JSON 設定ファイル
    • 包括的なタイムアウトと再試行の設定
    • 環境変数の置換と上書き
    • 基盤となるパッケージのすべてのオプションを公開
    • 完全なカスタマイズに対応するスマートなデフォルト設定
    • 名前の衝突を防ぐサーバー名プレフィックス付きのツール名
  • ✅ 本番環境対応:
    • GHCR への公開に対応した Docker コンテナーのサポート
    • OCI レジストリーに対応した Kubernetes Helm チャート
    • 包括的なログ記録とエラー処理
    • セキュリティスキャンを含むテストカバレッジ
  • ✅ 監視と可観測性:
    • Prometheus メトリクスの統合
    • エラー率を含むツール呼び出しの追跡
    • モデルと種類ごとの LLM トークン使用量の監視
    • Langfuse およびシンプルなプロバイダーによる OpenTelemetry トレース
    • フォールバックを適切に行う、設定可能な可観測性プロバイダー
    • LLM 操作とツール呼び出しを対象とする包括的なスパン追跡
    • 設定可能なメトリクスエンドポイントとログレベル

インストール

バイナリーリリースから

GitHub リリースページから最新のバイナリーをダウンロードするか、Go を使用してインストールします。

# Install latest version using Go
go install github.com/tuannvm/slack-mcp-client@latest

# Or build from source
git clone https://github.com/tuannvm/slack-mcp-client.git
cd slack-mcp-client
make build
# Binary will be in ./bin/slack-mcp-client
バイナリを使ったローカル実行

バイナリをインストールした後、以下の手順でローカル実行できます。

  1. 環境変数を設定します。
# Using environment variables directly
export SLACK_BOT_TOKEN="xoxb-your-bot-token"
export SLACK_APP_TOKEN="xapp-your-app-token"
export OPENAI_API_KEY="sk-your-openai-key"
export OPENAI_MODEL="gpt-4.1"  # or gpt-4o, o3-pro
export LOG_LEVEL="info"

# Or create a .env file and source it
cat > .env << EOL
SLACK_BOT_TOKEN="xoxb-your-bot-token"
SLACK_APP_TOKEN="xapp-your-app-token"
OPENAI_API_KEY="sk-your-openai-key"
OPENAI_MODEL="gpt-4o"
LOG_LEVEL="info"
EOL

source .env
  1. 統合設定ファイルを作成します。
# Create config.json with the new unified configuration format
cat > config.json << EOL
{
  "\$schema": "https://github.com/tuannvm/slack-mcp-client/schema/config-schema.json",
  "version": "2.0",
  "slack": {
    "botToken": "\${SLACK_BOT_TOKEN}",
    "appToken": "\${SLACK_APP_TOKEN}"
  },
  "llm": {
    "provider": "openai",
    "useNativeTools": true,
    "providers": {
      "openai": {
        "model": "gpt-4o",
        "apiKey": "\${OPENAI_API_KEY}",
        "temperature": 0.7
      }
    }
  },
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "\$HOME"]
    }
  },
  "monitoring": {
    "enabled": true,
    "metricsPort": 8080,
    "loggingLevel": "info"
  },
  "observability": {
    "enabled": true,
    "provider": "simple-otel",
    "endpoint": "${OTEL_EXPORTER_OTLP_ENDPOINT}",
    "serviceName": "slack-mcp-client",
    "serviceVersion": "1.0.0"
  }
}
EOL
  1. アプリケーションを実行します。
# Run with unified configuration (looks for config.json in current directory)
slack-mcp-client --config config.json

# Enable debug mode with structured logging
slack-mcp-client --config config.json --debug

# Validate configuration before running
slack-mcp-client --config-validate --config config.json

# Configure metrics port via config file or flag
slack-mcp-client --config config.json --metrics-port 9090
レガシー設定からの移行

以前のバージョンの mcp-servers.json ファイルをお持ちの場合は、新しい統合設定形式に移行できます。

# Automatic migration (recommended)
slack-mcp-client --migrate-config --config legacy-mcp-servers.json --output config.json

# Manual migration: Use examples as templates
cp examples/minimal.json config.json
# Edit config.json with your specific settings

# Validate the new configuration
slack-mcp-client --config-validate --config config.json

新しい設定形式には、以下の特長があります。

  • 単一ファイル:すべての設定を1つの config.json ファイルにまとめます
  • JSON Schema:自動補完と検証に対応した IDE サポートを利用できます
  • 環境変数:シークレットには ${VAR_NAME} 構文を使用します
  • スマートなデフォルト:基本的な使い方に必要な設定を最小限に抑えます
  • 包括的なオプション:基盤となるパッケージのすべての設定を公開します

アプリケーションは Slack に接続し、メッセージの受信を開始します。ログを確認して、エラーや接続の問題がないか確認できます。

RAG のセットアップと使い方

クライアントには、LangChain Go と互換性があり、プロフェッショナルグレードのパフォーマンスを提供する、改良された RAG(検索拡張生成)システムが含まれています。

RAG をすぐに使い始める
  1. 設定で RAG を有効にします。
{
  "$schema": "https://github.com/tuannvm/slack-mcp-client/schema/config-schema.json",
  "version": "2.0",
  "slack": {
    "botToken": "${SLACK_BOT_TOKEN}",
    "appToken": "${SLACK_APP_TOKEN}"
  },
  "llm": {
    "provider": "openai",
    "useNativeTools": true,
    "providers": {
      "openai": {
        "model": "gpt-4o",
        "apiKey": "${OPENAI_API_KEY}"
      }
    }
  },
  "rag": {
    "enabled": true,
    "provider": "simple",
    "chunkSize": 1000,
    "providers": {
      "simple": {
        "databasePath": "./knowledge.json"
      },
      "openai": {
        "indexName": "my-knowledge-base",
        "vectorStoreId": "vs_existing_store_id",
        "dimensions": 1536,
        "maxResults": 10
      }
    }
  }
}
  1. CLI を使ってドキュメントを取り込みます。
# Ingest PDF files from a directory
slack-mcp-client --rag-ingest ./company-docs --rag-db ./knowledge.json

# Test search functionality
slack-mcp-client --rag-search "vacation policy" --rag-db ./knowledge.json

# Get database statistics
slack-mcp-client --rag-stats --rag-db ./knowledge.json
  1. Slack で使用します。

設定が完了すると、LLM がナレッジベースを自動的に検索できるようになります。

ユーザー:「休暇のポリシーについて教えてください。」

AI:「ナレッジベースで休暇のポリシーに関する情報を検索します……」 (RAG データベースを自動的に検索します)

AI:「会社のポリシー文書によると、15 日間の休暇を取得できます……」

RAG の機能
  • 🎯 スマート検索:単語頻度、ファイル名による加点、フレーズマッチングを活用した高度な関連度スコアリング
  • 🔗 LangChain 互換:標準的なベクトルストアと置き換えてすぐに使用できます
  • 📈 拡張性:ベクトル埋め込みやその他のバックエンドを簡単に追加できます
カスタムプロンプトとアシスタント

クライアントは、専門分野に特化した AI アシスタントを作成するための高度なプロンプトエンジニアリング機能をサポートしています。

システムプロンプト

カスタムの AI パーソナリティと動作を作成します。

# Create a custom system prompt file
cat > sales-assistant.txt << EOL
You are SalesGPT, a helpful sales assistant specializing in B2B software sales.

Your expertise includes:
- Lead qualification and discovery
- Solution positioning and value propositions  
- Objection handling and negotiation
- CRM best practices and sales processes

Always:
- Ask qualifying questions to understand prospect needs
- Provide specific, actionable sales advice
- Reference industry best practices
- Maintain a professional yet friendly tone

When discussing pricing, always emphasize value over cost.
EOL

# Use the custom prompt
slack-mcp-client --system-prompt ./sales-assistant.txt
設定ベースのプロンプト

設定でプロンプトを定義します。

{
  "$schema": "https://github.com/tuannvm/slack-mcp-client/schema/config-schema.json",
  "version": "2.0",
  "slack": {
    "botToken": "${SLACK_BOT_TOKEN}",
    "appToken": "${SLACK_APP_TOKEN}"
  },
  "llm": {
    "provider": "openai",
    "useNativeTools": true,
    "customPrompt": "You are a helpful DevOps assistant specializing in Kubernetes and cloud infrastructure.",
    "providers": {
      "openai": {
        "model": "gpt-4.1",
        "apiKey": "${OPENAI_API_KEY}",
        "temperature": 0.7
      }
    }
  }
}
アシスタントの役割

さまざまな用途に特化したアシスタントを作成します。

  • DevOps アシスタント:Kubernetes、Docker、CI/CD の専門知識
  • 営業アシスタント:見込み顧客の評価、異議への対応
  • 人事アシスタント:ポリシーに関する質問、オンボーディングの案内
  • サポートアシスタント:顧客の問題解決
  • コードレビューアシスタント:セキュリティ、パフォーマンス、ベストプラクティス
エージェントモード

エージェントモードでは、LangChain のエージェントフレームワークを使用して、より対話的でコンテキストを考慮した会話を実現します。単一プロンプトでのやり取りとは異なり、エージェントは複数ステップの推論を行い、ツールをより戦略的に使用し、会話全体を通じてコンテキストをより適切に維持できます。

エージェントモードの仕組み

エージェントモードでは、LangChain の会話型エージェントフレームワークを使用して、以下を実現します。

  1. 対話型の会話:複数回のやり取りを通じてコンテキストを維持します
  2. 戦略的なツール使用:利用可能なツールをいつ、どのように使うかをエージェントが判断します
  3. 複数ステップの推論:複雑な問題を扱いやすいステップに分解できます
  4. ストリーミング応答:処理中にリアルタイムで更新を提供します
  5. ユーザーコンテキストの統合:キャッシュされたユーザー情報を応答に反映し、パーソナライズします
  6. スレッドコンテキストの認識:Slack のスレッドごとに個別の会話履歴を維持します
エージェントモードの設定

設定ファイルでエージェントモードを有効にします。

{
  "$schema": "https://github.com/tuannvm/slack-mcp-client/schema/config-schema.json",
  "version": "2.0",
  "slack": {
    "botToken": "${SLACK_BOT_TOKEN}",
    "appToken": "${SLACK_APP_TOKEN}"
  },
  "llm": {
    "provider": "openai",
    "useNativeTools": true,
    "useAgent": true,
    "customPrompt": "You are a DevOps expert specializing in Kubernetes and cloud infrastructure. Always think through problems step by step.",
    "maxAgentIterations": 20,
    "providers": {
      "openai": {
        "model": "gpt-4.1",
        "apiKey": "${OPENAI_API_KEY}",
        "temperature": 0.7
      }
    }
  },
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"]
    },
    "github": {
      "command": "github-mcp-server",
      "args": ["stdio"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}
設定オプション
  • llm.useAgent:エージェントモードを有効にします(デフォルト:false)
  • llm.useNativeTools:システムプロンプトベースのツールではなく、LangChain のネイティブツールを使用します(デフォルト:false)
  • llm.customPrompt:エージェントの動作を指定するシステムプロンプト
  • llm.maxAgentIterations:エージェントの推論ステップの最大数(デフォルト:20)
エージェントモードと標準モード

標準モード:

  • 単一プロンプトでのやり取り
  • システムプロンプト内で、ツールを JSON スキーマとして記述
  • ツール呼び出しの直接的な解析と実行
  • より予測しやすいトークン使用量
  • よりシンプルな会話フロー

エージェントモード:

  • 複数ターンにわたる会話形式のやり取り
  • コンテキストを踏まえたツール使用の判断
  • ユーザーのコンテキストをより効果的に統合
  • より自然な会話フロー
  • 強化された推論能力
エージェントモードの例

対話型の開発相談:

User: "I need help optimizing my React app performance"

Agent Response:
🤖 I'd be happy to help optimize your React app performance! Let me understand your current setup better.

[Agent maintains conversation context and asks relevant follow-up questions]
Agent: "What specific performance issues are you experiencing? Are you seeing slow renders, large bundle sizes, or something else?"

User: "The app takes too long to load initially"

Agent: "Let me check your current bundle setup and suggest optimizations..."
[Agent uses filesystem tools to analyze the project structure and provides targeted advice]

コンテキストに応じた問題解決:

User: "Can you help me with my deployment pipeline?"

Agent Response:
🤖 I'll help you with your deployment pipeline. Since I know you're working on a React project, let me check your current CI/CD setup.

[Agent leverages previous conversation context and user information to provide personalized assistance]
[Agent strategically uses relevant tools based on the conversation flow]
エージェントモードのベストプラクティス
  1. システムプロンプト:エージェントの動作を導く、明確で具体的なシステムプロンプトを設計します
  2. ツールの選定:エージェントの領域に関連するツールを用意します
  3. コンテキスト管理:エージェントは会話をまたいで、より適切にコンテキストを維持します
  4. ユーザーに合わせた応答:ユーザーのコンテキスト統合を活用し、パーソナライズされた応答を実現します
  5. ツール戦略:ニーズに応じて、ネイティブツールとシステムプロンプトベースのツールを選択します
制限事項と考慮点
  • OpenAI エージェント:langchaingo のネイティブ OpenAI エージェントには既知の問題があり、回避策として会話型エージェントを使用します
  • LangChain の依存関係:エージェントモードには LangChain プロバイダーが必要です
  • 権限:ユーザー情報を取得するには、Slack の追加権限が必要になる場合があります
  • パフォーマンス:エージェントモードのパフォーマンス特性は、標準モードと異なる場合があります
Helm を使用した Kubernetes へのデプロイ

Kubernetes へのデプロイには、helm-chart ディレクトリにある Helm チャートを利用できます。このチャートを使うと、適切な設定とシークレット管理のもとで、slack-mcp-client を柔軟にデプロイできます。

GitHub Container Registry からのインストール

Helm チャートは GitHub Container Registry から直接利用できるため、リポジトリをクローンせずに簡単にインストールできます。

# Add the OCI repository to Helm (only needed once)
helm registry login ghcr.io -u USERNAME -p GITHUB_TOKEN

# Pull the Helm chart
helm pull oci://ghcr.io/tuannvm/charts/slack-mcp-client --version 0.1.0

# Or install directly
helm install my-slack-bot oci://ghcr.io/tuannvm/charts/slack-mcp-client --version 0.1.0 -f values.yaml

利用可能なバージョンは、ブラウザーで GitHub Container Registry にアクセスして確認できます。

前提条件
  • Kubernetes 1.16+
  • Helm 3.0+
  • Slack Bot と App のトークン
基本的なインストール
# Create a values file with your configuration
cat > values.yaml << EOL
secret:
  create: true

env:
  SLACK_BOT_TOKEN: "xoxb-your-bot-token"
  SLACK_APP_TOKEN: "xapp-your-app-token"
  OPENAI_API_KEY: "sk-your-openai-key"
  OPENAI_MODEL: "gpt-4o"
  LOG_LEVEL: "info"

# Optional: Configure MCP servers
configMap:
  create: true
EOL

# Install the chart
helm install my-slack-bot ./helm-chart/slack-mcp-client -f values.yaml
設定オプション

Helm チャートでは、次のようなさまざまな設定オプションを利用できます。

  • リソースの上限とリクエストの設定
  • ConfigMap を使用した MCP サーバーの設定
  • Kubernetes シークレットを使用した機密データの管理
  • デプロイパラメーターのカスタマイズ

詳しくは、Helm チャートの READMEを参照してください。

GHCR の Docker イメージの使用

Helm チャートは、デフォルトで GitHub Container Registry(GHCR)の Docker イメージを使用します。特定のバージョンを指定することも、最新タグを使用することもできます。

# In your values.yaml
image:
  repository: ghcr.io/tuannvm/slack-mcp-client
  tag: "latest"  # Or use a specific version like "1.0.0"
  pullPolicy: IfNotPresent

イメージを手動でプルするには、次のコマンドを実行します。

# Pull the latest image
docker pull ghcr.io/tuannvm/slack-mcp-client:latest

# Or pull a specific version
docker pull ghcr.io/tuannvm/slack-mcp-client:1.0.0

プライベートイメージを使用する場合は、values でイメージプルシークレットを設定できます。

imagePullSecrets:
  - name: my-ghcr-secret
ローカルテスト用の Docker Compose

ローカルでのテストや開発では、Docker Compose を使って slack-mcp-client と追加の MCP サーバーを簡単に実行できます。

セットアップ
  1. 認証情報を含む .env ファイルを作成します。
# Create .env file from example
cp .env.example .env
# Edit the file with your credentials
nano .env
  1. mcp-servers.json ファイルを作成します(またはサンプルを使用します)。
# Create mcp-servers.json from example
cp mcp-servers.json.example mcp-servers.json
# Edit if needed
nano mcp-servers.json
  1. サービスを起動します。
# Start services in detached mode
docker-compose up -d

# View logs
docker-compose logs -f

# Stop services
docker-compose down
Docker Compose の設定

同梱の docker-compose.yml には、次の設定が含まれています。

  • .env ファイルから読み込む環境変数
  • MCP サーバー設定をマウントするボリューム
  • 追加の MCP サーバーへの接続例(コメントアウト済み)
version: '3.8'

services:
  slack-mcp-client:
    image: ghcr.io/tuannvm/slack-mcp-client:latest
    container_name: slack-mcp-client
    environment:
      - SLACK_BOT_TOKEN=${SLACK_BOT_TOKEN}
      - SLACK_APP_TOKEN=${SLACK_APP_TOKEN}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - OPENAI_MODEL=${OPENAI_MODEL:-gpt-4o}
    volumes:
      - ./mcp-servers.json:/app/mcp-servers.json:ro

同じネットワーク内に追加の MCP サーバーを含めるよう、この構成を簡単に拡張できます。

Slack アプリのセットアップ

  1. https://api.slack.com/apps で新しい Slack アプリを作成します
  2. Socket Mode を有効にして、アプリレベルトークンを生成します
  3. Slack アプリへのダイレクトメッセージを有効にするには、App Home ページで Allow users to send Slash commands and messages from the chat tab にチェックを入れます image
  4. 次の Bot Token Scopes を追加します:
    • app_mentions:read
    • chat:write
    • im:history
    • im:read
    • im:write
    • users:read
    • users.profile:read
    • channels:history
    • groups:history
    • mpim:history
  5. Event Subscriptions を有効にして、次のイベントを登録します:
    • app_mention
    • message.im
  6. アプリをワークスペースにインストールします

Slack アプリの設定、トークンのセットアップ、必要な権限、一般的な問題のトラブルシューティングについて詳しくは、Slack 設定ガイドを参照してください。

LLM 連携

クライアントは、柔軟な連携システムを通じて複数の LLM プロバイダーをサポートします:

LangChain ゲートウェイ

LangChain ゲートウェイにより、さまざまな LLM プロバイダーとシームレスに連携できます:

  • OpenAI:GPT モデルをネイティブにサポート(デフォルト)
  • Ollama:Llama、Mistral などのモデルをローカルでサポート
  • 拡張可能:ほかの LangChain 互換プロバイダーをサポートするよう拡張できます
LLM-MCP ブリッジ

カスタムの LLM-MCP ブリッジレイヤーにより、ネイティブな関数呼び出し機能がなくても、あらゆる LLM で MCP ツールを使用できます:

  • 幅広い互換性:関数呼び出しに対応していないものを含め、あらゆる LLM で動作します
  • パターン認識:ユーザーのプロンプトまたは LLM の応答から、ツール呼び出しを実行すべきタイミングを検出します
  • 自然言語のサポート:構造化された JSON ツール呼び出しと自然言語のリクエストの両方を理解します
設定

LLM プロバイダーは、環境変数またはコマンドラインフラグで設定できます:

# Set OpenAI as the provider (default)
export LLM_PROVIDER="openai"
export OPENAI_MODEL="gpt-4.1"  # or gpt-4o, o3-pro

# Use Anthropic
export LLM_PROVIDER="anthropic"
export ANTHROPIC_API_KEY="your-anthropic-api-key"
export ANTHROPIC_MODEL="claude-sonnet-4.5"  # or claude-opus-4.1

# Or use Ollama
export LLM_PROVIDER="ollama"
export LANGCHAIN_OLLAMA_URL="http://localhost:11434"
export LANGCHAIN_OLLAMA_MODEL="llama3.3"  # or qwen2.5-coder, mistral-small-3, deepseek-r1
プロバイダーの切り替え

LLM_PROVIDER 環境変数を変更することで、プロバイダーを簡単に切り替えられます:

# Use OpenAI
export LLM_PROVIDER=openai

# Use Anthropic
export LLM_PROVIDER=anthropic

# Use Ollama (local)
export LLM_PROVIDER=ollama

設定

クライアントでは、主に次の 2 つの方法で設定できます:

環境変数

環境変数を使用して、LLM プロバイダーと Slack 連携を設定します:

変数説明デフォルト
SLACK_BOT_TOKENSlack API 用の Bot トークン(必須)
SLACK_APP_TOKENSocket Mode 用のアプリレベルトークン(必須)
OPENAI_API_KEYOpenAI 認証用の API キー(必須)
OPENAI_MODEL使用する OpenAI モデルgpt-4.1
ANTHROPIC_API_KEYAnthropic 認証用の API キー(Anthropic の使用時は必須)
ANTHROPIC_MODEL使用する Anthropic モデルclaude-sonnet-4.5
LOG_LEVELログレベル(debug、info、warn、error)info
LLM_PROVIDER使用する LLM プロバイダー(openai、anthropic、ollama)openai
LANGCHAIN_OLLAMA_URLLangChain で Ollama を使用する場合の URLhttp://localhost:11434
LANGCHAIN_OLLAMA_MODELLangChain で Ollama を使用する場合のモデル名llama3.3
LANGFUSE_ENDPOINT可観測性のための Langfuse API エンドポイント(任意)
LANGFUSE_PUBLIC_KEY認証用の Langfuse 公開キー(任意)
LANGFUSE_SECRET_KEY認証用の Langfuse シークレットキー(任意)
OTEL_EXPORTER_OTLP_ENDPOINTシンプルなトレース用の OTLP エンドポイント(任意)
モニタリングと可観測性の設定

クライアントには、メトリクスと分散トレーシングの両方に対応した包括的なモニタリング機能が含まれています:

Prometheus メトリクス
  • メトリクスエンドポイント:設定されたポートの /metrics からアクセスできます
  • デフォルトポート:8080(--metrics-port フラグで設定可能)
  • 利用可能なメトリクス:
    • slackmcp_tool_invocations_total:ツール名、サーバー、エラー状態のラベルが付いた、ツール呼び出し数のカウンター
    • slackmcp_llm_tokens:種類とモデル別の LLM トークン使用量を示すヒストグラム
OpenTelemetry トレーシング
  • 対応プロバイダー:
    • simple-otel:OTLP エンドポイントへの基本的な OpenTelemetry トレーシング(エンドポイントの設定が必要)
    • langfuse-otel:Langfuse 統合による高度な LLM オブザーバビリティ(エンドポイントと認証の設定が必要)
    • disabled:トレーシングなし(エンドポイントが設定されていない場合のデフォルト)
  • 自動フォールバック:プロバイダーに障害が発生すると、自動的に無効状態にフォールバックします
  • 包括的なトラッキング:LLM の操作、ツール呼び出し、ユーザーインタラクションのスパンを詳細な属性とともに記録します

設定と使用例:

# Access metrics endpoint
curl http://localhost:8080/metrics

# Run with custom metrics port
slack-mcp-client --metrics-port 9090

# Enable Langfuse tracing (example)
export LANGFUSE_ENDPOINT="https://cloud.langfuse.com"
export LANGFUSE_PUBLIC_KEY="pk-your-public-key"  
export LANGFUSE_SECRET_KEY="sk-your-secret-key"

# Enable simple OTLP tracing (example)
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318"
統一設定形式

すべての設定は、包括的なオプションを備えた単一の config.json ファイルで管理されるようになりました:

{
  "$schema": "https://github.com/tuannvm/slack-mcp-client/schema/config-schema.json",
  "version": "2.0",
  "slack": {
    "botToken": "${SLACK_BOT_TOKEN}",
    "appToken": "${SLACK_APP_TOKEN}",
    "messageHistory": 50,
    "thinkingMessage": "Processing..."
  },
  "llm": {
    "provider": "openai",
    "useNativeTools": true,
    "useAgent": false,
    "customPrompt": "You are a helpful assistant.",
    "maxAgentIterations": 20,
    "providers": {
      "openai": {
        "model": "gpt-4o",
        "apiKey": "${OPENAI_API_KEY}",
        "temperature": 0.7,
        "maxTokens": 2000
      },
      "anthropic": {
        "model": "claude-sonnet-4.5",
        "apiKey": "${ANTHROPIC_API_KEY}",
        "temperature": 0.7
      }
    }
  },
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"],
      "initializeTimeoutSeconds": 30,
      "tools": {
        "allowList": ["read_file", "write_file", "list_directory"],
        "blockList": ["delete_file"]
      }
    },
    "web-api": {
      "url": "http://localhost:8080/mcp",
      "transport": "sse",
      "initializeTimeoutSeconds": 30
    }
  },
  "rag": {
    "enabled": true,
    "provider": "openai",
    "chunkSize": 1000,
    "providers": {
      "openai": {
        "vectorStoreId": "vs_existing_store_id",
        "dimensions": 1536,
        "maxResults": 10
      }
    }
  },
  "timeouts": {
    "httpRequestTimeout": "30s",
    "toolProcessingTimeout": "3m",
    "mcpInitTimeout": "30s"
  },
  "retry": {
    "maxAttempts": 3,
    "baseBackoff": "500ms",
    "maxBackoff": "5s"
  },
  "monitoring": {
    "enabled": true,
    "metricsPort": 8080,
    "loggingLevel": "info"
  },
  "observability": {
    "enabled": true,
    "provider": "langfuse-otel",
    "endpoint": "${LANGFUSE_ENDPOINT}",
    "publicKey": "${LANGFUSE_PUBLIC_KEY}",
    "secretKey": "${LANGFUSE_SECRET_KEY}",
    "serviceName": "slack-mcp-client",
    "serviceVersion": "1.0.0"
  }
}

設定オプションと移行ガイドの詳細については、設定ガイドを参照してください。

自動リロード機能

クライアントは、MCP サーバーの再起動時にもダウンタイムなく処理できる、オプションの自動リロードに対応しています。MCP サーバーが個別に再起動する可能性がある Kubernetes 環境に最適です。

注:リロード機能はデフォルトで無効です。使用するには、設定ファイルで明示的に有効にする必要があります。

設定

リロード機能を有効にするには、config.json にリロード設定を追加します:

{
  "version": "2.0",
  "reload": {
    "enabled": true,
    "interval": "30m"
  }
}

設定オプション:

  • enabled:リロード機能を有効にするには true に設定する必要があります(デフォルト:false)
  • interval:自動リロードの間隔(デフォルト:"30m"、最小:"10s")
使用方法

自動リロード:有効にすると、設定した間隔でアプリケーションが自動的にリロードされ、MCP サーバーへの再接続とツールの再検出が行われます。

手動リロード:自動リロードが無効でも、シグナルを使って手動でリロードを実行できます:

# In Kubernetes
kubectl exec -it <pod-name> -- kill -USR1 1

# Local process
kill -USR1 <process-id>
メリット
  • ダウンタイムなし:リロード中もアプリケーションは実行を継続します
  • Kubernetes に最適:アプリケーションのコンポーネントが再起動している間も、Pod は実行を継続します
  • オプトイン:デフォルトでは無効で、明示的に設定した場合のみ有効になります
  • 柔軟:自動(定期的)と手動(シグナル)の両方で実行できます
  • 安全:最小間隔の検証により、過剰なリロードを防ぎます

有効にすると、リロード機能によって次の処理が自動的に行われます:

  • 設定済みのすべての MCP サーバーに再接続します
  • 利用可能なツールを再検出します
  • 設定を更新します
  • 処理中も Slack との接続を維持します

更新、スケーリング、メンテナンスなどにより MCP サーバーが再起動する可能性がある本番環境に最適です。

Slack 形式の出力

クライアントには、Slack でのメッセージ表示を改善する、包括的な Slack 形式の出力システムが含まれています:

  • 形式の自動検出:メッセージの種類(プレーンテキスト、Markdown、JSON Block Kit、構造化データ)を自動的に検出し、適切な形式を適用します
  • Markdown の書式設定:標準的な Markdown からの自動変換により、Slack の mrkdwn 構文に対応します
    • **bold** を *bold* に変換し、Slack で太字を正しく表示します
    • インラインコード、引用、リスト、その他の書式要素を保持します
  • 引用符付き文字列の拡張:二重引用符で囲まれた文字列を自動的にインラインコードブロックに変換し、見やすく表示します
    • 例:"namespace-name" は Slack で `namespace-name` になります
    • ID、タイムスタンプ、その他の引用符付きの値が読みやすくなります
  • Block Kit の統合:構造化データを Block Kit レイアウトに変換し、見やすく表示します
    • Slack API の制限に対して自動的に検証します
    • Block Kit の検証に失敗した場合は、プレーンテキストにフォールバックします

詳細については、Slack 形式ガイドを参照してください。

トランスポートモード

クライアントは、次の3つのトランスポートモードをサポートしています。

  • SSE(デフォルト):Server-Sent Events を使用して MCP サーバーとリアルタイムで通信し、信頼性を高める自動再試行ロジックを備えています
  • HTTP:JSON-RPC による通信に HTTP POST リクエストを使用します
  • stdio:ローカルでの開発とテストに標準入出力を使用します

ドキュメント

詳細なドキュメントは docs/ ディレクトリにあります。

設定とセットアップ
  • Slack 設定ガイド - 必要な権限やトークン、一般的な問題のトラブルシューティングなど、Slack アプリの設定に関する完全なガイドです
開発と実装
  • 実装ノート - 現在のアーキテクチャ、主要なコンポーネント、実装の詳細を網羅した技術ドキュメントです
  • 要件仕様 - 実装済みの機能、品質要件、今後の拡張を含む包括的な要件ドキュメントです
ユーザーガイド
  • Slack 書式ガイド - Markdown から Slack への変換、Block Kit レイアウト、自動書式検出など、メッセージの書式設定に関する完全なガイドです
  • RAG 実装ガイド - LangChain Go との互換性やパフォーマンス最適化を備えた、改良版 RAG システムの詳細なガイドです
  • RAG SQLite 実装 - ChatGPT のようなアップロード体験を実現する、Go ネイティブの SQLite 統合計画です
  • テストガイド - 単体テスト、統合テスト、手動テストの手順、デバッグを網羅した包括的なテストドキュメントです
クイックリンク
  • セットアップ:初期設定については、Slack 設定ガイドから始めてください
  • エージェントモード:ツールチェーンを使用する自律型 AI エージェントについては、上記のエージェントモードのセクションを参照してください
  • RAG:ドキュメントのナレッジベース統合については、RAG 実装ガイドを確認してください
  • 書式設定:メッセージの書式設定機能については、Slack 書式ガイドを参照してください
  • RAG SQLite:Go ネイティブの実装と最新のアップロード UX については、RAG SQLite 実装を参照してください
  • 開発:技術的な詳細については、実装ノートを確認してください
  • テスト:テスト手順とデバッグについては、テストガイドを参照してください
  • モニタリング:Prometheus 統合については、上記のメトリクス設定セクションを参照してください
  • 依存関係:バージョンの追跡とアップグレード履歴については、依存関係を確認してください

コントリビューション

コントリビューションを歓迎します!お気軽に Pull Request を送信してください。

ライセンス

このプロジェクトは MIT License の下でライセンスされています。詳細は LICENSE ファイルを参照してください。

CI/CD とリリース

このプロジェクトでは、継続的インテグレーションに GitHub Actions を、リリースの自動化に GoReleaser を使用しています。

継続的インテグレーションのチェック

CI パイプラインでは、すべての PR と main ブランチへのコミットに対して、次のチェックを実行します。

コード品質
  • リンティング:golangci-lint を使用して、一般的なコードの問題やスタイル違反をチェックします
  • Go モジュールの検証:go.mod と go.sum が適切に管理されていることを確認します
  • フォーマット:gofmt によってコードが適切にフォーマットされていることを確認します
セキュリティ
  • 脆弱性スキャン:govulncheck を使用して、依存関係に既知の脆弱性がないか確認します
  • 依存関係のスキャン:Trivy を使用して、依存関係の脆弱性をスキャンします
  • SBOM の生成:依存関係を追跡するためのソフトウェア部品表を作成します
テスト
  • 単体テスト:競合検出とコードカバレッジのレポートを有効にしてテストを実行します
  • ビルド検証:コードベースが正常にビルドされることを確認します
リリースプロセス

変更が main ブランチにマージされると、次の処理が行われます。

  1. コードの品質とセキュリティを検証するため、CI チェックが実行されます
  2. 成功すると、次の内容を含む新しいリリースが自動的に作成されます。
    • コミットメッセージに基づくセマンティックバージョニング
    • 複数のプラットフォーム向けバイナリビルド
    • GitHub Container Registry への Docker イメージの公開
    • GitHub Container Registry への Helm チャートの公開

コメント

MCP は初めてですか?

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

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