Slack MCP服务器
懒散 MCP服务器 为了 克劳德代码 它跨多个Slack工作区提供完整的消息传递、频道、搜索和线程。
特性
- 12工具 --渠道、消息、线程、DM、反应、搜索、文件上传
- 多工作空间 --根据需要连接尽可能多的Slack工作区
- 双令牌支持 --机器人令牌和用户令牌,具有自动偏好
- 发布自己 --用户令牌使消息显示来自您,而不是机器人
- 全局搜索 —
search_messages使用用户令牌(无限制) - Env-var代币 --配置文件或仓库中没有秘密
- 频道名称解析 --使用
#general或general,而不仅仅是ID
快速开始
1.克隆并安装
git clone https://github.com/coreyepstein/slack-mcp.git
cd slack-mcp
npm install2.创建Slack应用程序
- 首选 api.slack.com/apps 然后单击 创建新应用程序 > 从头开始
- 命名它(例如“Claude MCP”)并选择您的工作空间
- 首选 OAuth和权限 并添加作用域(请参见 范围 在......下面
- 点击 安装到工作区
- 复制 Bot用户OAuth令牌 (
xoxb-...) - (可选)复制 用户OAuth令牌 (
xoxp-...)--看 令牌类型
3.配置工作空间
cp workspaces.example.json workspaces.json编辑 workspaces.json 带有您的工作区名称和团队ID。令牌为 不 存储在此处:
{
"workspaces": [
{
"name": "my-company",
"team_id": "T_YOUR_TEAM_ID"
}
],
"default": "my-company"
}通过运行查找您的团队ID npm run auth -- --setup 或从您的Slack工作区URL设置。
4.设置令牌环境变量
令牌通过环境变量传递,从不存储在文件中。命名约定是:
SLACK_TOKEN_{NAME}_BOT → Bot token (xoxb-...)
SLACK_TOKEN_{NAME}_USER → User token (xoxp-...)哪里 {NAME} 工作区名称大写,非字母数字字符替换为下划线。
示例:
| 工作区名称 | 机器人环境变量 | 用户环境变量 |
|---|---|---|
my-company | SLACK_TOKEN_MY_COMPANY_BOT | SLACK_TOKEN_MY_COMPANY_USER |
voyage | SLACK_TOKEN_VOYAGE_BOT | SLACK_TOKEN_VOYAGE_USER |
acme-corp | SLACK_TOKEN_ACME_CORP_BOT | SLACK_TOKEN_ACME_CORP_USER |
5.添加到克劳德代码
添加到您的项目 .mcp.json 或 ~/.claude.json:
{
"mcpServers": {
"slack": {
"type": "stdio",
"command": "npx",
"args": ["tsx", "/absolute/path/to/slack-mcp/src/server.ts"],
"env": {
"SLACK_TOKEN_MY_COMPANY_BOT": "xoxb-your-bot-token",
"SLACK_TOKEN_MY_COMPANY_USER": "xoxp-your-user-token"
}
}
}
}对于多个工作区,将所有令牌添加到同一个工作区 env 块:
{
"mcpServers": {
"slack": {
"type": "stdio",
"command": "npx",
"args": ["tsx", "/absolute/path/to/slack-mcp/src/server.ts"],
"env": {
"SLACK_TOKEN_VOYAGE_BOT": "xoxb-...",
"SLACK_TOKEN_VOYAGE_USER": "xoxp-...",
"SLACK_TOKEN_INDIGO_BOT": "xoxb-...",
"SLACK_TOKEN_INDIGO_USER": "xoxp-..."
}
}
}
}重要提示: 使用绝对路径 src/server.ts。切勿将令牌提交到任何跟踪的文件。6.验证设置
npm run auth:check这将根据Slack API验证所有配置的令牌并报告其状态。
7.邀请机器人
在您要访问的每个Slack频道中,邀请机器人:
/invite @Claude MCP这是机器人令牌在通道中读/写所必需的。用户令牌可以访问令牌所有者已经是其成员的任何通道。
令牌类型
此服务器支持每个工作区两种类型的Slack令牌:
机器人令牌(xoxb-...)
- 将Slack应用程序安装到工作区时创建
- 消息显示为应用程序(例如“Claude MCP”),而不是人
- 必须明确邀请到以下频道
/invite - 无法使用
search:read(放宽API限制) - 适用于:自动通知、机器人风格的交互
用户令牌(xoxp-...)
- 生成自 用户OAuth令牌 在OAuth和权限页面上
- 消息显示为令牌所有者(例如“Corey Epstein”)-您的真实姓名和头像
- 可以访问令牌所有者所属的任何频道
- 要求……
search_messages(search:read范围) - 适合:扮演自己、搜索、访问频道而无需
/invite
如何选择代币
服务器会自动为每个操作选择最佳令牌:
| 场景 | 使用的令牌 |
|---|---|
| 用户令牌可用 | 用户令牌(所有操作首选) |
| 用户令牌丢失,机器人令牌可用 | 机器人令牌(自动回退) |
| 两个令牌都不可用 | 安装说明错误 |
search_messages | 仅限用户令牌(硬性要求——无回退) |
您可以从一个机器人令牌开始,稍后添加一个用户令牌。除以下操作外的所有操作 search_messages 使用任一令牌类型。
以用户身份发布
当用户令牌(xoxp-...)配置后,通过服务器发送的所有消息都显示为 你 发送给他们——你的名字、个人资料图片、身份。这适用于:
send_message--频道消息显示您的姓名reply_thread--帖子回复显示您的姓名send_dm--DM来自你,而不是机器人
这是自动发生的。Slack API在使用用户令牌时发布为令牌所有者。无特殊配置或 as_user 需要参数。
如果只有机器人令牌可用,则消息将显示为Slack应用程序。
范围
Bot令牌范围
在下面添加这些 OAuth和权限>Bot令牌范围 在您的Slack应用程序中:
| 范围 | 描述 |
|---|---|
channels:read | 列出公共频道 |
channels:history | 阅读公共频道中的消息 |
chat:write | 发送消息 |
groups:read | 列出私人频道 |
groups:history | 阅读私人频道中的消息 |
im:write | 发送直接消息 |
users:read | 列出工作区成员 |
users:read.email | 访问用户电子邮件地址 |
files:write | 上传文件 |
reactions:write | 添加表情符号反应 |
用户令牌范围
在下面添加这些 OAuth和权限>用户令牌范围 要获得完整功能:
| 范围 | 描述 |
|---|---|
chat:write | 以自己的身份发送消息 |
channels:read | 列出公共频道 |
channels:history | 阅读公共频道中的消息 |
groups:read | 列出私人频道 |
groups:history | 阅读私人频道中的消息 |
im:read | 读取直接消息历史记录 |
im:write | 发送直接消息 |
mpim:read | 读取组DM历史记录 |
mpim:write | 发送组DM |
users:read | 列出工作区成员 |
users:read.email | 访问用户电子邮件地址 |
files:write | 上传文件 |
reactions:write | 添加表情符号反应 |
search:read | 搜索邮件和文件 |
添加用户令牌范围后,单击 重新安装到工作区 以生成用户令牌。
工具
| 工具 | 描述 | 令牌要求 |
|---|---|---|
list_channels | 列出工作区中的频道(公共频道和可选的私有频道) | 机器人或用户 |
read_channel | 从频道读取最近的消息 | 机器人或用户 |
read_thread | 读取一个线程中的所有回复 | 机器人或用户 |
get_channel_info | 获取频道详细信息(主题、目的、成员数) | 机器人或用户 |
send_message | 向频道发送消息 | 机器人或用户 |
reply_thread | 回复特定线程 | 机器人或用户 |
send_dm | 向用户发送直接消息(通过姓名、电子邮件或ID) | 机器人或用户 |
list_users | 列出所有工作区成员 | 机器人或用户 |
find_user | 按名称、显示名称、电子邮件或ID查找用户 | 机器人或用户 |
add_reaction | 在消息中添加表情符号反应 | Bot或用户 |
search_messages | 在工作区中搜索邮件 | 需要用户令牌 |
upload_file | 将文件上传到频道 | 机器人或用户 |
所有工具都接受可选 workspace 参数(名称或团队ID)。如果省略,则使用默认工作区 workspaces.json.
多工作区
在中配置多个工作区 workspaces.json 并为每个设置令牌:
{
"workspaces": [
{ "name": "voyage", "team_id": "T7V83HY5B" },
{ "name": "indigo", "team_id": "T_INDIGO_ID" }
],
"default": "voyage"
}然后使用 workspace 任何工具中的参数:
send_message(channel: "general", text: "hello", workspace: "voyage")
send_message(channel: "team", text: "hello", workspace: "indigo")如果 workspace 省略,使用 default 从 workspaces.json.
身份验证CLI
auth-CLI有助于设置和健康检查:
# Interactive setup — walks through token configuration
npm run auth -- --setup
# Health check — validates all tokens for all workspaces
npm run auth:check这 --check 命令针对Slack API测试每个令牌,并报告:
Workspace Health Check:
──────────────────────────────────────────────────────────────────────────
Workspace: voyage (default)
Bot token: + connected as @claude-mcp in Voyage
User token: + connected as @corey in Voyage
Workspace: indigo
Bot token: + connected as @claude-mcp in Indigo
User token: - missing (optional — needed for search:read)
Set env: SLACK_TOKEN_INDIGO_USER=xoxp-...E2E验证
端到端验证脚本包含在 scripts/verify-e2e.ts:
npx tsx scripts/verify-e2e.ts
# Or with a specific test channel:
TEST_CHANNEL=bot-testing npx tsx scripts/verify-e2e.ts这将验证所有配置的工作区中的令牌连接、消息发布身份、搜索功能和机器人令牌回退。
故障排除
| 错误 | 原因 | 修复 |
|---|---|---|
workspaces.json not found | 配置文件丢失 | 运行 cp workspaces.example.json workspaces.json 并对其进行编辑 |
No token available for workspace "X" | 没有为此工作区设置环境变量 | 设置 SLACK_TOKEN_X_BOT 和 SLACK_TOKEN_X_USER 环境变量 |
invalid_auth | 令牌已过期或不正确 | 从Slack应用程序的OAuth和权限页面重新生成令牌 |
channel_not_found | 机器人不在频道中 | 邀请机器人: /invite @Claude MCP |
missing_scope | 令牌缺少所需的OAuth作用域 | 在Slack应用程序的OAuth和权限设置中添加该作用域,然后重新安装 |
not_allowed_token_type | 将机器人令牌用于仅限用户令牌的操作 | search_messages 需要用户令牌(xoxp-).集 SLACK_TOKEN_X_USER |
search.messages requires a user token | 没有为此工作区配置用户令牌 | 获取用户令牌(请参阅 令牌类型)并设置 _USER 有人是。 |
not_in_channel | 机器人令牌无法访问此频道 | 邀请机器人加入频道,或使用用户令牌(可以访问所有者所在的任何频道) |
Unknown workspace: "X" | 工作区名称不在 workspaces.json | 将工作区条目添加到 workspaces.json 使用正确的名称和team_id |
| 消息显示为机器人,而不是我 | 使用机器人令牌代替用户令牌 | 设置 SLACK_TOKEN_X_USER 使用您的用户OAuth令牌(xoxp-...) |
安全
git历史中的令牌: 此仓库的早期版本在以下位置存储了Slack bot令牌workspaces.json该令牌已被轮换,不再有效,但它仍可能出现在git提交历史中。如果在移除令牌之前分叉或克隆了此仓库,则本地历史记录中的旧令牌已经无效。 最佳实践: 始终通过环境变量传递令牌.mcp.jsonenv块。永远不要将代币提交给workspaces.json或任何其他被跟踪的文件。这.gitignore排除workspaces.json以防止意外犯罪。
建筑
src/
server.ts — MCP server entry point
config.ts — workspace + token resolution from env vars
auth.ts — setup and health check CLI
slack/
client.ts — Slack Web API wrapper with dual-token client caching
types.ts — shared TypeScript types
tools/
*.ts — one file per MCP tool (12 tools)
scripts/
verify-e2e.ts — end-to-end verification script许可证
麻省理工学院
