Integrate Slack with AI Workflows
MCP server for Slack: list channels, post messages, reply to threads, add reactions, and read channel/thread history.
Why it matters
Connect your AI models to Slack workspaces to automate communication and data retrieval. This MCP server enables bots to send messages, manage threads, and access channel history.
Outcomes
What it gets done
Send messages and replies in Slack channels and threads
Retrieve channel lists, history, and user information
Add reactions to Slack messages
Integrate with AI models via MCP for enhanced automation
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/vb-slack | bash Capabilities
Tools your agent gets
Get a list of public or predefined channels in the workspace
Send a new message to a Slack channel
Reply in a specific message thread
Add an emoji reaction to a message
Get recent messages from a channel
Get all replies in a message thread
Get a list of workspace users with basic profile information
Get detailed profile information for a specific user
Overview
Slack MCP Server
An MCP server for Slack, exposing tools to list channels, post messages and thread replies, add reactions, and read channel/thread history and user profiles, built on Anthropic's original Slack MCP server. Use to have Claude read from or post to Slack directly. Bot access is scoped to granted OAuth permissions and invited channels; posting/reacting are consequential actions worth reviewing before production use.
What it does
slack-mcp-server provides Model Context Protocol access to Slack workspaces, built on Anthropic's original open-source Slack MCP server with substantial modifications and new functionality added by Zencoder. It exposes eight tools: slack_list_channels (list public or predefined channels, with pagination), slack_post_message (post a message to a channel), slack_reply_to_thread (reply to a specific message thread by its parent timestamp), slack_add_reaction (add an emoji reaction to a message), slack_get_channel_history (retrieve recent messages from a channel), slack_get_thread_replies (retrieve all replies in a thread), slack_get_users (list workspace users with basic profiles, paginated), and slack_get_user_profile (get detailed profile information for a specific user).
Setup requires creating a Slack app with specific OAuth scopes (channels:history, channels:read, chat:write, reactions:write, users:read, users.profile:read), installing it to the workspace to get a Bot User OAuth Token (starting with xoxb-), and finding the workspace's Team ID. The bot must be explicitly invited to private channels it needs to access.
export SLACK_BOT_TOKEN="xoxb-your-bot-token"
export SLACK_TEAM_ID="your-team-id"
export SLACK_CHANNEL_IDS="channel1,channel2,channel3" # Optional: predefined channels
The server supports two transports: stdio (default, for command-line and direct integrations) and Streamable HTTP (for remote/web-based integrations, supporting session management, bidirectional communication, resumable connections, and Bearer token authentication via AUTH_TOKEN or a CLI --token flag; if neither is set, a random token is auto-generated). Built on MCP SDK v1.13.2 using the modern high-level McpServer class with Zod schema validation, it can run locally via npm, globally via npm install -g @zencoderai/slack-mcp-server, or via Docker/Docker Compose. When using Streamable HTTP transport, it exposes POST /mcp (client-to-server), GET /mcp (server-to-client notifications via SSE), and DELETE /mcp (session termination) endpoints.
When to use - and when NOT to
Use this connector when you want Claude to read from or post to Slack - listing channels, posting messages or thread replies, reacting to messages, or pulling channel/thread history and user profiles.
The bot's access is scoped by the OAuth permissions granted at app creation and by which channels it has been invited to; it cannot read or post in channels it hasn't been added to. Posting messages and reactions are consequential actions that affect a shared workspace, so review what will be posted before running these tools against a production Slack workspace.
Capabilities
slack_list_channels, slack_post_message, slack_reply_to_thread, slack_add_reaction, slack_get_channel_history, slack_get_thread_replies, slack_get_users, slack_get_user_profile.
How to install
Create a Slack app with the required OAuth scopes, install it to your workspace, and note the bot token and team ID. Install locally (npm install + npm run build), globally (npm install -g @zencoderai/slack-mcp-server), or via Docker (docker pull zencoderai/slack-mcp:latest or build locally). Set SLACK_BOT_TOKEN and SLACK_TEAM_ID as environment variables, and run with --transport stdio (default) or --transport http --port <port> for remote use.
Who it's for
Teams who want Claude to read and post to Slack directly - summarizing channel activity, replying to threads, or pulling user and message information.
Source README
slack-mcp-server
Overview
A Model Context Protocol (MCP) server for interacting with Slack workspaces. This server provides tools to list channels, post messages, reply to threads, add reactions, get channel history, and manage users.
Available Tools
slack_list_channels
- List public or pre-defined channels in the workspace
- Optional inputs:
limit(number, default: 100, max: 200): Maximum number of channels to returncursor(string): Pagination cursor for next page
- Returns: List of channels with their IDs and information
slack_post_message
- Post a new message to a Slack channel
- Required inputs:
channel_id(string): The ID of the channel to post totext(string): The message text to post
- Returns: Message posting confirmation and timestamp
slack_reply_to_thread
- Reply to a specific message thread
- Required inputs:
channel_id(string): The channel containing the threadthread_ts(string): Timestamp of the parent messagetext(string): The reply text
- Returns: Reply confirmation and timestamp
slack_add_reaction
- Add an emoji reaction to a message
- Required inputs:
channel_id(string): The channel containing the messagetimestamp(string): Message timestamp to react toreaction(string): Emoji name without colons
- Returns: Reaction confirmation
slack_get_channel_history
- Get recent messages from a channel
- Required inputs:
channel_id(string): The channel ID
- Optional inputs:
limit(number, default: 10): Number of messages to retrieve
- Returns: List of messages with their content and metadata
slack_get_thread_replies
- Get all replies in a message thread
- Required inputs:
channel_id(string): The channel containing the threadthread_ts(string): Timestamp of the parent message
- Returns: List of replies with their content and metadata
slack_get_users
- Get list of workspace users with basic profile information
- Optional inputs:
cursor(string): Pagination cursor for next pagelimit(number, default: 100, max: 200): Maximum users to return
- Returns: List of users with their basic profiles
slack_get_user_profile
- Get detailed profile information for a specific user
- Required inputs:
user_id(string): The user's ID
- Returns: Detailed user profile information
Slack Bot Setup
To use this MCP server, you need to create a Slack app and configure it with the necessary permissions:
1. Create a Slack App
- Visit the Slack Apps page
- Click "Create New App"
- Choose "From scratch"
- Name your app and select your workspace
2. Configure Bot Token Scopes
Navigate to "OAuth & Permissions" and add these scopes:
channels:history- View messages and other content in public channelschannels:read- View basic channel informationchat:write- Send messages as the appreactions:write- Add emoji reactions to messagesusers:read- View users and their basic informationusers.profile:read- View detailed profiles about users
3. Install App to Workspace
- Click "Install to Workspace" and authorize the app
- Save the "Bot User OAuth Token" that starts with
xoxb-
4. Get Your Team ID
Get your Team ID (starts with a T) by following this guidance
5. Add Bot to Channels (Optional)
For the bot to access private channels or to post messages, you may need to invite it to specific channels using /invite @your-bot-name
Features
- Multiple Transport Support: Supports both stdio and Streamable HTTP transports
- Modern MCP SDK: Updated to use the latest MCP SDK (v1.13.2) with modern APIs
- Comprehensive Slack Integration: Full set of Slack operations including:
- List channels (with predefined channel support)
- Post messages
- Reply to threads
- Add reactions
- Get channel history
- Get thread replies
- List users
- Get user profiles
Installation
Local Development
npm install
npm run build
Global Installation (NPM)
npm install -g @zencoderai/slack-mcp-server
Docker Installation
# Build the Docker image locally
docker build -t slack-mcp-server .
# Or pull from Docker Hub
docker pull zencoderai/slack-mcp:latest
# Or pull a specific version
docker pull zencoderai/slack-mcp:1.0.0
Configuration
Set the following environment variables:
export SLACK_BOT_TOKEN="xoxb-your-bot-token"
export SLACK_TEAM_ID="your-team-id"
export SLACK_CHANNEL_IDS="channel1,channel2,channel3" # Optional: predefined channels
export AUTH_TOKEN="your-auth-token" # Optional: Bearer token for HTTP authorization (Streamable HTTP transport only)
Usage
Command Line Options
slack-mcp [options]
Options:
--transport <type> Transport type: 'stdio' or 'http' (default: stdio)
--port <number> Port for HTTP server when using Streamable HTTP transport (default: 3000)
--token <token> Bearer token for HTTP authorization (optional, can also use AUTH_TOKEN env var)
--help, -h Show this help message
Local Usage Examples
Using the slack-mcp command (after global installation)
# Use stdio transport (default)
slack-mcp
# Use stdio transport explicitly
slack-mcp --transport stdio
# Use Streamable HTTP transport on default port 3000
slack-mcp --transport http
# Use Streamable HTTP transport on custom port
slack-mcp --transport http --port 8080
# Use Streamable HTTP transport with custom auth token
slack-mcp --transport http --token mytoken
# Use Streamable HTTP transport with auth token from environment variable
AUTH_TOKEN=mytoken slack-mcp --transport http
Using node directly (for development)
# Use stdio transport (default)
node dist/index.js
# Use stdio transport explicitly
node dist/index.js --transport stdio
# Use Streamable HTTP transport on default port 3000
node dist/index.js --transport http
# Use Streamable HTTP transport on custom port
node dist/index.js --transport http --port 8080
# Use Streamable HTTP transport with custom auth token
node dist/index.js --transport http --token mytoken
# Use Streamable HTTP transport with auth token from environment variable
AUTH_TOKEN=mytoken node dist/index.js --transport http
Docker Usage Examples
Using Docker directly
# Run with stdio transport (default)
docker run --rm \
-e SLACK_BOT_TOKEN="xoxb-your-bot-token" \
-e SLACK_TEAM_ID="your-team-id" \
zencoderai/slack-mcp:latest
# Run with HTTP transport on port 3000
docker run --rm -p 3000:3000 \
-e SLACK_BOT_TOKEN="xoxb-your-bot-token" \
-e SLACK_TEAM_ID="your-team-id" \
zencoderai/slack-mcp:latest --transport http
# Run with HTTP transport on custom port
docker run --rm -p 8080:8080 \
-e SLACK_BOT_TOKEN="xoxb-your-bot-token" \
-e SLACK_TEAM_ID="your-team-id" \
zencoderai/slack-mcp:latest --transport http --port 8080
# Run with custom auth token
docker run --rm -p 3000:3000 \
-e SLACK_BOT_TOKEN="xoxb-your-bot-token" \
-e SLACK_TEAM_ID="your-team-id" \
-e AUTH_TOKEN="mytoken" \
zencoderai/slack-mcp:latest --transport http
Using Docker Compose
Create a docker-compose.yml file:
version: '3.8'
services:
slack-mcp:
# Use published image:
image: zencoderai/slack-mcp:latest
# Or build locally:
# build: .
environment:
- SLACK_BOT_TOKEN=xoxb-your-bot-token
- SLACK_TEAM_ID=your-team-id
- SLACK_CHANNEL_IDS=channel1,channel2,channel3 # Optional
- AUTH_TOKEN=your-auth-token # Optional for HTTP transport
ports:
- "3000:3000" # Only needed for HTTP transport
command: ["--transport", "http"] # Optional: specify transport type
restart: unless-stopped
Then run:
# Start the service
docker compose up -d
# View logs
docker compose logs -f slack-mcp
# Stop the service
docker compose down
Transport Types
Stdio Transport
- Use case: Command-line tools and direct integrations
- Communication: Standard input/output streams
- Default: Yes
Streamable HTTP Transport
- Use case: Remote servers and web-based integrations
- Communication: HTTP POST requests with optional Server-Sent Events streams
- Features:
- Session management
- Bidirectional communication
- Resumable connections
- RESTful API endpoints
- Bearer token authentication
Authentication (Streamable HTTP Transport Only)
When using Streamable HTTP transport, the server supports Bearer token authentication:
- Command Line: Use
--token <token>to specify a custom token - Environment Variable: Set
AUTH_TOKEN=<token>as a fallback - Auto-generated: If neither is provided, a random token is generated
The command line option takes precedence over the environment variable. Include the token in HTTP requests using the Authorization: Bearer <token> header.
Troubleshooting
If you encounter permission errors, verify that:
- All required scopes are added to your Slack app
- The app is properly installed to your workspace
- The tokens and workspace ID are correctly copied to your configuration
- The app has been added to the channels it needs to access
Development
Build
npm run build
Watch Mode
npm run watch
API Endpoints (Streamable HTTP Transport)
When using Streamable HTTP transport, the server exposes the following endpoints:
POST /mcp- Client-to-server communicationGET /mcp- Server-to-client notifications (Server-Sent Events streams)DELETE /mcp- Session termination
Changes from Previous Version
- Updated MCP SDK: Upgraded from v1.0.1 to v1.13.2
- Modern API: Migrated from low-level Server class to high-level McpServer class
- Zod Validation: Added proper schema validation using Zod
- Transport Flexibility: Added support for Streamable HTTP transport
- Command Line Interface: Added CLI arguments for transport selection
- Session Management: Implemented proper session handling for HTTP transport
- Better Error Handling: Improved error handling and logging
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.