A morning channel digest
Every weekday at 8:30, read yesterday's messages in my team channel, summarize the decisions made and anything that mentions me, and save it as slack-digest.md in my Notes folder.
Verified MCP server: Slack
The tool list below is a live capture from the running server; an authenticated tool call is still pending credentials.
The short answer
Last verified 2026-08-03
The Slack MCP server connects an AI assistant to a Slack workspace: list channels, read history and threads, post messages, add reactions, and look people up. In 2026 that name covers three different things, and the difference matters. The package almost every guide still points at, @modelcontextprotocol/server-slack, is archived: npm marks it deprecated and its source now sits in the servers-archived repository. It still installs and still runs, which is why we ran it, enumerated all 8 tools it exposes, and kept the raw output, including the exact errors it returns when the token is wrong. Slack itself now operates an official hosted MCP server at mcp.slack.com that your workspace admin has to approve, and korotovsky/slack-mcp-server is the actively maintained community server you install yourself. All three are on this page, with the receipts for each. [1][3][9][7]
Verification
Method
We spawned the server with npx over stdio, completed the MCP initialize handshake, and called tools/list. The tool table below is that response, word for word, and the protocol version above is read straight off the raw initialize reply. The package exits immediately unless SLACK_BOT_TOKEN and SLACK_TEAM_ID are set, so we set both to obvious placeholders instead of a real workspace token: enough to boot the server and enumerate what it offers, not enough to reach Slack. The one tool call we made came back with Slack's own invalid_auth, printed below. An authenticated call is pending credentials.
Startup banner
Starting Slack MCP Server... Connecting server to transport... Slack MCP Server running on stdio
One real tool call
tools/call slack_list_channels {"limit": 5}{"ok":false,"error":"invalid_auth"}Real lines from the captured result: enough to prove the call answered.
Tools
The server answered tools/list with 8 tools on 2026-08-03. The names, descriptions and parameters below are its own words, copied from that response and never edited.
| Tool | What it does |
|---|---|
| slack_list_channelslimitcursor | List public or pre-defined channels in the workspace with pagination |
| slack_post_messagechannel_id*text* | Post a new message to a Slack channel |
| slack_reply_to_threadchannel_id*thread_ts*text* | Reply to a specific message thread in Slack |
| slack_add_reactionchannel_id*timestamp*reaction* | Add a reaction emoji to a message |
| slack_get_channel_historychannel_id*limit | Get recent messages from a channel |
| slack_get_thread_replieschannel_id*thread_ts* | Get all replies in a message thread |
| slack_get_userscursorlimit | Get a list of all users in the workspace with their basic profile information |
| slack_get_user_profileuser_id* | Get detailed profile information for a specific user |
Parameters marked with * are required.
Setup
Copy the block for the app you use. Each one is the configuration this server was verified with.
Open the file ~/Library/Application Support/Claude/claude_desktop_config.json (in Claude Desktop: Settings, then Developer, then Edit Config) and add:
{
"mcpServers": {
"slack": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-slack"
],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-bot-token",
"SLACK_TEAM_ID": "T01234567"
}
}
}
}Paste your own bot token and workspace ID, then quit and reopen Claude Desktop. If your Slack admin has approved it, there is a second route with no JSON at all: Slack runs an official hosted MCP server, and Claude Desktop adds it from the Connectors page instead. [11][5][10]
One command in your terminal:
claude mcp add --env SLACK_BOT_TOKEN=xoxb-your-bot-token --env SLACK_TEAM_ID=T01234567 --transport stdio slack -- npx -y @modelcontextprotocol/server-slack
Everything after the double dash is the exact command Claude Code will run. The --transport flag sits between the last --env pair and the server name on purpose: the docs warn that a name placed straight after --env is read as another KEY=value pair and rejected. Slack also ships a Claude Code plugin that wires up its hosted server over OAuth instead. [12][10]
Add to ~/.cursor/mcp.json for every project, or to .cursor/mcp.json inside one project:
{
"mcpServers": {
"slack": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-slack"
],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-bot-token",
"SLACK_TEAM_ID": "T01234567"
}
}
}
}Cursor picks the file up on restart. Treat that file the way you treat any file with a token in it: it is plain text on disk, so keep it out of a repository you push. [13]
No JSON file and no terminal. In Routines: Settings, then Assistant, then Connections, then Add MCP Server. Switch the form to Command (stdio) and enter:
Name Slack Command npx Arguments -y @modelcontextprotocol/server-slack Environment Variables SLACK_BOT_TOKEN xoxb-your-bot-token SLACK_TEAM_ID T01234567
The Arguments field splits on spaces, so keep it to exactly those three words. The token goes in Environment Variables, never in Arguments. Click Test Connection first: a working server answers with its tool count, eight for this one. [14][5]
No terminal needed
If you have never opened Terminal and never want to, this is your path. Routines is a Mac app that runs MCP servers for you: fill in a few fields once, and this server's tools are available to your AI in chat and in scheduled routines. The only fiddly part is the Slack token, and it is a five-minute detour on Slack's own site.
01
Download the app from getroutines.ai/download, drag it to Applications, and sign in.
02
Go to api.slack.com/apps, click Create New App, choose From scratch, and pick your workspace. Under OAuth & Permissions add the bot scopes the server needs: channels:history, channels:read, chat:write, reactions:write, users:read and users.profile:read. Click Install to Workspace, then copy the Bot User OAuth Token that starts with xoxb-. You also need your workspace ID, the one that starts with T.
03
Back in Routines, click your account at the bottom of the sidebar and choose Settings. Open the Assistant section, then the Connections tab, scroll to MCP Servers, and click Add MCP Server.
04
The form opens in URL (SSE/HTTP) mode. Switch it to Command (stdio): this server is a command, not a web address. Name: Slack. Command: npx. Arguments: -y @modelcontextprotocol/server-slack, exactly those three words.
05
In Environment Variables add SLACK_BOT_TOKEN with your xoxb- token and SLACK_TEAM_ID with your workspace ID. Click Test Connection: Routines starts the server without saving it and reports how many tools it found, eight for this one. Then click Add Server.
06
The tools work in chat right away. To let a scheduled routine use them, open the routine, find the Tools & connections card, and tick the server under Apps.
Routine ideas
Once the server is connected, a scheduled routine can use its tools while you are away. Copy a prompt, paste it into Routines, and pick a time.
Every weekday at 8:30, read yesterday's messages in my team channel, summarize the decisions made and anything that mentions me, and save it as slack-digest.md in my Notes folder.
Every Wednesday at 15:00, look through the last seven days of messages in my project channel, list the threads where someone asked a question that never got a reply, and write them to open-threads.md with a link to each thread.
Every Friday at 16:30, read this week's messages in my project channel, draft a five-line summary of what shipped and what is still open, show it to me for approval, and then post it to that same channel.
Troubleshooting
Real errors captured during the verification run, printed exactly as the server returned them.
What you see
Please set SLACK_BOT_TOKEN and SLACK_TEAM_ID environment variables
The fix
Both variables are mandatory and the server checks them before it does anything else. SLACK_BOT_TOKEN is the Bot User OAuth Token that starts with xoxb-, and SLACK_TEAM_ID is your workspace ID, which starts with T. In Claude Desktop and Cursor they go in the env block; in Routines they go in Environment Variables, not in Arguments.
What you see
{"ok":false,"error":"invalid_auth"}The fix
This is Slack's answer, not the server's: the server passed your token through and Slack rejected it. This is exactly what our run produced, because we booted the server with a placeholder token on purpose. Check that you copied the Bot User OAuth Token and not the Signing Secret or the App-Level Token, that the app is still installed in the workspace, and that the token has not been rotated.
What you see
npm warn deprecated @modelcontextprotocol/server-slack@2025.4.25: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
The fix
Accurate, and it is not a failure: the install continues and the server runs. The reference Slack server was retired to the servers-archived repository and its last npm release is dated 2025-04-25. If you want something under active maintenance, use Slack's own hosted MCP server or the community server at korotovsky/slack-mcp-server instead.
What you see
{"level":"fatal","timestamp":"2026-08-03T06:07:04+03:00","message":"Authentication required: Either SLACK_MCP_XOXP_TOKEN, SLACK_MCP_XOXB_TOKEN, or both SLACK_MCP_XOXC_TOKEN and SLACK_MCP_XOXD_TOKEN must be provided","app":"slack-mcp-server","stacktrace":"github.com/korotovsky/slack-mcp-server/pkg/provider.New\n\t/Users/runner/work/slack-mcp-server/slack-mcp-server/pkg/provider/api.go:682\nmain.main\n\t/Users/runner/work/slack-mcp-server/slack-mcp-server/cmd/slack-mcp-server/main.go:71\nruntime.main\n\t/Users/runner/hostedtoolcache/go/1.25.9/arm64/src/runtime/proc.go:285"}The fix
That is npx -y slack-mcp-server with no credentials. It uses a different set of variables from the reference server and it validates them against Slack before it will speak MCP at all, so a placeholder does not get you a tool list either. Give it one of SLACK_MCP_XOXP_TOKEN, SLACK_MCP_XOXB_TOKEN, or the SLACK_MCP_XOXC_TOKEN and SLACK_MCP_XOXD_TOKEN pair. That strictness is the reason the tool table on this page was enumerated from the archived reference instead.
What you see
{"jsonrpc":"2.0","id":null,"error":{"code":-32001,"message":"missing_token"}}The fix
We got this back as an HTTP 401 from https://mcp.slack.com/mcp with no credentials attached. Slack's hosted server is not a paste-a-token server: it wants an OAuth session, and a workspace admin has to approve the MCP client first. Add it from your client's connector or plugin flow, which runs the OAuth handshake for you, rather than pointing a raw URL at it.
FAQ
It is a small program that sits between an AI assistant and a Slack workspace and speaks the Model Context Protocol. Once connected, an assistant such as Claude can list channels, read channel history and thread replies, post messages, add emoji reactions, and look up people. The version we ran here runs as a local process on your Mac and talks to your AI app over stdio. [5][6]
There are three real answers. Slack now runs an official hosted MCP server at mcp.slack.com, connected over OAuth and gated behind workspace admin approval: that is the safest route inside a company. korotovsky/slack-mcp-server is the maintained community server you run yourself, and it is the one to pick if you want a local process with search and DM coverage. The Anthropic reference package on this page, @modelcontextprotocol/server-slack, is archived and deprecated, and is still what most tutorials show; it works, but nobody is fixing it. [9][7][8][1][3]
The running server exposes 8 tools: reading (slack_list_channels, slack_get_channel_history, slack_get_thread_replies), writing (slack_post_message, slack_reply_to_thread, slack_add_reaction), and people (slack_get_users, slack_get_user_profile). The table above is the live tools/list output, word for word. Slack's hosted server offers a wider set, including search across messages and files and canvas editing. [9]
A Slack bot token that starts with xoxb-, plus your workspace ID starting with T. You create both by making a Slack app at api.slack.com/apps and installing it to your workspace. The README lists the bot scopes the tools need: channels:history, channels:read, chat:write, reactions:write, users:read and users.profile:read. Depending on your workspace settings, installing an app may need an admin to approve it. [5]
Two separate questions live in there. The code is a 582-line TypeScript file that only calls the Slack Web API, and you can read it in one sitting; it holds no maintainer, though, so nothing gets patched. The bigger question is scope: the token you paste can post messages and react as your app, so scope the Slack app narrowly, invite the bot only to the channels it needs, and remember that an optional SLACK_CHANNEL_IDS variable can pin slack_list_channels to a fixed list. [6][5]
No. In Routines you fill in the fields in Settings and click Test Connection; the walkthrough above shows every click, including the Slack side. Claude Desktop needs a small JSON file edited once, or no file at all if you use Slack's connector. Only Claude Code is terminal-first by nature. [14][11][10]
Because listing tools never touches Slack. The server checks that SLACK_BOT_TOKEN and SLACK_TEAM_ID exist, boots, and answers tools/list from its own code, so a placeholder is enough to make it describe itself honestly. The moment a tool actually runs, the request goes to Slack and the placeholder is exposed, which is the invalid_auth in the sample call above. That is why this page carries the amber badge: the tool table is a real capture, and an authenticated call is still pending credentials.
Sources
Anything on this page we did not observe in the run is linked here, with the date we read it. The run itself is the receipt for the rest.
[1]
Latest version 2025.4.25, published 2025-04-25, flagged deprecated: Package no longer supported.
[2]
[3]
Archived repository, 293 stars, last push 2025-05-28, per the GitHub API. Described as reference MCP servers that are no longer maintained.
[4]
MIT License, Copyright (c) 2024 Anthropic, PBC.
[5]
The bot scopes, the xoxb- token, the team ID and the optional SLACK_CHANNEL_IDS variable.
[6]
582 lines; instantiates StdioServerTransport, so the server speaks stdio.
[7]
The maintained community server, written in Go. 1,763 stars, last push 2026-07-16, MIT, per the GitHub API.
[8]
Latest version 1.3.0, published 2026-05-14, maintainer korotovsky.
[9]
Slack's own hosted MCP server: search, messages, canvases, users, and admin approval of MCP clients.
[10]
The hosted endpoint https://mcp.slack.com/mcp over HTTP with OAuth, plus the Claude Code plugin install.
[11]
The official Claude Desktop quickstart and the config file location.
[12]
The claude mcp add syntax for local stdio servers, and the warning about placing the server name straight after --env.
[13]
The mcp.json shape, including the env block, and the file locations.
[14]
How Routines runs one-click OAuth connectors and any MCP server.
This page describes Slack as it behaved in one dated run on one Mac. Versions move: if something here no longer matches what you see, the capture date at the top says how old the reading is.
Behind this directory
Routines, the app behind this directory, runs MCP servers like this one without a terminal: see how connectors work. The digests it writes stay markdown files on your Mac, and there is no cloud bill. Download Routines