@mintmcp/slack-mcp-server
v0.1.1
Published
MCP server for interacting with Slack, with file upload and download tools
Readme
@mintmcp/slack-mcp-server
MCP Server for the Slack API, enabling LLM agents (Claude Desktop, Claude Code, Cursor, VS Code, etc.) to interact with Slack workspaces.
Tools
slack_list_channels- List public or pre-defined channels in the workspace
- Optional inputs:
limit(number, default: 100, max: 200): Maximum number of channels to returncursor(string): Pagination cursor for next page
- Returns: List of channels with their IDs and information
slack_post_message- Post a new message to a Slack channel
- Required inputs:
channel_id(string): The ID of the channel to post totext(string): The message text to post
- Returns: Message posting confirmation and timestamp
slack_reply_to_thread- Reply to a specific message thread
- Required inputs:
channel_id(string): The channel containing the threadthread_ts(string): Timestamp of the parent messagetext(string): The reply text
- Returns: Reply confirmation and timestamp
slack_add_reaction- Add an emoji reaction to a message
- Required inputs:
channel_id(string): The channel containing the messagetimestamp(string): Message timestamp to react toreaction(string): Emoji name without colons
- Returns: Reaction confirmation
slack_get_channel_history- Get recent messages from a channel
- Required inputs:
channel_id(string): The channel ID
- Optional inputs:
limit(number, default: 10, max: 1000): Number of messages to retrieve
- Returns: List of messages with their content and metadata
slack_get_thread_replies- Get all replies in a message thread
- Required inputs:
channel_id(string): The channel containing the threadthread_ts(string): Timestamp of the parent message
- Returns: List of replies with their content and metadata
slack_get_users- Get list of workspace users with basic profile information
- Optional inputs:
cursor(string): Pagination cursor for next pagelimit(number, default: 100, max: 200): Maximum users to return
- Returns: List of users with their basic profiles
slack_get_user_profile- Get detailed profile information for a specific user
- Required inputs:
user_id(string): The user's ID
- Returns: Detailed user profile information
slack_upload_file- Upload a local file to Slack using Slack's external-upload flow (the modern replacement for the deprecated
files.upload) - Required inputs:
file_path(string): Absolute path to a local file on the machine running the MCP server. The calling agent is expected to have placed the file there (e.g. via Bash/Filesystem tools).
- Optional inputs:
channel_id(string): Share the uploaded file to this channel. Omit to upload without sharing.filename(string): Filename to present in Slack (defaults to the basename offile_path)title(string): Title for the file in Slackinitial_comment(string): Message to post alongside the file when shared to a channelthread_ts(string): Share the file into an existing thread
- Returns:
{ ok, file_id, files, uploaded_bytes }
- Upload a local file to Slack using Slack's external-upload flow (the modern replacement for the deprecated
slack_download_file- Download a Slack-hosted file by its file ID and write it to a local path
- Required inputs:
file_id(string): The Slack file ID (starts withF)output_path(string): Absolute local path to write the downloaded bytes to
- Returns:
{ ok, file_id, output_path, bytes_written, name, mimetype }
Setup
Create a Slack App:
- Visit the Slack Apps page
- Click "Create New App" → "From scratch"
- Name your app and select your workspace
Configure Bot Token Scopes: Navigate to "OAuth & Permissions" and add these scopes:
channels:history— View messages and other content in public channelschannels:read— View basic channel informationchat:write— Send messages as the appreactions:write— Add emoji reactions to messagesusers:read— View users and their basic informationusers.profile:read— View detailed profiles about usersfiles:read— Read file metadata and download bytes (forslack_download_file)files:write— Upload files (forslack_upload_file)
Install the app to your workspace and save the "Bot User OAuth Token" that starts with
xoxb-.Get your Team ID (starts with a
T) — see Slack's docs.Invite the bot to any private channels it needs to access (
/invite @your-bot).
Usage with Claude Desktop / Claude Code
Add to your claude_desktop_config.json (or equivalent MCP config):
NPX
{
"mcpServers": {
"slack": {
"command": "npx",
"args": ["-y", "@mintmcp/slack-mcp-server"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-bot-token",
"SLACK_TEAM_ID": "T01234567",
"SLACK_CHANNEL_IDS": "C01234567,C76543210"
}
}
}
}Docker
{
"mcpServers": {
"slack": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "SLACK_BOT_TOKEN",
"-e", "SLACK_TEAM_ID",
"-e", "SLACK_CHANNEL_IDS",
"mintmcp/slack-mcp-server"
],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-bot-token",
"SLACK_TEAM_ID": "T01234567",
"SLACK_CHANNEL_IDS": "C01234567,C76543210"
}
}
}
}Environment Variables
SLACK_BOT_TOKEN— Required. The Bot User OAuth Token starting withxoxb-.SLACK_TEAM_ID— Required. Your Slack workspace ID starting withT.SLACK_CHANNEL_IDS— Optional. Comma-separated list of channel IDs to limitslack_list_channelsto (e.g."C01234567,C76543210"). If not set, all public channels are listed.
File upload/download notes
slack_upload_filereads the file from the local filesystem of the MCP server process. The expectation is that the calling agent has shell/filesystem access and has already written the bytes to a path the server can read (e.g./tmp/something.png). The server does not accept inline base64 data.slack_download_filewrites to the local filesystem of the MCP server process. Make sureoutput_pathpoints to a directory the process can write to.- Both tools stream bytes to/from disk rather than buffering, so they handle large files without OOM.
- Slack's external-upload flow first reserves a URL via
files.getUploadURLExternal(POST), uploads the raw bytes to the returnedupload_urlasapplication/octet-stream, then finalizes viafiles.completeUploadExternal. All three calls are issued automatically; the tool surfaces any failure as anisErrorresult. - Trust model: any caller of these tools can read or write any file the MCP server process can access. The server is intended for local stdio use where the calling agent already has filesystem access via its own tools (Bash, Filesystem, etc.), so a path allowlist here would not raise the security floor. Do not expose this server over a network without adding your own path-restriction layer.
Troubleshooting
If you encounter permission errors, verify that:
- All required scopes are added to your Slack app
- The app is properly installed (and re-installed after adding new scopes)
- The bot token and workspace ID are correctly set in env
- The bot has been added to the channels it needs to access
Build
npm install
npm run buildDocker:
docker build -t mintmcp/slack-mcp-server .License
MIT — see LICENSE.
