Slack MCP server
Community Slack MCP server with smart history, DMs, and search that needs no workspace bot install.
This is the most capable community Slack MCP server, distinct from any first-party Slack offering. Its standout property is that it can run without installing a bot or requesting workspace scopes: in stealth mode it uses browser session tokens, and in OAuth mode it uses a user or bot token. From there it reads conversation history and threads, searches messages with date and user filters, lists channels, looks up users, and tracks unreads. Write tools such as posting messages and reactions exist but are disabled by default and must be explicitly enabled.
It is distributed as an npm package run over stdio with npx, and also as a Docker image, with authentication supplied through SLACK_MCP_XOXP_TOKEN (or browser-session tokens). Because it is community-maintained rather than published by Slack, it is marked unofficial here, but the install is verified and the project is actively developed.
Quick install
Copy-paste configs are provided for all 8 supported clients. Pick your client below.
Add to ~/.claude.json
{
"mcpServers": {
"slack": {
"command": "npx",
"args": [
"-y",
"slack-mcp-server@latest",
"--transport",
"stdio"
],
"env": {
"SLACK_MCP_XOXP_TOKEN": "<SLACK_MCP_XOXP_TOKEN>"
}
}
}
}claude mcp add slack -- npx -y slack-mcp-server@latest --transport stdioAvailable tools
| Tool | Description |
|---|---|
| conversations_history | Gets messages from a channel or DM by channel ID with smart pagination. |
| conversations_replies | Gets the messages in a thread by channel ID and thread timestamp. |
| conversations_add_message | Posts a message to a public channel, private channel, or DM (disabled by default). |
| conversations_search_messages | Searches messages across channels and DMs with date and user filters. |
| conversations_unreads | Gets unread messages across all channels efficiently. |
| conversations_mark | Marks a channel or DM as read up to a message. |
| conversations_join | Joins a public channel. |
| conversations_leave | Leaves a channel, group conversation, or DM. |
| reactions_add | Adds an emoji reaction to a message (disabled by default). |
| reactions_remove | Removes an emoji reaction from a message (disabled by default). |
| attachment_get_data | Downloads an attachment's content by file ID. |
| channels_list | Lists the channels in the workspace. |
| channels_me | Lists the channels the authenticated user is a member of. |
| users_search | Searches for users by name, email, or ID. |
| usergroups_list | Lists all user groups (subteams) in the workspace. |
| usergroups_me | Lists the user groups the authenticated user belongs to. |
| usergroups_create | Creates a new user group (mention group). |
| usergroups_update | Updates an existing user group's metadata. |
| usergroups_users_update | Replaces the members of a user group. |
| saved_list | Lists saved items from Slack's Save for Later panel. |
| saved_update | Updates a saved item's completion status or due date. |
| saved_clear_completed | Clears all completed saved items from the panel. |
Required configuration
- SLACK_MCP_XOXP_TOKENRequired
User OAuth token. Alternatively use a bot token or browser-session tokens (XOXC + XOXD).
What you can do with it
Catch up on a channel
An agent fetches recent history and thread replies, then summarizes what a team missed without anyone scrolling.
Search across conversations
Find every mention of a feature or incident across channels and DMs with date and author filters.
FAQ
- Is it free?
- Yes. It is an open-source community project and free to run; you supply your own Slack token.
- Does it support remote/OAuth?
- It supports OAuth-style tokens (user or bot) and can run over SSE/HTTP in addition to stdio, but it is not a Slack-hosted endpoint and there is no managed OAuth flow.