Slackxmcp
TypeScript stdio MCP server and CLI for Slack Socket Mode apps.
Ask AI about Slackxmcp
Powered by Claude · Grounded in docs
I know everything about Slackxmcp. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
slackxmcp
slackxmcp is an open-source Slack stdio MCP server built on top of the official @slack/bolt, @slack/web-api, commander, and @modelcontextprotocol/sdk.
It lets MCP-compatible clients interact with Slack through Web API tools and optionally subscribe to inbound Slack messages through a Socket Mode powered MCP notification channel.
Highlights
- Exposes Slack as an MCP server over stdio.
- Uses Slack Bolt Socket Mode for inbound event delivery.
- Uses the official Slack Web API client for reads and writes.
- Supports interactive configuration via
slackxmcp configure. - Provides tools for identity, status, conversation lookups, history, thread replies, and common message mutations.
- Can emit incoming Slack message events over an optional MCP notification channel.
Requirements
- Node.js
24+ - A Slack app with Socket Mode enabled
Slack App Setup
At minimum, configure:
- Socket Mode enabled with an app token that has
connections:write - Token scopes for whichever Slack token you use:
channels:readgroups:readim:readmpim:readchannels:historygroups:historyim:historympim:historychat:writereactions:writeusers:read
- Event subscriptions for the message surfaces you care about, such as:
message.channelsmessage.groupsmessage.immessage.mpim
Depending on your workspace policy and the conversations you target, Slack may require additional scopes.
If you want to use slack_search_messages, you will typically also need a user token with search:read because Slack does not expose message search through bot tokens.
Installation
Use it without installing globally:
npx slackxmcp mcp
Or for local development:
npm install
npm run build
npm run dev -- mcp
Quick Start
- Run the interactive configuration:
slackxmcp configure
This writes:
~/.slackxmcp/config.json
- Start the MCP server:
npx slackxmcp mcp
- If your MCP host supports notifications and you want inbound Slack events, enable channels:
npx slackxmcp mcp --channels
The server uses stdio, so it is meant to be launched by an MCP client or wrapper rather than browsed directly in a terminal.
CLI Usage
MCP Server
npx slackxmcp mcp
Starts the stdio MCP server for the configured Slack app.
Configure
npx slackxmcp configure
Then opens an interactive configure UI (Ink) to manage:
App tokenBot tokenUser tokenAllowed usersAllowed channels
Allowlist items are toggled from menu screens (select an entry to toggle it, then choose Back).
Allowed users/channels screens support live type-to-filter search with a 5-row scroll viewport for faster selection in large workspaces.
Everything is persisted to:
~/.slackxmcp/config.json
MCP Tools
The server currently exposes these tools:
slack_get_meslack_get_statusslack_get_channelslack_get_channel_membersslack_list_channelsslack_list_usersslack_search_messagesslack_get_channel_historyslack_get_thread_repliesslack_send_messageslack_send_filesslack_reply_to_messageslack_react_to_messageslack_edit_messageslack_delete_message
Push Channel
When started with --channels, the server:
- advertises the experimental MCP capability
hooman/channel - advertises
hooman/userwith pathmeta.user - advertises
hooman/sessionwith pathmeta.session - advertises
hooman/threadwith pathmeta.thread - advertises
hooman/channel/permissionfor remote daemon approvals - emits
notifications/hooman/channelfor inbound Slack message events
If allowlist entries are configured, notifications/hooman/channel events are emitted only when either:
meta.session(conversation ID) is inallowlist.channels, ormeta.user(sender user ID) is inallowlist.users
When no allowlist is configured (or both arrays are empty), all inbound channel events are emitted.
Each notification includes:
content: a JSON-encoded event payloadmeta.source: alwaysslackmeta.user: the Slack sender ID when availablemeta.session: the Slack conversation IDmeta.thread: the Slack thread timestamp, or the message timestamp for non-threaded messages
The JSON-decoded content payload includes:
sourceselfmessagetext
Inbound notification messages ignore Slack bot/system message subtypes.
When Hooman sends notifications/hooman/channel/permission_request, slackxmcp posts the request back into the originating Slack conversation/thread with Block Kit action buttons derived from params.options (defaults: allow once, always allow, deny). Tapping a button is relayed back over notifications/hooman/channel/permission. There is no text-command approval path; the Slack app must have Interactivity enabled so Bolt can receive block_actions over Socket Mode.
License
See LICENSE file.
