Slack MCP server
Last verified: 2026-09
Read channels and post messages.
Official reference Chat, mail & docs Needs a secret Claude Desktop, Cursor, Windsurf, Claude Code, VS Code
What it does
A Slack bot the model can use to list channels, read history, and post. It speaks as the bot user. Scope the bot to the channels you intend.
It sits in Chat, mail & docs: These servers act as the bot or the integration you install.
Good for
- Read two channels you invited the bot to, not the whole workspace.
- Search recent messages for a decision you know was posted.
- Post as the bot only after a week of read-only.
- Do not also give Gmail write in the same chat.
Tools
- slack_list_channels / slack_get_users / slack_get_user_profile — Directory.
- slack_get_channel_history / slack_get_thread_replies — Read.
- slack_post_message / slack_reply_to_thread / slack_add_reaction — Write.
Config (Claude Desktop / Cursor / Windsurf)
Paste the JSON below. Same mcpServers shape. Replace placeholder paths and secrets.
Windows paths look like C:\\Users\\you\\project, not /path/to.
Host-side steps →
Claude Desktop
| OS | Config file |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json
(usually C:\Users\<you>\AppData\Roaming\Claude\) |
| Linux | ~/.config/Claude/claude_desktop_config.json |
Cursor
| Scope | macOS / Linux | Windows |
|---|---|---|
| This project | .cursor/mcp.json in the repo root | |
| This user | ~/.cursor/mcp.json |
%USERPROFILE%\.cursor\mcp.json |
Windsurf
| OS | Config file |
|---|---|
| macOS / Linux | ~/.codeium/windsurf/mcp_config.json |
| Windows | %USERPROFILE%\.codeium\windsurf\mcp_config.json |
{
"mcpServers": {
"slack": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-slack"
],
"env": {
"SLACK_BOT_TOKEN": "xoxb-...",
"SLACK_TEAM_ID": "T..."
}
}
}
}
Windsurf remote MCP: use serverUrl instead of url if the block below is HTTP.
One-liner: npx -y @modelcontextprotocol/server-slack
Secrets it wants: SLACK_BOT_TOKEN, SLACK_TEAM_ID
How to get started
- Create a Slack app with channels:history, chat:write, users:read. Install it to the workspace.
- Invite the bot to specific channels only.
- Set SLACK_BOT_TOKEN and SLACK_TEAM_ID. Restart. Ask it to list channels it can see.
Access risk
chat:write posts as the bot in every channel it joined. History can include customer data. Do not add it to #all-company.
When to skip it
Skip it for Discord/Telegram. Skip write scopes if you only want the model to search logs.
Vs alternatives
| Server | Official? | Needs a secret? | Best for |
|---|---|---|---|
| Slack | Yes | Yes | Read channels and post messages. |
| Discord | No | Yes | Read and send Discord messages. |
| Telegram | No | Yes | Send and read Telegram via a bot. |
More in Chat, mail & docs
FAQ
Which scopes?
channels:history / groups:history on specific channels. chat:write is optional and public.
User token or bot?
The official server uses a bot token. Invite the bot to the rooms it should see.
Slack or Discord?
Whichever the team already lives in. Do not install both write tokens.
Can it read DMs?
Only if you grant those scopes and the bot is in those conversations. Don't.