mcpField
S
slack-notifications

slack-notifications

github.com/oimiragieo生産性44288 回インストール17 週間前に更新
リポジトリ

slack-notifications について

slack-notificationsは、単独のユーティリティではなく、エージェントのコンテキストからSlack API操作を必要に応じて行うプロンプト駆動型スキルです。メッセージ、チャンネル、ユーザー、ファイル、リアクションを扱い、メッセージ変更とアップロードには確認を求めます。

主な機能

  1. 01メッセージの投稿・更新・削除
  2. 02チャンネルと履歴の閲覧
  3. 03ユーザー情報とプレゼンスの確認
  4. 04ファイルのアップロードと一覧表示
  5. 05リアクションの追加と取得

活用シーン

  1. 01デプロイやインシデントの通知
  2. 02チャンネル履歴とユーザー情報の確認
  3. 03レポートの共有とメッセージへの反応

インストール

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

$npx skills add https://github.com/oimiragieo/agent-studio --skill slack-notifications

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

commands/
slack-notifications.md
hooks/
post-execute.cjs
pre-execute.cjs
references/
research-requirements.md
rules/
slack-notifications.md
schemas/
input.schema.json
output.schema.json
scripts/
main.cjs
templates/
implementation-template.md

詳細

モード:認知/プロンプト駆動型 — 単独のユーティリティスクリプトはありません。エージェントのコンテキストで使用します。

Slack 通知スキル

概要

このスキルでは、コンテキストを最適に使用できるよう、段階的に情報を開示しながら Slack API を操作できます。

コンテキストの節約:約 90% 削減

  • MCP モード:常に約 15,000 トークンを読み込み(30 以上のツール)
  • スキルモード:メタデータとして約 500 トークンを読み込み、必要に応じて追加で読み込み

要件

  • SLACK_BOT_TOKEN 環境変数(必須)
  • SLACK_SIGNING_SECRET 環境変数(任意、イベント検証用)
  • SLACK_APP_TOKEN 環境変数(任意、Socket Mode 用)
Slack ボットトークンの設定
  1. https://api.slack.com/apps で Slack アプリを作成します
  2. 「OAuth & Permissions」に移動します
  3. 必要なボットトークンのスコープを追加します:
    • chat:write - メッセージを送信
    • channels:read - チャンネルを一覧表示
    • channels:history - チャンネルの履歴を読み取り
    • users:read - ユーザーを一覧表示
    • files:write - ファイルをアップロード
    • reactions:write - リアクションを追加
  4. ワークスペースにアプリをインストールします
  5. 「Bot User OAuth Token」を SLACK_BOT_TOKEN 環境変数にコピーします

ツール

このスキルでは、5 つのカテゴリにわたる 14 個のツールを利用できます:

カテゴリツール確認が必要
メッセージpost-message、post-thread、update-message、delete-messageはい(すべて)
チャンネルlist-channels、get-channel、channel-historyいいえ
ユーザーlist-users、get-user、user-presenceいいえ
ファイルupload-file、list-filesはい(アップロードのみ)
リアクションadd-reaction、get-reactionsいいえ

クイックリファレンス

# Post message to channel
curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"channel": "C1234567890", "text": "Hello from Claude!"}'

# List channels
curl -X GET "https://slack.com/api/conversations.list" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

# Upload file
curl -X POST https://slack.com/api/files.upload \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -F "channels=C1234567890" \
  -F "[email protected]" \
  -F "title=Weekly Report"

ツールの詳細

メッセージツール(確認が必要)
post-message

Slack チャンネルにメッセージを送信します。

パラメーター:

  • channel(必須):チャンネル ID または名前(例:「C1234567890」または「#general」)
  • text(必須):メッセージテキスト(Slack のマークダウンに対応)
  • thread_ts(任意):スレッドに返信する場合の親メッセージのタイムスタンプ
  • blocks(任意):リッチメッセージブロック(JSON 配列)

例:

curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C1234567890",
    "text": "Deployment successful!",
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "*Deployment Status*\n:white_check_mark: Production deployed successfully"
        }
      }
    ]
  }'
post-thread

スレッド内のメッセージに返信します。

パラメーター:

  • channel(必須):チャンネル ID
  • thread_ts(必須):親メッセージのタイムスタンプ
  • text(必須):返信テキスト

例:

curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C1234567890",
    "thread_ts": "1234567890.123456",
    "text": "Thread reply here"
  }'
update-message

既存のメッセージを更新します。

パラメーター:

  • channel(必須):チャンネル ID
  • ts(必須):メッセージのタイムスタンプ
  • text(必須):新しいメッセージテキスト

例:

curl -X POST https://slack.com/api/chat.update \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C1234567890",
    "ts": "1234567890.123456",
    "text": "Updated message"
  }'
delete-message

メッセージを削除します。

パラメーター:

  • channel(必須):チャンネル ID
  • ts(必須):メッセージのタイムスタンプ

例:

curl -X POST https://slack.com/api/chat.delete \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C1234567890",
    "ts": "1234567890.123456"
  }'
チャンネルツール
list-channels

ワークスペース内のすべてのチャンネルを一覧表示します。

パラメーター:

  • types(任意):チャンネルの種類をカンマ区切りで指定します(デフォルト:「public_channel」)
    • 選択肢:「public_channel」、「private_channel」、「mpim」、「im」
  • limit(任意):返すチャンネルの最大数(デフォルト:100)

例:

curl -X GET "https://slack.com/api/conversations.list?types=public_channel,private_channel" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"
get-channel

チャンネル情報を取得します。

パラメーター:

  • channel(必須):チャンネル ID

例:

curl -X GET "https://slack.com/api/conversations.info?channel=C1234567890" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"
channel-history

チャンネルのメッセージ履歴を取得します。

パラメーター:

  • channel(必須):チャンネル ID
  • limit(任意):返すメッセージの最大数(デフォルト:100)
  • oldest(任意):時間範囲の開始時刻(Unix タイムスタンプ)
  • latest(任意):時間範囲の終了時刻(Unix タイムスタンプ)

例:

curl -X GET "https://slack.com/api/conversations.history?channel=C1234567890&limit=50" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

セキュリティに関する注意:チャンネル履歴には機密情報が含まれる場合があります。慎重に使用してください。

ユーザーツール
list-users

ワークスペース内のすべてのユーザーを一覧表示します。

パラメーター:

  • limit(任意):返すユーザーの最大数(デフォルト:100)

例:

curl -X GET "https://slack.com/api/users.list" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"
get-user

ユーザープロフィール情報を取得します。

パラメーター:

  • user(必須):ユーザー ID

例:

curl -X GET "https://slack.com/api/users.info?user=U1234567890" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"
user-presence

ユーザーのオンライン状態を取得します。

パラメーター:

  • user(必須):ユーザー ID

例:

curl -X GET "https://slack.com/api/users.getPresence?user=U1234567890" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"
ファイルツール
upload-file(確認が必要)

Slack チャンネルにファイルをアップロードします。

パラメーター:

  • channels(必須):カンマ区切りのチャンネル ID
  • file(必須):アップロードするファイルのパス
  • title(任意):ファイルのタイトル
  • initial_comment(任意):メッセージのテキスト

例:

curl -X POST https://slack.com/api/files.upload \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -F "channels=C1234567890" \
  -F "file=@C:\reports\weekly.pdf" \
  -F "title=Weekly Report" \
  -F "initial_comment=Here is this week's report"
list-files

チャンネル内のファイルを一覧表示します。

パラメーター:

  • channel(任意):絞り込みに使用するチャンネル ID
  • user(任意):絞り込みに使用するユーザー ID
  • count(任意):返すファイルの最大数(デフォルト:100)

例:

curl -X GET "https://slack.com/api/files.list?channel=C1234567890" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"
リアクションツール
add-reaction

メッセージに絵文字のリアクションを追加します。

パラメーター:

  • channel(必須):チャンネル ID
  • timestamp(必須):メッセージのタイムスタンプ
  • name(必須):絵文字名(コロンなし。例:「thumbsup」)

例:

curl -X POST https://slack.com/api/reactions.add \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C1234567890",
    "timestamp": "1234567890.123456",
    "name": "thumbsup"
  }'
get-reactions

メッセージへのリアクションを取得します。

パラメーター:

  • channel(必須):チャンネル ID
  • timestamp(必須):メッセージのタイムスタンプ

例:

curl -X GET "https://slack.com/api/reactions.get?channel=C1234567890&timestamp=1234567890.123456" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

エージェントとの統合

主要なエージェント
  • devops:インフラストラクチャのアラート、デプロイ通知、監視
  • incident-responder:インシデントアラート、ステータス更新、エスカレーション
そのほかのエージェント
  • pm:スプリント通知、マイルストーンの更新、チームへのお知らせ
  • developer:ビルド通知、PR アラート、テスト結果
  • qa:テスト失敗のアラート、品質レポート
  • security-architect:セキュリティアラート、脆弱性の通知

よくあるユースケース

デプロイ通知
# Notify channel of successful deployment
curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "#deployments",
    "text": ":rocket: Production deployment completed",
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "*Production Deployment*\n:white_check_mark: v1.2.3 deployed successfully\n*Duration:* 5m 23s"
        }
      }
    ]
  }'
インシデントアラート
# Alert on-call team of incident
curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "#incidents",
    "text": "<!channel> :rotating_light: High severity incident detected",
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "*Incident INC-1234*\n:rotating_light: *Severity:* P1\n*Service:* API Gateway\n*Status:* 503 errors increasing"
        }
      }
    ]
  }'
テスト結果
# Post test results
curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "#qa",
    "text": "Test suite completed",
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "*Test Results*\n:white_check_mark: 245 passed\n:x: 3 failed\n:warning: 2 skipped"
        }
      }
    ]
  }'

セキュリティに関する考慮事項

トークンのセキュリティ
  • ボットトークンをログやエラーメッセージに絶対に公開しないでください
  • トークンはコード内ではなく、環境変数に保存してください
  • ボットトークンには最小権限のスコープを使用してください
  • トークンを定期的にローテーションしてください
メッセージのセキュリティ
  • すべてのメッセージ操作には確認が必要です
  • チャンネルの履歴には機密情報(PII、認証情報など)が含まれる場合があります
  • 投稿前にチャンネルの権限を確認してください
  • 機密性の高いやり取りにはプライベートチャンネルを使用してください
データのプライバシー
  • ワークスペースのデータ保持ポリシーを遵守してください
  • メッセージに PII や認証情報を投稿しないでください
  • コンプライアンス対応には Slack のデータエクスポート機能を使用してください
  • ユーザーのプライバシーとオンライン状態を尊重してください

エラー処理

よくあるエラー
エラー原因解決策
not_authedトークンがない、または無効SLACK_BOT_TOKEN が正しく設定されているか確認します
channel_not_foundチャンネル ID が無効list-channels でチャンネル ID を確認します
missing_scopeボットに必要な権限がないSlack App の設定でスコープを追加します
rate_limitedリクエストが多すぎる指数バックオフを実装します
message_not_foundタイムスタンプが無効メッセージのタイムスタンプが正しいか確認します
再試行戦略

レート制限エラーが発生した場合は、指数バックオフを実装します。

  1. 1 秒待って再試行します
  2. 2 秒待って再試行します
  3. 4 秒待って再試行します
  4. 8 秒待って再試行します
  5. 5 回試行したら中止します

レート制限

Slack API のレート制限:

  • Tier 1:1 秒あたり 1 リクエスト
  • Tier 2:1 分あたり 20 リクエスト
  • Tier 3:1 分あたり 50 リクエスト
  • Tier 4:1 分あたり 100 リクエスト

ティア別のメソッド:

  • chat.postMessage:Tier 3(1 分あたり 50 回)
  • conversations.list:Tier 2(1 分あたり 20 回)
  • users.list:Tier 2(1 分あたり 20 回)
  • files.upload:Tier 4(1 分あたり 100 回)

関連情報

メモリプロトコル(必須)

開始前: .claude/context/memory/learnings.md を読みます

完了後:

  • 新しいパターン -> .claude/context/memory/learnings.md
  • 問題の発見 -> .claude/context/memory/issues.md
  • 決定事項 -> .claude/context/memory/decisions.md

中断を想定してください:メモリに記録されていなければ、起きていないのと同じです。

コメント