mcpField
S
slack

slack

github.com/superwall生産性098 回インストール25 週間前に更新
リポジトリ

slack について

Bun から Slack REST API を利用して Slack データを操作するスキルです。メッセージの読み取りや検索、ファイル操作、ワークスペース情報の確認、投稿に対応し、トークンやスコープも確認します。

主な機能

  1. 01Bun で Slack Web API を呼び出し
  2. 02Slack データの読み取りと検索
  3. 03メッセージ投稿とファイル操作
  4. 04ユーザー、チャンネル、チームの確認
  5. 05トークン、スコープ、ページネーションの確認

活用シーン

  1. 01Slack の会話を検索または要約
  2. 02指定チャンネルへのメッセージ投稿
  3. 03Slack ファイルのアップロードや確認
  4. 04Slack API オートメーションの構築やデバッグ

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/superwall/agent-skills --skill slack

インストール後、Claude Code で/slackを入力して読み込まれたか確認します。

詳細

slack

Slack からの読み取り、Slack への投稿、Slack ファイルのアップロードまたはダウンロード、Slack のユーザー/チャンネル/チームの確認、その他の Slack データとのやり取りが必要なタスクでは、このスキルを使用します。

使用する場面

  • Slack のチャンネル、グループ、メンション、メッセージ、ユーザー、チーム、ファイルの読み取り、検索、要約、確認をユーザーが依頼した場合。
  • Slack メッセージの送信、下書き作成、投稿をユーザーが依頼した場合。
  • Slack ファイルのアップロード、取得、確認をユーザーが依頼した場合。
  • Slack REST API を使用する Slack 自動化の構築やデバッグをユーザーが依頼した場合。

手順

Bun から Slack REST API を直接使用します。

  1. Slack API を呼び出す前に、環境内に SLACK_BOT_TOKEN があるか確認します。

    • SLACK_BOT_TOKEN が未設定または空の場合は処理を中止し、https://superwall.ai/integrations で Slack を設定するようユーザーに伝えます。
    • ユーザーにチャットへトークンを貼り付けるよう求めないでください。
  2. Bun の組み込み fetch を使って Slack Web API エンドポイントを呼び出します。

    • Authorization: Bearer ${process.env.SLACK_BOT_TOKEN} を指定してトークンを送信します。
    • エンドポイントでマルチパートフォームデータが必要な場合を除き、JSON リクエストには Content-Type: application/json; charset=utf-8 を指定します。
    • HTTP ステータスと Slack の JSON ok フィールドの両方を確認します。
    • Slack API のエラーは、メソッド名と error の値を示して報告します。
  3. Slack の操作には、タスクに特化した小規模な Bun スクリプトを優先して使用します。

const token = process.env.SLACK_BOT_TOKEN;

if (!token) {
  throw new Error(
    "SLACK_BOT_TOKEN is not set. Set up Slack at https://superwall.ai/integrations."
  );
}

async function slack(method: string, body: Record<string, unknown> = {}) {
  const response = await fetch(`https://slack.com/api/${method}`, {
    method: "POST",
    headers: {
      authorization: `Bearer ${token}`,
      "content-type": "application/json; charset=utf-8",
    },
    body: JSON.stringify(body),
  });

  const data = await response.json();

  if (!response.ok || !data.ok) {
    throw new Error(`${method} failed: ${data.error ?? response.statusText}`);
  }

  return data;
}
  1. レスポンスに response_metadata.next_cursor が含まれる場合は、Slack のカーソルページネーションを使用します。

    • 読み取り時のページサイズは控えめにします。
    • next_cursor がない、または空になったら終了します。
  2. 以下のボットスコープが最低限利用可能であるものとして扱います。

{
  "scopes": {
    "bot": [
      "app_mentions:read",
      "channels:read",
      "channels:history",
      "chat:write",
      "chat:write.public",
      "files:write",
      "files:read",
      "team:read",
      "users:read",
      "groups:history"
    ]
  }
}
  1. スコープは今後追加される可能性があります。

    • スコープの利用可否が重要な場合は、操作が不可能だと判断する前に、Slack API でアプリに現在利用可能なスコープを確認します。
    • API が不足しているスコープを報告した場合は、Slack が必要とする正確なスコープと、それを必要とする操作を明示します。
  2. タスクに応じて、一般的な Slack Web API メソッドを使用します。

    • トークンの検証とワークスペース/アプリのコンテキストの特定には auth.test を使用します。
    • スコープで許可されたパブリックチャンネルとプライベートチャンネルの一覧表示には conversations.list を使用します。
    • チャンネルまたはグループの履歴の読み取りには conversations.history を使用します。
    • メッセージの送信には chat.postMessage を使用します。
    • ユーザーの確認には users.list または users.info を使用します。
    • ワークスペースの詳細の確認には team.info を使用します。
    • ファイルの操作には files.uploadV2、files.info および関連するファイルメソッドを使用します。
  3. 書き込み操作には注意してください。

    • メッセージの送信やファイルのアップロードでは、ユーザーが送信先のチャンネル/ユーザーと内容をすでに明示している場合を除き、それらを確認します。
    • 明示的に依頼されていない限り、コンテンツの削除、上書き、または広範な一斉配信を行わないでください。

コメント