适用于Slack工作区的Model Context Protocol (MCP)服务器。最强大的MCP Slack服务器——支持Stdio、SSE和HTTP传输方式,代理设置,私信(DM),群组私信(Group DM),智能历史记录抓取(按日期或数量),可以通过OAuth运行,也可以在完全隐身模式下运行,无需任何权限和范围。
[!重要] 我们需要您的支持!每月有超过30,000名工程师访问此仓库,其中已有9,000多人正在使用它。
如果您欣赏我们贡献者为此项目所做的努力,请考虑给这个仓库点个星。
功能丰富的Slack MCP服务器具有以下特性:
#名称 @查找:从频道和线程中获取消息,包括活动消息,并通过名称(例如#general)或ID检索频道。conversations_add_message工具以确保安全。可以通过环境变量启用它,并可选地限制特定频道。

根据channel_id从频道(或私信)中获取消息,响应中的最后一行/列用于分页的cursor参数(如果非空)
channel_id(字符串,必需):频道ID,格式为Cxxxxxxxxxx,或以#...或@...开头的名称,例如#general或@username_dm。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时必须为空。根据channelID和thread_ts获取对话中的消息线程,响应中的最后一行/列用于分页的cursor参数(如果非空)。
channel_id(字符串,必需):频道ID,格式为Cxxxxxxxxxx,或以#...或@...开头的名称,例如#general或@username_dm。thread_ts(字符串,必需):线程父消息或线程中消息的唯一标识符。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时必须为空。向公共频道、私人频道或直接消息(DM,或IM)对话中添加消息,通过channel_id和thread_ts。
注意:默认情况下禁用消息发布以确保安全。要启用,请设置
SLACK_MCP_ADD_MESSAGE_TOOL环境变量。如果设置为逗号分隔的频道ID列表,则仅允许这些特定频道发布消息。详情见下方环境变量部分。
channel_id(字符串,必需):频道ID,格式为Cxxxxxxxxxx,或以#...或@...开头的名称,例如#general或@username_dm。thread_ts(字符串,可选):线程父消息或线程中消息的唯一标识符。ts必须是现有消息的时间戳,格式为1234567890.123456,该消息有0或多条回复。可选,如果没有提供则消息将被添加到频道本身,否则将被添加到线程。payload(字符串,必需):指定内容类型格式的消息负载。示例:'Hello, world!' 对于text/plain或'# Hello, world!' 对于text/markdown。content_type(字符串,默认为"text/markdown"):消息的内容类型。默认为'text/markdown'。允许的值:'text/markdown','text/plain'。使用过滤器在公共频道、私人频道或直接消息(DM,或IM)对话中搜索消息。所有过滤器都是可选的,如果没有提供,则需要search_query。
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或显示名称筛选特定用户在线程和私信中的消息。示例:U1234567890或@username。如果没有提供,则搜索所有线程和私信。filter_users_from(字符串,可选):通过ID或显示名称筛选来自特定用户的消息。示例:U11234567890或@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(布尔值,默认为false):如果为true,则响应将仅包含来自线程的消息。默认为布尔值false。cursor(字符串,默认为""):分页的游标。使用响应中最后一行和列的值作为上一次请求返回的next_cursor字段。limit(数字,默认为20):要返回的最大项目数。必须是一个介于1和100之间的整数。获取频道列表
channel_types(字符串,必需):逗号分隔的频道类型。允许的值:mpim,im,public_channel,private_channel。示例:public_channel,private_channel,imsort(字符串,可选):排序类型。允许的值:popularity - 按每个频道的成员/参与者数量排序。limit(数字,默认为100):要返回的最大项目数。必须是一个介于1和1000之间的整数(最大999)。cursor(字符串,可选):分页的游标。使用响应中最后一行和列的值作为上一次请求返回的next_cursor字段。Slack MCP服务器暴露两个特殊目录资源,便于访问工作区元数据:
slack://<workspace>/channels — 频道目录获取工作区内所有频道的CSV目录,包括公共频道、私人频道、私信和群组私信。
slack://<workspace>/channelstext/csvid: 频道ID(例如,C1234567890)name: 频道名称(例如,#general,@username_dm)topic: 频道主题(如果有)purpose: 频道目的/描述memberCount: 频道中的成员数量slack://<workspace>/users — 用户目录获取工作区内所有用户的CSV目录。
slack://<workspace>/userstext/csvuserID: 用户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_PORT | 否 | 13080 | MCP服务器监听的端口 |
SLACK_MCP_HOST | 否 | 127.0.0.1 | MCP服务器监听的主机 |
SLACK_MCP_API_KEY | 否 | nil | SSE和HTTP传输的Bearer令牌 |
SLACK_MCP_PROXY | 否 | nil | 出站请求的代理URL |
SLACK_MCP_USER_AGENT | 否 | nil | 自定义User-Agent(针对企业级Slack环境) |
SLACK_MCP_CUSTOM_TLS | 否 | nil | 根据SLACK_MCP_USER_AGENT或默认User-Agent向Slack服务器发送自定义TLS握手。(针对企业级Slack环境) |
SLACK_MCP_SERVER_CA | 否 | nil | CA证书路径 |
SLACK_MCP_SERVER_CA_TOOLKIT | 否 | nil | 注入HTTPToolkit CA证书到根信任存储以进行中间人调试 |
SLACK_MCP_SERVER_CA_INSECURE | 否 | false | 信任所有不安全请求(不推荐) |
SLACK_MCP_ADD_MESSAGE_TOOL | 否 | nil | 通过设置为true来启用所有频道的消息发布,或设置为逗号分隔的频道ID列表以白名单特定频道,或在频道ID前使用!以允许除指定频道外的所有频道,而空值默认禁用发布。 |
SLACK_MCP_ADD_MESSAGE_MARK | 否 | nil | 当启用conversations_add_message工具时,任何新发送的消息都将自动标记为已读。 |
SLACK_MCP_ADD_MESSAGE_UNFURLING | 否 | nil | 启用以让Slack展开发布的链接,或设置为逗号分隔的域名列表(例如github.com,slack.com)以仅对它们进行白名单展开。如果文本包含白名单和未知域名,出于安全原因将禁用展开。 |
SLACK_MCP_USERS_CACHE | 否 | .users_cache.json | 用户缓存文件路径。用于缓存Slack用户信息以避免启动时重复调用API。 |
SLACK_MCP_CHANNELS_CACHE | 否 | .channels_cache_v2.json | 频道缓存文件路径。用于缓存Slack频道信息以避免启动时重复调用API。 |
SLACK_MCP_LOG_LEVEL | 否 | info | stdout或stderr的日志级别。有效值为:debug,info,warn,error,panic和fatal |
*您需要xoxp或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_check_mark: | 无限制,完全功能的Slack MCP服务器。 |
# 使用stdio传输运行检查器
npx @modelcontextprotocol/inspector go run mcp/mcp-server.go --transport stdio
# 查看日志
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
MIT许可 - 详见LICENSE文件。这不是官方的Slack产品。