get_threadLABSCO SUMMARY
The read-only switch is the reason to pick this one.
Plenty of Slack servers can post; this one lets you decide that an agent cannot. Flip SLACK_MCP_READ_ONLY and the posting, reacting, command and join tools raise an error while history and search keep working — a sane default for anything summarising a workspace unattended. Two token routes exist and they behave differently: a bot token acts as the bot, is scoped by OAuth permissions and can be revoked centrally, while session tokens act as you and expire, which is why the repo ships a refresh script.
What it is
A Python server that puts a Slack workspace behind MCP tools: channel history, search, threads, posting, reactions, DMs and channel administration.
What you get
- Channel history with date filtering and thread support, plus workspace-wide or per-channel message search
- post_message for messages and thread replies, send_dm for direct and group DMs, post_command for Slack commands
- add_reaction for emoji, and reaction lookups on existing messages
- Channel work: list, join_channel, create, rename, invite users, and channel ID lookup by name
- whoami to confirm which identity the tokens belong to, plus cache refresh helpers
- Usergroup member management
- A read-only mode that makes every mutating tool refuse — set SLACK_MCP_READ_ONLY or start the server with --read-only
- Tool activity mirrored into a Slack channel of your choice through LOGS_CHANNEL_ID, or left on stderr
Requirements
Either a Slack App bot token in SLACK_BOT_TOKEN, or your browser session tokens in SLACK_XOXC_TOKEN and SLACK_XOXD_TOKEN. Runs from a container image or as a uv tool; the local path needs Python 3.10 or higher. The bot-token route needs OAuth scopes granted in the Slack App and the bot invited to the channels it should see.
Setup effort
One command plus credentials — uv tool install git+https://github.com/redhat-community-ai-tools/slack-mcp, then supply credentials
USE CASES
Catching up on a channel you were away from
Pull history for a date range, threads included, and get a summary instead of scrolling.
Finding the decision that was made somewhere in Slack
Search across the workspace or inside one channel, then read the surrounding thread.
Letting an agent watch Slack without letting it speak
Start the server with --read-only; history and search still answer, while post_message, send_dm, post_command, add_reaction and join_channel refuse.
Posting the result back where the team will see it
Reply in the thread that raised the question, or send it as a DM, without leaving the tool you did the work in.
Keeping a record of what the agent did in Slack
Set LOGS_CHANNEL_ID to a self-DM or a private channel and every tool call is mirrored there.
22 tools
Listed in project code.
get_channel_historyget_channel_id_by_namerefresh_channel_cacherefresh_user_cacheresolve_user_idpost_messagepost_commandadd_reactionget_reactionswhoamijoin_channelcreate_channelinvite_users_to_channelrename_channellist_joined_channelsclear_usergroupupdate_usergroup_memberssend_dmsend_group_dmsearch_messagessearch_channel_messagesBEFORE YOU INSTALL
What to know first
Tools you get
22 tools registered in the project's code.
Requires
- Podman or Docker (container route), or uv with Python ≥ 3.10 (uv tool route)
- Either SLACK_BOT_TOKEN (a Slack App bot token), or SLACK_XOXC_TOKEN and SLACK_XOXD_TOKEN (browser session tokens)
Where it runs
All 5 documented setups run the server on your machine.
INSTALLATION
Connect your client
Server setup
uv tool install git+https://github.com/redhat-community-ai-tools/slack-mcpMCP Clients
Any MCP client — Podman, bot token
{
"mcpServers": {
"slack": {
"command": "podman",
"args": [
"run",
"-i",
"--rm",
"-e",
"SLACK_BOT_TOKEN",
"-e",
"LOGS_CHANNEL_ID",
"quay.io/redhat-ai-tools/slack-mcp"
],
"env": {
"SLACK_BOT_TOKEN": "<YOUR_SLACK_BOT_TOKEN>",
"LOGS_CHANNEL_ID": "C7000000"
}
}
}
}Any MCP client — Podman, session tokens
{
"mcpServers": {
"slack": {
"command": "podman",
"args": [
"run",
"-i",
"--rm",
"-e",
"SLACK_XOXC_TOKEN",
"-e",
"SLACK_XOXD_TOKEN",
"-e",
"MCP_TRANSPORT",
"-e",
"LOGS_CHANNEL_ID",
"quay.io/redhat-ai-tools/slack-mcp"
],
"env": {
"SLACK_XOXC_TOKEN": "<YOUR_SLACK_XOXC_TOKEN>",
"SLACK_XOXD_TOKEN": "<YOUR_SLACK_XOXD_TOKEN>",
"MCP_TRANSPORT": "stdio",
"LOGS_CHANNEL_ID": "C7000000"
}
}
}
}Any MCP client — uv, shell tokens
{
"mcpServers": {
"slack": {
"command": "slack-mcp"
}
}
}Any MCP client — uv, inline tokens
{
"mcpServers": {
"slack": {
"command": "slack-mcp",
"env": {
"SLACK_XOXC_TOKEN": "<YOUR_SLACK_XOXC_TOKEN>",
"SLACK_XOXD_TOKEN": "<YOUR_SLACK_XOXD_TOKEN>",
"LOGS_CHANNEL_ID": "C7000000"
}
}
}
}Claude Code — bot token
claude mcp add slack -e SLACK_BOT_TOKEN=<YOUR_SLACK_BOT_TOKEN> -- slack-mcp