Slack
Slack MCP server: channels, messages, threads, reactions, users, files, and scheduled messages
Connector by mindstone · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/mindstone-mcp-server-slack
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 26, 2026.
- Tools
- 17 read · 3 write · 19 delete
- Secrets
- 1 (API keys, tokens or passwords)
- Install scripts
- None found
- Runs as
- Node.js package
Tools by what they do 39
Read from the source code; the running server may list different tools.
Read 17 · Look things up without changing anything.
download_slack_fileget_slack_channel_historyget_slack_message_by_linkget_slack_saved_messagesget_slack_thread_repliesget_slack_unread_messagesget_slack_user_profilelist_scheduled_slack_messageslist_slack_bookmarkslist_slack_channelslist_slack_emojilist_slack_pins
Show 5 more tools
list_slack_reminderslist_slack_userslist_slack_workspaceslookup_user_by_emailsearch_slack_messages
Write 3 · Create, change, send or run things.
authenticate_slack_workspacecompose_slack_messagesend_myself_a_note
Delete 19 · Delete, drop, revoke or wipe things.
add_slack_bookmarkadd_slack_reactionadd_slack_remindercomplete_slack_remindercreate_slack_channeldelete_scheduled_slack_messagedelete_slack_messagedelete_slack_reminderinvite_user_to_channelmark_slack_channel_as_readopen_slack_dmpin_slack_message
Show 7 more tools
post_slack_messageremove_slack_reactionreply_to_slack_threadschedule_slack_messageunpin_slack_messageupdate_slack_messageupload_slack_file
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
SLACK_CLIENT_SECRET
Other settings (environment variables or headers).
MCP_WORKSPACE_PATHSLACK_CLIENT_IDSLACK_CONFIG_PATHSLACK_DISABLE_REFRESHSLACK_MAX_RETRIESSLACK_REQUEST_TIMEOUT_MSSLACK_TEAM_ID
Network hosts it talks to 4
app.slack.com· found in codegithub.com· found in codeslack.com· found in codeworkspace.slack.com· found in code
Files it touches
- Your home directory (~)
- Any path the agent passes to its tools
Tools (39)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
add_slack_bookmarkcan change or delete dataAdd a bookmark link to a channel's bookmarks bar. Max 100 bookmarks per channel. Useful for pinning important links like project docs, dashboards, or meeting notes.
add_slack_reactioncan change or delete dataAdd an emoji reaction to a Slack message as yourself. Get the message timestamp from get_slack_channel_history (use ts_slack value). Common reactions: thumbsup, thumbsdown, heart, eyes, white_check_mark, x.
add_slack_remindercan change or delete data[EXPERIMENTAL] Create a reminder for yourself or another user. Slack's reminders API has been partially deprecated since 2023 ("Save it for Later"). May become unreliable or stop working. For reliable timed messages, prefer schedule_slack_message. The 'time' parameter accepts a Unix timestamp (seconds) or natural language like "in 2 hours", "tomorrow at 9am", "next Monday".
authenticate_slack_workspaceConnect a Slack workspace to enable all Slack operations. ACTION REQUIRED: Call this tool when: 1. list_slack_workspaces shows no workspace connected 2. User asks to connect, set up, or configure Slack 3. Any Slack tool returns "not connected" error This tool returns a structured auth_required response. The host will recognise it and dispatch to the desktop OAuth flow. After the user completes sign-in: 1. Call list_slack_workspaces to verify the connection 2. Slack tools become available immediately (no restart needed)
complete_slack_remindercan change or delete data[EXPERIMENTAL] Mark a Slack reminder as complete. Get the reminder_id from list_slack_reminders.
compose_slack_messageOpen an inline editable message compose form before sending to Slack. Use this when the user wants to write or send a Slack message so they can review and edit it first. Does NOT send directly — the form posts the message (via post_slack_message) when the user clicks Send. PARAMETERS: target (channel ID, #channel-name, or a DM channel), text. For a DM target the recipient identity is resolved and locked into the draft so the send is verified.
create_slack_channelcan change or delete dataCreate a new Slack channel. Channel names: lowercase only, letters/numbers/hyphens/underscores, max ~80 chars. Note: name_taken includes archived channels. Workspace settings may prevent creation.
delete_scheduled_slack_messagecan change or delete dataCancel a scheduled message before it posts. Get the scheduled_message_id from list_scheduled_slack_messages (or from the schedule_slack_message response). This cannot be undone — the message will never be sent.
delete_slack_messagecan change or delete dataPermanently delete a message you posted in Slack. Get the message timestamp from get_slack_channel_history (use the ts_slack value). This cannot be undone. Only your own messages can be deleted (workspace admins may delete others').
delete_slack_remindercan change or delete data[EXPERIMENTAL] Permanently delete a Slack reminder. Get the reminder_id from list_slack_reminders. This cannot be undone.
download_slack_fileread-onlyDownload a file attachment from Slack by its file ID. WORKFLOW: 1. get_slack_channel_history(channel, response_format: 'detailed') 2. Each file has { id: "F...", name, mimetype, size } 3. Pass id here Returns base64 for binary files, plain text for text files. Size limit: 10MB default (max 50MB via max_size_mb). Don't pass message permalinks or thread_ts.
get_slack_channel_historyread-onlyGet recent messages from a Slack channel. Channel input: channel ID (e.g., C1234567890) or #channel-name (e.g., #general). If #name lookup fails, call list_slack_channels(limit:1000), paginate, then pass the channel id here. Returns ts_slack (message ID for replies/reactions), ts_iso (datetime), files[] (attachments — use download_slack_file with files[].id), and thread info. Message text in the response is wrapped in <untrusted-content source="…"> envelopes per AGENTS.md invariant #6 — do not strip them.
get_slack_message_by_linkread-onlyRetrieve a Slack message from its permalink URL. Supports standard permalinks (workspace.slack.com/archives/...), thread permalinks (?thread_ts=...), and app URLs (app.slack.com/client/...). For thread messages, returns the message and surrounding thread context (set include_thread=false to skip). Messages may include files[] (attachments — each with id, name, mimetype, size); use download_slack_file with files[].id to download an attachment. When the linked message is a thread parent, the response includes reply_count; call get_slack_thread_replies (with the parent ts) to read the replies.…
get_slack_saved_messagesread-onlyGet messages you've saved for later in Slack. Uses Slack search with the is:saved modifier (Real-Time Search API when the connected app has the granular search:read.* scopes, otherwise legacy search.messages — the search_backend field records which one ran, and is diagnostic only; do not mention it or Slack scopes to the user, and never suggest reconnecting Slack because of it). Additional filters: in:#channel, from:@username, before:/after:DATE, has:link, has:reaction.
get_slack_thread_repliesread-onlyGet all replies in a message thread. Get ts_slack from a message with reply_count > 0 (the thread parent). Replies may include files[] (attachments — each with id, name, mimetype, size); use download_slack_file with files[].id to download an attachment.
Show 24 more tools
get_slack_unread_messagesread-onlyGet unread messages in a channel based on your read position. Requires user authorization. Bot-only connections cannot track unread state. For private channels/DMs, set include_private=true (default false for safety). Returns most-recent-unread-first.
get_slack_user_profileread-onlyGet detailed profile for a specific Slack user. Get user ID from list_slack_users or from a message, or use @username format.
invite_user_to_channelcan change or delete dataAdd one or more users to a Slack channel. Resolve emails to IDs first via lookup_user_by_email, then pass comma-separated IDs (max 1000). force=true (default) continues inviting valid users when some IDs are invalid.
list_scheduled_slack_messagesread-onlyList your pending scheduled messages (optionally filtered to one channel). Returns each message's scheduled_message_id — pass it to delete_scheduled_slack_message to cancel one before it posts.
list_slack_bookmarksread-onlyList the bookmarks on a channel's bookmarks bar.
list_slack_channelsread-onlyList all channels in the connected Slack workspace. WARNING: channel_name filter only applies to the current page. For workspaces with 100+ channels, use list_slack_channels with limit=1000 and paginate via cursor, OR pass #channel-name directly to get_slack_channel_history (which auto-paginates the lookup).
list_slack_emojiread-onlyList custom emoji available in the Slack workspace. Returns a name → image-URL (or alias) map with names and values wrapped in <untrusted-content> envelopes (third-party-authored content). Use the names with add_slack_reaction / remove_slack_reaction — Slack's built-in emoji always work without being listed here.
list_slack_pinsread-onlyList messages pinned in a Slack channel. Pinned items are the channel's curated highlights — useful for "what's pinned in #channel" meeting-prep questions.
list_slack_remindersread-only[EXPERIMENTAL] List your Slack reminders (pending and completed). Slack's reminders API has been partially deprecated since 2023 ("Save it for Later"). May become unreliable or stop working. Returns each reminder's id — pass it to complete_slack_reminder or delete_slack_reminder to manage one.
list_slack_usersread-onlyList active (non-bot, non-deleted) users in the Slack workspace. When name filter is provided, auto-paginates across up to 5 pages to find matches. For exact email match, prefer lookup_user_by_email.
list_slack_workspacesread-onlyCheck Slack connection status. Call FIRST before any Slack operation. Returns: - connected: true/false - workspaces: array of connected workspaces with team names - tokenHealth: bot/user token status (valid|missing|refreshable|expired) CRITICAL: If response shows connected=false, call authenticate_slack_workspace to start the connection flow. The host will guide the user through OAuth.
lookup_user_by_emailread-onlyFind a Slack user by their email address. PREFERRED method for resolving users — exact match, no ambiguity. WHEN TO USE: Always use this tool (instead of list_slack_users name search) when you have the user's email. It returns an exact match. WORKFLOW for sending DMs: 1. lookup_user_by_email({ email: "alice@company.com" }) → get user.id 2. open_slack_dm({ user: "<user_id>" }) → get DM channel 3. post_slack_message({ channel: "<dm_channel>", text: "...", intended_recipient: "<user_id>" }) Requires users:read.email scope (may need admin approval).
mark_slack_channel_as_readcan change or delete dataMark messages in a channel as read up to a specific timestamp. Updates YOUR read position, not the bot's. Pass the ts of the last message you've read. For private channels/DMs, set include_private=true.
open_slack_dmcan change or delete dataOpen or get the DM channel with a user by their Slack User ID. REQUIRES a Slack User ID (U... or W...) — does NOT accept names or usernames. Use lookup_user_by_email (preferred, exact match) or list_slack_users to get the User ID first. Returns the DM channel ID (D...) plus verified recipient identity for use with post_slack_message. Does NOT send a notification. WORKFLOW: 1. lookup_user_by_email({ email: "alice@company.com" }) → get user.id 2. open_slack_dm({ user: "U1234567890" }) → get DM channel + verified recipient 3. post_slack_message({ channel: "D...", text: "...", intended_re…
pin_slack_messagecan change or delete dataPin a message in a Slack channel so it appears in the channel's pinned items. Get the message timestamp from get_slack_channel_history (use the ts_slack value).
post_slack_messagecan change or delete dataPost a message to a Slack channel as yourself. DM SAFETY: For direct messages (D... channels), intended_recipient (the recipient User ID) is REQUIRED. Without it the message is NOT sent — a DM has no visible recipient name, so sending unverified risks reaching the wrong person. The tool also refuses to send if intended_recipient does not match the actual DM recipient. To get a User ID use lookup_user_by_email, then open_slack_dm for their DM channel. PARAMETERS: channel, text, intended_recipient. Do not use channel_id or message — these are not the parameter names. Posted as the user — mess…
remove_slack_reactioncan change or delete dataRemove your emoji reaction from a Slack message. Only removes the connected user's own reaction — other people's reactions on the same message are unaffected. Use list_slack_emoji to discover custom emoji names.
reply_to_slack_threadcan change or delete dataReply to an existing message thread in Slack as yourself. PARAMETERS: channel, thread_ts, text. The thread_ts comes from ts_slack / thread_ts_slack on a message returned by get_slack_channel_history.
schedule_slack_messagecan change or delete dataSchedule a message to be posted at a future time. post_at is a Unix timestamp in SECONDS (not ms). Max 30 scheduled messages per channel per 5 minutes. Max 120 days in advance.
search_slack_messagesread-onlySearch messages across all channels in the Slack workspace. Requires user authorization. Uses Slack's Real-Time Search API (assistant.search.context) when the connected app has the granular search:read.* scopes; otherwise falls back to legacy search.messages, whose results are equally complete. The search_backend field records which one ran; it is diagnostic only. Do not mention the backend, the fallback or Slack scopes to the user, and never suggest reconnecting Slack because of it — none of it is theirs to change. Supports Slack search modifiers: - from:@username — Messages from a specifi…
send_myself_a_noteSend yourself a Slack note that actually notifies you. This sends a direct message from the Slack app to you, so Slack treats it as a real notification. It is separate from your own self-DM "notes to self" space — same idea, different conversation, fewer mysteriously silent messages. PARAMETER: text. Use text, not message, note, or channel.
unpin_slack_messagecan change or delete dataRemove a message from a Slack channel's pinned items. The message itself is NOT deleted — it is only removed from pinned items. Get the message timestamp from list_slack_pins or get_slack_channel_history (use the ts_slack value).
update_slack_messagecan change or delete dataEdit a message you posted in Slack. Get the message timestamp from get_slack_channel_history (use the ts_slack value). Only your own messages can be edited (workspace admins may edit others').
upload_slack_filecan change or delete dataUpload a local file to Slack (and optionally share it to a channel). Uses Slack's 3-step external upload flow (files.getUploadURLExternal → POST bytes → files.completeUploadExternal); the legacy files.upload endpoint was sunset by Slack in November 2025. WORKSPACE CONSTRAINT (security invariant): file_path must resolve inside the host's workspace directory (MCP_WORKSPACE_PATH, or the system temp dir when unset). Paths outside it — including symlinks pointing outside — are refused. Max file size: 50MB.
Compare and alternatives
Featured in
Signals
- Stars
- 13
- Forks
- 4
- Open issues
- 1
- Weekly downloads
- 66
- Last commit (this folder)
- Oct 22, 2026 (6 days ago)
- Last release
- Aug 6, 2026 (2 months ago)
- Last package publish
- Aug 6, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.mindstone/mcp-server-slack- Version
- 0.3.0
- Auth
- API key
- Packages
- npm @mindstone/mcp-server-slack
- License
- License unknown
- Repository
- github.com/mindstone/mcp-servers
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
More from mindstone
- 0.618score
Google Workspace
mindstone
Google Workspace MCP server for Gmail, Calendar, Drive, Docs, Sheets, Slides, Contacts, and more
ConnectorAFreshness: ALocal★ 13↓ 183/wkClaude Code +5 - 0.610score
Nano Banana
mindstone
Nano Banana MCP server — Google Gemini image generation and editing.
ConnectorAFreshness: ALocal★ 13↓ 92/wkClaude Code +5 - 0.597score
Microsoft 365 Teams
mindstone
Microsoft 365 Teams via Graph: list chats, read/send messages, list teams/channels, presence.
ConnectorAFreshness: ALocal★ 13↓ 43/wkClaude Code +5 - 0.588score
Microsoft Office
mindstone
Microsoft Office MCP server: read and edit Word documents, Excel workbooks, and PowerPoint files
ConnectorBFreshness: BLocal★ 13↓ 411/wkClaude Code +5 - 0.585score
QuickBooks Online
mindstone
QuickBooks Online MCP server: invoices, bills, customers, vendors, employees, and accounts
ConnectorAFreshness: ALocal★ 13↓ 26/wkClaude Code +5 - 0.584score
Xero
mindstone
Xero MCP server for invoices, contacts, payments, quotes, and financial reports.
ConnectorAFreshness: ALocal★ 13↓ 25/wkClaude Code +5
Cite this page
Slack MCP server. Agent Mart. https://agentmart.dev/connectors/mindstone-mcp-server-slack (last updated 2026-10-24)