Slack多工作区通信服务器

一个支持多Slack工作区的消息协议服务器,提供完整的消息、频道、搜索和线程功能。

  • by coreyepstein
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 coreyepstein/advanced-slack-mcp

使用说明

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 install

2.创建Slack应用程序

  1. 首选 api.slack.com/apps 然后单击 创建新应用程序 > 从头开始
  2. 命名它(例如“Claude MCP”)并选择您的工作空间
  3. 首选 OAuth和权限 并添加作用域(请参见 范围 在......下面
  4. 点击 安装到工作区
  5. 复制 Bot用户OAuth令牌 (xoxb-...)
  6. (可选)复制 用户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.json env 块。永远不要将代币提交给 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

许可证

麻省理工学院