Skip to content

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Slack MCP Server

Crates.io License ADK-Rust Enterprise Registry Ready

Give your AI agents full Slack access — messages, threads, DMs, channels, canvases, reactions, and search. 27 tools over the Slack Web API with enterprise governance and audit-ready risk classification.

Architecture

MCP Slack Architecture

Tools (27)

Tool Purpose Risk Class
list_channels List public and private channels Read-only
list_channels_paginated List channels with cursor pagination Read-only
get_channel_history Get recent messages from a channel Read-only
get_history_paginated Get history with cursor pagination Read-only
get_thread Get thread replies for a message Read-only
search_messages Search messages across all channels Read-only
list_users List workspace users Read-only
get_user Get user profile info by ID Read-only
list_members List members of a channel Read-only
list_dms List direct message conversations Read-only
list_emoji List custom emoji in the workspace Read-only
list_files List files shared in a channel Read-only
get_file Get file metadata and download URL Read-only
read_canvas Read/export a canvas as markdown Read-only
list_bookmarks List bookmarks in a channel Read-only
list_scheduled_messages List scheduled (draft) messages Read-only
send_message Send a message to a channel or thread External write
open_dm Open a DM conversation with users External write
add_reaction Add an emoji reaction to a message External write
set_channel_topic Set a channel's topic External write
upload_file Upload a text file to a channel External write
create_channel Create a new public or private channel External write
create_canvas Create a rich document in a channel External write
update_canvas Update canvas content (markdown) External write
add_bookmark Add a bookmark link to a channel External write
schedule_message Schedule a message for future delivery External write
delete_scheduled_message Cancel a scheduled message External write

Comparison with Other Slack MCP Servers

Feature Slack Official korotovsky/slack-mcp Ours
Thread replies (read)
DMs / Group DMs
Canvases (create/read/update)
Create channel
List channel members
Custom emoji list
Send messages + threads
Reactions
Search
File upload + reading
Draft/scheduled messages
Bookmarks
Pagination (cursor)
OAuth/user tokens ✅ (cookie) Bot token
Registry governance
Risk classification
HealthCheck trait
Rust / single binary ❌ (Node) ❌ (Node)

Installation

Build from source

git clone https://github.com/zavora-ai/mcp-slack
cd mcp-slack
cargo build --release

From crates.io

cargo install mcp-slack

Configuration

Environment Variables

Variable Required Description
SLACK_BOT_TOKEN Bot User OAuth Token (xoxb-...)
SLACK_TOKEN Alternative Alias for SLACK_BOT_TOKEN
RUST_LOG Log level (default: info)

Required Bot Token Scopes

channels:read        — list channels
channels:history     — read messages
channels:manage      — set topic
groups:read          — private channels
groups:history       — private channel messages
chat:write           — send messages
reactions:write      — add reactions
search:read          — search messages
users:read           — list/get users
files:write          — upload files
channels:join        — self-join channels (optional)

Slack App Manifest

display_information:
  name: MCP Slack Bot
  description: AI agent access to Slack via MCP protocol
features:
  bot_user:
    display_name: MCP Bot
    always_online: true
oauth_config:
  scopes:
    bot:
      - channels:read
      - channels:history
      - channels:manage
      - groups:read
      - groups:history
      - chat:write
      - reactions:write
      - search:read
      - users:read
      - files:write
settings:
  org_deploy_enabled: false
  socket_mode_enabled: false
  token_rotation_enabled: false

Client Configuration

Claude Desktop

{
  "mcpServers": {
    "slack": {
      "command": "mcp-slack",
      "args": [],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-token"
      }
    }
  }
}

Kiro

Add to .kiro/settings/mcp.json:

{
  "mcpServers": {
    "slack": {
      "command": "mcp-slack",
      "args": [],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-token"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "slack": {
      "command": "mcp-slack",
      "args": [],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-token"
      }
    }
  }
}

Codex (OpenAI)

{
  "mcpServers": {
    "slack": {
      "command": "mcp-slack"
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "slack": {
      "command": "mcp-slack",
      "args": [],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-your-token"
      }
    }
  }
}

Quick Start

# Set token
export SLACK_BOT_TOKEN="xoxb-your-token"

# Verify token works
curl -s -H "Authorization: Bearer $SLACK_BOT_TOKEN" https://slack.com/api/auth.test

# Run server
mcp-slack

Test with MCP Inspector

npx @modelcontextprotocol/inspector mcp-slack

Usage Examples

List channels

"List my Slack channels"
→ calls list_channels

Read a thread

"What did the team say in the thread about the deployment?"
→ calls search_messages → get_thread

Send a message

"Post in #engineering: the release is ready for QA"
→ calls send_message with channel + text

Reply in a thread

"Reply to that message saying I'll review it"
→ calls send_message with thread_ts

Open a DM

"Send a DM to James asking about the PR"
→ calls open_dm → send_message

Create a channel

"Create a private channel called project-alpha"
→ calls create_channel with is_private=true

MCP Server Manifest

server_id = "mcp_slack"
display_name = "Slack"
version = "1.3.0"
domain = "collaboration"
risk_level = "medium"
writes_allowed = "gated"
transports = ["stdio"]
credentials = ["vault://slack-bot-token"]

Testing

# Build
cargo build

# Run tests
cargo test

# Integration test (requires SLACK_BOT_TOKEN)
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_channels","arguments":{"limit":5}}}' | cargo run

Roadmap

  • OAuth user token support (for user-level access beyond bot)
  • Workflow triggers (workflows.triggers.create)
  • Pin messages (pins.add, pins.list)
  • User presence/status (users.setPresence, users.profile.set)

Registry Compliance

This server implements the ADK MCP SDK contract:

  • HealthCheck — async health probe for registry monitoring
  • mcp-server.toml — manifest declaring tools, risk classes, and credentials
  • Structured tracingRUST_LOG env-filter for observability

Contributors


James Karanja Maina

License

Apache-2.0 — see LICENSE for details.


Part of the ADK-Rust Enterprise MCP server ecosystem.

Built with ❤️ by Zavora AI

rmcp and MCP compatibility

This server is built with rmcp 3.1.2 and requires Rust 1.94.1 or newer. The rmcp 3 rollout retains legacy MCP initialization compatibility and targets MCP protocol revisions 2025-11-25 and 2026-07-28.

MCP 2026-07-28 rollout (P4 workflow/business)

This server uses rmcp 3.1.2 and adk-mcp-sdk 0.2 with a minimum supported Rust version of 1.94.1. It accepts stateless MCP 2026 requests with per-request protocol, client identity, and capability metadata while retaining the legacy MCP 2025-11-25 initialize flow for ordinary tools.

  • Tasks: upload_file
  • MRTR approvals: send_message, upload_file
  • Discovery and routing: rmcp serves on-demand discovery and validates the per-request protocol envelope; HTTP deployments can route with Mcp-Method and Mcp-Name. The packaged binary currently uses stdio.
  • Caching: tools/list returns a public ttlMs of 60,000 for MCP 2026; rmcp omits the cache fields for legacy clients.
  • Deprecated extensions: this server does not add new Roots, Sampling, or dynamic client-registration dependencies.

Protected tools require MCP_REQUEST_STATE_KEY with at least 32 high-entropy bytes. All replicas must share that key so sealed approval state can resume on another instance. Approval state is bound to the client identity, tool, and arguments and expires after two minutes. Missing identity, invalid state, rejection, or legacy protocol use fails closed. Task records are process-local for the current stdio runtime; use a durable task store before deploying the server behind scale-to-zero HTTP infrastructure.

About

Slack MCP Server — send messages, manage channels, search, react, upload files, and manage users via Slack Web API, tailored for ADK-Rust Enterprise.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages