korotovsky/slack-mcp-server

GitHub: korotovsky/slack-mcp-server

功能完备的 Slack MCP 服务器,让 AI 模型能够读取、搜索和管理 Slack 消息,支持隐身模式和多种认证方式。

Stars: 1427 | Forks: 252

# Slack MCP 服务器 [![Trust Score](https://archestra.ai/mcp-catalog/api/badge/quality/korotovsky/slack-mcp-server)](https://archestra.ai/mcp-catalog/korotovsky__slack-mcp-server) 用于 Slack Workspaces 的 Model Context Protocol (MCP) 服务器。功能最强大的 MCP Slack 服务器 —— 支持 Stdio、SSE 和 HTTP 传输、代理设置、DM、Group DM、智能历史记录获取(按日期或数量),可以通过 OAuth 工作,也可以在 Workspace 中以完全隐身模式运行,无需权限和作用域 😏。 这个功能丰富的 Slack MCP 服务器具有: - **隐身模式和 OAuth 模式**:运行服务器无需额外权限或安装 bot(隐身模式),或使用安全的 OAuth token 进行访问,无需刷新或从浏览器中提取 token(OAuth 模式)。 - **Enterprise Workspaces 支持**:可以与 Enterprise Slack 设置集成。 - **支持 `#Name` `@Lookup` 的频道和线程**:从频道和线程获取消息,包括活动消息,并使用频道名称(例如 #general)及其 ID 检索频道。 - **智能历史记录**:按日期(d1、7d、1m)或消息数量分页获取消息。 - **未读消息**:高效获取所有频道的未读消息,支持优先级排序(DM > 合作伙伴频道 > 内部)、@mention 过滤和标记为已读。 - **搜索消息**:使用日期、用户和内容等各种过滤器在频道、线程和 DM 中搜索消息。 - **安全的消息发布**:出于安全考虑,`conversations_add_message` 工具默认处于禁用状态。可通过环境变量启用它,并附带可选的频道限制。 - **DM 和 Group DM 支持**:检索直接消息和群组直接消息。 - **嵌入用户信息**:在消息中嵌入用户信息,以提供更好的上下文。 - **缓存支持**:缓存用户和频道以便更快访问。 - **Stdio/SSE/HTTP 传输和代理支持**:将服务器与任何支持 Stdio、SSE 或 HTTP 传输的 MCP 客户端一起使用,并根据需要将其配置为通过代理路由传出请求。 ### Analytics 演示 ![Analytics](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/1735054092175220.gif) ### Add Message 演示 ![Add Message](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d4bc8da898175222.gif) ## Tools ### 1. conversations_history: 通过 channel_id 从频道(或 DM)获取消息,如果响应中的最后一行/列不为空,则将其用作分页的 'cursor' 参数 - **参数:** - `channel_id` (string, 必需): - `channel_id` (string): ID of the channel in format Cxxxxxxxxxx or its name starting with `#...` or `@...` aka `#general` or `@username_dm`. - `include_activity_messages` (boolean, 默认值: false): 如果为 true,响应将包含活动消息,例如 `channel_join` 或 `channel_leave`。默认值为布尔值 false。 - `cursor` (string, 可选): 分页游标。使用上一次请求返回的响应中最后一行和最后一列的值作为 next_cursor 字段。 - `limit` (string, 默认值: "1d"): 获取消息的限制,格式为最大时间范围(例如 1d - 1 天,1w - 1 周,30d - 30 天,90d - 90 天,这是免费层级历史的默认限制)或消息数量(例如 50)。提供 'cursor' 时必须为空。 ### 2. conversations_replies: 通过 channelID 和 `thread_ts` 获取发布到对话的消息线程,如果响应中的最后一行/列不为空,则将其用作分页的 `cursor` 参数。 - **参数:** - `channel_id` (string, 必需): ID of the channel in format `Cxxxxxxxxxx` or its name starting with `#...` or `@...` aka `#general` or `@username_dm`. - `thread_ts` (string, 必需): 线程父消息或线程中消息的唯一标识符。ts 必须是现有消息的时间戳,格式为 `1234567890.123456`,且该消息具有 0 个或多个回复。 - `include_activity_messages` (boolean, 默认值: false): 如果为 true,响应将包含活动消息,例如 'channel_join' 或 'channel_leave'。默认值为布尔值 false。 - `cursor` (string, 可选): 分页游标。使用上一次请求返回的响应中最后一行和最后一列的值作为 next_cursor 字段。 - `limit` (string, 默认值: "1d"): 获取消息的限制,格式为最大时间范围(例如 1d - 1 天,1w - 1 周,30d - 30 天,90d - 90 天,这是免费层级历史的默认限制)或消息数量(例如 50)。提供 'cursor' 时必须为空。 ### 3. conversations_add_message 通过 channel_id 和 thread_ts 向公共频道、私有频道或直接消息(DM 或 IM)对话添加消息。 - **参数:** - `channel_id` (string, 必需): ID of the channel in format `Cxxxxxxxxxx` or its name starting with `#...` or `@...` aka `#general` or `@username_dm`. - `thread_ts` (string, 可选): 线程父消息或线程中消息的唯一标识符。ts 必须是现有消息的时间戳,格式为 `1234567890.123456`,且该消息具有 0 个或多个回复。可选,如果未提供,消息将添加到频道本身,否则将添加到线程中。 - `payload` (string, 必需): 指定 content_type 格式的消息负载。示例:'Hello, world!' (text/plain) 或 '# Hello, world!' (text/markdown)。 - `content_type` (string, 默认值: "text/markdown"): 消息的内容类型。默认值为 'text/markdown'。允许的值:'text/markdown', 'text/plain'。 ### 4. conversations_search_messages 使用过滤器在公共频道、私有频道或直接消息(DM 或 IM)对话中搜索消息。所有过滤器都是可选的,如果未提供,则需要 search_query。 - **参数:** - `search_query` (string, 可选): 用于过滤消息的搜索查询。示例:'marketing report' 或 Slack 消息的完整 URL,例如 'https://slack.com/archives/C1234567890/p1234567890123456',此时工具将返回与给定 URL 匹配的单个消息,所有其他参数将被忽略。 - `filter_in_channel` (string, 可选): 按其 ID 或名称过滤特定频道中的消息。示例:`C1234567890` 或 `#general`。如果未提供,将搜索所有频道。 - `filter_in_im_or_mpim` (string, 可选): 按其 ID 或名称过滤直接消息(DM)或多人直接消息(MPIM)对话中的消息。示例:`D1234567890` 或 `@username_dm`。如果未提供,将搜索所有 DM 和 MPIM。 - `filter_users_with` (string, 可选): 按其 ID 或显示名称过滤线程和 DM 中包含特定用户的邮件。示例:`U1234567890` 或 `@username`。如果未提供,将搜索所有线程和 DM。 - `filter_users_from` (string, 可选): 按其 ID 或显示名称过滤来自特定用户的消息。示例:`U1234567890` 或 `@username`。如果未提供,将搜索所有用户。 - `filter_date_before` (string, 可选): 过滤在特定日期之前发送的消息,格式为 `YYYY-MM-DD`。示例:`2023-10-01`、`July`、`Yesterday` 或 `Today`。如果未提供,将搜索所有日期。 - `filter_date_after` (string, 可选): 过滤在特定日期之后发送的消息,格式为 `YYYY-MM-DD`。示例:`2023-10-01`、`July`、`Yesterday` 或 `Today`。如果未提供,将搜索所有日期。 - `filter_date_on` (string, 可选): 过滤在特定日期发送的消息,格式为 `YYYY-MM-DD`。示例:`2023-10-01`、`July`、`Yesterday` 或 `Today`。如果未提供,将搜索所有日期。 - `filter_date_during` (string, 可选): 过滤在特定时期内发送的消息,格式为 `YYYY-MM-DD`。示例:`July`、`Yesterday` 或 `Today`。如果未提供,将搜索所有日期。 - `filter_threads_only` (boolean, 默认值: false): 如果为 true,响应将仅包含来自线程的消息。默认值为布尔值 false。 - `cursor` (string, 默认值: ""): 分页游标。使用上一次请求返回的响应中最后一行和最后一列的值作为 next_cursor 字段。 - `limit` (number, 默认值: 20): 返回的最大项目数。必须是 1 到 100 之间的整数。 ### 5. channels_list: 获取频道列表 - **参数:** - `channel_types` (string, 必需): 逗号分隔的频道类型。允许的值:`mpim`、`im`、`public_channel`、`private_channel`。示例:`public_channel,private_channel,im` - `sort` (string, 可选): 排序类型。允许的值:`popularity` - 按每个频道的成员/参与者数量排序。 - `limit` (number, 默认值: 100): 返回的最大项目数。必须是 1 到 1000 之间的整数(最大 999)。 - `cursor` (string, 可选): 分页游标。使用上一次请求返回的响应中最后一行和最后一列的值作为 next_cursor 字段。 ### 6. reactions_add: 在公共频道、私有频道或直接消息(DM 或 IM)对话中为消息添加 emoji 反应。 - **参数:** - `channel_id` (string, 必需): ID of the channel in format `Cxxxxxxxxxx` or its name starting with `#...` or `@...` aka `#general` or `@username_dm`. - `timestamp` (string, 必需): 要添加反应的消息的时间戳,格式为 `1234567890.123456`。 - `emoji` (string, 必需): 要作为反应添加的 emoji 名称(不带冒号)。示例:`thumbsup`、`heart`、`rocket`。 ### 7. reactions_remove: 在公共频道、私有频道或直接消息(DM 或 IM)对话中移除消息的 emoji 反应。 - **参数:** - `channel_id` (string, 必需): ID of the channel in format `Cxxxxxxxxxx` or its name starting with `#...` or `@...` aka `#general` or `@username_dm`. - `timestamp` (string, 必需): 要移除反应的消息的时间戳,格式为 `1234567890.123456`。 - `emoji` (string, 必需): 要作为反应移除的 emoji 名称(不带冒号)。示例:`thumbsup`、`heart`、`rocket`。 ### 8. users_search: 按姓名、电子邮件或显示名称搜索用户。返回用户详细信息和 DM 频道 ID(如果可用)。 - **参数:** - `query` (string, 必需): 搜索查询 - 匹配真实姓名、显示名称、用户名或电子邮件。 - `limit` (number, 默认值: 10): 返回的最大结果数 (1-100)。 - **返回:** 带有以下字段的 CSV: - `UserID`: 用户 ID (例如, `U1234567890`) - `UserName`: Slack 用户名 - `RealName`: 用户真实姓名 - `DisplayName`: 用户显示名称 - `Email`: 用户电子邮件地址 - `Title`: 用户职位 - `DMChannelID`: 缓存中可用的 DM 频道 ID(用于快速发送消息) ### 9. usergroups_list: 列出工作区中的所有用户组(子团队)。 - **参数:** - `include_users` (boolean, 默认值: false): 在每个组中包含用户 ID 列表。 - `include_count` (boolean, 默认值: true): 包含每个组的用户计数。 - `include_disabled` (boolean, 默认值: false): 包含已禁用/已归档的组。 - **返回:** 带有以下字段的 CSV:id, name, handle, description, user_count, is_external ### 10. usergroups_create: 在工作区中创建一个新的用户组。 - **参数:** - `name` (string, 必需): 用户组的名称(例如,"Engineering Team")。 - `handle` (string, 可选): 不带 @ 的提及句柄(例如,"engineering")。如果未提供,Slack 将自动生成一个。 - `description` (string, 可选): 组的目的或描述。 - `channels` (string, 可选): 逗号分隔的频道 ID用于默认频道,组提及将在其中高亮显示。 - **返回:** 包含已创建组详细信息的 JSON (id, name, handle, description) ### 11. usergroups_update: 更新现有用户组的元数据。 - **参数:** - `usergroup_id` (string, 必需): 用户组的 ID(例如,"S1234567890")。 - `name` (string, 可选): 组的新名称。 - `handle` (string, 可选): 新的提及句柄。 - `description` (string, 可选): 新描述。 - `channels` (string, 可选): 新的默认频道(逗号分隔的 ID)。这将替换现有的默认频道。 - **返回:** 包含已更新组详细信息的 JSON ### 12. usergroups_users_update: 更新用户组的成员。这将替换所有现有成员。 - **参数:** - `usergroup_id` (string, 必需): 用户组的 ID(例如,"S1234567890")。 - `users` (string, 必需): 逗号分隔的用户 ID,设置为成员(例如,"U123,U456,U789")。 - **返回:** 包含已更新组详细信息(包括新用户列表)的 JSON ### 13. usergroups_me: 管理您的用户组成员资格:列出您所在的组、加入组或退出组。 - **参数:** - `action` (string, 必需): 要执行的操作 - `list` 查看您的组,`join` 添加自己,`leave` 移除自己。 - `usergroup_id` (string, 可选): 用户组的 ID(例如,"S1234567890")。`join` 和 `leave` 操作必需。 - **返回:** - 对于 `list`:包含您所属组的 CSV - 对于 `join`/`leave`:包含结果消息和更新后组信息的 JSON ### 14. conversations_unreads 高效获取所有频道的未读消息。使用单个 API 调用识别有未读消息的频道,然后仅获取这些消息。结果按优先级排序:DM > 合作伙伴频道 > 内部频道。 - **参数:** - `include_messages` (boolean, 默认值: true): 如果为 true,返回实际的未读消息。如果为 false,仅返回有未读消息的频道摘要。 - `channel_types` (string, 默认值: "all"): 按频道类型过滤:`all`、`dm`(直接消息)、`group_dm`(群组 DM)、`partner`(外部共享频道)、`internal`(常规工作区频道)。 - `max_channels` (number, 默认值: 50): 获取未读消息的最大频道数。 - `max_messages_per_channel` (number, 默认值: 10): 每个频道获取的最大消息数。 - `mentions_only` (boolean, 默认值: false): 如果为 true,仅返回您有 @mentions 的频道。注意:此过滤器仅适用于浏览器 token;OAuth token 将返回所有未读频道。 ### 15. conversations_mark 将频道或 DM 标记为已读。 - **参数:** - `channel_id` (string, 必需): ID of the channel in format `Cxxxxxxxxxx` or its name starting with `#...` or `@...` (e.g., `#general`, `@username`). - `ts` (string, 可选): 标记为已读的消息时间戳。如果未提供,则将所有消息标记为已读。 ## Resources Slack MCP Server 公开了两个特殊的目录资源,以便轻松访问工作区元数据: ### 1. `slack:///channels` — 频道目录 获取工作区中所有频道的 CSV 目录,包括公共频道、私有频道、DM 和群组 DM。 - **URI:** `slack:///channels` - **格式:** `text/csv` - **字段:** - `id`: 频道 ID (例如, `C1234567890`) - `name`: 频道名称 (例如, `#general`, `@username_dm`) - `topic`: 频道主题(如果有) - `purpose`: 频道目的/描述 - `memberCount`: 频道中的成员数量 ### 2. `slack:///users` — 用户目录 获取工作区中所有用户的 CSV 目录。 - **URI:** `slack:///users` - **格式:** `text/csv` - **字段:** - `userID`: 用户 ID (例如, `U1234567890`) - `userName`: Slack 用户名 (例如, `john`) - `realName`: 用户真实姓名 (例如, `John Doe`) ## 设置指南 - [Authentication Setup](docs/01-authentication-setup.md) - [Installation](docs/02-installation.md) - [Configuration and Usage](docs/03-configuration-and-usage.md) ### 环境变量 (快速参考) | Variable | Required? | Default | Description | |-----------------------------------|-----------|---------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `SLACK_MCP_XOXC_TOKEN` | Yes* | `nil` | Slack browser token (`xoxc-...`) | | `SLACK_MCP_XOXD_TOKEN` | Yes* | `nil` | Slack browser cookie `d` (`xoxd-...`) | | `SLACK_MCP_XOXP_TOKEN` | Yes* | `nil` | User OAuth token (`xoxp-...`) — alternative to xoxc/xoxd | | `SLACK_MCP_XOXB_TOKEN` | Yes* | `nil` | Bot token (`xoxb-...`) — alternative to xoxp/xoxc/xoxd. Bot has limited access (invited channels only, no search) | | `SLACK_MCP_PORT` | No | `13080` | MCP 服务器监听的端口 | | `SLACK_MCP_HOST` | No | `127.0.0.1` | MCP 服务器监听的主机 | | `SLACK_MCP_API_KEY` | No | `nil` | Bearer token for SSE and HTTP transports | | `SLACK_MCP_PROXY` | No | `nil` | 传出请求的代理 URL | | `SLACK_MCP_USER_AGENT` | No | `nil` | 自定义 User-Agent(用于 Enterprise Slack 环境) | | `SLACK_MCP_CUSTOM_TLS` | No | `nil` | 基于 `SLACK_MCP_USER_AGENT` 或默认 User-Agent 向 Slack 服务器发送自定义 TLS 握手。(用于 Enterprise Slack 环境) | | `SLACK_MCP_SERVER_CA` | No | `nil` | CA 证书的路径 | | `SLACK_MCP_SERVER_CA_TOOLKIT` | No | `nil` | 将 HTTPToolkit CA 证书注入根信任存储以进行 MitM 调试 | | `SLACK_MCP_SERVER_CA_INSECURE` | No | `false` | 信任所有不安全的请求(不推荐) | | `SLACK_MCP_ADD_MESSAGE_TOOL` | No | `nil` | 通过将设置为 `true` 以针对所有频道启用通过 `conversations_add_message` 发布消息,或设置为逗号分隔的频道 ID 列表以将特定频道加入白名单,或在频道 ID 前使用 `!` 以允许除指定频道之外的所有频道。如果为空,则仅在 `SLACK_MCP_ENABLED_TOOLS` 中显式列出时才注册该工具。 | | `SLACK_MCP_ADD_MESSAGE_MARK` | No | `nil` | 当启用 `conversations_add_message` 时(通过 `SLACK_MCP_ADD_MESSAGE_TOOL` 或 `SLACK_MCP_ENABLED_TOOLS`),将其设置为 `true` 将自动把发送的消息标记为已读。 | | `SLACK_MCP_ADD_MESSAGE_UNFURLING` | No | `nil` | 启用以让 Slack 展开发布的链接,或设置逗号分隔的域列表,例如 `github.com,slack.com`,以仅为它们将展开列入白名单。如果文本包含列入白名单的域和未知域,出于安全原因将禁用展开。 | | `SLACK_MCP_MARK_TOOL` | No | `nil` | 通过设置为 `true` 或 `1` 启用 `conversations_mark` 工具。默认禁用以防止意外将消息标记为已读。 | | `SLACK_MCP_USERS_CACHE` | No | `~/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` | No | `~/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` | No | `info` | stdout 或 stderr 的日志级别。有效值为:`debug`、`info`、`warn`、`error`、`panic` 和 `fatal` | | `SLACK_MCP_GOVSLACK` | No | `nil` | 设置为 `true` 以启用 [GovSlack](https://slack.com/solutions/govslack) 模式。将 API 调用路由到 `slack-gov.com` 端点,而不是 `slack.com`,适用于符合 FedRAMP 标准的政府工作区。 | | `SLACK_MCP_ENABLED_TOOLS` | No | `nil` | 要注册的逗号分隔工具列表。如果为空,则注册所有只读工具和用户组工具;写入工具(`conversations_add_message`、`reactions_add`、`reactions_remove`、`attachment_get_data`)需要其特定的环境变量或必须在此处显式列出。在此列出写入工具时,它将在没有频道限制的情况下启用。可用工具:`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` token。 ### Limitations matrix & Cache | Users Cache | Channels Cache | Limitations | |--------------------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | :x: | :x: | No cache, No LLM context enhancement with user data, tool `channels_list` will be fully not functional. Tools `conversations_*` will have limited capabilities and you won't be able to search messages by `@userHandle` or `#channel-name`, getting messages by `@userHandle` or `#channel-name` won't be available either. | | :white_check_mark: | :x: | No channels cache, tool `channels_list` will be fully not functional. Tools `conversations_*` will have limited capabilities and you won't be able to search messages by `@userHandle` or `#channel-name`, getting messages by `@userHandle` or `#channel-name` won't be available either. | | :white_check_mark: | :white_check_mark: | No limitations, fully functional Slack MCP Server. | ### Debugging Tools ``` # Run the inspector with stdio transport npx @modelcontextprotocol/inspector go run mcp/mcp-server.go --transport stdio # 查看日志 tail -n 20 -f ~/Library/Logs/Claude/mcp*.log ``` ## 安全 - 切勿分享 API token - 保持 .env 文件安全且私密 ## 许可证 根据 MIT 授权 - 请参阅 [LICENSE](LICENSE) 文件。这不是官方的 Slack 产品。
标签:AI助手, Attacker, EVTX分析, EVTX分析, LLM集成, MCP服务器, OAuth, Slack, Slack API, SSE, Stdio, Workspace, 代理支持, 企业级, 企业通讯, 协作工具, 即时通讯, 历史记录, 告警, 开源, 数据检索, 数据泄露, 无权限, 日志审计, 未读消息, 机器人, 模型上下文协议, 消息获取, 用户缓存, 私信, 网络安全, 网络调试, 群聊, 自动化, 隐私保护, 隐蔽模式, 频道管理