Slack消息控制协议服务器

Slack MCP服务器是一个功能丰富的Slack工作区消息管理工具,支持多种传输协议、代理设置、消息搜索和用户管理功能。

  • by korotovsky
  • Go
  • 本地部署
  • 1879 星标
  • 更新于
在 GitHub 查看 korotovsky/slack-mcp-server

使用说明

Slack MCP服务器

Slack工作区的模型上下文协议(MCP)服务器。最强大的MCP Slack服务器——支持Stdio、SSE和HTTP传输、代理设置、DM、组DM、智能历史获取(按日期或计数),可以通过OAuth或完全隐形模式工作,在工作区中没有权限和范围😏.

[!重要]
我们需要您的支持!每月有超过30000名工程师访问这个存储库,其中9000多名已经在使用它。

如果你欣赏我们的工作 贡献者 如果您已经投入了这个项目,请考虑给存储库打一颗星。

此功能丰富的Slack MCP服务器具有:

  • 隐形和OAuth模式:运行服务器而不需要额外的权限或机器人安装(隐形模式),或使用安全的OAuth令牌进行访问,而无需刷新或从浏览器中提取令牌(OAuth模式)。
  • 企业工作区支持:可以与Enterprise Slack设置集成。
  • 通道和线程支持 #Name @Lookup:从通道和线程中获取消息,包括活动消息,并使用通道的名称(例如#general)及其ID检索通道。
  • 智能历史:按日期(d1、7d、1m)或消息计数分页获取消息。
  • 未读信息:通过优先级排序(DM>合作伙伴渠道>内部)、@提及过滤和标记为已读支持,高效地跨渠道获取所有未读消息。
  • 搜索邮件:使用日期、用户和内容等各种过滤器在频道、线程和DM中搜索消息。
  • 安全消息发布:The conversations_add_message 为了安全起见,默认情况下禁用该工具。通过环境变量启用它,并可选择通道限制。
  • DM和组DM支持:检索直接消息和分组直接消息。
  • 嵌入式用户信息:将用户信息嵌入消息中,以获得更好的上下文。
  • 缓存支持:缓存用户和频道以实现更快的访问。
  • Stdio/SSE/HTTP传输和代理支持:将服务器与支持Stdio、SSE或HTTP传输的任何MCP客户端一起使用,并将其配置为在需要时通过代理路由传出请求。

分析演示

添加消息演示

工具

1.对话_历史:

通过channel_id从通道(或DM)获取消息,如果响应中的最后一行/列不为空,则用作分页的“cursor”参数

  • 参数:
    • channel_id (字符串,必填):- channel_id (string):Cxxxxxxxxxx格式的通道ID或以以下字符开头的名称 #... 或 @... 又称作 #general 或 @username_dm.
    • include_activity_messages (boolean,默认值:false):如果为true,响应将包括活动消息,例如 channel_join 或 channel_leave默认值为布尔值false。
    • cursor (字符串,可选):分页光标。将响应中最后一行和最后一列的值用作从上一个请求返回的next_cursor字段。
    • limit (字符串,默认值:“1d”):以最大时间范围(例如1d-1天、1w-1周、30d-30天、90d-90天,这是免费层历史记录的默认限制)或消息数量(例如50)的格式获取的消息限制。提供“cursor”时必须为空。

2.对话回复:

通过channelID获取发布到对话中的消息线索,并 thread_ts,响应中的最后一行/列用作 cursor 分页参数(如果不为空)。

  • 参数:
    • channel_id (字符串,必填):格式为的通道ID Cxxxxxxxxxx 或其名称以开头 #... 或 @... 又称作 #general 或 @username_dm.
    • thread_ts (string,必填):线程父消息或线程中消息的唯一标识符。ts必须是格式为的时间戳 1234567890.123456 对于具有0个或更多回复的现有邮件。
    • include_activity_messages (布尔值,默认值:false):如果为true,响应将包括活动消息,如“channel_join”或“channel_leave”。默认值为布尔值false。
    • cursor (字符串,可选):分页光标。将响应中最后一行和最后一列的值用作从上一个请求返回的next_cursor字段。
    • limit (字符串,默认值:“1d”):以最大时间范围(例如1d-1天、1w-1周、30d-30天、90d-90天,这是免费层历史记录的默认限制)或消息数量(例如50)的格式获取的消息限制。提供“cursor”时必须为空。

3.对话_添加_消息

通过channel_id和thread_ts将消息添加到公共通道、专用通道或直接消息(DM或IM)对话中。

注: 为了安全起见,默认情况下禁用发布消息。要启用,请设置 SLACK_MCP_ADD_MESSAGE_TOOL 环境变量。如果设置为以逗号分隔的频道ID列表,则仅对这些特定频道启用过账。有关详细信息,请参阅下面的环境变量部分。

  • 参数:
    • channel_id (字符串,必填):格式为的通道ID Cxxxxxxxxxx 或其名称以开头 #... 或 @... 又称作 #general 或 @username_dm.
    • thread_ts (string,可选):线程父消息或thread_ts中消息的唯一标识符必须是格式为的时间戳 1234567890.123456 对于具有0个或更多回复的现有邮件。可选,如果没有提供,则消息将被添加到通道本身,否则它将添加到线程中。
    • payload (字符串,必填):指定content_type格式的消息有效载荷。例如:“你好,世界!'用于文本/纯文本或'#你好,世界!'用于文本/标记。
    • content_type (字符串,默认值:“text/markdown”):消息的内容类型。默认值为“text/markdown”。允许的值:“text/markdown”、“text/plain”。

4.对话_搜索_消息

使用过滤器在公共频道、私人频道或直接消息(DM或IM)对话中搜索消息。所有过滤器都是可选的,如果没有提供,则需要search_query。

备注:使用机器人令牌时,此工具不可用(xoxb-*).Bot令牌不能使用 search.messages API

  • 参数:
    • search_query (字符串,可选):搜索查询以过滤邮件。示例:“营销报告”或Slack消息的完整URL,例如“https://slack.com/archives/C1234567890/p1234567890123456',则该工具将返回一条与给定URL匹配的消息,因此所有其他参数都将被忽略。
    • filter_in_channel (字符串,可选):按特定通道的ID或名称过滤该通道中的消息。例子: C1234567890 或 #general。如果没有提供,将搜索所有频道。
    • filter_in_im_or_mpim (字符串,可选):按ID或名称过滤直接消息(DM)或多人直接消息(MPIM)对话中的消息。例子: D1234567890 或 @username_dm。如果没有提供,将搜索所有DM和MPIM。
    • filter_users_with (字符串,可选):根据特定用户的ID或线程和DM中的显示名称筛选消息。例子: U1234567890 或 @username。如果没有提供,将搜索所有线程和DM。
    • filter_users_from (字符串,可选):根据特定用户的ID或显示名称过滤来自该用户的消息。例子: U1234567890 或 @username。如果没有提供,将搜索所有用户。
    • filter_date_before (字符串,可选):按格式筛选在特定日期之前发送的邮件 YYYY-MM-DD示例: 2023-10-01, July, Yesterday 或 Today。如果未提供,将搜索所有日期。
    • filter_date_after (字符串,可选):按格式筛选特定日期后发送的邮件 YYYY-MM-DD示例: 2023-10-01, July, Yesterday 或 Today。如果未提供,将搜索所有日期。
    • filter_date_on (字符串,可选):按格式筛选在特定日期发送的邮件 YYYY-MM-DD示例: 2023-10-01, July, Yesterday 或 Today。如果未提供,将搜索所有日期。
    • filter_date_during (字符串,可选):按格式筛选特定时间段内发送的邮件 YYYY-MM-DD示例: July, Yesterday 或 Today。如果未提供,将搜索所有日期。
    • filter_threads_only (boolean,默认值:false):如果为true,响应将仅包含来自线程的消息。默认值为布尔值false。
    • cursor (字符串,默认值:“”):分页光标。将响应中最后一行和最后一列的值用作从上一个请求返回的next_cursor字段。
    • limit (number,默认值:20):要返回的最大项目数。必须是介于1和100之间的整数。

5.频道列表:

获取频道列表

  • 参数:
    • channel_types (字符串,必填):逗号分隔的通道类型。允许值: mpim, im, public_channel, private_channel示例: public_channel,private_channel,im
    • sort (字符串,可选):排序类型。允许值: popularity -按每个频道中的成员/参与者数量排序。
    • limit (number,默认值:100):要返回的最大项目数。必须是介于1和1000之间的整数(最大值999)。
    • cursor (字符串,可选):分页光标。将响应中最后一行和最后一列的值用作从上一个请求返回的next_cursor字段。

6.反应_添加:

在公共频道、私人频道或直接消息(DM或IM)对话中向消息添加表情符号反应。

注: 为了安全起见,默认情况下禁用添加反应。要启用,请设置 SLACK_MCP_REACTION_TOOL 环境变量。如果设置为以逗号分隔的通道ID列表,则仅对这些特定通道启用反应。有关详细信息,请参阅下面的环境变量部分。

  • 参数:
    • channel_id (字符串,必填):格式为的通道ID Cxxxxxxxxxx 或其名称以开头 #... 或 @... 又称作 #general 或 @username_dm.
    • timestamp (字符串,必填):要添加反应的消息的时间戳,格式为 1234567890.123456.
    • emoji (字符串,必需):作为反应添加的表情符号的名称(不带冒号)。例子: thumbsup, heart, rocket.

7.反应_删除:

从公共频道、私人频道或直接消息(DM或IM)对话中的消息中删除表情符号反应。

注: 删除反应遵循与以下相同的权限模型 reactions_add。要启用,请设置 SLACK_MCP_REACTION_TOOL 环境变量。

  • 参数:
    • channel_id (字符串,必填):格式为的通道ID Cxxxxxxxxxx 或其名称以开头 #... 或 @... 又称作 #general 或 @username_dm.
    • timestamp (字符串,必填):要从中删除反应的消息的时间戳,格式为 1234567890.123456.
    • emoji (字符串,必需):作为反应删除的表情符号的名称(不带冒号)。例子: thumbsup, heart, rocket.

8.用户搜索:

按姓名、电子邮件或显示名称搜索用户。返回用户详细信息和DM通道ID(如果可用)。

注: 对于OAuth令牌(xoxp/xoxb),此工具使用模式匹配搜索本地用户缓存。用于浏览器会话令牌(xoxc/xoxd),它使用Slack edge API进行实时搜索。

  • 参数:

    • query (字符串,必填):搜索查询-匹配真实姓名、显示名称、用户名或电子邮件。
    • limit (number,默认值:10):要返回的最大结果数(1-100)。
  • 退货: 带字段的CSV:

    • UserID:用户ID(例如。, U1234567890)
    • UserName:Slack用户名
    • RealName:用户的真实姓名
    • DisplayName:用户的显示名称
    • Email:用户的电子邮件地址
    • Title:用户的职位
    • DMChannelID:DM通道ID(如果缓存中有)(用于快速消息传递)

9.用户组列表:

列出工作区中的所有用户组(子组)。

  • 参数:

    • include_users (boolean,默认值:false):包括每个组中的用户ID列表。
    • include_count (布尔值,默认值:true):包括每个组的用户计数。
    • include_disabled (布尔值,默认值:false):包括已禁用/已存档的组。
  • 退货: CSV包含以下字段:id、name、handle、description、user_count、is_external

所需的OAuth作用域: usergroups:read

10.用户组创建:

在工作区中创建新的用户组。

  • 参数:

    • name (字符串,必填):用户组的名称(例如,“工程团队”)。
    • handle (string,可选):提到不带@的句柄(例如“engineering”)。如果没有提供,Slack将自动生成一个。
    • description (字符串,可选):组的目的或描述。
    • channels (字符串,可选):默认频道的逗号分隔频道ID,其中组提及将突出显示。
  • 退货: JSON,包含创建的组详细信息(id、名称、句柄、描述)

所需的OAuth作用域: usergroups:write

11.用户组_更新:

更新现有用户组的元数据。

  • 参数:

    • usergroup_id (字符串,必填):用户组的ID(例如“S1234567890”)。
    • name (字符串,可选):组的新名称。
    • handle (字符串,可选):新的提及句柄。
    • description (字符串,可选):新描述。
    • channels (字符串,可选):新的默认频道(逗号分隔的ID)。这将替换现有的默认通道。
  • 退货: 带有更新组详细信息的JSON

所需的OAuth作用域: usergroups:write

12.用户组_用户更新:

更新用户组的成员。这将替换所有现有成员。

  • 参数:

    • usergroup_id (字符串,必填):用户组的ID(例如“S1234567890”)。
    • users (字符串,必填):以逗号分隔的用户ID设置为成员(例如,“U123,U456,U789”)。
  • 退货: JSON,包含更新的组详细信息,包括新用户列表

所需的OAuth作用域: usergroups:write

13.用户组_我:

管理您的用户组成员资格:列出您所在的组、加入组或离开组。

  • 参数:

    • action (string,必填):要执行的操作- list 查看您的群组, join 加上你自己, leave 移除你自己。
    • usergroup_id (字符串,可选):用户组的ID(例如,“S1234567890”)。需要 join 和 leave 行动。
  • 退货:

    • 对于 list:CSV与您所属的组
    • 对于 join/leave:带有结果消息和更新组信息的JSON

所需的OAuth作用域: usergroups:read (列表), usergroups:read + usergroups:write (用于加入/离开)

14.对话_标题

高效地跨所有渠道获取未读消息。使用单个API调用来识别未读取的通道,然后仅获取这些消息。结果按优先级排列:DM>合作伙伴渠道(Slack Connect)>内部渠道。

注: 此工具最适合浏览器会话令牌(xoxc/xoxd),使用高效 client.counts API对于标准OAuth令牌(xoxp),一种回退方法,使用 conversations.info 使用,每个通道需要一个API调用,并且对于大型工作空间可能较慢。不适用于机器人代币(xoxb).

  • 参数:
    • include_messages (boolean,默认值:true):如果为true,则返回实际未读消息。如果为false,则仅返回未读频道的摘要。
    • channel_types (字符串,默认值:“all”):按通道类型筛选: all, dm (直接消息), group_dm (DM组), partner (外部共享信道), internal (常规工作区频道)。
    • max_channels (数字,默认值:50):从中获取未读内容的最大通道数。
    • max_messages_per_channel (数字,默认值:10):每个通道可获取的最大消息数。
    • mentions_only (boolean,默认值:false):如果为true,则只返回有@mentions的频道。注意:此过滤器仅适用于浏览器令牌;OAuth令牌将返回所有未读通道。

15.对话标记

将通道或DM标记为已读。

注: 为了安全起见,默认情况下禁用将消息标记为已读。要启用,请设置 SLACK_MCP_MARK_TOOL 环境变量到 true 或 1。有关详细信息,请参阅下面的环境变量部分。

  • 参数:
    • channel_id (字符串,必填):格式为的通道ID Cxxxxxxxxxx 或其名称以开头 #... 或 @... (例如。, #general, @username).
    • ts (字符串,可选):要标记为已读的消息的时间戳。如果未提供,则将所有消息标记为已读取。

16.保存列表

从Slack的“稍后保存”面板中列出已保存的项目。返回用户已保存的项目,以及可选的消息内容。这取代了已弃用的 stars.list API更新日志).

注: 此工具需要浏览器会话令牌(xoxc/xoxd).它不适用于标准OAuth(xoxp)或bot(xoxb)代币。

  • 参数:
    • filter (字符串,默认值 "saved"):筛选已保存的项目: "saved" (活动/进行中), "completed" (标记为已完成), "archived".
    • limit (数字,默认值 50):要退回的最大项目数。自动分页。
    • include_messages (布尔值,默认值 true):如果为true,则获取实际保存的消息内容。如果为false,则仅返回元数据。
    • max_messages_per_item (数字,默认值 5):每个已保存项目可获取的最大消息数(用于线程回复)。

17.保存更新

更新已保存的项目:标记为已完成,设置截止日期/提醒,或两者兼而有之。使用 item_id 和 ts 值从 saved_list 输出。这取代了已弃用的 stars.add/stars.remove API。

注: 此工具需要浏览器会话令牌(xoxc/xoxd).它不适用于标准OAuth(xoxp)或bot(xoxb)代币。

  • 参数:
    • item_id (string,必填):保存的消息所在的通道/DM ID(来自 saved_list 输出)。
    • ts (string,必填):保存项目的消息时间戳(来自 saved_list 输出)。
    • mark (字符串,可选):设置为 "completed" 将项目标记为已完成。
    • date_due (数字,可选):到期日/提醒的Unix时间戳。设为 0 以清除。

18.已保存_已完成

从“稍后保存”面板中清除所有已完成的已保存项目。这是一个批量操作,用于删除所有项目 state="completed".

注: 此工具需要浏览器会话令牌(xoxc/xoxd).它不适用于标准OAuth(xoxp)或bot(xoxb)代币。

  • 参数: 没有。

资源

Slack MCP Server公开了两个特殊的目录资源,便于访问工作区元数据:

1. slack://<workspace>/channels --频道目录

获取工作区中所有频道的CSV目录,包括公共频道、私人频道、DM和组DM。

  • URI: slack://<workspace>/channels
  • 格式: text/csv
  • 领域:
    • id:频道ID(例如。, C1234567890)
    • name:频道名称(例如。, #general, @username_dm)
    • topic:频道主题(如有)
    • purpose:频道目的/描述
    • memberCount:频道中的成员数量

2. slack://<workspace>/users --用户目录

获取工作区中所有用户的CSV目录。

  • URI: slack://<workspace>/users
  • 格式: text/csv
  • 领域:
    • userID:用户ID(例如。, U1234567890)
    • userName:Slack用户名(例如。, john)
    • realName:用户的真实姓名(例如。, John Doe)

安装指南

环境变量(快速参考)

变量 必填? 默认 说明
SLACK_MCP_XOXC_TOKEN 是* nil Slack浏览器令牌(xoxc-...)
SLACK_MCP_XOXD_TOKEN 是* nil Slack浏览器cookie d (xoxd-...)
SLACK_MCP_XOXP_TOKEN 是* nil 用户OAuth令牌(xoxp-...)--xoxc/xoxd的替代品
SLACK_MCP_XOXB_TOKEN 是* nil 机器人令牌(xoxb-...)--xoxp/xoxc/xoxd的替代品。Bot的访问权限有限(仅限受邀频道,无搜索)
SLACK_MCP_PORT 没有 13080 MCP服务器监听端口
SLACK_MCP_HOST 没有 127.0.0.1 MCP服务器监听的主机
SLACK_MCP_API_KEY 没有 nil SSE和HTTP传输的承载令牌
SLACK_MCP_PROXY 没有 nil 传出请求的代理URL
SLACK_MCP_USER_AGENT 没有 nil 自定义用户代理(适用于企业Slack环境)
SLACK_MCP_CUSTOM_TLS 没有 nil 基于以下内容向Slack服务器发送自定义TLS握手 SLACK_MCP_USER_AGENT 或默认用户代理。(适用于企业Slack环境)
SLACK_MCP_SERVER_CA 没有 nil CA证书的路径
SLACK_MCP_SERVER_CA_TOOLKIT 没有 nil 将HTTPToolkit CA证书注入根信任存储以进行MitM调试
SLACK_MCP_SERVER_CA_INSECURE 没有 false 信任所有不安全的请求(不建议)
SLACK_MCP_ADD_MESSAGE_TOOL 没有 nil 通过以下方式启用消息发布 conversations_add_message 通过将其设置为 true 对于所有频道,将以逗号分隔的频道ID列表添加到特定频道的白名单中,或使用 ! 在信道ID之前,允许除指定信道ID之外的所有信道ID。如果为空,则仅在中明确列出时才注册该工具 SLACK_MCP_ENABLED_TOOLS.
SLACK_MCP_ADD_MESSAGE_MARK 没有 nil 何时 conversations_add_message 已启用(通过 SLACK_MCP_ADD_MESSAGE_TOOL 或 SLACK_MCP_ENABLED_TOOLS),将其设置为 true 将自动将已发送的消息标记为已读。
SLACK_MCP_ADD_MESSAGE_UNFURLING 没有 nil 允许Slack展开发布的链接或设置逗号分隔的域列表,例如。 github.com,slack.com 白名单只为他们展开。如果文本包含白名单和未知域,出于安全原因,将禁用展开。
SLACK_MCP_REACTION_TOOL 没有 nil 启用 reactions_add 和 reactions_remove 工具设置为 true 对于所有频道,将以逗号分隔的频道ID列表添加到特定频道的白名单中,或使用 ! 在信道ID之前,允许除指定信道ID之外的所有信道ID。如果为空,则只有在中明确列出时才会注册这些工具 SLACK_MCP_ENABLED_TOOLS.
SLACK_MCP_ATTACHMENT_TOOL 没有 nil 启用 attachment_get_data 通过设置工具 true, 1,或 yes。不支持通道级别限制。如果为空,则仅在中明确列出时才注册该工具 SLACK_MCP_ENABLED_TOOLS.
SLACK_MCP_MARK_TOOL 没有 nil 启用 conversations_mark 通过设置工具 true 或 1。默认情况下禁用,以防止意外将消息标记为已读。
SLACK_MCP_USERS_CACHE 没有 ~/Library/Caches/slack-mcp-server/users_cache.json (macOS)
~/.cache/slack-mcp-server/users_cache.json (Linux)
%LocalAppData%/slack-mcp-server/users_cache.json (Windows)
用户缓存文件的路径。用于缓存Slack用户信息,以避免启动时重复调用API。
SLACK_MCP_CHANNELS_CACHE 没有 ~/Library/Caches/slack-mcp-server/channels_cache_v2.json (macOS)
~/.cache/slack-mcp-server/channels_cache_v2.json (Linux)
%LocalAppData%/slack-mcp-server/channels_cache_v2.json (Windows)
通道缓存文件的路径。用于缓存Slack频道信息,以避免启动时重复调用API。
SLACK_MCP_LOG_LEVEL 没有 info stdout或stderr的日志级别。有效值为: debug, info, warn, error, panic 和 fatal
SLACK_MCP_GOVSLACK 没有 nil 设置为 true 启用 GovSlack 模式。将API调用路由到 slack-gov.com 端点而不是 slack.com 适用于符合FedRAMP标准的政府工作空间。
SLACK_MCP_ENABLED_TOOLS 没有 nil 以逗号分隔的要注册的工具列表。如果为空,则注册所有只读工具和用户组工具;书写工具(conversations_add_message, reactions_add, reactions_remove, attachment_get_data)require必须在此处明确列出其特定的env-var-OR。当这里列出写入工具时,它是在没有通道限制的情况下启用的。可用工具: conversations_history, conversations_replies, conversations_add_message, reactions_add, reactions_remove, attachment_get_data, conversations_search_messages, channels_list, usergroups_list, usergroups_me, usergroups_create, usergroups_update, usergroups_users_update.

*您需要以下之一: xoxp (用户), xoxb (bot),或两者兼而有之 xoxc/xoxd 用于身份验证的令牌。

限制矩阵和缓存

用户缓存 频道缓存 限制
:x: :x: 无缓存,无用户数据LLM上下文增强,工具 channels_list 将完全无法运行。工具 conversations_* 功能有限,您将无法通过以下方式搜索邮件 @userHandle 或 #channel-name,通过以下方式获取消息 @userHandle 或 #channel-name 也不会有。
:white_check_mark: :x: 无通道缓存,工具 channels_list 将完全无法运行。工具 conversations_* 功能有限,您将无法通过以下方式搜索邮件 @userHandle 或 #channel-name,通过以下方式获取消息 @userHandle 或 #channel-name 也不会有。
:white_check_mark: :white_ccheck_mark: -无限制,功能齐全的Slack MCP服务器。

调试工具

# Run the inspector with stdio transport
npx @modelcontextprotocol/inspector go run mcp/mcp-server.go --transport stdio

# View logs
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log

安全

  • 永远不要共享API令牌
  • 确保.env文件的安全性和私密性

许可证

麻省理工学院授权-见 许可证 文件。这不是Slack的官方产品。