Verified MCP server: Slack

The Slack MCP server, its live tool list captured on a real Mac.

  • Tools enumerated2026-08-03macOS 14.4.1
  • Package@modelcontextprotocol/server-slack 2025.4.25
  • Self-reportedSlack MCP Server 1.0.0
  • MCP protocol2024-11-05
  • Runtimev25.8.1

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]

  • Tools

    8, enumerated live

  • Credentials

    Slack bot token needed [5]

  • Transport

    stdio, runs on your Mac [6]

  • Maintainer

    modelcontextprotocol, archived [1][3]

  • Downloads

    84k last week [2]

  • License

    MIT, Anthropic PBC [4]

Verification

How this MCP server was verified.

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

Every tool, enumerated from the running server.

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.

ToolWhat 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

Working configs, one per app.

Copy the block for the app you use. Each one is the configuration this server was verified with.

Claude Desktop

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]

Claude Code

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]

Cursor

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]

Routines

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

Set the Slack MCP server up without the terminal.

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.

  1. 01

    Install Routines

    Download the app from getroutines.ai/download, drag it to Applications, and sign in.

  2. 02

    Create a Slack app and copy its bot token

    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.

  3. 03

    Open the MCP settings

    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.

  4. 04

    Choose Command (stdio)

    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.

  5. 05

    Add the two environment variables, then test

    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.

  6. 06

    Use it

    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

Routines worth scheduling.

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.

A morning channel digest

Prompt

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.

A loose-thread chaser

Prompt

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.

A Friday wrap-up post

Prompt

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

The errors we hit, and what fixed them.

Real errors captured during the verification run, printed exactly as the server returned them.

The server exits the second it starts

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.

The tools are listed, but every call answers invalid_auth

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.

npm warns the package is no longer supported

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.

The maintained community server will not start at all

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.

Slack's own hosted server answers missing_token

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

Questions people ask.

What is the Slack MCP server?

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]

Which Slack MCP server should I use in 2026?

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]

What tools does the Slack MCP server include?

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]

What token and permissions does it need?

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]

Is the Slack MCP server safe to run?

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]

Do I need the terminal to set it up?

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]

Why did the tool list work without a real Slack token?

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

Every external claim, receipted.

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. [1]

    npm registry: @modelcontextprotocol/server-slackaccessed 2026-08-03

    Latest version 2025.4.25, published 2025-04-25, flagged deprecated: Package no longer supported.

  2. [2]

    npm downloads API: last weekaccessed 2026-08-03

    84,395 downloads for the week ending 2026-08-01.

  3. [3]

    GitHub: modelcontextprotocol/servers-archivedaccessed 2026-08-03

    Archived repository, 293 stars, last push 2025-05-28, per the GitHub API. Described as reference MCP servers that are no longer maintained.

  4. [4]

    modelcontextprotocol/servers-archived LICENSE fileaccessed 2026-08-03

    MIT License, Copyright (c) 2024 Anthropic, PBC.

  5. [5]

    Slack server README (src/slack)accessed 2026-08-03

    The bot scopes, the xoxb- token, the team ID and the optional SLACK_CHANNEL_IDS variable.

  6. [6]

    Slack server source: index.tsaccessed 2026-08-03

    582 lines; instantiates StdioServerTransport, so the server speaks stdio.

  7. [7]

    GitHub: korotovsky/slack-mcp-serveraccessed 2026-08-03

    The maintained community server, written in Go. 1,763 stars, last push 2026-07-16, MIT, per the GitHub API.

  8. [8]

    npm registry: slack-mcp-serveraccessed 2026-08-03

    Latest version 1.3.0, published 2026-05-14, maintainer korotovsky.

  9. [9]

    Slack developer docs: Slack MCP server overviewaccessed 2026-08-03

    Slack's own hosted MCP server: search, messages, canvases, users, and admin approval of MCP clients.

  10. [10]

    Slack developer docs: connect the Slack MCP server to Claudeaccessed 2026-08-03

    The hosted endpoint https://mcp.slack.com/mcp over HTTP with OAuth, plus the Claude Code plugin install.

  11. [11]

    modelcontextprotocol.io: Connect to local MCP serversaccessed 2026-08-03

    The official Claude Desktop quickstart and the config file location.

  12. [12]

    Claude Code docs: MCPaccessed 2026-08-03

    The claude mcp add syntax for local stdio servers, and the warning about placing the server name straight after --env.

  13. [13]

    Cursor docs: Model Context Protocolaccessed 2026-08-03

    The mcp.json shape, including the env block, and the file locations.

  14. [14]

    Routines: Connectorsaccessed 2026-08-03

    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