Slack MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Slack MCP Server search for recent mentions of JIRA-123 in public channels"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Slack MCP Server
Search and read public-channel Slack discussions about Jira tickets and PRs, and send/reply to messages only after an explicit two-step confirmation.
What it can and can't do
Reads public channels only. DMs, private channels, and group DMs are refused by a server-side guard — even though the user token could see them.
Search uses Slack's
search.messages, which requires a user token.Sending is two-step:
draft_messagereturns a preview + one-time token; nothing posts until you callsend_messagewith that token.
Related MCP server: Slack MCP Server
Slack app setup
Create an app at https://api.slack.com/apps.
Under OAuth & Permissions → User Token Scopes, add:
search:read,channels:history,channels:read,users:read,chat:write.Install the app to your workspace and copy the User OAuth Token (
xoxp-...).
Configuration
export SLACK_USER_TOKEN="xoxp-..." # required
export SLACK_DRAFT_TTL_SECONDS=300 # optional, default 300Run
uv sync
uv run slack-mcpMCP client config
{
"mcpServers": {
"slack": {
"command": "uv",
"args": ["run", "slack-mcp"],
"cwd": "/absolute/path/to/slack-mcp",
"env": { "SLACK_USER_TOKEN": "xoxp-..." }
}
}
}Tools
search_messages(query, count=20)— find messages in public channels.read_thread(channel, thread_ts)— full thread with resolved names.read_channel_history(channel, limit=30, around_ts=None)— recent/context.list_channels(name_filter=None)— public channels.resolve_users(user_ids)— ids → display names.draft_message(channel, text, thread_ts=None)— preview + token; does NOT send.send_message(confirmation_token)— sends the drafted message (only write path).
Available Tools
7 toolsdraft_messageA
Prepare a message for sending and return a preview + confirmation token.
THIS DOES NOT SEND ANYTHING. It validates the target is a public channel,
renders exactly what would be posted, and returns a one-time
confirmation_token. To actually post, the user must review this preview and
then call send_message(confirmation_token=...). Always show the user this
preview and get their explicit approval before calling send_message.
Args: channel: Channel id or "#name". Must be a public channel. text: The exact message text to post. thread_ts: Optional thread root timestamp to reply in a thread.
Inputs: text (required), channel (required), thread_ts. Returns: object
list_channelsARead-only
List PUBLIC channels, optionally filtered by a name substring.
Args: name_filter: Optional case-insensitive substring to match channel names.
Inputs: name_filter. Returns: object
read_channel_historyARead-only
Read recent messages from a PUBLIC channel, or messages around a timestamp.
Args: channel: Channel id or "#name". Must be a public channel. limit: Number of messages (1-100, default 30). around_ts: Optional message timestamp; returns messages up to and including it, for context around a specific point.
Inputs: channel (required), limit, around_ts. Returns: object
read_threadARead-only
Read a full thread (root message + all replies) from a PUBLIC channel.
Args:
channel: Channel id (e.g. "C0123") or "#name". Must be a public channel.
thread_ts: The thread's root timestamp (the ts of the first message).
Inputs: channel (required), thread_ts (required). Returns: object
resolve_usersARead-only
Resolve Slack user ids (e.g. "U0123") to display names.
Args: user_ids: List of Slack user ids to resolve.
Inputs: user_ids (required). Returns: object
search_messagesARead-only
Search Slack messages in PUBLIC channels only.
Use this to find discussions about a Jira ticket or PR by passing the ticket key (e.g. "DSE-1234"), a PR URL, or free-text keywords as the query. Results from DMs and private channels are never returned.
Args: query: Search text — a ticket key, PR URL, or keywords. count: Max results (1-100, default 20).
Inputs: query (required), count. Returns: object
send_messageA
Send a previously drafted message. Requires a valid confirmation_token from draft_message. This is the ONLY tool that posts to Slack.
Only call this after the user has reviewed the draft_message preview and explicitly approved sending.
Args: confirmation_token: The one-time token returned by draft_message.
Inputs: confirmation_token (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: searching, reading threads, reading channel history, listing channels, resolving users, drafting, and sending. The only potential overlap between read_thread and read_channel_history is clarified by their specific scopes (thread vs channel).
All tool names follow the verb_noun pattern with snake_case (search_messages, read_thread, read_channel_history, list_channels, resolve_users, draft_message, send_message). No mixed conventions or vague verbs.
7 tools is well-scoped for a Slack server covering search, read, list, resolve, and send operations. Each tool earns its place without redundancy or bloat.
The toolset covers the core lifecycle for public channel messaging: searching, reading history, reading threads, listing channels, resolving users, and sending with a safe draft/approve flow. No obvious dead ends for common use cases.
Maintenance
Related MCP Connectors
Enable interaction with Slack workspaces. Supports subscribing to Slack events through Resources.
Use Slack from chat: see channels, catch up on messages, post updates, and reply in threads in your…
Human-authenticated setup for routing GitHub pull requests into the right Slack channel.
Catch up on Slack without reading it. Unreads, threads, search. Browser-session or hosted OAuth.
Related MCP Servers
- FlicenseAqualityBmaintenanceEnables interaction with Slack channels including checking Xcode Cloud build status, reading and searching messages, sending messages, and listing channels.51-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read messages, threads, channel info, user profiles, search conversations, and generate permalinks in Slack workspaces.21 PyPI1MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Slack workspaces, including listing channels, posting messages, replying to threads, adding reactions, and retrieving user information.1024 npmMIT
- AlicenseAqualityBmaintenanceEnables Slack integration with tools to list channels, read messages, and post messages using a bot token.31MIT