Slack MCP Server — send messages, manage channels, search, react, upload files, and manage users via Slack Web API, tailored for ADK-Rust Enterprise.
Slack MCP Server
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
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.1.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 tracing —
RUST_LOGenv-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