What it does
The Slack MCP Server connects Claude to your Slack workspace via the Slack Web API, making your AI assistant a fully capable Slack participant. Claude can read message history, post new messages, reply in threads, search across all channels, and look up information about users and channels — turning Slack from a passive data store into an active workspace Claude can reason about and write to.
Common use cases include daily digests (summarize all messages in #engineering since yesterday), incident analysis (search Slack for all messages mentioning a specific error code), standup drafting (pull what you worked on from your DMs and channels), and automated notifications (have Claude post a formatted summary to a channel after completing a task).
- List all public channels and their member counts
- Read message history from any channel or DM thread
- Post messages to channels with full Block Kit formatting support
- Reply to threads by message timestamp
- Search messages across all channels with Slack's query language
- Look up user profiles by name, email, or user ID
- Get channel info including topic, purpose, and pinned messages
- React to messages with emoji
How to connect
Create a Slack app at api.slack.com/apps, add a Bot Token Scope, and install it to your workspace. Copy the xoxb- Bot User OAuth Token from the OAuth & Permissions page.
export SLACK_BOT_TOKEN="xoxb-your-token-here" export SLACK_TEAM_ID="T0123456789" # optional, limits to one workspace claude mcp add slack -- npx -y @modelcontextprotocol/server-slack
Required OAuth scopes
When creating your Slack app, add the following Bot Token Scopes under OAuth & Permissions:
channels:read— list public channelschannels:history— read messages in public channelschat:write— post and reply to messagessearch:read— search messages across channelsusers:read— look up user profilesgroups:readandgroups:history— for private channel access (optional)im:readandim:history— for DM access (optional)
Available tools
slack_list_channels— list all channels the bot has access toslack_get_channel_history— read recent messages in a channelslack_post_message— send a message to a channel or userslack_reply_to_thread— post a reply within an existing threadslack_search_messages— search messages using Slack query syntaxslack_get_user_info— retrieve a user's profile and statusslack_add_reaction— react to a message with an emojislack_get_channel_info— fetch channel metadata including topic
Example usage
Ask Claude to summarize all important messages from a channel and post a digest:
# User prompt
Read the last 100 messages in #incidents, identify
any unresolved issues, and post a summary to
#engineering-digest with action items.
slack_get_channel_history({ channel: "#incidents", limit: 100 }) → returns 100 messages → Claude identifies 3 unresolved threads slack_post_message({ channel: "#engineering-digest", text: "*Incident Summary — 3 open items*\n..." }) → digest posted successfully
Private channels: By default the bot can only see public channels. To include private channels, invite the bot to the channel with /invite @your-bot-name and add groups:read and groups:history scopes to your app.