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.
A Python server that puts a Slack workspace behind MCP tools: channel history, search, threads, posting, reactions, DMs and channel administration.
- 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
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.
One command plus a key — uv tool install git+https://github.com/redhat-community-ai-tools/slack-mcp, then supply credentials
