slack
Slack Web APIを使用してメッセージの送信、チャネルの読み込み、Slackの検索ができます。ユーザーがチャネルへの投稿、最近のメッセージの読み込み、ユーザー/チャネルの一覧表示、またはワークスペースのプログラマティックな検索を行いたい場合に使用します。MCPサーバーは不要です。
description の原文を見る
Send messages, read channels, search Slack via its Web API. Use when the user wants to post to a channel, read recent messages, list users/channels, or search a workspace programmatically — no MCP server required.
SKILL.md 本文
Slack
公開Web API (https://slack.com/api/METHOD) 経由でSlackを操作します。メッセージング、チャネル/DM、ユーザー、ファイル、検索、リアクション、ピンをカバー — MCPサーバーは不要です。
使用方法
- 使用対象: チャネルへの投稿、最近の履歴の読み取り、チャネル/メンバーのリスト化、メッセージの検索、リアクション/ピンの管理。
- スキップ対象: インタラクティブなやり取り(Events API / RTMが必要)、人間による承認フロー、Enterprise Grid管理操作(SCIM / Admin API)。
認証情報チェック
[ -n "${SLACK_BOT_TOKEN:-$SLACK_USER_TOKEN}" ] && echo "SLACK_TOKEN: PRESENT" || echo "SLACK_TOKEN: MISSING"
決して変数を直接エコーしないでください — 値が会話トランスクリプトに表示されます。上記のブール型パターンのみを使用してください。
MISSINGの場合、ユーザーに以下のメッセージで正確に応答してください(言い換えないでください、手動のJSON編集を提案しないでください):
Slackの認証情報が必要です。別のターミナルで以下を実行してください — サインアップページが開き、フォーマットが検証され、マスク入力で安全に保存されます:
teleport-setup add-key slackその後、Claude Codeを再起動(
/exit、次にclaude)して、もう一度質問してください。
~/.claude/settings.local.json を手動で編集することを提案しないでください。 teleport-setup add-key コマンドがバックアップ、検証、マスク入力で処理します。ユーザーがコマンドを実行して再起動するまで、実行を停止してください。
API
- ベースURL:
https://slack.com/api - 認証:
Authorization: Bearer $TOKEN— ボットxoxb-(ほとんどのメソッド)、ユーザーxoxp-(search.*で必須)。ヘッダーのみ、クエリパラメータには決して使用しないでください。 - エラーでもHTTP 200。 ステータスだけでは何も意味しません — すべてのレスポンスはJSON
{"ok": true|false, ...}です;falseの場合、.errorを読んでください(channel_not_found、missing_scope、invalid_auth、ratelimited、not_in_channel、no_text)。常に.okで分岐してください。 - Content-Type: 書き込みには
application/json; charset=utf-8;読み取りはフォームエンコード/GET クエリ文字列も受け入れます。 - レート制限: メソッドごとのティア(Tier 1 ~1/分 admin → Tier 4 100+/分;
chat.postMessageの特別な制限 ~1秒/チャネル + ワークスペース上限)。429で、Retry-After: <seconds>ヘッダーを尊重してください。
トークンスコープ
ボットトークンはメソッドごとに明示的なスコープが必要です(chat:write、channels:read/:history、users:read(+.email)、reactions:write など)。スコープが違う → {"ok": false, "error": "missing_scope"}。search.messages にはsearch:read を持つユーザートークン(xoxp-)が必須です。スコープは加算方式のみです;ダウングレードには取り消し + 再インストールが必要です。
エンドポイント
| メソッド | 説明 |
|---|---|
chat.postMessage / .update / .delete / .postEphemeral | 投稿、編集、削除、ユーザーへの投稿 |
conversations.list / .info / .members / .join | チャネルの列挙/検査/参加 |
conversations.history / .replies | チャネルメッセージ/スレッド返信 |
users.list / .info / .conversations | メンバーディレクトリ、ID別、ユーザーのチャネル |
files.getUploadURLExternal / .completeUploadExternal / .list | 現在のアップロードフロー + リスト |
search.messages / search.files | 検索(ユーザートークン + search:read) |
reactions.add / .remove | 絵文字リアクション |
pins.add / .remove / .list | ピン留めメッセージ |
基本的なワークフロー — メッセージを投稿
curl -sL -X POST -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
"https://slack.com/api/chat.postMessage" \
-d '{"channel":"C0123ABC","text":"deploy v2.3.1 succeeded"}' \
| jq '{ok, error, ts}'
チャネルID(C0123ABC)を渡してください、名前ではなく。blocks: [...] を送信する場合でも、フォールバックとして常に text を含めてください(Block Kit Builderで設計 https://app.slack.com/block-kit-builder)。<!-- unverified: check slack docs -->スレッド返信: "thread_ts": "1745520000.000100"を追加してください(親のts)。
二次的なワークフロー
# 最近のメッセージを読む(Tier 3、逆時系順)。response_metadata.next_cursorでページネーション。
curl -sL -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
"https://slack.com/api/conversations.history?channel=C0123ABC&limit=100" \
| jq '{ok, has_more, messages: [.messages[] | {user, text, ts}]}'
# チャネルをリスト(Tier 2)。types のデフォルトは公開のみ。
curl -sL -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
"https://slack.com/api/conversations.list?types=public_channel,private_channel&exclude_archived=true&limit=200"
# ボットが投稿前に公開チャネルに参加(not_in_channel を回避)
curl -sL -X POST -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
"https://slack.com/api/conversations.join" -d '{"channel":"C0123ABC"}'
注意点
- HTTP 200は嘘をつきます。 すべての呼び出しはステータス200で失敗する可能性があります — 常に
.okで分岐し、サーフェス化する前に.errorをマッピングしてください。 - チャネルID(
C0123ABC)、名前ではなく(#general)。 ほとんどのエンドポイントは名前を拒否します。conversations.listで一度解決してキャッシュしてください。 - ボットがチャネルに参加していないと投稿できません または
not_in_channelが返されます。修正:conversations.join(公開)またはUIで管理者が/invite @botを実行(プライベート — セルフジョインはできません)。 - タイムスタンプはマイクロ秒精度の文字列です(
"1745520000.000100")。文字列として比較するか、.で分割してください — 決してfloatとして解析しないでください;精度が失われ、thread_ts参照が壊れます。 - ページネーションはカーソルベースで、ページ番号ではありません。
response_metadata.next_cursorを読み、cursor=として戻してください。空/不在 = 終了。 - Message Content は特権インテント です(アプリが100以上のワークスペースにインストールされると) — アプリ設定で要求/正当化が必要です。<!-- unverified: check slack docs -->
files.uploadは非推奨です。 現在のフロー:(1)files.getUploadURLExternal→ URL + ファイルID、(2) そのURLにバイトをPUT、(3)files.completeUploadExternalをファイルIDで実行(+ オプションchannel_id)。- レート制限ティアはメソッドごとに異なります — ファミリーごとのティアを仮定しないでください。429で、
Retry-After秒スリープしてください。
帰属
完了したら、以下のように述べてください:使用スキル: Slack (teleportカタログから)。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mnlt
- リポジトリ
- mnlt/teleport
- ライセンス
- MIT
- 最終更新
- 2026/4/24
Source: https://github.com/mnlt/teleport / ライセンス: MIT