Slack messaging, channels, and notifications - send messages, manage channels, interact with users, upload files, and add reactions. Use for team…
Mode: Cognitive/Prompt-Driven — No standalone utility script; use via agent context.
Slack Notifications Skill
Overview
This skill provides Slack API operations with progressive disclosure for optimal context usage.
Context Savings: ~90% reduction
MCP Mode: ~15,000 tokens always loaded (30+ tools)
Skill Mode: ~500 tokens metadata + on-demand loading
Requirements
SLACK_BOT_TOKEN environment variable (required)
SLACK_SIGNING_SECRET environment variable (optional, for event verification)
SLACK_APP_TOKEN environment variable (optional, for Socket Mode)
Setting up Slack Bot Token
Create a Slack App at https://api.slack.com/apps
Navigate to "OAuth & Permissions"
Add required bot token scopes:
chat:write - Send messages
channels:read - List channels
channels:history - Read channel history
users:read - List users
files:write - Upload files
reactions:write - Add reactions
Install app to workspace
Copy "Bot User OAuth Token" to SLACK_BOT_TOKEN environment variable
Tools
The skill provides 14 tools across 5 categories:
Category
Tools
Confirmation Required
Messaging
post-message, post-thread, update-message, delete-message
Yes (all)
Channels
list-channels, get-channel, channel-history
No
Users
list-users, get-user, user-presence
No
Files
upload-file, list-files
Yes (upload only)
Reactions
add-reaction, get-reactions
No
Quick Reference
# 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 "file=@report.pdf" \
-F "title=Weekly Report"
Tool Details
Messaging Tools (Confirmation Required)
post-message
Send a message to a Slack channel.
Parameters:
channel (required): Channel ID or name (e.g., "C1234567890" or "#general")
text (required): Message text (supports Slack markdown)
thread_ts (optional): Parent message timestamp for threading
blocks (optional): Rich message blocks (JSON array)
Example:
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
Reply to a message in a thread.
Parameters:
channel (required): Channel ID
thread_ts (required): Parent message timestamp
text (required): Reply text
Example:
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
Update an existing message.
Parameters:
channel (required): Channel ID
ts (required): Message timestamp
text (required): New message text
Example:
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
Delete a message.
Parameters:
channel (required): Channel ID
ts (required): Message timestamp
Example:
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"
}'
Channel Tools
list-channels
List all channels in workspace.
Parameters:
types (optional): Comma-separated channel types (default: "public_channel")
Options: "public_channel", "private_channel", "mpim", "im"
limit (optional): Max channels to return (default: 100)
Example:
curl -X GET "https://slack.com/api/conversations.list?types=public_channel,private_channel" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN"
get-channel
Get channel information.
Parameters:
channel (required): Channel ID
Example:
curl -X GET "https://slack.com/api/conversations.info?channel=C1234567890" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN"
channel-history
Get channel message history.
Parameters:
channel (required): Channel ID
limit (optional): Max messages to return (default: 100)
oldest (optional): Start of time range (Unix timestamp)
latest (optional): End of time range (Unix timestamp)
Example:
curl -X GET "https://slack.com/api/conversations.history?channel=C1234567890&limit=50" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN"
Security Note: Channel history may contain sensitive information. Use with caution.
User Tools
list-users
List all users in workspace.
Parameters:
limit (optional): Max users to return (default: 100)
Example:
curl -X GET "https://slack.com/api/users.list" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN"
get-user
Get user profile information.
Parameters:
user (required): User ID
Example:
curl -X GET "https://slack.com/api/users.info?user=U1234567890" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN"
user-presence
Get user online status.
Parameters:
user (required): User ID
Example:
curl -X GET "https://slack.com/api/users.getPresence?user=U1234567890" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN"
File Tools
upload-file (Confirmation Required)
Upload a file to Slack channel.
Parameters:
channels (required): Comma-separated channel IDs
file (required): File path to upload
title (optional): File title
initial_comment (optional): Message text
Example:
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
List files in channel.
Parameters:
channel (optional): Channel ID to filter by
user (optional): User ID to filter by
count (optional): Max files to return (default: 100)
Example:
curl -X GET "https://slack.com/api/files.list?channel=C1234567890" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN"
Reaction Tools
add-reaction
Add emoji reaction to a message.
Parameters:
channel (required): Channel ID
timestamp (required): Message timestamp
name (required): Emoji name (without colons, e.g., "thumbsup")
Example:
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
Get reactions on a message.
Parameters:
channel (required): Channel ID
timestamp (required): Message timestamp
Example:
curl -X GET "https://slack.com/api/reactions.get?channel=C1234567890×tamp=1234567890.123456" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN"
Agent Integration
Primary Agents
devops: Infrastructure alerts, deployment notifications, monitoring
incident-responder: Incident alerts, status updates, escalations
Secondary Agents
pm: Sprint notifications, milestone updates, team announcements
developer: Build notifications, PR alerts, test results
qa: Test failure alerts, quality reports
security-architect: Security alerts, vulnerability notifications
Common Use Cases
Deployment Notifications
# 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"
}
}
]
}'
Incident Alerts
# 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"
}
}
]
}'
Test Results
# 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"
}
}
]
}'
Security Considerations
Token Security
NEVER expose bot token in logs or error messages
Store token in environment variable, not in code
Use least-privilege scopes for bot token
Rotate tokens periodically
Message Security
All message operations require confirmation
Channel history may contain sensitive information (PII, credentials, etc.)
Validate channel permissions before posting
Use private channels for sensitive communications
Data Privacy
Comply with workspace data retention policies
Avoid posting PII or credentials in messages
Use Slack's data export features for compliance
Respect user privacy and online status
Error Handling
Common Errors
Error
Cause
Solution
not_authed
Missing or invalid token
Check SLACK_BOT_TOKEN is set correctly
channel_not_found
Invalid channel ID
Verify channel ID with list-channels
missing_scope
Bot lacks required permission
Add scope in Slack App settings
rate_limited
Too many requests
Implement exponential backoff
message_not_found
Invalid timestamp
Check message timestamp is correct
Retry Strategy
For rate limiting errors, implement exponential backoff:
Wait 1 second, retry
Wait 2 seconds, retry
Wait 4 seconds, retry
Wait 8 seconds, retry
Give up after 5 attempts
Rate Limits
Slack API rate limits:
Tier 1: 1 request per second
Tier 2: 20 requests per minute
Tier 3: 50 requests per minute
Tier 4: 100 requests per minute
Methods by tier:
chat.postMessage: Tier 3 (50/min)
conversations.list: Tier 2 (20/min)
users.list: Tier 2 (20/min)
files.upload: Tier 4 (100/min)
Related
Slack API Documentation: https://api.slack.com/docs
Block Kit Builder: https://app.slack.com/block-kit-builder
Slack App Management: https://api.slack.com/apps
Memory Protocol (MANDATORY)
Before starting:
Read .claude/context/memory/learnings.md
After completing:
New pattern -> .claude/context/memory/learnings.md
Issue found -> .claude/context/memory/issues.md
Decision made -> .claude/context/memory/decisions.md
ASSUME INTERRUPTION: If it's not in memory, it didn't happen.don't have the plugin yet? install it then click "run inline in claude" again.