关于 Slack Mcp Server
Slack MCP Server 是本地运行的 stdio MCP 服务,让智能体通过已登录的浏览器会话读取和操作 Slack 工作区,无需安装 Slack 应用或管理员审批。适合希望快速接入 Slack 的个人用户,并提供只读模式与安全标注。
主要功能
- 01通过浏览器会话认证,无需 OAuth
- 02提供 20 个工具,涵盖读取、发送与自动化
- 03支持只读模式,禁止发送消息
- 04提供未读汇总与线程读取
- 05标注消息来源并包含不可信内容提示
适用场景
- 01汇总未读消息与重要线程
- 02搜索工作区消息与用户信息
- 03导出 免费版 工作区中仍可访问的历史消息
MCP 相关
该项目是本地 MCP 服务,以 stdio 方式运行,向 MCP 客户端暴露 Slack 读取、回复、反应及工作流相关的 20 个工具。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.revasserlabs.com/oauth/mcpclaude mcp add --transport http slack-mcp-server-jtalk22 https://mcp.revasserlabs.com/oauth/mcp{"mcpServers":{"slack-mcp-server-jtalk22":{"type":"http","url":"https://mcp.revasserlabs.com/oauth/mcp"}}}在 Cursor 中打开{"servers":{"slack-mcp-server-jtalk22":{"type":"http","url":"https://mcp.revasserlabs.com/oauth/mcp"}}}在 VS Code 中打开{"mcpServers":{"slack-mcp-server-jtalk22":{"type":"http","url":"https://mcp.revasserlabs.com/oauth/mcp"}}}{"mcpServers":{"slack-mcp-server-jtalk22":{"serverUrl":"https://mcp.revasserlabs.com/oauth/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
21此工具无需参数。
详细介绍
完成设置,然后在客户端中注册。
npx -y @jtalk22/slack-mcp --setup
claude mcp add slack -- npx -y @jtalk22/slack-mcp
检查凭据的存储位置和存放时长,或者以只读模式运行,让 Agent 可以读取 Slack,但绝不会发帖。
npx -y @jtalk22/slack-mcp --doctor --security
npx -y @jtalk22/slack-mcp --read-only
在 Enterprise Grid 上,Slack 可能会终止它检测到自动化操作的会话。请改用 Slack 官方 MCP 服务。
Claude Code Claude Desktop Cursor Copilot Windsurf Gemini CLI Codex CLI 任何 stdio MCP 客户端
5.1 版更新内容 · ▶ 三分钟看完一整个早晨 · 交互式演示 · 设置指南
如果你的工作区使用 Slack 免费版
根据 Slack 于 2026-10-07 发布的套餐和定价信息核对。
免费工作区保留 90 天的消息历史记录,允许集成 10 个应用,并且只能使用 Slack 的基础 AI。人们真正想要的 AI 功能——跨工作区 AI 搜索、频道摘要、让 Slackbot 充当 Agent、AI 工作流生成——从 Business+ 套餐开始提供,按年付费时每位用户每月 15 美元(月付为 18 美元)。Pro 套餐每月 7.25 美元,可享无限历史记录和无限应用,但不包括高级 AI。因此,一个有 10 人的免费工作区,如果想拥有一个能回答有关自身 Slack 内容的问题的 AI,每年需要支付 1,800 美元;而更便宜的升级套餐无法满足这一需求。
这个软件包能让该工作区免费获得一个基于同一 Slack 的 Agent,并使用成员已经付费的 AI 订阅。它的工作方式有以下三点:
- 它不会安装 Slack 应用,因此不会占用 10 个应用名额。 如果你的工作区已经达到上限,这就是唯一剩下的集成添加方式。
- 它不需要管理员批准,因为它不是需要任何人批准的应用。它通过你自己的浏览器会话读取 Slack,访问权限与你现有的完全一致,不会更多。
- 它可以导出你仍能看到的内容。 在免费套餐中,超过 90 天的历史记录将无法再访问——Slack 自带的免费导出功能仅涵盖公开频道,且仅限管理员使用,因此不包括私信和私密频道。
slack_get_full_conversation会在这些内容仍处于可访问时间范围内时,将其连同线程一并导出。它无法找回已经超出范围的内容;没有任何工具能做到。
对于 Slack 自身的 AI 无法服务的工作区,通过浏览器会话访问并不是需要道歉的权宜之计,而是唯一可行的途径。
连接 Slack 的两种方式
Slack 官方 MCP 服务是一个由工作区管理员批准和管理的应用。当你的组织需要经过批准的集成时,请使用它。这个服务则使用 Chrome 中现有的浏览器会话,因此无需安装应用,也无需请求管理员批准;它可作为本地命令供任何 stdio MCP 客户端运行。它以你的身份操作,访问权限与你完全一致。
并列对比:托管集成方式与本地会话方式
| Slack 官方 MCP | Slack MCP Server — 本地 | |
|---|---|---|
| 起点 | Slack 管理的远程集成 | Chrome 中已有的 Slack 会话 |
| 工作区控制 | 受工作区集成设置管控 | 本地方式无需安装 Slack 应用或请求管理员批准 |
| 传输方式 | Streamable HTTP | 本地 stdio |
| 客户端范围 | Slack 支持的合作伙伴集成 | 任何 stdio MCP 客户端 |
| 身份验证 | OAuth | 现有浏览器会话 |
| 凭证有效期 | 由 OAuth 管理 | 轮换会话,带健康检查和刷新机制 |
| 产品功能范围 | 丰富的 Slack 原生功能 | 涵盖读取、操作和自动化的 20 个工具 |
| 协议 | Slack 管理 | 同一个二进制文件支持 MCP 2026-07-28 和所有 2025 修订版 |
| 运行环境 | Slack 管理 | 在你的设备上运行的 MIT 许可代码 |
本地方式是否违反 Slack 的条款?
请根据你和工作区的情况,自行判断浏览器会话自动化是否符合可接受使用要求。该服务以你已登录的 Slack 身份操作,无法读取你无权读取的频道,也无法冒充其他用户。它不会绕过服务器端保留策略、DLP、合规导出或审计控制。
“无需请求管理员批准”是指无需安装 Slack 应用并等待批准,并不意味着工作区活动会从 Slack 系统中消失。如果你的政策要求使用经过批准的集成,请使用 Slack 官方 MCP 服务。
安装
推荐使用 Node 22 或 24。支持 Node 20+,并已通过 CI 测试。
npx -y @jtalk22/slack-mcp --setup
建议使用持久化 CLI:npm install -g @jtalk22/slack-mcp,然后运行 slack-mcp --setup。
然后:
- 复制运行结束时
--setup输出的 stdio 命令。 - 将其粘贴到客户端,或运行它输出的
claude mcp add命令。 - 完全重启客户端。
- 让 Agent 运行
slack_health_check。 - 如果响应中出现工作区名称,说明连接已建立。
各客户端的配置键请参阅设置指南。
所有地方都使用相同的服务命令:
{
"command": "npx",
"args": ["-y", "@jtalk22/slack-mcp"]
}
在 macOS 上,设置过程可以从 Chrome 提取信息,并持久化所选的存储后端。在其他平台上,请通过客户端的环境配置提供 SLACK_TOKEN 和 SLACK_COOKIE。Docker、HTTP 和详细的客户端示例请参阅 docs/SETUP.md 和 docs/DEPLOYMENT-MODES.md。
客户端配置对照表
| 客户端 | 配置入口 | 状态 |
|---|---|---|
| Claude Code | claude mcp add 或 ~/.claude.json | 已记录 |
| Claude Desktop | 桌面 MCP 配置 | 已验证 |
| Cursor | .cursor/mcp.json | 已记录 |
| GitHub Copilot | .vscode/mcp.json | 已记录 |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | 已记录 |
| Gemini CLI | ~/.gemini/settings.json | 已记录 |
| Codex CLI | codex mcp add 或 ~/.codex/config.toml | 已记录 |
| 其他客户端 | 任意 stdio MCP 配置 | 协议兼容 |
20 个工具:读取、操作、自动化
读取频道、私信、线程并进行搜索;通过回复、添加回应或更改已读状态执行操作;在本地运行补齐进度和类型化工作流。目前提供 20 个工具:13 个只读操作、4 个写入路径工具(每个工具都带有 MCP 破坏性注释,客户端可据此限制对工作区的写入),以及 3 个本地工作流工具。其中一个读取工具是 slack_session_report,它不会从 Slack 读取任何内容,而是以计数形式返回此进程执行过的操作。每个工具都在此处执行工作——读取 Slack 或本地状态——没有任何工具只是占位符,也无需为其付费。4 个读取工具支持 include_rich_message_fields: true,以显示附件、区块、文件、回应和元数据。完整的输入和响应契约请参阅 docs/API.md。
同一个二进制文件支持 MCP 2026-07-28 和所有 2025 版修订:通过 stdio 协商版本,在 HTTP 中按请求保持无状态(没有 Mcp-Session-Id;GET/DELETE 返回 405)。这项声明由测试验证,而非仅仅写在文档里:test/mcp-era.test.js 使用真实 SDK 客户端,针对两个版本调用真实入口。
减少公布的工具数量。 服务公布的每个工具都会在每轮对话中、你提出任何问题之前,将其架构发送给模型。SLACK_MCP_TOOLS=essentials 会公布 6 个工具(未读消息、历史记录、搜索、线程、用户查找、发送);SLACK_MCP_TOOLS=read 会公布 13 个只读操作;--tools=slack_x,slack_y 则指定一组工具。默认公布全部 20 个。筛选只会改变公布的内容,不会改变可调用的内容。
完整工具清单
### 13 个只读操作
| 工具 | 用途 |
|---|---|
slack_health_check | 验证凭据和工作区身份 |
slack_token_status | 检查凭据的存续时间、健康状况、缓存、个人资料和存储状态 |
slack_refresh_tokens | 在 macOS 上从浏览器会话刷新本地凭据——读取 Slack,仅写入本地状态 |
slack_list_conversations | 列出频道和私信 |
slack_conversations_history | 读取频道或私信历史记录,可选择包含丰富字段 |
slack_get_full_conversation | 导出完整历史记录和讨论串 |
slack_search_messages | 搜索整个工作区 |
slack_get_thread | 读取讨论串中的所有回复 |
slack_users_info | 查找用户信息 |
slack_list_users | 分页浏览大型工作区的用户目录 |
slack_users_search | 按姓名、显示名称或电子邮件搜索用户 |
slack_conversations_unreads | 优先处理有未读消息的对话 |
在工作区中执行操作 — 4 个写入工具
| 工具 | 用途 | MCP 安全性 |
|---|---|---|
slack_send_message | 向频道或私信发送消息 | 破坏性操作 |
slack_add_reaction | 添加表情回应 | 破坏性操作 |
slack_remove_reaction | 移除表情回应 | 破坏性操作 |
slack_conversations_mark | 将对话标记为已读 | 破坏性操作 |
在本地自动化 — 3 个工作流工具
| 工具 | 用途 |
|---|---|
slack_workflow_save | 将类型化工作流配置保存到 ~/.slack-mcp-workflows.json |
slack_workflows | 列出已保存的工作流配置 |
slack_catch_me_up | 读取配置中频道在其周期窗口内的内容,并返回结构化的跟进依据 |
slack_refresh_tokens 会读取 Slack,并且只写入本地凭据状态。
类型化工作流:Slack 输入,JSON 输出
将工作流类型与频道、优先关注人员、保留期限和周期绑定。随后,slack_catch_me_up 会在本地读取指定范围,并将依据交给你的 Agent:哪些讨论串尚未得到回复以及已持续多久,优先关注人员说了什么或被在哪些消息中提及,以及哪些对话确实有了进展。它负责收集信息;你的 Agent 则依据下方的约定撰写摘要。
这条路径中没有服务端模型,因为不需要——调用此服务的客户端本身就是语言模型。托管版则提供需要服务端支持的功能:即使你的笔记本电脑关机,也能按计划运行相同的跟进流程。
npx -y @jtalk22/slack-mcp --apply-template oncall-handoff --channels C012345,C067890
工作流约定和随附模板
| 工作流类型 | 约定 |
|---|---|
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} |
软件包随附 6 个可编辑模板:oncall-handoff、support-triage、exec-monday、sprint-tracker、customer-feedback 和 incident-room。
安全与来源
此服务返回的每条消息都会作为文本进入模型的上下文,与您自己的指令并列。Slack 是一个共享总线:频道中可能有来自其他工作区的 Slack Connect 参与者、访客,以及转发完全来自 Slack 外部内容的应用;而且,同一套工具既能读取,也能写入。这种读写并存的情况值得明确指出其风险。
- 凭据文件仅限所有者访问;仅使用 Keychain 的模式可让明文凭据不落盘。
- 遇到未知存储模式和无效配置时,配置会采取默认拒绝策略。
- 写入操作是原子的,共享凭据状态会受到进程锁保护。
- 本地 Web 服务器绑定到 localhost;工作区写入工具带有破坏性操作标注。
- 每次发布都通过 CI 发布,并带有 npm 来源证明。
为每条消息标记作者
每条消息都带有 origin(self、internal、external、bot、unknown)和 author_trusted,这些信息根据 Slack 已返回的字段得出,因此不会产生额外的 API 调用。bot 的优先级高于工作区成员身份,因为工作区内的应用经常会转发在外部编写的内容。包含外部作者的批次会带有一个 untrusted_content 封套,注明数量。
系统采用默认拒绝策略:如果本服务无法确认某位作者属于你的工作区,就会将其报告为不可信。例外情况是 Slack 报告某段对话未与任何其他工作区共享——这种对话在结构上不可能包含外部作者,因此,如果同事的消息没有团队 ID,就会被标记为 internal,而不是 unknown。若查询失败,标签会保留为 unknown。
SLACK_MCP_PROVENANCE=off|label|strict。默认值为 label,只会添加键。单次调用的 provenance 参数可以提高模式的严格程度,但不能降低,因为调用方要求减少标签时,可能是在复述其读到的内容。
这些标签无法做到什么
标签是给读取它的模型提供的提示。它没有签名,任何下游环节都可以将其剥除;它会提高注入指令的成本,但无法让注入变得不可能。
strict 模式还会在会话读取外部作者编写的文本后拦截 slack_send_message。调用方设置 confirm_untrusted_context 后,拦截才会解除——因此它会中断发送并留下记录,但无法证明有人工批准。
仍有两个界面不会添加标签;了解这一点总比想当然地认为它们也有标签要好:用户工具返回的用户显示名、真实姓名和职务,以及 slack_list_conversations 返回的频道主题和用途,都是由攻击者设定的自由文本,会在没有来源标记的情况下到达模型。
只读模式:当标签不够时
npx -y @jtalk22/slack-mcp --read-only # or SLACK_MCP_READ_ONLY=1
这四个写入路径工具会从 tools/list 中隐藏,且在分发时也会被拒绝,因为客户端可以调用从未向其提供过的名称。筛选器会在工具配置解析后应用,因此任何配置或自定义工具列表都无法扩大可用范围。工具不存在,就无需信任本来会调用它的模型。
记录回执
slack_session_report 会返回此进程实际执行的操作:读取的消息数、其中由外部作者编写的消息数及其来源、尝试的写入操作数,以及被拦截的写入操作数。仅提供数量——不包含消息文本、频道名称或用户 ID。标签是对单条消息的声明;这份报告则是对整个会话的声明,便于你事后检查外部文本是否到达模型,以及是否有人试图据此发送内容。
验证发行包
npm audit signatures
结果干净意味着你安装的软件包由此代码库的发行工作流构建并签名。将 Slack 会话交给它之前,请先阅读代码。完整政策见:SECURITY.md。
工作原理
这些工具由五个部分支撑:从 Chrome 提取数据、凭据存储、读取、写入,以及带类型的工作流输出。所有部分都是此代码库中的纯 JavaScript。
五个部分
### 1. 从 Chrome 提取
--setup 会将 Chrome 已持有的 Slack 身份转换为本地 MCP 服务:
- 在 Chrome 磁盘上的 LevelDB 中查找最新的
xoxc-令牌; - 使用 WAL 旁置文件快照 cookie SQLite 数据库;
- 从 macOS Keychain 中获取 Chrome Safe Storage;
- 在本地运行兼容 Chrome 的 PBKDF2 + AES-128-CBC 解密;
- 无需 DevTools、剪贴板操作、浏览器标志或正在打开的 Slack 标签页;
- 指明提取失败的阶段,例如
keychain_timeout、no_slack_cookie_row、cookie_decrypt_failed等,而不是只返回一个含糊的错误。
2. 凭据存储
Slack 会话凭据会轮换。服务通过以下方式处理:
auto、keychain-only和file存储后端;- 仅所有者可访问的令牌文件,以及不在磁盘上存储明文凭据的 Keychain 专用路径;
- 原子文件写入、经过验证的 Keychain 迁移、跨进程锁和刷新互斥锁;
- 主动健康检查和 macOS 自动刷新;
- 持久化暂时不可用时,保留内存中最近一次有效的凭据;
- 为工作和个人 Slack 使用相互隔离的配置文件;
- 对无效的存储或配置文件配置采用失败时关闭策略。
3. 读取
读取私信和频道、搜索工作区、导出包含线程的完整历史记录、查看未读状态,以及解析用户。若仅有文本无法完整表达消息内容,可选择加入区块、附件、文件、反应、元数据和机器人/应用标记。
4. 写入
发送回复、添加或移除反应,以及将对话标记为已读。每个写入工具都带有 MCP 的破坏性操作注释,因此兼容的客户端会在执行前询问。
5. 结构化工作流输出
为事件处理频道、高管简报、支持收件箱、发布监控等场景以及自定义场景保存工作流配置文件。配置文件以本地 JSON 格式保存;托管层可将其作为定时简报发送。
凭据
服务会按以下顺序检查,并使用找到的第一项。
| 来源 | 来源说明 | |
|---|---|---|
| 1 | SLACK_TOKEN + SLACK_COOKIE | 客户端的环境配置 |
| 2 | 令牌文件 | 由 --setup 写入,权限为 chmod 600 |
| 3 | macOS Keychain | 由 --setup 写入 |
| 4 | Chrome 提取 | 仅限 macOS,按需运行 |
会话凭据会过期,具体有效期不定:2026-07-04 写入的凭据到 2026-10-07 仍然有效。slack_token_status 会显示凭据的使用时长。如果 Slack 拒绝凭据(invalid_auth、not_authed、token_expired、token_revoked、account_inactive 或 HTTP 401),请运行 npx -y @jtalk22/slack-mcp --setup。在 macOS 上,slack_refresh_tokens 或 --refresh-tokens 可以在不离开客户端的情况下刷新凭据;docs/SETUP.md 中的可选 LaunchAgent 可让闲置安装保持正常运行。
Enterprise Grid、凭据提取与缓存
Enterprise Grid。 Grid 会积极检测异常会话。浏览器会话自动化可能触发检测,导致会话被标记并终止,无论流量由哪个工具产生。默认情况下,出站调用会受到节流,以避免超过突发阈值(SLACK_MCP_MIN_REQUEST_INTERVAL_MS,默认值为 350;SLACK_MCP_MAX_CONCURRENCY,默认值为 3)。节流可以降低风险,但无法消除风险。使用 Grid 时,请使用 Slack 官方 MCP 服务。
凭据提取。 --setup 会从 Chrome 磁盘上的 LevelDB 中读取最新的 xoxc- 令牌,创建 Cookie SQLite 数据库的快照,从 macOS Keychain 中获取 Chrome Safe Storage,并在本地执行 PBKDF2 + AES-128-CBC 解密。它会写入令牌文件、Keychain 条目和非敏感元数据。不会传输任何内容——服务只与 Slack 通信,不会连接其他地方。
凭据窃取程序也会使用相同的访问方式。 Chrome App-Bound Encryption 旨在提高此类读取的难度,而信息窃取程序家族(Lumma、Vidar、Meduza)会绕过它来窃取有效会话。这里使用的机制与之相似。不同之处在于:这是由你在自己的设备上针对自己的会话运行的,且不会有任何内容离开本机。此仓库中的源代码是纯 JavaScript;在提供有效会话之前,请先审查代码。
用户缓存。 只有一种缓存:按需填充的用户名查找缓存,最多 500 条,TTL 为一小时。不会存储消息内容、频道历史记录或工作区的持久副本。
存储模式与多工作区配置文件
| 模式 | 行为 |
|---|---|
auto | 令牌文件与 Keychain 备份 |
keychain-only | 仅使用 Keychain;验证写入且不创建明文凭据文件 |
file | 仅所有者可访问的令牌文件;绝不访问 Keychain |
所选后端会记录在非敏感元数据中,并由服务、CLI 和可选的刷新任务使用。无法识别的模式会导致启动失败,而不会静默降级存储方式。
{
"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" }
}
}
}
每个配置文件都有独立的令牌文件、Keychain 条目、元数据和锁。如果工作区位于不同的 Chrome 配置文件中,请添加 SLACK_MCP_CHROME_PROFILE。
本地与托管服务
此软件包在你的设备上运行,只与 Slack 通信,并采用 MIT 许可证免费提供。托管版本则按计划运行,因此即使笔记本电脑关机,你也能及时收到简报:
- 按计划并根据你的时区补齐内容;
- 根据你保存的工作流配置文件生成简报;
- 在团队内共享配置文件;
- 发送至 Slack 或签名 Webhook。
无需托管版本也可以使用此软件包。
文档
设置 · API · 架构 · 兼容性 · 部署模式 · 使用示例 · 故障排除 · 路线图
贡献
欢迎提交 PR。请阅读 CONTRIBUTING.md,并在提交前对修改过的 JavaScript 运行 node --check。
许可证
MIT — 详见 LICENSE。
免责声明
本项目与 Slack Technologies, Inc. 无关联。此服务使用浏览器会话凭据。运行前,请查看工作区的可接受使用政策。
你的 Slack。你的 Agent。一条命令。
如果它让你一天少开一个 Slack 标签页,请为此仓库点星。星标能帮助下一位受管理员限制的开发者找到本地方案。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
