Slack
NPM · @MINDSTONE/MCP-SERVER-SLACK · SCANNED AUG 5
Slack MCP server: channels, messages, threads, reactions, users, files, and scheduled messages
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →
Supply Chain Security87
- No malware found by supply-chain analysis.Pass
- Only part of the dependency tree could be resolved (123 of 124), so this covers what we could see, not the whole tree.Partial
- No install/post-install scripts declared.Pass
- Only part of the dependency tree could be resolved (123 of 124), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency84
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to mindstone/mcp-servers). View diagnostics → Pass
- License check failed: the license (FSL-1.1-MIT) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 5 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability41
- 0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Fail
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 3382 tokens (~130/item across 26 items; 25 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management30
- Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage85
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 56% of tool parameters carry a description.Partial
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
npm · @mindstone/mcp-server-slack
claude mcp add mindstone-mcp-server-slack -- npx -y @mindstone/mcp-server-slack
codex mcp add mindstone-mcp-server-slack -- npx -y @mindstone/mcp-server-slack
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mindstone-mcp-server-slack": {
"type": "local",
"command": [
"npx",
"-y",
"@mindstone/mcp-server-slack"
],
"enabled": true
}
}
} openclaw mcp add mindstone-mcp-server-slack --command npx --arg -y --arg @mindstone/mcp-server-slack
mcp_servers:
mindstone-mcp-server-slack:
command: "npx"
args: ["-y", "@mindstone/mcp-server-slack"] {
"mcpServers": {
"mindstone-mcp-server-slack": {
"command": "npx",
"args": [
"-y",
"@mindstone/mcp-server-slack"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Aug 26 +51
- Install scripts: unverified → pass ▲ security
- Provenance: unverified → pass ▲ security
- Known CVEs: unverified → partial ▲ security
- Malware scan: unverified → pass ▲ security
- The attested source repository moved: mindstone/mcp-servers security
- License: unverified → fail ▼ functional
- Dependency health: unverified → partial ▲ functional
- Stability: unverified → 0.20 ▲ functional
- Maintenance: unverified → pass ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Schema quality: unverified → good ▲ functional
- Licence: FSL-1.1-MIT functional
- 31 Jul 26 +11
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 −36
- Malware scan: pass → unverified ▼ security
- Tool coverage: 100 → unverified ▼ functional
- First check of Schema quality: unverified functional
- Package version: 0.1.6 → 0.2.0 functional
- 27 Jul 26 42
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Aug 2026 · Analysed npm/@mindstone/[email protected]
Provenance verified
Ecosystem: npm · Outcome: verified
Reason: verified
- Source repo:
- mindstone/mcp-servers
- Certificate issuer:
- https://token.actions.githubusercontent.com
- Certificate SAN:
- https://github.com/mindstone/mcp-servers/.github/workflows/release.yml@refs/heads/main
- Rekor log index:
- 2288643137
- Predicate type:
- https://slsa.dev/provenance/v1
- Subject digest:
- sha512:08692e884441b4275b352ad81a47714e58da72b96cb9bed58cfe2433cda155f0dfcf5e663cd9d9b38802f7defc0aa8317f39120761e10e7fd9e71821d
- Discovery method:
- attestation_endpoint
Dependencies 123 packages
123 packages in the resolved dependency tree · 122 deprecated · 37 stale.
The dependency tree was only partially resolved, so these counts may be incomplete.
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
add_slack_bookmark ~98
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | Channel — channel ID or #channel-name |
| emoji | string | — | Optional emoji for the bookmark (e.g., :link:) |
| link | string | yes | URL to bookmark |
| title | string | yes | Bookmark title |
No output schema declared.
No examples provided.
add_slack_reaction ~130
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | Channel — channel ID or #channel-name |
| name | string | yes | Emoji name without colons (e.g., thumbsup, heart, eyes) |
| timestamp | string | yes | Message timestamp to react to — input key is timestamp (not ts or thread_ts). Use ts_slack value from get_slack_channel_history. |
No output schema declared.
No examples provided.
add_slack_reminder ~155
[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".
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | Reminder text |
| time | string | yes | When to remind: Unix timestamp (seconds) or natural language ("in 2 hours", "tomorrow at 9am"). |
| user | string | — | User ID to remind (optional, defaults to yourself) |
No output schema declared.
No examples provided.
authenticate_slack_workspace ~129
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)
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
compose_slack_message ~159
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.
| Name | Type | Req | Description |
|---|---|---|---|
| target | string | yes | Where to send — channel ID (e.g., C1234567890), #channel-name (e.g., #general), or a DM channel (D…) |
| text | string | yes | Message text (supports Slack markdown) |
No output schema declared.
No examples provided.
create_slack_channel ~72
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.
| Name | Type | Req | Description |
|---|---|---|---|
| is_private | boolean | — | — |
| name | string | yes | Channel name (lowercase) |
No output schema declared.
No examples provided.
download_slack_file ~180
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.
| Name | Type | Req | Description |
|---|---|---|---|
| file_id | string | — | Slack file ID (e.g., "F0A8BFR53TP"). Get from get_slack_channel_history files[].id |
| file_url | string | — | Slack file permalink URL (alternative to file_id; auto-extracts F... ID) |
| max_size_mb | number | — | — |
No output schema declared.
No examples provided.
get_slack_channel_history ~176
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | Channel — channel ID or #channel-name |
| cursor | string | — | — |
| limit | integer | — | — |
| response_format | string | — | — |
No output schema declared.
No examples provided.
get_slack_message_by_link ~173
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. Prefers user token (broader read access to public channels).
| Name | Type | Req | Description |
|---|---|---|---|
| include_thread | boolean | — | — |
| url | string | yes | Slack message permalink URL |
No output schema declared.
No examples provided.
get_slack_saved_messages ~107
Get messages you've saved for later in Slack. Uses Slack search with is:saved modifier. Requires user token with search:read scope. Additional filters: in:#channel, from:@username, before:/after:DATE, has:link, has:reaction.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | — | — |
| page | integer | — | — |
| query | string | — | — |
| response_format | string | — | — |
| sort | string | — | — |
| sort_dir | string | — | — |
No output schema declared.
No examples provided.
get_slack_thread_replies ~132
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | Channel — channel ID or #channel-name |
| cursor | string | — | — |
| limit | integer | — | — |
| ts | string | yes | Parent message timestamp — input key is ts (not thread_ts or timestamp). Use ts_slack from get_slack_channel_history. |
No output schema declared.
No examples provided.
get_slack_unread_messages ~105
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | Channel — channel ID or #channel-name. DMs require channel ID. |
| includePrivate | boolean | — | — |
| include_private | boolean | — | — |
| limit | integer | — | — |
No output schema declared.
No examples provided.
get_slack_user_profile ~67
Get detailed profile for a specific Slack user. Get user ID from list_slack_users or from a message, or use @username format.
| Name | Type | Req | Description |
|---|---|---|---|
| user | string | yes | User ID (e.g., U1234567890) or @username (e.g., @john) |
No output schema declared.
No examples provided.
invite_user_to_channel ~104
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | Channel — channel ID or #channel-name |
| force | boolean | — | — |
| users | string | yes | User ID(s) — single ID or comma-separated list (max 1000) |
No output schema declared.
No examples provided.
list_slack_channels ~140
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).
| Name | Type | Req | Description |
|---|---|---|---|
| channel_name | string | — | Filter by name (case-insensitive partial match) — current page only |
| cursor | string | — | — |
| limit | integer | — | — |
| response_format | string | — | — |
| types | string | — | public_channel,private_channel,mpim,im |
No output schema declared.
No examples provided.
list_slack_users ~123
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | — | — |
| limit | integer | — | — |
| name | string | — | Filter users by name (case-insensitive partial match). Auto-paginates up to 5 pages to find matches. For exact email match, use lookup_user_by_email instead. |
| response_format | string | — | — |
No output schema declared.
No examples provided.
list_slack_workspaces ~93
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
lookup_user_by_email ~166
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: "[email protected]" }) → 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).
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | Email address to look up |
No output schema declared.
No examples provided.
mark_slack_channel_as_read ~132
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | Channel — channel ID (C... / D... for DMs) or #channel-name |
| includePrivate | boolean | — | — |
| include_private | boolean | — | — |
| ts | string | yes | Timestamp to mark as read up to — input key is ts (not thread_ts or timestamp). Use ts_slack from a message. |
No output schema declared.
No examples provided.
open_slack_dm ~221
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: "[email protected]" }) → get user.id 2. open_slack_dm({ user: "U1234567890" }) → get DM channel + verified recipient 3. post_slack_message({ channel: "D...", text: "...", intended_recipient: "U1234567890" })
| Name | Type | Req | Description |
|---|---|---|---|
| user | string | yes | Slack User ID (e.g., U1234567890 or W1234567890). Use lookup_user_by_email or list_slack_users to find the ID first. |
No output schema declared.
No examples provided.
post_slack_message ~228
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 — messages are editable in Slack.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | Channel target — channel ID (e.g., C1234567890) or #channel-name (e.g., #general) |
| intended_recipient | string | — | For DMs only: expected recipient User ID. If the DM channel belongs to a different user, the message is NOT sent. |
| text | string | yes | Message text (supports Slack markdown) |
No output schema declared.
No examples provided.
reply_to_slack_thread ~114
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | Channel — channel ID or #channel-name |
| text | string | yes | Reply text |
| thread_ts | string | yes | Parent message timestamp — input key is thread_ts (not ts or timestamp). Use ts_slack value from get_slack_channel_history. |
No output schema declared.
No examples provided.
schedule_slack_message ~103
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.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | Channel — channel ID or #channel-name |
| post_at | integer | yes | Unix timestamp IN SECONDS (not ms) for when to post |
| text | string | yes | Message text (supports Slack markdown) |
No output schema declared.
No examples provided.
search_slack_messages ~159
Search messages across all channels in the Slack workspace. Requires user authorization (search:read scope). Supports Slack search modifiers: - from:@username — Messages from a specific user - in:#channel — Messages in a specific channel - before:YYYY-MM-DD / after:YYYY-MM-DD — Date filters - has:link / has:reaction — Content filters Set to_me=true to prepend "to:@<your_username>" automatically.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | — | — |
| page | integer | — | — |
| query | string | yes | Search query (supports Slack modifiers) |
| response_format | string | — | — |
| sort | string | — | — |
| sort_dir | string | — | — |
| to_me | boolean | — | — |
No output schema declared.
No examples provided.
send_myself_a_note ~111
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.
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | Note text to send to yourself. Use the text parameter, not message or note. |
No output schema declared.
No examples provided.