Skip to main content
Archived

This project has been archived by its maintainers, and is no longer receiving any updates.

Slack Notifier MCP

Python 3.10+ MCP License: MIT uv

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
  • Read Channels - Read message history from any channel for analysis or triage
  • Discover Channels - List and explore channels dynamically
  • 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:

  1. Go to api.slack.com/apps and click Create New App
  2. Choose From scratch, name it (e.g., "Claude Code"), and select your workspace
  3. Go to OAuth & Permissions in the sidebar
  4. Under Scopes > Bot Token Scopes, add:
    • chat:write - Send messages
    • channels:read - List public channels
    • channels:history - Read public channel messages
    • groups:read - List private channels
    • groups:history - Read private channel messages
    • im:history - Read DM messages (optional)
    • users:read - Get user display names
  5. Click Install to Workspace at the top
  6. 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
  1. Go to Settings → MCP → Add new MCP Server
  2. Select command type
  3. Enter command: uvx slack-notifier-mcp@latest
  4. Add environment variables for SLACK_BOT_TOKEN and SLACK_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 thread
  • urgency (optional): normal, important, or critical
  • mention_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 ask
  • channel (optional): Channel ID or name
  • context (optional): Additional context about what you're working on
  • timeout_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
)

list_channels

Discover available Slack channels.

# List all channels the bot has access to
list_channels()

# Filter by type
list_channels(
    types="public_channel",  # or "private_channel", "mpim", "im"
    limit=50,
    exclude_archived=True
)
# Returns: {"success": True, "channels": [{"id": "C123...", "name": "general", ...}], ...}

Parameters:

  • types (optional): Comma-separated channel types (default: "public_channel,private_channel")
  • limit (optional): Max channels to return (default 100, max 1000)
  • exclude_archived (optional): Exclude archived channels (default True)

read_channel_history

Read messages from any channel. Great for triaging contacts, analyzing conversations, or reviewing submissions.

# Read recent messages
read_channel_history(channel="landing-page-contacts", limit=100)

# Read with time filters
read_channel_history(
    channel="C1234567890",
    limit=500,
    oldest="1704067200.000000",  # Unix timestamp
    include_all_metadata=True    # Include reactions, attachments, files
)
# Returns: {"success": True, "messages": [{"text": "...", "user": "...", ...}], ...}

Parameters:

  • channel (required): Channel ID or name
  • limit (optional): Number of messages (default 100, max 1000)
  • oldest (optional): Only messages after this Unix timestamp
  • latest (optional): Only messages before this Unix timestamp
  • include_all_metadata (optional): Include reactions, attachments, files

get_channel_info

Get detailed information about a channel.

get_channel_info(channel="landing-page-contacts")
# Returns: {"success": True, "channel": {"id": "...", "name": "...", "purpose": "...", ...}}

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

Metadata

Release files for slack-notifier-mcp 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for slack-notifier-mcp 0.4.0
File Size Uploaded
slack_notifier_mcp-0.4.0.tar.gz 14.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for slack-notifier-mcp 0.4.0
File Interpreter ABI Platform
slack_notifier_mcp-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 29.8 kB

Release files / slack_notifier_mcp-0.4.0.tar.gz

Download URL slack_notifier_mcp-0.4.0.tar.gz
Size 14.3 kB
Tags Source
SHA-256 checksum
How to use checksums
0aee1dc2b48ecb370fca5bd8b6990b315c77411b018d49d27b9e23f3b9d4143f
BLAKE2b-256 checksum
How to use checksums
4a576e2fc420556eb044598397605db9a4dd56ce627925ee9a5c9aa7dc113d37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / slack_notifier_mcp-0.4.0-py3-none-any.whl

Download URL slack_notifier_mcp-0.4.0-py3-none-any.whl
Size 15.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7dfa4e762632d7a2aaac3d14d322af9bf78e83278e740ebab6b28df0487b5b53
BLAKE2b-256 checksum
How to use checksums
01a4732aa4be8e485ef988c998b2b66090d6243a7464fd92968f9e23747fa9e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page