Skip to content
Agentmart
Submit a tool

Slack

Slack MCP server: channels, messages, threads, reactions, users, files, and scheduled messages

Connector by mindstone · GitHub account verified by the MCP Registry

IndexedLicense unknownLocal (stdio)★ 13
Write a review

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.

We use your email only for this newsletter. Privacy

About

Slack MCP server: channels, messages, threads, reactions, users, files, and scheduled messages

No 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_file
  • get_slack_channel_history
  • get_slack_message_by_link
  • get_slack_saved_messages
  • get_slack_thread_replies
  • get_slack_unread_messages
  • get_slack_user_profile
  • list_scheduled_slack_messages
  • list_slack_bookmarks
  • list_slack_channels
  • list_slack_emoji
  • list_slack_pins
Show 5 more tools
  • list_slack_reminders
  • list_slack_users
  • list_slack_workspaces
  • lookup_user_by_email
  • search_slack_messages

Write 3 · Create, change, send or run things.

  • authenticate_slack_workspace
  • compose_slack_message
  • send_myself_a_note

Delete 19 · Delete, drop, revoke or wipe things.

  • add_slack_bookmark
  • add_slack_reaction
  • add_slack_reminder
  • complete_slack_reminder
  • create_slack_channel
  • delete_scheduled_slack_message
  • delete_slack_message
  • delete_slack_reminder
  • invite_user_to_channel
  • mark_slack_channel_as_read
  • open_slack_dm
  • pin_slack_message
Show 7 more tools
  • post_slack_message
  • remove_slack_reaction
  • reply_to_slack_thread
  • schedule_slack_message
  • unpin_slack_message
  • update_slack_message
  • upload_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_PATH
  • SLACK_CLIENT_ID
  • SLACK_CONFIG_PATH
  • SLACK_DISABLE_REFRESH
  • SLACK_MAX_RETRIES
  • SLACK_REQUEST_TIMEOUT_MS
  • SLACK_TEAM_ID

Network hosts it talks to 4

  • app.slack.com · found in code
  • github.com · found in code
  • slack.com · found in code
  • workspace.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 data

    Add 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 data

    Add 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_workspace

    Connect 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_message

    Open 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 data

    Create 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 data

    Cancel 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 data

    Permanently 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-only

    Download 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-only

    Get 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-only

    Retrieve 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-only

    Get 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-only

    Get 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-only

    Get 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-only

    Get 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 data

    Add 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-only

    List 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-only

    List the bookmarks on a channel's bookmarks bar.

  • list_slack_channelsread-only

    List 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-only

    List 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-only

    List 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-only

    List 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-only

    Check 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-only

    Find 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 data

    Mark 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 data

    Open 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 data

    Pin 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 data

    Post 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 data

    Remove 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 data

    Reply 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 data

    Schedule 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-only

    Search 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_note

    Send 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 data

    Remove 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 data

    Edit 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 data

    Upload 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
    License
    License unknown
    First seen
    Oct 24, 2026
    Last checked
    Oct 24, 2026

    More from mindstone

    Cite this page

    Slack MCP server. Agent Mart. https://agentmart.dev/connectors/mindstone-mcp-server-slack (last updated 2026-10-24)