mcpField
S
slack

slack

github.com/i9wa4生産性1260 回インストール1 日前に更新
リポジトリ

slack について

Slack APIを直接呼び出して、チャンネル履歴やスレッドの取得、メッセージ検索を行うスキルです。Slackトークンを使用し、MCPサーバーは不要です。

主な機能

  1. 01チャンネル履歴の取得
  2. 02メッセージスレッドの取得
  3. 03タイムスタンプによる単一メッセージ取得
  4. 04条件を指定したメッセージ検索
  5. 05Slackのメッセージ・チャンネルURL解析

活用シーン

  1. 01チャンネルの最近の投稿を確認
  2. 02メッセージURLからスレッドを開く
  3. 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 = チャンネル ID
  • p1234567890123456 = タイムスタンプ(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(関連度)または timestamp
  • sort_dir:asc または desc

7. エラー処理

  • レスポンスの ok: false の場合は、エラーメッセージを表示します
  • よくあるエラー:
    • channel_not_found - チャンネル ID が無効です
    • thread_not_found - タイムスタンプが無効です
    • invalid_auth - トークンの有効期限が切れているか、無効です
    • enterprise_is_restricted - Enterprise Grid の API 制限です

コメント