Skip to main content

MCP server for Slack notifications with bidirectional communication

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slack_notifier_mcp-0.4.0.tar.gz (14.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

slack_notifier_mcp-0.4.0-py3-none-any.whl (15.5 kB view details)

Uploaded Python 3

File details

Details for the file slack_notifier_mcp-0.4.0.tar.gz.

File metadata

  • Download URL: slack_notifier_mcp-0.4.0.tar.gz
  • Upload date:
  • Size: 14.3 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for slack_notifier_mcp-0.4.0.tar.gz
Algorithm Hash digest
SHA256 0aee1dc2b48ecb370fca5bd8b6990b315c77411b018d49d27b9e23f3b9d4143f
MD5 ebc4acb5caf1bfc11503acaefcd03d90
BLAKE2b-256 4a576e2fc420556eb044598397605db9a4dd56ce627925ee9a5c9aa7dc113d37

See more details on using hashes here.

File details

Details for the file slack_notifier_mcp-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: slack_notifier_mcp-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 15.5 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for slack_notifier_mcp-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7dfa4e762632d7a2aaac3d14d322af9bf78e83278e740ebab6b28df0487b5b53
MD5 d82a5f72317d2b391d12f9a48ed77324
BLAKE2b-256 01a4732aa4be8e485ef988c998b2b66090d6243a7464fd92968f9e23747fa9e0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page