Slack Notifier MCP
MCP server for bidirectional Slack communication with Claude Code. Get notified when tasks complete, and respond to Claude's questions directly from Slack.
Quick Start
# Add to Claude Code (one command)
claude mcp add slack-notifier -s user \
-e SLACK_BOT_TOKEN=xoxb-your-token \
-e SLACK_DEFAULT_CHANNEL=YOUR-CHANNEL-ID \
-- uvx slack-notifier-mcp@latest
Features
- Send Messages - Send messages with optional urgency levels and thread support
- Ask & Wait - Ask questions and wait for replies via Slack threads
- Bidirectional - Reply to Claude from Slack, get responses back in your terminal
- Urgency Levels - Normal, important, and critical notifications with appropriate formatting
Slack App Setup
Before using this server, you need to create a Slack app:
- Go to api.slack.com/apps and click Create New App
- Choose From scratch, name it (e.g., "Claude Code"), and select your workspace
- Go to OAuth & Permissions in the sidebar
- Under Scopes > Bot Token Scopes, add:
chat:write- Send messageschannels:history- Read public channel messagesgroups:history- Read private channel messagesim:history- Read DM messagesusers:read- Get user display names
- Click Install to Workspace at the top
- Copy the Bot User OAuth Token (starts with
xoxb-)
To get your default channel ID:
- Open Slack, right-click the channel, and select View channel details
- At the bottom, copy the Channel ID (starts with
C)
Installation
Claude Code (Recommended)
claude mcp add slack-notifier -s user \
-e SLACK_BOT_TOKEN=xoxb-your-token \
-e SLACK_DEFAULT_CHANNEL=YOUR-CHANNEL-ID \
-- uvx slack-notifier-mcp@latest
VS Code
code --add-mcp '{"name":"slack-notifier","command":"uvx","args":["slack-notifier-mcp@latest"],"env":{"SLACK_BOT_TOKEN":"xoxb-your-token","SLACK_DEFAULT_CHANNEL":"YOUR-CHANNEL-ID"}}'
Other MCP Clients
Claude Desktop
Add to your Claude Desktop config:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"slack-notifier": {
"command": "uvx",
"args": ["slack-notifier-mcp@latest"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-token",
"SLACK_DEFAULT_CHANNEL": "YOUR-CHANNEL-ID"
}
}
}
}
Cursor
- Go to Settings → MCP → Add new MCP Server
- Select
commandtype - Enter command:
uvx slack-notifier-mcp@latest - Add environment variables for
SLACK_BOT_TOKENandSLACK_DEFAULT_CHANNEL
Or add to ~/.cursor/mcp.json:
{
"mcpServers": {
"slack-notifier": {
"command": "uvx",
"args": ["slack-notifier-mcp@latest"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-token",
"SLACK_DEFAULT_CHANNEL": "YOUR-CHANNEL-ID"
}
}
}
}
Windsurf / Other MCP Clients
Any MCP-compatible client can use slack-notifier:
{
"mcpServers": {
"slack-notifier": {
"command": "uvx",
"args": ["slack-notifier-mcp@latest"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-token",
"SLACK_DEFAULT_CHANNEL": "YOUR-CHANNEL-ID"
}
}
}
}
Local Development
git clone https://github.com/strand-ai/slack-notifier-mcp.git
cd slack-notifier-mcp
uv sync
uv run slack-notifier-mcp
MCP Tools
send
Send a message to Slack with optional urgency and thread support.
# Simple message
send(message="Build completed successfully")
# With urgency (adds formatting and @here for critical)
send(
message="Server is down!",
urgency="critical" # or "normal", "important"
)
# Reply in a thread
send(
message="Done with the first step, moving on...",
thread_ts="1234567890.123456"
)
# Mention user
send(
message="Need your attention",
mention_user=True
)
Parameters:
message(required): Message text (supports Slack mrkdwn)channel(optional): Channel ID or name (uses default if not set)thread_ts(optional): Thread timestamp to reply in a threadurgency(optional):normal,important, orcriticalmention_user(optional): If true, @mentions the configured user
ask_user
Send a question and wait for the user's reply.
ask_user(
question="Should I use PostgreSQL or SQLite for the database?",
context="Setting up the backend for the new API",
timeout_minutes=10
)
# Returns: {"success": True, "reply": "Use PostgreSQL", ...}
Parameters:
question(required): The question to askchannel(optional): Channel ID or namecontext(optional): Additional context about what you're working ontimeout_minutes(optional): How long to wait (default 5, max 30)
get_thread_replies
Check for new replies in a thread.
get_thread_replies(
channel="YOUR-CHANNEL-ID",
thread_ts="1234567890.123456",
since_ts="1234567891.000000" # Only newer messages
)
Environment Variables
| Variable | Required | Description |
|---|---|---|
SLACK_BOT_TOKEN | Yes | Bot token from Slack app (xoxb-...) |
SLACK_DEFAULT_CHANNEL | No | Default channel for notifications |
Example Usage
Tell Claude Code:
"Notify me on Slack when the tests finish running"
"Ask me on Slack whether to proceed with the database migration"
"Send a Slack notification if any errors occur while I'm away"
Debugging
Run the MCP inspector to test tools:
npx @anthropics/mcp-inspector uvx slack-notifier-mcp@latest
Check if your token works:
curl -H "Authorization: Bearer xoxb-your-token" \
https://slack.com/api/auth.test
Development
# Install with dev dependencies
uv sync --extra dev
# Run tests
uv run pytest
# Format code
uv run black slack_mcp
uv run ruff check slack_mcp --fix
License
MIT
