使用说明
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中搜索消息。
- 安全消息发布: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(字符串,必填):格式为的通道IDCxxxxxxxxxx或其名称以开头#...或@...又称作#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(字符串,必填):格式为的通道IDCxxxxxxxxxx或其名称以开头#...或@...又称作#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.messagesAPI
- 参数:
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,imsort(字符串,可选):排序类型。允许值:popularity-按每个频道中的成员/参与者数量排序。limit(number,默认值:100):要返回的最大项目数。必须是介于1和1000之间的整数(最大值999)。cursor(字符串,可选):分页光标。将响应中最后一行和最后一列的值用作从上一个请求返回的next_cursor字段。
6.反应_添加:
在公共频道、私人频道或直接消息(DM或IM)对话中向消息添加表情符号反应。
注: 为了安全起见,默认情况下禁用添加反应。要启用,请设置
SLACK_MCP_ADD_MESSAGE_TOOL环境变量。如果设置为以逗号分隔的通道ID列表,则仅对这些特定通道启用反应。有关详细信息,请参阅下面的环境变量部分。
- 参数:
channel_id(字符串,必填):格式为的通道IDCxxxxxxxxxx或其名称以开头#...或@...又称作#general或@username_dm.timestamp(字符串,必填):要添加反应的消息的时间戳,格式为1234567890.123456.emoji(字符串,必需):作为反应添加的表情符号的名称(不带冒号)。例子:thumbsup,heart,rocket.
7.反应_删除:
从公共频道、私人频道或直接消息(DM或IM)对话中的消息中删除表情符号反应。
注: 删除反应遵循与以下相同的权限模型
reactions_add。要启用,请设置SLACK_MCP_ADD_MESSAGE_TOOL环境变量。
- 参数:
channel_id(字符串,必填):格式为的通道IDCxxxxxxxxxx或其名称以开头#...或@...又称作#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(用于加入/离开)
资源
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_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的官方产品。
