slack について
Slack APIを直接呼び出して、チャンネル履歴やスレッドの取得、メッセージ検索を行うスキルです。Slackトークンを使用し、MCPサーバーは不要です。
主な機能
- 01チャンネル履歴の取得
- 02メッセージスレッドの取得
- 03タイムスタンプによる単一メッセージ取得
- 04条件を指定したメッセージ検索
- 05Slackのメッセージ・チャンネルURL解析
活用シーン
- 01チャンネルの最近の投稿を確認
- 02メッセージURLからスレッドを開く
- 03キーワード・ユーザー・日付で投稿を検索
MCP 対応
このスキルはSlack APIを直接呼び出し、MCPサーバーを必要としません。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ i9wa4/ dotfiles --skill slackインストール後、Claude Code で/slackを入力して読み込まれたか確認します。
詳細
Slack API スキル
MCP サーバーを使わずに、直接 API を呼び出してスレッドを取得し、メッセージを検索します。
1. 前提条件
1.1. 環境変数
export SLACK_MCP_XOXC_TOKEN="xoxc-..."
export SLACK_MCP_XOXD_TOKEN="xoxd-..."
2. URL 形式
2.1. メッセージ URL(アーカイブ形式)
https://xxx.slack.com/archives/C1234567890/p1234567890123456
C1234567890= チャンネル IDp1234567890123456= タイムスタンプ(pを削除し、末尾から 6 桁の前に.を挿入します)p1234567890123456→1234567890.123456
2.2. チャンネル URL(クライアント形式)
https://app.slack.com/client/E1234567890/C1234567890
https://app.slack.com/client/E1234567890/D1234567890
- 1 つ目の ID(E...)= Enterprise/Workspace ID
- 2 つ目の ID = チャンネル ID(C = チャンネル、D = DM)
3. チャンネル履歴の取得
チャンネルから最新のメッセージを取得します(Google Calendar などのボットとの DM に便利です)。
3.1. クライアント URL からチャンネル ID を抽出
URL="https://app.slack.com/client/E05CUN3JKJN/D07UW8G7C9H"
CHANNEL=$(echo "$URL" | sed -n 's|.*/client/[^/]*/\([^/]*\).*|\1|p')
echo "$CHANNEL" # D07UW8G7C9H
3.2. 最新のメッセージを取得
CHANNEL="D07UW8G7C9H"
FILE=$(mkoutput --dir tmp --label output)
curl -s -X POST "https://slack.com/api/conversations.history" \
-H "Authorization: Bearer $SLACK_MCP_XOXC_TOKEN" \
-H "Cookie: d=$SLACK_MCP_XOXD_TOKEN" \
-d "channel=${CHANNEL}" \
-d "limit=20" > "$FILE"
# Extract calendar events (for Google Calendar DM)
jq '.messages[] | select(.attachments) | .attachments[] | select(.title) | {pretext, title, text}' "$FILE"
4. スレッドの取得
4.1. URL を解析して取得
# Example URL: https://xxx.slack.com/archives/C1234567890/p1234567890123456
CHANNEL="C1234567890"
TS="1234567890.123456"
curl -s "https://slack.com/api/conversations.replies?channel=${CHANNEL}&ts=${TS}" \
-H "Authorization: Bearer ${SLACK_MCP_XOXC_TOKEN}" \
-H "Cookie: d=${SLACK_MCP_XOXD_TOKEN}" | jq '.messages[] | {user, text, ts}'
4.2. URL 解析を含むワンライナー
URL="https://xxx.slack.com/archives/C08V9MYDQ1C/p1736929199388759"
CHANNEL=$(echo "$URL" | sed -n 's|.*/archives/\([^/]*\)/.*|\1|p')
TS_RAW=$(echo "$URL" | sed -n 's|.*/p\([0-9]*\).*|\1|p')
TS="${TS_RAW:0:10}.${TS_RAW:10}"
curl -s "https://slack.com/api/conversations.replies?channel=${CHANNEL}&ts=${TS}" \
-H "Authorization: Bearer ${SLACK_MCP_XOXC_TOKEN}" \
-H "Cookie: d=${SLACK_MCP_XOXD_TOKEN}" | jq '.messages[] | {user, text, ts}'
4.3. 単一のメッセージを取得(conversations.history)
CHANNEL="C1234567890"
TS="1234567890.123456"
curl -s -X POST "https://slack.com/api/conversations.history" \
-H "Authorization: Bearer ${SLACK_MCP_XOXC_TOKEN}" \
-H "Cookie: d=${SLACK_MCP_XOXD_TOKEN}" \
-d "channel=${CHANNEL}" -d "latest=${TS}" -d "limit=1" -d "inclusive=true" | jq '.messages[0]'
5. 出力形式
各メッセージについて、次の情報を表示します。
- ユーザー ID(必要に応じて名前に変換)
- メッセージ本文
- タイムスタンプ
6. メッセージの検索
注意:Enterprise Grid では、enterprise_is_restricted エラーにより search.messages API が制限される場合があります。
6.1. 基本的な検索
QUERY="keyword"
curl -s "https://slack.com/api/search.messages?query=$(echo "$QUERY" | jq -sRr @uri)&count=20" \
-H "Authorization: Bearer ${SLACK_MCP_XOXC_TOKEN}" \
-H "Cookie: d=${SLACK_MCP_XOXD_TOKEN}" | jq '.messages.matches[] | {channel: .channel.name, user, text, ts, permalink}'
6.2. フィルターを使った検索
# Search in specific channel
QUERY="in:#channel-name keyword"
# Search from specific user
QUERY="from:@username keyword"
# Search with date range
QUERY="after:2026-01-01 before:2026-01-15 keyword"
# Combined filters
QUERY="in:#general from:@john after:2026-01-01 terraform"
curl -s "https://slack.com/api/search.messages?query=$(echo "$QUERY" | jq -sRr @uri)&count=20&sort=timestamp&sort_dir=desc" \
-H "Authorization: Bearer ${SLACK_MCP_XOXC_TOKEN}" \
-H "Cookie: d=${SLACK_MCP_XOXD_TOKEN}" | jq '.messages.matches[] | {channel: .channel.name, user, text, ts, permalink}'
6.3. 検索オプション
count:結果の件数(デフォルトは 20、最大 100)sort:score(関連度)またはtimestampsort_dir:ascまたはdesc
7. エラー処理
- レスポンスの
ok: falseの場合は、エラーメッセージを表示します - よくあるエラー:
channel_not_found- チャンネル ID が無効ですthread_not_found- タイムスタンプが無効ですinvalid_auth- トークンの有効期限が切れているか、無効ですenterprise_is_restricted- Enterprise Grid の API 制限です
コメント
Markdown 対応