Gives your AI assistant direct Slack access using browser session tokens instead of OAuth, sidestepping app registration and admin approval entirely. Exposes 21 tools including conversation history, search, thread retrieval, message sending, reactions, and mark-as-read. Newer workflow primitives let you save profiles that bind channels to structured output formats like incident summaries or support triage queues, with a hosted brain service that returns parseable JSON for downstream automation. Works with Claude Desktop, Cursor, Windsurf, and Gemini CLI out of the box. The session token approach means no bot user appears in workspace admin panels. Setup takes two minutes via npx, and the token refresh tool pulls fresh credentials directly from Chrome's local database.
Public tool metadata for what this MCP can expose to an agent.
SLACK_ACTIVATE_OR_MODIFY_DO_NOT_DISTURB_DURATIONDEPRECATED: Turns on Do Not Disturb mode for the current user, or changes its duration. Use `set_dnd_duration` instead.1 paramsDEPRECATED: Turns on Do Not Disturb mode for the current user, or changes its duration. Use `set_dnd_duration` instead.
num_minutesstringSLACK_ADD_A_CUSTOM_EMOJI_TO_A_SLACK_TEAMDEPRECATED: Adds a custom emoji to a Slack workspace given a unique name and an image URL. Use `add_emoji` instead.3 paramsDEPRECATED: Adds a custom emoji to a Slack workspace given a unique name and an image URL. Use `add_emoji` instead.
urlstringnamestringtokenstringSLACK_ADD_AN_EMOJI_ALIAS_IN_SLACKAdds an alias for an existing custom emoji in a Slack Enterprise Grid organization.3 paramsAdds an alias for an existing custom emoji in a Slack Enterprise Grid organization.
namestringtokenstringalias_forstringSLACK_ADD_A_REMOTE_FILE_FROM_A_SERVICEAdds a reference to an external file (e.g., Google Drive, Dropbox) to Slack for discovery and sharing, requiring a unique `external_id` and an `external_url` accessible by Slack.7 paramsAdds a reference to an external file (e.g., Google Drive, Dropbox) to Slack for discovery and sharing, requiring a unique `external_id` and an `external_url` accessible by Slack.
titlestringtokenstringfiletypestringexternal_idstringexternal_urlstringpreview_imagestringindexable_file_contentsstringSLACK_ADD_A_STAR_TO_AN_ITEMStars a channel, file, file comment, or a specific message in Slack.4 paramsStars a channel, file, file comment, or a specific message in Slack.
filestringchannelstringtimestampstringfile_commentstringSLACK_ADD_CALL_PARTICIPANTSRegisters new participants added to a Slack call.2 paramsRegisters new participants added to a Slack call.
idstringusersstringSLACK_ADD_EMOJIAdds a custom emoji to a Slack workspace given a unique name and an image URL; subject to workspace emoji limits.3 paramsAdds a custom emoji to a Slack workspace given a unique name and an image URL; subject to workspace emoji limits.
urlstringnamestringtokenstringSLACK_ADD_REACTION_TO_AN_ITEMAdds a specified emoji reaction to an existing message in a Slack channel, identified by its timestamp; does not remove or retrieve reactions.3 paramsAdds a specified emoji reaction to an existing message in a Slack channel, identified by its timestamp; does not remove or retrieve reactions.
namestringchannelstringtimestampstringSLACK_ARCHIVE_A_PUBLIC_OR_PRIVATE_CHANNELArchives a Slack public or private channel, making it read-only; the primary 'general' channel cannot be archived.1 paramsArchives a Slack public or private channel, making it read-only; the primary 'general' channel cannot be archived.
channel_idstringSLACK_ARCHIVE_A_SLACK_CONVERSATIONArchives a Slack conversation by its ID, rendering it read-only and hidden while retaining history, ideal for cleaning up inactive channels; be aware that some channels (like #general or certain DMs) cannot be archived and this may impact connected integrations.1 paramsArchives a Slack conversation by its ID, rendering it read-only and hidden while retaining history, ideal for cleaning up inactive channels; be aware that some channels (like #general or certain DMs) cannot be archived and this may impact connected integrations.
channelstringSLACK_CHAT_POST_MESSAGEDEPRECATED: Posts a message to a Slack channel, direct message, or private channel. Use `send_message` instead.16 paramsDEPRECATED: Posts a message to a Slack channel, direct message, or private channel. Use `send_message` instead.
textstringparsestringblocksstringmrkdwnbooleanas_userbooleanchannelstringicon_urlstringusernamestringthread_tsstringicon_emojistringlink_namesbooleanattachmentsstringunfurl_linksbooleanunfurl_mediabooleanmarkdown_textstringreply_broadcastbooleanSLACK_CLEAR_STATUSClears the Slack status for the authenticated user, removing any custom text and emoji.Clears the Slack status for the authenticated user, removing any custom text and emoji.
No parameter schema in public metadata yet.
SLACK_CLOSE_DM_OR_MULTI_PERSON_DMCloses a Slack direct message (DM) or multi-person direct message (MPDM) channel, removing it from the user's sidebar without deleting history; this action affects only the calling user's view.1 paramsCloses a Slack direct message (DM) or multi-person direct message (MPDM) channel, removing it from the user's sidebar without deleting history; this action affects only the calling user's view.
channelstringSLACK_CREATE_A_REMINDERCreates a Slack reminder with specified text and time; time accepts Unix timestamps, seconds from now, or natural language (e.g., 'in 15 minutes', 'every Thursday at 2pm').3 paramsCreates a Slack reminder with specified text and time; time accepts Unix timestamps, seconds from now, or natural language (e.g., 'in 15 minutes', 'every Thursday at 2pm').
textstringtimestringuserstringSLACK_CREATE_A_SLACK_USER_GROUPCreates a new User Group (often referred to as a subteam) in a Slack workspace.5 paramsCreates a new User Group (often referred to as a subteam) in a Slack workspace.
namestringhandlestringchannelsstringdescriptionstringinclude_countbooleanSLACK_CREATE_CANVASCreates a new Slack Canvas with the specified title and optional content.3 paramsCreates a new Slack Canvas with the specified title and optional content.
titlestringchannel_idstringdocument_contentvalueSLACK_CREATE_CHANNELInitiates a public or private channel-based conversation3 paramsInitiates a public or private channel-based conversation
namestringteam_idstringis_privatebooleanSLACK_CREATE_CHANNEL_BASED_CONVERSATIONCreates a new public or private Slack channel with a unique name; the channel can be org-wide, or team-specific if `team_id` is given (required if `org_wide` is false or not provided).5 paramsCreates a new public or private Slack channel with a unique name; the channel can be org-wide, or team-specific if `team_id` is given (required if `org_wide` is false or not provided).
namestringteam_idstringorg_widebooleanis_privatebooleandescriptionstringSLACK_CUSTOMIZE_URL_UNFURLCustomizes URL previews (unfurling) in a specific Slack message using a URL-encoded JSON in `unfurls` to define custom content or remove existing previews.6 paramsCustomizes URL previews (unfurling) in a specific Slack message using a URL-encoded JSON in `unfurls` to define custom content or remove existing previews.
tsstringchannelstringunfurlsstringuser_auth_urlstringuser_auth_messagestringuser_auth_requiredbooleanSLACK_CUSTOMIZE_URL_UNFURLING_IN_MESSAGESDEPRECATED: Customizes URL previews (unfurling) in a specific Slack message. Use `customize_url_unfurl` instead.6 paramsDEPRECATED: Customizes URL previews (unfurling) in a specific Slack message. Use `customize_url_unfurl` instead.
tsstringchannelstringunfurlsstringuser_auth_urlstringuser_auth_messagestringuser_auth_requiredbooleanSLACK_DELETE_A_COMMENT_ON_A_FILEDeletes a specific comment from a file in Slack; this action is irreversible.2 paramsDeletes a specific comment from a file in Slack; this action is irreversible.
idstringfilestringSLACK_DELETE_A_FILE_BY_IDPermanently deletes an existing file from a Slack workspace using its unique file ID; this action is irreversible and also removes any associated comments or shares.1 paramsPermanently deletes an existing file from a Slack workspace using its unique file ID; this action is irreversible and also removes any associated comments or shares.
filestringSLACK_DELETE_A_PUBLIC_OR_PRIVATE_CHANNELPermanently and irreversibly deletes a specified public or private channel, including all its messages and files, within a Slack Enterprise Grid organization.1 paramsPermanently and irreversibly deletes a specified public or private channel, including all its messages and files, within a Slack Enterprise Grid organization.
channel_idstringSLACK_DELETE_A_SCHEDULED_MESSAGE_IN_A_CHATDeletes a pending, unsent scheduled message from the specified Slack channel, identified by its `scheduled_message_id`.3 paramsDeletes a pending, unsent scheduled message from the specified Slack channel, identified by its `scheduled_message_id`.
as_userbooleanchannelstringscheduled_message_idstringSLACK_DELETE_A_SLACK_REMINDERDeletes an existing Slack reminder, typically when it is no longer relevant or a task is completed; this operation is irreversible.1 paramsDeletes an existing Slack reminder, typically when it is no longer relevant or a task is completed; this operation is irreversible.
reminderstringSLACK_DELETE_CANVASDeletes a Slack Canvas permanently.1 paramsDeletes a Slack Canvas permanently.
canvas_idstringSLACK_DELETES_A_MESSAGE_FROM_A_CHATDeletes a message, identified by its channel ID and timestamp, from a Slack channel, private group, or direct message conversation; the authenticated user or bot must be the original poster.3 paramsDeletes a message, identified by its channel ID and timestamp, from a Slack channel, private group, or direct message conversation; the authenticated user or bot must be the original poster.
tsstringas_userbooleanchannelstringSLACK_DELETE_USER_PROFILE_PHOTODeletes the Slack profile photo for the user identified by the token, reverting them to the default avatar; this action is irreversible and succeeds even if no custom photo was set.1 paramsDeletes the Slack profile photo for the user identified by the token, reverting them to the default avatar; this action is irreversible and succeeds even if no custom photo was set.
tokenstringSLACK_DISABLE_AN_EXISTING_SLACK_USER_GROUPDisables a specified, currently enabled Slack User Group by its unique ID, effectively archiving it by setting its 'date_delete' timestamp; the group is not permanently deleted and can be re-enabled.2 paramsDisables a specified, currently enabled Slack User Group by its unique ID, effectively archiving it by setting its 'date_delete' timestamp; the group is not permanently deleted and can be re-enabled.
usergroupstringinclude_countbooleanSLACK_EDIT_CANVASEdits a Slack Canvas with granular control over content placement. Supports replace, insert (before/after/start/end) operations for flexible content management.4 paramsEdits a Slack Canvas with granular control over content placement. Supports replace, insert (before/after/start/end) operations for flexible content management.
canvas_idstringoperationstringreplace · insert_after · insert_before · insert_at_start · insert_at_end · deletedefault: replacesection_idstringdocument_contentvalueSLACK_ENABLE_A_SPECIFIED_USER_GROUPEnables a disabled User Group in Slack using its ID, reactivating it for mentions and permissions; this action only changes the enabled status and cannot create new groups or modify other properties.2 paramsEnables a disabled User Group in Slack using its ID, reactivating it for mentions and permissions; this action only changes the enabled status and cannot create new groups or modify other properties.
usergroupstringinclude_countbooleanSLACK_ENABLE_PUBLIC_SHARING_OF_A_FILEEnables public sharing for an existing Slack file by generating a publicly accessible URL; this action does not create new files.1 paramsEnables public sharing for an existing Slack file by generating a publicly accessible URL; this action does not create new files.
filestringSLACK_END_A_CALL_WITH_DURATION_AND_IDEnds an ongoing Slack call, identified by its ID (obtained from `calls.add`), optionally specifying the call's duration.2 paramsEnds an ongoing Slack call, identified by its ID (obtained from `calls.add`), optionally specifying the call's duration.
idstringdurationintegerSLACK_END_SNOOZEEnds the current user's snooze mode immediately.Ends the current user's snooze mode immediately.
No parameter schema in public metadata yet.
SLACK_END_USER_DO_NOT_DISTURB_SESSIONEnds the authenticated user's current Do Not Disturb (DND) session in Slack, affecting only DND status and making them available; if DND is not active, Slack acknowledges the request without changing status.Ends the authenticated user's current Do Not Disturb (DND) session in Slack, affecting only DND status and making them available; if DND is not active, Slack acknowledges the request without changing status.
No parameter schema in public metadata yet.
SLACK_END_USER_SNOOZE_MODE_IMMEDIATELYDEPRECATED: Ends the current user's snooze mode immediately. Use `end_snooze` instead.DEPRECATED: Ends the current user's snooze mode immediately. Use `end_snooze` instead.
No parameter schema in public metadata yet.
SLACK_FETCH_BOT_USER_INFORMATIONFetches information for a specified, existing Slack bot user; will not work for regular user accounts or other integration types.1 paramsFetches information for a specified, existing Slack bot user; will not work for regular user accounts or other integration types.
botstringSLACK_FETCH_CONVERSATION_HISTORYFetches a chronological list of messages and events from a specified Slack conversation, accessible by the authenticated user/bot, with options for pagination and time range filtering.6 paramsFetches a chronological list of messages and events from a specified Slack conversation, accessible by the authenticated user/bot, with options for pagination and time range filtering.
limitintegercursorstringlateststringoldeststringchannelstringinclusivebooleanSLACK_FETCH_CURRENT_TEAM_INFO_WITH_OPTIONAL_TEAM_SCOPEDEPRECATED: Fetches comprehensive metadata about the current Slack team. Use `fetch_team_info` instead.1 paramsDEPRECATED: Fetches comprehensive metadata about the current Slack team. Use `fetch_team_info` instead.
teamstringSLACK_FETCH_DND_STATUS_FOR_MULTIPLE_TEAM_MEMBERSDEPRECATED: Retrieves a user's current Do Not Disturb status. Use `get_team_dnd_status` instead.1 paramsDEPRECATED: Retrieves a user's current Do Not Disturb status. Use `get_team_dnd_status` instead.
usersstringSLACK_FETCH_ITEM_REACTIONSFetches reactions for a Slack message, file, or file comment, requiring one of: channel and timestamp; file ID; or file comment ID.5 paramsFetches reactions for a Slack message, file, or file comment, requiring one of: channel and timestamp; file ID; or file comment ID.
filestringfullbooleanchannelstringtimestampstringfile_commentstringSLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATIONRetrieves replies to a specific parent message in a Slack conversation, using the channel ID and the parent message's timestamp (`ts`).7 paramsRetrieves replies to a specific parent message in a Slack conversation, using the channel ID and the parent message's timestamp (`ts`).
tsstringlimitintegercursorstringlateststringoldeststringchannelstringinclusivebooleanSLACK_FETCH_TEAM_INFOFetches comprehensive metadata about the current Slack team, or a specified team if the provided ID is accessible.1 paramsFetches comprehensive metadata about the current Slack team, or a specified team if the provided ID is accessible.
teamstringSLACK_FETCH_WORKSPACE_SETTINGS_INFORMATIONRetrieves detailed settings for a specific Slack workspace, primarily for administrators in an Enterprise Grid organization to view or audit workspace configurations.1 paramsRetrieves detailed settings for a specific Slack workspace, primarily for administrators in an Enterprise Grid organization to view or audit workspace configurations.
team_idstringSLACK_FIND_CHANNELSFind channels in a Slack workspace by any criteria - name, topic, purpose, or description.6 paramsFind channels in a Slack workspace by any criteria - name, topic, purpose, or description.
limitintegertypesstringexact_matchbooleanmember_onlybooleansearch_querystringexclude_archivedbooleanSLACK_FIND_USER_BY_EMAIL_ADDRESSRetrieves the Slack user object for an active user by their registered email address; fails with 'users_not_found' if the email is unregistered or the user is inactive.1 paramsRetrieves the Slack user object for an active user by their registered email address; fails with 'users_not_found' if the email is unregistered or the user is inactive.
emailstringSLACK_FIND_USERSFind users in a Slack workspace by any criteria - email, name, display name, or other text. Includes optimized email lookup for exact email matches.6 paramsFind users in a Slack workspace by any criteria - email, name, display name, or other text. Includes optimized email lookup for exact email matches.
limitintegerexact_matchbooleaninclude_botsbooleansearch_querystringinclude_deletedbooleaninclude_restrictedbooleanSLACK_GET_CANVASRetrieves a specific Slack Canvas by its ID, including its content and metadata.1 paramsRetrieves a specific Slack Canvas by its ID, including its content and metadata.
canvas_idstringSLACK_GET_CHANNEL_CONVERSATION_PREFERENCESRetrieves conversation preferences (e.g., who can post, who can thread) for a specified channel, primarily for use within Slack Enterprise Grid environments.1 paramsRetrieves conversation preferences (e.g., who can post, who can thread) for a specified channel, primarily for use within Slack Enterprise Grid environments.
channel_idstringSLACK_GET_REMINDER_INFORMATIONRetrieves detailed information for an existing Slack reminder specified by its ID; this is a read-only operation.1 paramsRetrieves detailed information for an existing Slack reminder specified by its ID; this is a read-only operation.
reminderstringSLACK_GET_REMOTE_FILERetrieve information about a remote file added to Slack.2 paramsRetrieve information about a remote file added to Slack.
filestringexternal_idstringSLACK_GET_TEAM_DND_STATUSRetrieves a user's current Do Not Disturb status.1 paramsRetrieves a user's current Do Not Disturb status.
usersstringSLACK_GET_USER_PRESENCE_INFORetrieves a Slack user's current real-time presence (e.g., 'active', 'away') to determine their availability, noting this action does not provide historical data or status reasons.1 paramsRetrieves a Slack user's current real-time presence (e.g., 'active', 'away') to determine their availability, noting this action does not provide historical data or status reasons.
userstringSLACK_INITIATES_CHANNEL_BASED_CONVERSATIONSDEPRECATED: Initiates a public or private channel-based conversation. Use `create_channel` instead.3 paramsDEPRECATED: Initiates a public or private channel-based conversation. Use `create_channel` instead.
namestringteam_idstringis_privatebooleanSLACK_INVITE_USERS_TO_A_SLACK_CHANNELInvites users to an existing Slack channel using their valid Slack User IDs.2 paramsInvites users to an existing Slack channel using their valid Slack User IDs.
usersstringchannelstringSLACK_INVITE_USER_TO_CHANNELInvites users to a specified Slack channel; this action is restricted to Enterprise Grid workspaces and requires the authenticated user to be a member of the target channel.2 paramsInvites users to a specified Slack channel; this action is restricted to Enterprise Grid workspaces and requires the authenticated user to be a member of the target channel.
user_idsstringchannel_idstringSLACK_INVITE_USER_TO_WORKSPACEInvites a user to a Slack workspace and specified channels by email; use `resend=True` to re-process an existing invitation for a user not yet signed up.9 paramsInvites a user to a Slack workspace and specified channels by email; use `resend=True` to re-process an existing invitation for a user not yet signed up.
emailstringresendbooleanteam_idstringreal_namestringchannel_idsstringis_restrictedbooleancustom_messagestringguest_expiration_tsstringis_ultra_restrictedbooleanSLACK_INVITE_USER_TO_WORKSPACE_WITH_OPTIONAL_CHANNEL_INVITESDEPRECATED: Invites a user to a Slack workspace and specified channels by email. Use `invite_user_to_workspace` instead.9 paramsDEPRECATED: Invites a user to a Slack workspace and specified channels by email. Use `invite_user_to_workspace` instead.
emailstringresendbooleanteam_idstringreal_namestringchannel_idsstringis_restrictedbooleancustom_messagestringguest_expiration_tsstringis_ultra_restrictedbooleanSLACK_JOIN_AN_EXISTING_CONVERSATIONJoins an existing Slack conversation (public channel, private channel, or multi-person direct message) by its ID, if the authenticated user has permission.1 paramsJoins an existing Slack conversation (public channel, private channel, or multi-person direct message) by its ID, if the authenticated user has permission.
channelstringSLACK_LEAVE_A_CONVERSATIONLeaves a Slack conversation given its channel ID; fails if leaving as the last member of a private channel or if used on a Slack Connect channel.1 paramsLeaves a Slack conversation given its channel ID; fails if leaving as the last member of a private channel or if used on a Slack Connect channel.
channelstringSLACK_LIST_ACCESSIBLE_CONVERSATIONS_FOR_A_USERDEPRECATED: Retrieves conversations accessible to a specified user. Use `list_conversations` instead.5 paramsDEPRECATED: Retrieves conversations accessible to a specified user. Use `list_conversations` instead.
userstringlimitintegertypesstringcursorstringexclude_archivedbooleanSLACK_LIST_ALL_CHANNELSLists conversations available to the user with various filters and search options.5 paramsLists conversations available to the user with various filters and search options.
limitintegertypesstringcursorstringchannel_namestringexclude_archivedbooleanSLACK_LIST_ALL_SLACK_TEAM_CHANNELS_WITH_VARIOUS_FILTERSDEPRECATED: Lists conversations available to the user with various filters and search options. Use `list_channels` instead.5 paramsDEPRECATED: Lists conversations available to the user with various filters and search options. Use `list_channels` instead.
limitintegertypesstringcursorstringchannel_namestringexclude_archivedbooleanSLACK_LIST_ALL_SLACK_TEAM_USERS_WITH_PAGINATIONDEPRECATED: Retrieves a paginated list of all users in a Slack workspace. Use `list_all_users` instead.3 paramsDEPRECATED: Retrieves a paginated list of all users in a Slack workspace. Use `list_all_users` instead.
limitintegercursorstringinclude_localebooleanSLACK_LIST_ALL_USERSRetrieves a paginated list of all users, including comprehensive details, profile information, status, and team memberships, in a Slack workspace; data may not be real-time.3 paramsRetrieves a paginated list of all users, including comprehensive details, profile information, status, and team memberships, in a Slack workspace; data may not be real-time.
limitintegercursorstringinclude_localebooleanSLACK_LIST_ALL_USERS_IN_A_USER_GROUPRetrieves a list of all user IDs within a specified Slack user group, with an option to include users from disabled groups.2 paramsRetrieves a list of all user IDs within a specified Slack user group, with an option to include users from disabled groups.
usergroupstringinclude_disabledbooleanSLACK_LIST_CANVASESLists Slack Canvases with filtering by channel, user, timestamp, and page-based pagination. Uses Slack's files.list API with types=canvas filter.6 paramsLists Slack Canvases with filtering by channel, user, timestamp, and page-based pagination. Uses Slack's files.list API with types=canvas filter.
pageintegeruserstringcountintegerts_tostringchannelstringts_fromstringSLACK_LIST_CONVERSATIONSList conversations (channels/DMs) accessible to a specified user (or the authenticated user if no user ID is provided), respecting shared membership for non-public channels.5 paramsList conversations (channels/DMs) accessible to a specified user (or the authenticated user if no user ID is provided), respecting shared membership for non-public channels.
userstringlimitintegertypesstringcursorstringexclude_archivedbooleanSLACK_LIST_FILES_WITH_FILTERS_IN_SLACKLists files and their metadata within a Slack workspace, filterable by user, channel, timestamp, or type; this action returns metadata only, not file content.8 paramsLists files and their metadata within a Slack workspace, filterable by user, channel, timestamp, or type; this action returns metadata only, not file content.
pagestringuserstringcountstringts_tointegertypesstringchannelstringts_fromintegershow_files_hidden_by_limitbooleanSLACK_LIST_REMINDERSLists all reminders with their details for the authenticated Slack user; returns an empty list if no reminders exist.Lists all reminders with their details for the authenticated Slack user; returns an empty list if no reminders exist.
No parameter schema in public metadata yet.
SLACK_LIST_REMOTE_FILESRetrieve information about a team's remote files.5 paramsRetrieve information about a team's remote files.
limitintegerts_tonumbercursorstringchannelstringts_fromnumberSLACK_LIST_SCHEDULED_MESSAGESRetrieves a list of pending (not yet delivered) messages scheduled in a specific Slack channel, or across all accessible channels if no channel ID is provided, optionally filtered by time and paginated.5 paramsRetrieves a list of pending (not yet delivered) messages scheduled in a specific Slack channel, or across all accessible channels if no channel ID is provided, optionally filtered by time and paginated.
limitintegercursorstringlateststringoldeststringchannelstringSLACK_LIST_SCHEDULED_MESSAGES_IN_A_CHANNELDEPRECATED: Retrieves a list of pending (not yet delivered) messages scheduled in a specific Slack channel. Use `list_scheduled_messages` instead.5 paramsDEPRECATED: Retrieves a list of pending (not yet delivered) messages scheduled in a specific Slack channel. Use `list_scheduled_messages` instead.
limitintegercursorstringlateststringoldeststringchannelstringSLACK_LIST_SLACK_S_REMOTE_FILES_WITH_FILTERSDEPRECATED: Retrieve information about a team's remote files. Use `list_remote_files` instead.5 paramsDEPRECATED: Retrieve information about a team's remote files. Use `list_remote_files` instead.
limitintegerts_tonumbercursorstringchannelstringts_fromnumberSLACK_LISTS_PINNED_ITEMS_IN_A_CHANNELRetrieves all messages and files pinned to a specified channel; the caller must have access to this channel.1 paramsRetrieves all messages and files pinned to a specified channel; the caller must have access to this channel.
channelstringSLACK_LIST_STARRED_ITEMSLists items starred by a user.4 paramsLists items starred by a user.
pagevaluecountvaluelimitvaluecursorstringSLACK_LISTS_USER_S_STARRED_ITEMS_WITH_PAGINATIONDEPRECATED: Lists items starred by a user. Use `list_starred_items` instead.4 paramsDEPRECATED: Lists items starred by a user. Use `list_starred_items` instead.
pagevaluecountvaluelimitvaluecursorstringSLACK_LIST_TEAM_CUSTOM_EMOJISRetrieves all custom emojis for the Slack workspace (image URLs or aliases), not standard Unicode emojis; does not include usage statistics or creation dates.Retrieves all custom emojis for the Slack workspace (image URLs or aliases), not standard Unicode emojis; does not include usage statistics or creation dates.
No parameter schema in public metadata yet.
SLACK_LIST_USER_GROUPS_FOR_TEAM_WITH_OPTIONSLists user groups in a Slack workspace, including user-created and default groups; results for large workspaces may be paginated.3 paramsLists user groups in a Slack workspace, including user-created and default groups; results for large workspaces may be paginated.
include_countbooleaninclude_usersbooleaninclude_disabledbooleanSLACK_LIST_USER_REACTIONSLists all reactions added by a specific user to messages, files, or file comments in Slack, useful for engagement analysis when the item content itself is not required.6 paramsLists all reactions added by a specific user to messages, files, or file comments in Slack, useful for engagement analysis when the item content itself is not required.
fullbooleanpageintegeruserstringcountintegerlimitintegercursorstringSLACK’S OPERATING LAYER FOR AI AGENTS
Slack for AI agents: DMs, search, threads, triage, actions — browser-session or hosted OAuth.
npx -y @jtalk22/slack-mcp --setup
Claude Code Claude Desktop Cursor Copilot Windsurf Gemini CLI Codex CLI any stdio MCP client
▶ It’s Monday, 9:07—watch what blew up overnight · interactive walkthrough · setup guide
The moat · Why session auth · Grid & credentials · Install · 21 tools · Workflows · Local vs hosted
You ask “what blew up overnight?” and the agent reads the workspace instead of you. It reconstructs the 2 AM P1 from #incidents—owner, resolution, and the runbook step that is still wrong. It finds the printer PIN that has been waiting in #facilities for five months. Then it closes the handled loops—replies, reactions, read-state changes—only where you approve.
This is not screenshot automation. The agent calls Slack through a real MCP tool surface and receives typed results it can search, summarize, export, or act on.
The difficult part is not another chat tool. It is the operating layer underneath: browser-session extraction that names its failure stages, a credential lifecycle built for rotation, full-fidelity reads, guarded writes, and typed workflow output. The code is plain JavaScript in this repository—audit it before trusting it with a session.
--setup turns the Slack identity Chrome already holds into a local MCP server:
xoxc- token in Chrome's on-disk LevelDB;keychain_timeout, no_slack_cookie_row, cookie_decrypt_failed, and more—instead of returning one opaque error.Session credentials rotate. The server is built around that reality:
auto, keychain-only, and file storage backends;Read DMs and channels, search the workspace, export complete histories with threads, inspect unread state, and resolve users. Opt into blocks, attachments, files, reactions, metadata, and bot/app markers when text alone is not the real message.
Send a reply, add or remove a reaction, and mark a conversation read. Every workspace write path carries an MCP destructive annotation so compatible clients can put approval where it belongs.
Save workflow profiles for incident rooms, executive briefs, support inboxes, launch watches, and custom operations. The OSS primitives are local JSON; the optional hosted brain renders them into contract-shaped briefs.
Slack already knows who you are. The official path is a Slack-managed remote integration governed by workspace policy—a strong fit for organization-sanctioned deployments, documented by Slack with integration settings under admin control. This project is the direct local path: session-based auth from the browser session already in Chrome, local stdio, any stdio MCP client, and no Slack app or admin request. Same Slack identity. Same underlying permissions. A radically shorter path from your workspace to your agent.
| Slack official MCP | Slack MCP Server — local | |
|---|---|---|
| Starting point | A Slack-managed remote integration | The Slack session already in Chrome |
| Workspace control | Governed by workspace integration settings | No Slack app or admin request for the local path |
| Transport | Streamable HTTP | Local stdio |
| Client surface | Slack's supported partner integrations | Any stdio MCP client |
| Authentication | OAuth | Existing browser session |
| Credential lifetime | Managed OAuth | Rotating session with health checks and refresh |
| Product surface | Broad Slack-native capabilities | 21 focused tools across read, act, and automate |
| Runtime | Slack-managed | MIT code on your machine |
Treat browser-session automation as an acceptable-use decision for you and your workspace. The server acts as your signed-in Slack identity and cannot read a channel you cannot read or act as another user. It does not evade server-side retention, DLP, compliance exports, or audit controls.
"No admin request" means there is no Slack app installation to approve. It does not mean workspace activity disappears from Slack's systems. If your policy requires a sanctioned OAuth integration, use the official MCP or the optional hosted OAuth path.
Enterprise Grid. Grid runs aggressive session-anomaly detection. Browser-session automation can trip it, which flags the session and kills it, regardless of which tool drives the traffic. Outbound calls are paced by default to stay under burst thresholds (SLACK_MCP_MIN_REQUEST_INTERVAL_MS, default 350; SLACK_MCP_MAX_CONCURRENCY, default 3). Pacing lowers that risk; it does not remove it. On Grid, use the hosted OAuth tier or Slack's official MCP instead.
Credential extraction. --setup reads the newest xoxc- token from Chrome's on-disk LevelDB, snapshots the cookie SQLite database, retrieves Chrome Safe Storage from the macOS Keychain, and runs PBKDF2 + AES-128-CBC decryption locally. It writes the token file, Keychain entries, and non-secret metadata. It transmits nothing — the server talks to Slack and nowhere else.
This is the same access pattern credential stealers use. Chrome App-Bound Encryption exists to make this class of read harder, and infostealer families (Lumma, Vidar, Meduza) bypass it to lift live sessions. The mechanism here is comparable. What differs is that you run it, on your own machine, against your own session, and nothing leaves the host. The source is plain JavaScript in this repository; audit it before handing it a live session.
User cache. One cache exists: user-name lookups, populated on demand, 500 entries maximum, one-hour TTL. No message content, no channel history, and no persistent copy of the workspace is stored.
Node 22 or 24 recommended. Node 20 remains supported for the v4 line.
npx -y @jtalk22/slack-mcp --setup
Prefer a persistent CLI: npm install -g @jtalk22/slack-mcp then slack-mcp --setup.
Then:
slack_health_check.Use the same server command everywhere:
{
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"]
}
On macOS, setup can extract from Chrome and persist the selected storage backend. On other platforms, provide SLACK_TOKEN and SLACK_COOKIE through the client's environment configuration. Docker, HTTP, and detailed client examples live in docs/SETUP.md and docs/DEPLOYMENT-MODES.md.
| Client | Configuration surface | Status |
|---|---|---|
| Claude Code | claude mcp add or ~/.claude.json | Documented |
| Claude Desktop | Desktop MCP configuration | Verified |
| Cursor | .cursor/mcp.json | Documented |
| GitHub Copilot | .vscode/mcp.json | Documented |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | Documented |
| Gemini CLI | ~/.gemini/settings.json | Documented |
| Codex CLI | codex mcp add or ~/.codex/config.toml | Documented |
| Other clients | Any stdio MCP configuration | Protocol-compatible |
The local surface ships 21 tools today: 12 read-only Slack operations, 4 write-path tools that each carry an MCP destructive annotation so clients can gate workspace writes, 2 local workflow primitives, and 3 hosted-intelligence stubs that return a structured upgrade payload without making a Slack call. Four read tools accept include_rich_message_fields: true to surface attachments, blocks, files, reactions, and metadata—complete inputs and response contracts live in docs/API.md.
Advertising fewer tools. A client pays for the tool schema on every turn that carries it. SLACK_MCP_TOOLS=essentials advertises six tools — unread, history, search, thread, user lookup, send — costing roughly 985 estimated tokens of schema per turn against about 3,600 for all 21. SLACK_MCP_TOOLS=read advertises the 12 read-only Slack operations listed below, near 1,690. --tools=slack_x,slack_y takes an explicit set. The default stays all 21. Filtering changes what is advertised, not what is callable. Reproduce the numbers with node scripts/measure-tool-schema.js (a ~4-chars-per-token estimate).
| Tool | Purpose |
|---|---|
slack_health_check | Verify credentials and workspace identity |
slack_token_status | Inspect credential age, health, cache, profile, and storage state |
slack_refresh_tokens | Refresh local credentials from the browser session on macOS—reads Slack, writes only local state |
slack_list_conversations | List channels and DMs |
slack_conversations_history | Read channel or DM history with optional rich fields |
slack_get_full_conversation | Export complete history and threads |
slack_search_messages | Search across the workspace |
slack_get_thread | Read all replies in a thread |
slack_users_info | Resolve a user |
slack_list_users | Page through large workspace directories |
slack_users_search | Search users by name, display name, or email |
slack_conversations_unreads | Prioritize conversations with unread messages |
| Tool | Purpose | MCP safety |
|---|---|---|
slack_send_message | Send to a channel or DM | destructive |
slack_add_reaction | Add an emoji reaction | destructive |
slack_remove_reaction | Remove an emoji reaction | destructive |
slack_conversations_mark | Mark a conversation read | destructive |
| Tool | Purpose |
|---|---|
slack_workflow_save | Save a typed workflow profile to ~/.slack-mcp-workflows.json |
slack_workflows | List saved workflow profiles |
| Tool | Hosted result |
|---|---|
slack_smart_search | Semantic + lexical search over indexed Slack history |
slack_catch_me_up | Structured catch-up against a saved workflow profile |
slack_triage | Prioritized action queue with routing recommendations |
The OSS stubs make the hosted capability discoverable; they do not make a Slack call. slack_refresh_tokens only writes local credential state.
Bind a workflow kind to channels, priority people, retention, and cadence. The local profile primitives are free; hosted performs the indexed retrieval and contract-validated summarization that turn profiles into durable scheduled operations.
npx -y @jtalk22/slack-mcp --apply-template oncall-handoff --channels C012345,C067890
| Workflow kind | Contract |
|---|---|
incident_room | {incident_summary, timeline, open_risks, owner_gaps, next_actions} |
exec_brief | {summary, decisions, risks, asks, action_items} |
support_inbox | {open_threads, ack_lag, owner_gaps, escalations, next_actions} |
product_launch_watch | {launch_signals, feedback_themes, blockers, metrics, next_actions} |
custom | {summary, highlights, open_questions, next_actions} |
Six editable templates ship in the package: oncall-handoff, support-triage, exec-monday, sprint-tracker, customer-feedback, and incident-room.
Resolution is deterministic; first hit wins:
SLACK_TOKEN + SLACK_COOKIEchmod 600)Session credentials commonly rotate after one or two weeks. When Slack returns invalid_auth, not_authed, token_expired, token_revoked, account_inactive, or HTTP 401, run npx -y @jtalk22/slack-mcp --setup to recover locally. On macOS, slack_refresh_tokens or --refresh-tokens refreshes without leaving the client; the optional LaunchAgent in docs/SETUP.md keeps long-idle installations healthy.
| Mode | Behavior |
|---|---|
auto | Token file plus Keychain backup |
keychain-only | Keychain only; verified writes and no plaintext credential file |
file | Owner-only token file; Keychain is never touched |
The selected backend is remembered in non-secret metadata and used by the server, CLI, and optional refresh job. An unrecognized mode fails at startup instead of silently downgrading storage.
{
"mcpServers": {
"slack-work": {
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"],
"env": { "SLACK_MCP_PROFILE": "work" }
},
"slack-personal": {
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"],
"env": { "SLACK_MCP_PROFILE": "personal" }
}
}
}
Each profile gets its own token file, Keychain entries, metadata, and lock. Add SLACK_MCP_CHROME_PROFILE when the workspaces live in different Chrome profiles.
When local control is enough, stop here—everything above is MIT-licensed and runs on your machine. The local product is complete, not a crippled trial: hosted earns the upgrade through continuity, intelligence, and collaboration, not by holding ordinary Slack access hostage. Hosted exists for work that must survive a rotating browser session:
Local mode never contacts us; it runs on your machine and talks only to Slack. Hosted never receives a browser cookie; it runs on permanent OAuth, for work that has to survive a rotating session — unattended schedules, Enterprise Grid. Everything above is MIT-licensed and complete on its own.
npm audit signatures
A clean result verifies that the package signatures and attestations trace back through the published release chain. Inspect the package before handing it a live Slack session. Full policy: SECURITY.md.
Setup · API · Architecture · Compatibility · Deployment modes · Recipes · Troubleshooting · Roadmap
PRs are welcome. Read CONTRIBUTING.md and run node --check on touched JavaScript before submitting.
MIT — see LICENSE.
Not affiliated with Slack Technologies, Inc. This server uses browser-session credentials. Review your workspace's acceptable-use policy before running it.
npx -y @jtalk22/slack-mcp --setup
If this removes a Slack tab from your day, star the repository. Stars are how the next admin-blocked developer finds the local path.
SLACK_TOKENsecretSlack xoxc- token from browser session
SLACK_COOKIEsecretSlack xoxd- cookie from browser session
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent