Slack の検索機能にアクセスするための Model Context Protocol (MCP) サーバーを TypeScript で実装してください。このサーバーは、LLM が Slack のユーザー、チャンネル、メッセージなどを検索・取得できるようにするためのツールとリソースを提供します。
## 技術要件
- Bun ランタイムを使用
- TypeScript で実装
- @modelcontextprotocol/sdk を使用
- Slack API (Official Slack SDK など) を使用して Slack と通信
- zod を使用してパラメータのバリデーション
## 機能要件
### Slack 接続
- 環境変数から Slack API トークンを取得(必須)
- トークン有効性チェックのために起動時に `auth.test` などで接続テスト
### ツール(Tools)
1. `get_users`
- ワークスペースのユーザー一覧を取得
- 結果を適切にページネーションまたは制限
- トークンをパラメータとして受け取る
2. `get_channels`
- ワークスペースのチャンネル一覧を取得
- 結果を適切にページネーションまたは制限
- トークンをパラメータとして受け取る
3. `get_channel_messages`
- 特定のチャンネルからメッセージを取得
- タイムスタンプや日付範囲 ( oldest, latest ) などで絞り込み可能
- トークン、チャンネルID、必要に応じて日付・期間などをパラメータとして受け取る
4. `get_thread_replies`
- 特定のメッセージ(thread_ts)に紐づくスレッドリプライを取得
- トークン、チャンネルID、thread_ts をパラメータとして受け取る
5. `search_messages`
- Slack の検索機能を使ってメッセージを検索
- クエリ文字列、ユーザー、チャンネル、日付などで絞り込む
- トークン、検索文字列、オプションのフィルタパラメータを受け取る
- 結果をページネーションまたは制限
### リソース(Resources)
1. `all_users`
- URI: allusers://
- クエリパラメータで Slack API トークンを指定
- ワークスペースの全ユーザー一覧を取得・提供
2. `all_channels`
- URI: allchannels://
- クエリパラメータで Slack API トークンを指定
- ワークスペースの全チャンネル一覧を取得・提供
## エラーハンドリング
- API トークンが無効または指定されていない場合のエラー
- ページネーション上限超過や Slack API 呼び出し失敗時のエラー
- 無効なチャンネル ID、無効なスレッド ID、その他バリデーションエラー
## セキュリティ
- Slack API トークンをログに出力しない
- 必要に応じて HTTPS や環境変数の安全な管理を徹底
## 実行方法
- Bun ランタイムで実行
- StdioServerTransport を使用して標準入出力で通信