Slack
Source: https://runstack.engineer/docs/toolkits/slack
Messages, channels, users, files, calls, and admin.
Tools (159):
| Tool | Description |
|---|---|
slackSendMessage | Post a message to a channel, DM, or private group. Provide exactly one of markdownText (normal Markdown) or blocks (raw Block Kit for interactive layouts). For DMs, resolve the user to a channel ID with slackOpenDm first. Not idempotent — duplicate calls post duplicates. |
slackUpdateMessage | Update a message by channel and timestamp. Provide exactly one of markdownText or blocks (raw Block Kit). Only messages posted by the caller can be edited. |
slackDeleteMessage | Delete a message by channel and timestamp. The authenticated user or bot must be the original poster. Confirm with the user first. |
slackScheduleMessage | Schedule a message for a future time (Unix epoch seconds, max 120 days ahead). Provide markdownText, text, blocks (JSON string), or attachments (JSON string). Use slackListScheduledMessages to find the scheduled_message_id afterwards. |
slackListScheduledMessages | List pending scheduled messages for a channel (or all accessible channels when omitted), optionally filtered by time range. Paginate with cursor. |
slackDeleteScheduledMessage | Delete a pending scheduled message by channel and scheduled_message_id. Get the ID from slackListScheduledMessages. |
slackGetMessagePermalink | Get a permalink URL for a message by channel ID and timestamp. Resolve channel names to IDs with slackFindChannels first. |
slackSendMeMessage | Send a '/me' action message to a channel, shown in third person (e.g. '*user is preparing for a meeting*'). Plain text only. |
slackSendEphemeralMessage | Send an ephemeral message visible only to one user in a channel. Both the bot and the target user must be channel members. Provide markdownText, text, blocks (JSON string), or attachments (JSON string). |
slackListUnreadChannelMessages | List unread messages in a channel for the authenticated user (main timeline only, not thread replies). Paginate with cursor. |
slackGetUnreadMessagesFromUser | Get unread DMs from a specific user. Opens the DM, reads the read position, and fetches messages since then. Returns an empty messages array when nothing is unread. DMs only. |
slackListAllChannels | List conversations visible to the caller, with type and archive filters. Always use the returned channel IDs (not names) in downstream tools. Loop on response_metadata.next_cursor until empty for full coverage. |
slackFindChannels | Find channels by name, topic, purpose, or description (case-insensitive partial match). Always resolve names to IDs here before passing to other tools. Empty results may mean no match or no access — retry with exactMatch=false and excludeArchived=false. |
slackListConversations | List conversations accessible to a user (defaults to the caller). Returns IDs, not names. Private channels and DMs appear only with shared membership and proper scopes. Paginate on next_cursor until empty. |
slackGetConversationInfo | Get metadata for a conversation by ID (name, purpose, dates, member count). No message content. Check is_archived and is_member to diagnose access issues. |
slackGetConversationMembers | List active member user IDs for a channel, DM, or group DM. Returns IDs only — enrich with user lookup tools. Paginate on next_cursor until empty for large channels. |
slackGetConversationHistory | Fetch one page of main-timeline messages from a conversation, with time-range filters. Threaded replies are NOT included — use slackGetConversationReplies with a parent ts for those. Paginate with cursor. |
slackGetConversationReplies | Fetch replies in a thread by channel ID and parent message ts. The first returned message is the parent; use has_more/cursor for large threads. |
slackCreateChannel | Create a public or private channel. Names must be lowercase, unique, 80 chars max, no spaces or periods. Confirm with the user first. |
slackArchiveChannel | Archive a conversation, making it read-only while keeping history. Some channels (#general, DMs) cannot be archived. Confirm with the user first. |
slackUnarchiveChannel | Unarchive a conversation, making it active again. |
slackCloseDm | Close a DM or group DM, removing it from the caller sidebar without deleting history. Affects only the calling user view. |
slackJoinConversation | Join a conversation by ID. Joining an already-joined channel is a non-fatal no-op. Private channel joins may fail without permission. |
slackLeaveConversation | Leave a conversation by ID. Fails as the last member of a private channel or on #general / Slack Connect channels. |
slackRenameConversation | Rename a channel (Slack normalizes to lowercase conventions). May affect integrations using the old name. |
slackSetConversationTopic | Set the topic header for a conversation by ID (max 250 chars, no formatting). The caller must be a member. |
slackSetConversationPurpose | Set the purpose (short goal description) for a conversation by ID (max 250 chars). The caller must be a member. |
slackMarkConversationRead | Mark a message as the most recently read for the caller in a channel. The caller must be a member and the message must exist. |
slackInviteUsersToChannel | Invite users to a channel by comma-separated user IDs (up to 1000). The bot must be a member of private channels. Inspect ok/error/errors — HTTP is always 200. |
slackRemoveUserFromConversation | Remove (kick) a user from a conversation. The caller needs permission and cannot remove themselves with this tool. |
slackOpenDm | Open or resume a DM (1 user) or group DM (2-8 users) by user IDs, or reopen an existing channel. Reuse the returned channel.id for messaging — never pass user IDs or emails directly to slackSendMessage. |
slackAdminSearchConversations | Search public or private channels across an Enterprise Grid org by name and type. Enterprise Grid only. |
slackAdminCreateConversation | Create a channel via the Admin API (Enterprise Grid). Set orgWide=true for an org-wide channel, otherwise teamId is required. Confirm with the user first. |
slackDeleteChannel | Permanently delete a public or private channel and all its messages and files (Enterprise Grid admin). Irreversible — confirm with the user first. |
slackConvertChannelToPrivate | Convert a public channel to private via the Admin API. Enterprise Grid only, irreversible via API. Confirm with the user first. |
slackInviteUserToChannelAdmin | Invite users to a channel via the Admin API (Enterprise Grid). The caller must be a channel member. For regular workspaces use slackInviteUsersToChannel. |
slackGetConversationPrefs | Get posting/thread/mention/huddle preferences for a channel. Enterprise Grid oriented. |
slackSetConversationPrefs | Set posting permissions for a channel (who can post/thread, @channel/@here, huddles). Pass prefs as a JSON string, e.g. {"who_can_post":"type:admin"}. Enterprise Grid oriented. |
slackGetChannelWorkspaces | List workspaces a channel is connected to within an Enterprise Grid org. Paginate with cursor. |
slackSetChannelWorkspaces | Set which Enterprise Grid workspaces connect to a channel (share a channel with workspaces, or convert to an org channel). Confirm with the user first. |
slackListChannelIdpGroups | List IDP groups allowlisted on a private channel (only members of these groups may access it). Enterprise Grid with IDP groups enabled. |
slackListUsers | List workspace users with profiles, paginated. Filter is_bot/is_app_user/deleted client-side for human-only rosters. Prefer slackFindUsers for targeted lookups; cache results. Throttle to ~1-2 req/sec. |
slackFindUsers | Find users by email, user ID, or name. Exact emails use the dedicated lookup; user IDs use users.info; other queries filter users.list. Verify a single user ID before passing to messaging tools. |
slackFindUserByEmail | Look up an active user by registered email address (requires users:read.email). Fails with users_not_found for unknown, inactive, guest, or privacy-hidden emails. |
slackGetUserInfo | Get comprehensive info for a user ID (profile, status, team flags). Pass IDs only — emails and names return user_not_found. Sensitive fields may be omitted by privacy settings. |
slackGetUserProfile | Get profile fields for a user (defaults to the caller when omitted). Email/phone may be omitted without users:read.email or by workspace privacy. |
slackSetUserProfile | Update a user profile: a single field via name+value, or many via a profile JSON string (takes precedence). Defaults to the caller; admins on paid teams may target others. |
slackGetUserPresence | Get a user's real-time presence (active/away). Omit user for self. No history or status reasons. |
slackSetUserPresence | Manually set presence to 'auto' (Slack-managed) or 'away'. Persists across connections but user activity or auto-away can override it. |
slackEndDnd | End the caller DND session, making them available. Safe no-op when DND is not active. |
slackEndSnooze | End the caller snooze immediately, exiting do-not-disturb mode. |
slackSetDndDuration | Turn on DND (snooze) for the caller for a number of minutes from now. |
slackGetDndStatus | Get DND status for the caller or one user. Check before interacting to respect availability. |
slackGetTeamDndStatus | Get DND status for multiple users at once via comma-separated IDs. |
slackDeleteUserPhoto | Delete the caller profile photo, reverting to the default avatar. Irreversible; succeeds even with no custom photo. |
slackSetUserPhoto | Set the caller profile photo from a publicly reachable image URL (GIF/PNG/JPG). The image is fetched and uploaded with optional square cropping. |
slackGetUserIdentity | Get the caller identity (user + team). Returned fields depend on granted identity scopes (basic, email, avatar, team). |
slackGetBotInfo | Get info for a bot user by bot ID (B-prefixed). Does not work for regular users or other integration types. |
slackAddEnterpriseUserToWorkspace | Add an existing Enterprise Grid user to a workspace, with optional channels and guest restrictions. Enterprise Grid only. |
slackInviteUserToWorkspace | Invite a person to a workspace by email with channels, a welcome message, and guest options (Enterprise Grid admin). Use resend=true to re-process a pending invite. |
slackRemoveUserFromWorkspace | Remove a user from a workspace, revoking access. Confirm with the user first. |
slackSetAdminUser | Promote an existing workspace member (guest, user, or owner) to admin. Confirm with the user first. |
slackSetWorkspaceOwner | Promote a member, guest, or admin to workspace owner. Enterprise Grid only. Confirm with the user first. |
slackResetUserSessions | Wipe all sessions on all devices for a user, forcing re-authentication. Use for security concerns. Confirm with the user first. |
slackListWorkspaceUsers | List admin users of a workspace (admin.users.list), paginated. Omit teamId with org-level tokens for org-wide results. |
slackGetTeamInfo | Get metadata for the current workspace, or a specified accessible team. Omit both filters for the current team. |
slackGetTeamProfile | Get workspace profile field definitions (custom fields and sections), optionally filtered by visibility. |
slackListAuthTeams | List workspaces an org-wide app is approved for. Paginate with cursor. |
slackListAvailableWorkspaces | List workspaces where both the connection and a target user have access. Match a workspace name to a team_id here, then pass team_id to user tools. Meaningful for org-level installs. |
slackCreateEnterpriseTeam | Create a team (workspace) in an Enterprise Grid org. Confirm with the user first. |
slackListEnterpriseTeams | List teams in an Enterprise Grid org with IDs, names, and domains. Paginate with cursor. Enterprise Grid only. |
slackListWorkspaceAdmins | List admin user IDs for a workspace. Enterprise Grid with admin.teams:read. Paginate with cursor. |
slackListWorkspaceOwners | List owner user IDs for a workspace. Requires admin.teams:read. Paginate with cursor. |
slackGetWorkspaceSettings | Get detailed settings for a workspace (Enterprise Grid admin audit). |
slackSetWorkspaceName | Set the display name of a workspace (Enterprise Grid). Confirm with the user first. |
slackSetWorkspaceDescription | Set the description of a workspace. Confirm with the user first. |
slackSetWorkspaceIcon | Set the workspace icon from a publicly reachable image URL (GIF/PNG/JPG/HEIC, ideally 512x512). |
slackSetWorkspaceDefaultChannels | Set the default channels new members auto-join. Pass an array or comma-separated string of channel IDs. |
slackListFiles | List workspace files (metadata only, not content), filterable by user, channel, date, and type. Only files visible to the caller are returned. Check paging.pages for full pagination. |
slackGetFileInfo | Get detailed metadata and paginated comments for a file by ID. Does not download content — use slackDownloadFile for private URLs. Also retrieves canvases and Slack Lists by file ID. |
slackDeleteFile | Permanently delete a file by ID, including comments and shares. Irreversible — confirm with the user first. |
slackDeleteFileComment | Delete a comment from a file by file ID and comment ID. Irreversible. |
slackShareFilePublicUrl | Enable public sharing for a file, generating a public URL anyone with the link can open. Verify intent before sharing sensitive files. |
slackRevokeFilePublicUrl | Revoke a file public URL, making it private again. No-op when not public; irreversible. |
slackDownloadFile | Get file metadata with authenticated download URLs (url_private, url_private_download). Fetch the URL with the Slack token to download bytes; this tool returns links, not content. |
slackUploadFile | Upload text content as a file to Slack (snippet/post), optionally shared to a channel or thread with a comment. Uses the files.getUploadURLExternal flow. For binary files, share a URL via message instead. |
slackAddRemoteFile | Register an external file (Google Drive, Dropbox, etc.) with Slack for discovery and sharing. Requires a stable external_id and a reachable external_url. |
slackGetRemoteFile | Get info about a remote file by Slack file ID or your external_id. Remote files only — not for Slack-hosted uploads. |
slackUpdateRemoteFile | Update metadata of a registered remote file (title, URL, type, preview, searchable text). Identify by file or external_id; cannot change the file type fundamentally. |
slackRemoveRemoteFile | Remove the Slack reference to a remote file by file or external_id. The external file itself is untouched. |
slackShareRemoteFile | Share a registered remote file into channels or DMs by comma-separated IDs. The file must already be registered. |
slackListRemoteFiles | List team remote files, filterable by channel and creation timestamps. Paginate with cursor. |
slackAddReaction | Add an emoji reaction to a message by channel and exact timestamp. The emoji must exist; use slackListCustomEmojis to verify. Skin tones append ::skin-tone-2..6. |
slackRemoveReaction | Remove an emoji reaction from a message, file, or file comment. Provide exactly one target: channel+timestamp, file, or fileComment. |
slackGetReactions | Get reactions for a message, file, or file comment. Provide exactly one target: channel+timestamp, file, or fileComment. A missing reactions field means zero reactions. |
slackListUserReactions | List reactions added by a user (defaults to caller). Paginate with cursor; page/count offer legacy pagination. Items repeat per reaction. |
slackAddStar | Star (save) a channel, file, file comment, or message. For messages provide channel+timestamp; otherwise file, fileComment, or channel alone. |
slackRemoveStar | Remove a star from a channel, file, file comment, or message. Same targeting rules as slackAddStar. |
slackListStarredItems | List items the caller starred (classic stars, not saved-for-later). Paginate with cursor (preferred) or page/count. |
slackPinItem | Pin a message to a channel by channel ID and exact timestamp. The message must not already be pinned. |
slackUnpinItem | Unpin a message from a channel by channel ID and timestamp. Destructive — confirm with the user first. |
slackListPinnedItems | List messages and files pinned to a channel. The caller must have channel access. |
slackCreateReminder | Create a reminder with text and time. Time accepts a Unix timestamp, seconds-from-now, or natural language (e.g. "in 15 minutes", "every Monday at 10am"). Only bot tokens can target other users. |
slackGetReminder | Get details for a reminder by ID (Rm-prefixed). Read-only. |
slackListReminders | List reminders for the caller. An empty array is valid (no reminders), not an error. Match client-side on returned objects before deleting by ID. |
slackDeleteReminder | Delete a reminder by ID. Irreversible — confirm with the user first. |
slackSearchAll | Unified workspace search across messages and files in one call. Read the files section explicitly for document hits. Results are index-based (minutes stale); use history tools for real-time. Honor Retry-After on 429. |
slackSearchMessages | Workspace-wide message search with query modifiers (in:#channel, from:@user, before:/after:/on: dates), sorting, and pagination. Combine with autoPaginate+count for full collection. |
slackAssistantSearch | Real-time search across messages, files, channels, and users (keyword or natural-language/semantic). Resolve named entities to IDs first via contentTypes; confirm with the user on multiple matches. |
slackGetSearchInfo | Check whether AI-powered semantic search is enabled on the workspace. When false, pass disableSemanticSearch=true to slackAssistantSearch for keyword-only search. |
slackStartCall | Register a third-party call in Slack (calls.add). Requires a provider join_url and unique external_unique_id. Returns the Slack call ID for later updates. |
slackGetCallInfo | Get a point-in-time snapshot of a call by its Slack call ID (from slackStartCall). |
slackUpdateCallInfo | Update the title, join URL, or desktop app URL of an existing call by ID. |
slackEndCall | End an ongoing call by ID, optionally recording its duration in seconds. |
slackAddCallParticipants | Add participants to an ongoing call. Users is a JSON array string of {"slack_id":"U..."} objects. |
slackRemoveCallParticipants | Remove participants from an ongoing call. Users is a JSON array string with slack_id and/or external_id per user. |
slackCreateCanvas | Create a Canvas with an optional title, markdown content, and channel tab. Returns the canvas_id. |
slackEditCanvas | Edit a Canvas: replace whole content or a section, insert before/after/at start/at end, delete a section, or rename. Use slackLookupCanvasSections to find section IDs for targeted edits. |
slackDeleteCanvas | Permanently delete a Canvas. Irreversible — confirm with the user first. |
slackLookupCanvasSections | Find section IDs in a Canvas by text criteria. Use the returned IDs with slackEditCanvas targeted operations. |
slackCreateList | Create a Slack List with a name, optional rich-text description, typed columns, or by copying another List (with optional rows), or in to-do task mode. Returns the list_id. Requires a user token. |
slackCreateListItem | Add a row to a Slack List with initial cell values. Text cells accept plain strings (auto-wrapped to rich_text); selects take choice values like ["todo"]. Copy a row via duplicatedItemId or nest via parentItemId. Requires a user token. |
slackGetListItem | Read one List row with column_id-keyed typed values and parent List metadata. Optionally include subscription status. Requires a user token. |
slackListListItems | List rows in a Slack List. You must paginate on response_metadata.next_cursor until empty or rows are silently truncated. Set archived=true for archived rows. Requires a user token. |
slackUpdateList | Edit a List name, description, or to-do mode. Identify the List by id (not list_id). Description strings are auto-wrapped to rich_text. Requires a user token. |
slackUpdateListItem | Update cells of EXISTING List rows (row_id must match ^Rec[A-Z0-9]{8,}$). Text cells accept plain strings; selects take choice values. To add rows use slackCreateListItem. Requires a user token. |
slackDeleteListItem | Permanently delete one List row by List ID and row ID. Cannot be undone — confirm with the user first. Requires a user token. |
slackDeleteListItems | Delete multiple List rows in one all-or-nothing call. On failure treat the whole batch as not deleted and retry it entirely. Requires a user token. |
slackSetListAccess | Share a List with channels or users at read/write/owner level. Provide exactly one of channelIds or userIds (owner requires userIds). Requires a user token. |
slackDeleteListAccess | Revoke List sharing for channels or users. Provide exactly one of channelIds or userIds. Requires a user token. |
slackCreateUserGroup | Create a User Group (subteam) with a unique name, @handle, description, and default channels. |
slackUpdateUserGroup | Update a User Group name, handle, description, or default channels by its ID. |
slackUpdateUserGroupMembers | Replace ALL members of a User Group with a new comma-separated user ID list. This overwrites existing membership — confirm with the user first. |
slackListUserGroups | List workspace User Groups, optionally with member IDs, counts, and disabled groups. |
slackListUserGroupMembers | List user IDs in a User Group, optionally including disabled groups. |
slackEnableUserGroup | Re-enable a disabled User Group for mentions and permissions. Status-only change. |
slackDisableUserGroup | Disable (archive) an enabled User Group by ID. The group is not deleted and can be re-enabled. |
slackAddEmoji | Add a custom emoji from a public image URL (PNG/GIF/JPEG) under a lowercase name. Subject to workspace emoji limits; admin scope required. |
slackAddEmojiAlias | Create an alias name pointing at an existing custom emoji (Enterprise Grid). Colons and whitespace are trimmed automatically. |
slackRenameEmoji | Rename a custom emoji, updating all its instances. The new name must be unique in the workspace. |
slackRemoveEmoji | Remove a custom emoji across the Enterprise Grid org. Confirm with the user first. |
slackListCustomEmojis | List workspace custom emojis (image URLs or alias: references). Unicode emojis, usage stats, and dates are not included. Optionally include Unicode categories. |
slackListAdminEmoji | List custom emoji across an Enterprise Grid org (admin token required). For a single workspace use slackListCustomEmojis. Paginate with cursor. |
slackListApprovedApps | List apps approved for installation on an org or workspace (Enterprise Grid / Business+ admin). Paginate with cursor. |
slackListAppRequests | List pending app installation requests (who requested what). Requires admin.apps:read. Paginate with cursor. |
slackListRestrictedApps | List apps restricted from installation on an org or workspace. Paginate with cursor. |
slackRestrictApp | Restrict an app from being installed. Provide app_id or request_id, plus team_id or enterprise_id. Confirm with the user first. |
slackListApprovedInvites | List approved workspace invite requests with approver details. Enterprise Grid with admin.invites:read. Paginate with cursor. |
slackListDeniedInvites | List denied workspace invite requests with who denied them and when. Enterprise Grid with admin.invites:read. Paginate with cursor. |
slackListPendingInvites | List pending workspace invite requests (invited but not yet joined). Requires admin.invites:read. Paginate with cursor. |
slackReadAuditLogs | Read Enterprise Grid audit logs (logins, admin changes, app installs, channel changes) with filters and pagination. Requires an owner/admin user token with auditlogs:read. |
slackGetAuditActions | List action types available in the Audit Logs API by category. Use to build action filters for slackReadAuditLogs. |
slackGetAuditSchemas | List object schemas returned by the Audit Logs API (workspaces, users, channels, etc.). |
slackGetScimConfig | Get the SCIM service provider configuration (auth schemes, filtering, sorting, bulk support). No parameters. Needs a token with admin scope; SCIM-provisioned tokens may be required. |
slackCustomizeUnfurl | Customize link previews (unfurls) on a message: provide custom preview content per URL or empty objects to remove previews. Target by channel+ts, or by unfurl_id+source. Either unfurls or metadata is required. |
slackApiTest | Test Slack API connectivity and auth. Pass foo to echo a value, or error to simulate an error response. |
slackTestAuth | Verify authentication and get the caller identity (user, team, bot). Use first when diagnosing scope or token issues. Replaces the deprecated permission-scopes check. |
slackWhoAmI | Return the connected account identity (user ID + workspace ID). User IDs are workspace-scoped, so both are included in the label. |
slackRtmConnect | Start a Real Time Messaging session and get a WebSocket URL for persistent event streaming. Connect to the returned URL separately; the URL is short-lived. |