MCP Server Archived reference

Slack

MCP server for the Slack API that lets Claude list channels, post and reply to messages, add reactions, and read history and user profiles in a Slack workspace.

  • 304 GitHub stars
docker build -t mcp/slack -f src/slack/Dockerfile .
Slack preview image

What it is

Slack MCP Server is an MCP server for the Slack API that enables Claude to interact with Slack workspaces. It exposes eight tools covering channel listing, posting messages, threaded replies, emoji reactions, channel history, thread replies, and user lookups. It runs via NPX (@modelcontextprotocol/server-slack) or Docker (mcp/slack) and authenticates with a Slack bot token.

Who it's for

  • Developers who want Claude to read and post messages in a Slack workspace
  • Teams configuring Slack access in Claude Desktop or VS Code through MCP
  • Admins who need to limit the channels an assistant can access

Requirements

Requirements

  • A Slack App created from scratch in your workspace via the Slack Apps page
  • Bot token scopes: channels:history, channels:read, chat:write, reactions:write, users:read, users.profile:read
  • Bot User OAuth Token starting with xoxb- (SLACK_BOT_TOKEN, required)
  • Slack Team ID starting with T (SLACK_TEAM_ID, required)
  • NPX or Docker to run the server
  • The app must be added to the channels it needs to access

Setup

  1. Create the Slack App

    Visit the Slack Apps page (https://api.slack.com/apps), click "Create New App", choose "From scratch", then name your app and select your workspace.

  2. Add Bot Token Scopes and install

    Under "OAuth & Permissions", add the scopes channels:history, channels:read, chat:write, reactions:write, users:read and users.profile:read. Then click "Install to Workspace", authorize the app, and save the Bot User OAuth Token starting with xoxb-. Also get your Team ID (starts with T).

  3. Configure Claude Desktop (NPX)

    Add this to your claude_desktop_config.json. SLACK_CHANNEL_IDS is optional; if not set, all public channels will be listed.

    json
    {
      "mcpServers": {
        "slack": {
          "command": "npx",
          "args": [
            "-y",
            "@modelcontextprotocol/server-slack"
          ],
          "env": {
            "SLACK_BOT_TOKEN": "xoxb-your-bot-token",
            "SLACK_TEAM_ID": "T01234567",
            "SLACK_CHANNEL_IDS": "C01234567, C76543210"
          }
        }
      }
    }
  4. Configure Claude Desktop (Docker)

    Alternatively, run the server through Docker using the mcp/slack image.

    json
    {
      "mcpServers": {
        "slack": {
          "command": "docker",
          "args": [
            "run",
            "-i",
            "--rm",
            "-e",
            "SLACK_BOT_TOKEN",
            "-e",
            "SLACK_TEAM_ID",
            "-e",
            "SLACK_CHANNEL_IDS",
            "mcp/slack"
          ],
          "env": {
            "SLACK_BOT_TOKEN": "xoxb-your-bot-token",
            "SLACK_TEAM_ID": "T01234567",
            "SLACK_CHANNEL_IDS": "C01234567, C76543210"
          }
        }
      }
    }
  5. Build the Docker image locally

    If you want to build the image yourself, use the documented Docker build command.

    bash
    docker build -t mcp/slack -f src/slack/Dockerfile .

Examples

VS Code configuration with NPX

json
json
{
  "mcp": {
    "inputs": [
      {
        "type": "promptString",
        "id": "slack_bot_token",
        "description": "Slack Bot Token (starts with xoxb-)",
        "password": true
      },
      {
        "type": "promptString",
        "id": "slack_team_id",
        "description": "Slack Team ID (starts with T)"
      }
    ],
    "servers": {
      "slack": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-slack"],
        "env": {
          "SLACK_BOT_TOKEN": "${input:slack_bot_token}",
          "SLACK_TEAM_ID": "${input:slack_team_id}"
        }
      }
    }
  }
}

What it does: Manual VS Code User Settings (JSON) setup that prompts for the bot token and team ID. In .vscode/mcp.json the mcp key is not needed.

Post a message with slack_post_message

Prompt
prompt
Post a message to the channel with channel_id C01234567 using slack_post_message, with text "Hello team".

Expected output: slack_post_message requires channel_id and text, and returns a confirmation and timestamp. The channel ID and message text here are illustrative.

Reply in a thread

Prompt
prompt
Reply to the thread whose parent message has thread_ts <timestamp> in channel <channel_id> using slack_reply_to_thread.

Expected output: slack_reply_to_thread requires channel_id, thread_ts (parent message timestamp) and text.

Read recent channel history

Prompt
prompt
Use slack_get_channel_history for channel <channel_id> with limit 10 to show recent messages.

Expected output: slack_get_channel_history requires channel_id and takes an optional limit (default 10), returning messages with content and metadata.

Pros & cons

Pros

  • Pro:Covers eight tools spanning channels, messages, threads, reactions and user profiles
  • Pro:Optional SLACK_CHANNEL_IDS variable limits channel access; otherwise all public channels are listed
  • Pro:Supports both NPX and Docker, with documented configs for Claude Desktop and VS Code
  • Pro:Pagination via cursor and limit on channel and user listing

Cons

  • Con:Requires creating a Slack app and configuring six bot token scopes manually
  • Con:Source documents channel history only for public channels (channels:history, channels:read scopes) and the app must be added to channels it accesses
  • Con:Hosted in an archived servers repository, so the source itself shows no ongoing updates there

Images