@nlile/server-slack-advanced
v0.0.6
Published
Slack MCP server with private and public-channel support
Downloads
4
Readme
Slack MCP Server (Advanced)
MCP Server for the Slack API, enabling Claude to interact with Slack workspaces, including private channels.
Tools
slack_list_channels- List public, private (if bot is invited), 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
- Optional inputs (requires
chat:write.customizescope):username(string): Custom display name for this messageicon_url(string): URL to an image to use as the avataricon_emoji(string): Emoji code (like:robot_face:) to use as the avatar
- 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
- Optional inputs (requires
chat:write.customizescope):username(string): Custom display name for this messageicon_url(string): URL to an image to use as the avataricon_emoji(string): Emoji code (like:robot_face:) to use as the avatar
- 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): 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_edit_message- Edit an existing message posted by the bot
- Required inputs:
channel_id(string): The ID of the channel containing the messagets(string): Timestamp of the message to edittext(string): The new text for the message
- Optional inputs (requires
chat:write.customizescope):username(string): Custom display name for this messageicon_url(string): URL to an image to use as the avataricon_emoji(string): Emoji code (like:robot_face:) to use as the avatar
- Returns: Message update confirmation
Setup
Create a Slack App:
- Visit the Slack Apps page
- Click "Create New App"
- Choose "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 public channel informationgroups:read- View basic private channel information (needed forslack_list_channels)chat:write- Send messages as the appchat:write.customize- Send messages with a custom username and avatarreactions:write- Add emoji reactions to messagesusers:read- View users and their basic informationusers.profile:read- View user profile details (needed forslack_get_user_profile)
Install App to Workspace:
- Click "Install to Workspace" and authorize the app
- Save the "Bot User OAuth Token" that starts with
xoxb-
Get your Team ID (starts with a
T) by following this guidance
Usage with Claude Desktop
Add the following to your claude_desktop_config.json:
npx
{
"mcpServers": {
"slack": {
"command": "npx",
"args": [
"-y",
"@nlile/server-slack-advanced"
],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-bot-token",
"SLACK_TEAM_ID": "T01234567",
"SLACK_CHANNEL_IDS": "C01234567,G76543210"
}
}
}
}docker
{
"mcpServers": {
"slack": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"SLACK_BOT_TOKEN",
"-e",
"SLACK_TEAM_ID",
"-e",
"SLACK_CHANNEL_IDS",
"nlile/server-slack-advanced" // update image name if you build it
],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-bot-token",
"SLACK_TEAM_ID": "T01234567",
"SLACK_CHANNEL_IDS": "C01234567,G76543210" // can be public (C...) or private (G...)
}
}
}
}Environment Variables
SLACK_BOT_TOKEN: Required. The Bot User OAuth Token starting withxoxb-.SLACK_TEAM_ID: Required for listing all channels or users. Your Slack workspace ID starting withT.SLACK_CHANNEL_IDS: Optional. Comma-separated list of specific channel IDs (publicC...or privateG...) to limit access to. If set, only these channels will be visible/accessible via the tools. If not set,slack_list_channelswill list all public channels and private channels the bot has been invited to (requiresgroups:readscope). The bot must be explicitly invited to any private channels it needs to interact with, regardless of this setting.
Troubleshooting
If you encounter permission errors, verify that:
- All required scopes (including
groups:readfor private channels) are added to your Slack app. - The app is properly installed/reinstalled to your workspace after scope changes.
- The tokens and workspace ID are correctly copied to your configuration.
- The app has been added (
/invite @YourBotName) to the specific private channels it needs to access.
Build
Docker build:
# update tag as needed
docker build -t nlile/server-slack-advanced:latest -f src/slack/Dockerfile .Testing Locally
- Build the code:
npm run build --workspace src/slack - Pack the package:
cd src/slack && npm pack- This creates a
.tgzfile (e.g.,nlile-server-slack-advanced-0.0.3.tgz).
- This creates a
- Install globally (for testing): e.g.
npm install -g nlile-server-slack-advanced-0.0.{x}.tgz - Run the server:
export SLACK_BOT_TOKEN="your-token" export SLACK_TEAM_ID="your-team-id" mcp-server-slack-advanced - Test with an MCP client (like Claude Desktop or a script) to ensure it connects and tools work.
- Uninstall:
npm uninstall -g @nlile/server-slack-advanced
Publishing to NPM
- Ensure clean git status:
git status(commit or stash changes). - Login to npm:
npm login(if not already logged in). - Bump version:
cd src/slack && npm version patch(orminor/major). This updatespackage.jsonand creates a git commit/tag. - Push git changes:
git push && git push --tags - Publish:
cd src/slack && npm publish --access public(use--access publicfor scoped packages on the free tier).
License
This MCP server is licensed under the MIT License.
