Your entire Slack workspace, accessible through AI.
A Model Context Protocol (MCP) server that exposes Slack's API for messaging, channel management, user discovery, and workspace administration.
Overview
The Slack MCP Server provides comprehensive access to your Slack workspace:
Send, read, edit, delete, and search messages across channels and threads
Manage channels — create, archive, invite users, and browse the workspace roster
Search files, find users, extract threads, and inspect workspace metadata
Perfect for:
AI assistants that need to send or read Slack messages on your behalf
Automating channel management, notifications, and team coordination
Building tools that integrate Slack with other services and workflows
Tools
Messaging
Posts a message to a Slack channel or direct message, with optional rich formatting via Block Kit.
Inputs:
- `channel` (string, required) — Channel ID or name (e.g., #general or C123ABC456)- `text` (string, optional) — Plain text message (up to 4000 characters)- `blocks` (list, optional) — Slack Block Kit JSON for rich formatting- `thread_ts` (string, optional) — Parent message timestamp to reply in a thread- `reply_broadcast` (bool, optional) — Also broadcast the reply to the channel (default: false)
Searches all messages across the workspace using a query string, with sorting options.
Inputs:
- `query` (string, required) — Search query string- `sort` (string, optional) — Sort by: score or timestamp (default: score)- `sort_dir` (string, optional) — Sort direction: asc or desc (default: desc)- `count` (int, optional) — Number of results to return (default: 20)
output:
{ "ok": true, "messages": { "total":
Posts a reply to a specific thread, with the option to broadcast it to the channel.
Inputs:
- `channel` (string, required) — Channel ID- `thread_ts` (string, required) — Timestamp of the parent message to reply to- `text` (string, optional) — Reply text content- `blocks` (list, optional) — Block Kit JSON for rich formatting- `broadcast` (bool, optional) — Broadcast the reply to the channel (default: false)
output:
{ "ok": true, "ts":
Channel Management
Returns a paginated list of channels with optional type and archived filtering.
Inputs:
- `exclude_archived` (bool, optional) — Skip archived channels (default: true)- `limit` (int, optional) — Channels per page (1–100, default: 20)- `cursor` (string, optional) — Pagination cursor from response_metadata.next_cursor- `types` (string, optional) — Comma-separated channel types: public_channel, private_channel, mpim, im (default: public_channel)- `team_id` (string, optional) — Team ID for org-wide apps only
output:
Creates a new public or private Slack channel.
Inputs:
- `name` (string, required) — Channel name (lowercase, no spaces or special characters)- `is_private` (bool, optional) — Create as a private channel (default: false)- `description` (string, optional) — Channel description
output:
{ "ok": true, "channel": { "id": "C456", "name":
Archives or unarchives a Slack channel.
Inputs:
- `channel` (string, required) — Channel ID- `archive` (bool, optional) — true to archive, false to unarchive (default: true)
output:
{ "ok": true}
Returns metadata for a specific channel including member count and settings.
the ts field from any message response can be used to reply, update, delete, or identify a message. The thread_ts is the ts of the first message in a thread.
List tools that return large result sets support cursor-based pagination:
cursor — Pass the next_cursor value from response_metadata in the previous response
limit — Number of results per page (max: 100)
Omit cursor to start from the beginning.
The blocks parameter accepts Slack Block Kit JSON for rich message formatting:
[ { "type": "section", "text": { "type": "mrkdwn", "text": "*Hello!* This is bold." } }]