Slack数据访问服务器

一个用于访问Slack工作区数据的只读服务器,支持AI助手读取频道、消息、线程和用户信息。

  • by mynghn
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 mynghn/slack-mcp-server

使用说明

Slack MCP服务器

只读 模型上下文协议(MCP) 用于访问Slack工作区数据的服务器。该服务器使Claude等AI助手能够从Slack工作区读取频道、消息、线程和用户信息。

特性

工具 描述 需要授权
list_channels 列出所有可访问的公共频道,并分页 机器人或用户
get_channel_history 从特定通道检索消息历史记录 机器人或用户
get_thread_replies 获取消息线程中的所有回复(包括父线程) 机器人或用户
list_users 列出所有分页的工作区用户 机器人或用户
get_user_profile 获取特定用户的详细个人资料信息 机器人或用户
search_messages 跨所有渠道搜索邮件 仅限用户
refresh_credentials 手动触发凭据刷新 仅限用户

所有读取工具都支持基于光标的分页。这 refresh_credentials 该工具支持用户令牌身份验证的自动凭据管理。

安装

先决条件

  • Node.js 20+
  • pnpm(或npm/yarn)
  • 具有适当访问权限的Slack工作区

设置

# Clone the repository
git clone https://github.com/your-username/slack-mcp-server.git
cd slack-mcp-server

# Install dependencies
pnpm install

# Build the project
pnpm run build

认证

服务器支持两种身份验证方法:

选项1:机器人令牌(推荐)

在大多数用例中使用标准的Slack Bot用户OAuth令牌。

  1. 创建Slack应用程序 api.slack.com/apps
  2. 在下面添加以下Bot令牌范围 OAuth和权限:
    • channels:read -列出公共频道
    • channels:history -读取频道消息
    • users:read -列出工作区用户
    • users.profile:read -读取用户配置文件
  3. 将应用程序安装到您的工作区
  4. 复制 Bot用户OAuth令牌 (开始于 xoxb-)
export SLACK_BOT_TOKEN=xoxb-your-token-here

选项2:用户令牌(非官方-搜索所需)

使用用户令牌启用 search_messages 工具。此方法使用浏览器会话凭据。

警告: 此身份验证方法使用从浏览器中提取的非官方会话凭据。它可能违反Slack的服务条款。会话令牌过期,需要手动重新提取。使用风险由您自行承担,仅适用于您有适当授权的工作区。

  1. 在浏览器中打开Slack工作区
  2. 打开开发人员工具(F12)→ 应用→ Cookie
  3. 查找并复制 d cookie值(以开头 xoxd-)
  4. 在“网络”选项卡中,找到任何API请求并从“授权”标头中复制令牌(以 xoxc-)
export SLACK_USER_TOKEN=xoxc-your-token-here
export SLACK_COOKIE_D=xoxd-your-cookie-here

注: 如果同时配置了bot令牌和用户令牌,则bot令牌优先。

令牌自动刷新(仅限用户令牌)

用户令牌会定期过期。服务器可以自动刷新凭据以保持不间断的访问。

自动刷新所需:

export SLACK_USER_TOKEN=xoxc-your-token-here
export SLACK_COOKIE_D=xoxd-your-cookie-here
export SLACK_WORKSPACE=your-workspace-name  # e.g., "mycompany" from mycompany.slack.com

可选配置:

# Credential storage location (default: ~/.slack-mcp-server/credentials.json)
export SLACK_CREDENTIALS_PATH=/custom/path/credentials.json

# Refresh interval in days (default: 7)
export SLACK_REFRESH_INTERVAL_DAYS=7

# Enable/disable auto-refresh (default: true)
export SLACK_REFRESH_ENABLED=true

它是如何工作的:

  1. 启动时,凭据从存储(如果可用)加载或从环境变量保存
  2. 每小时,系统都会根据配置的间隔检查刷新是否到期
  3. 到期时,xoxc令牌和d cookie都会通过向您的工作区发出请求进行刷新
  4. 新凭据将以安全权限持久化到凭据文件中(0600)
  5. 如果刷新失败,则以指数回退的方式重试(最多3次尝试)
  6. 您还可以使用以下命令手动触发刷新 refresh_credentials 工具

用法

运行服务器

# With bot token
SLACK_BOT_TOKEN=xoxb-... pnpm start

# With user token (enables search)
SLACK_USER_TOKEN=xoxc-... SLACK_COOKIE_D=xoxd-... pnpm start

Claude代码配置

将此MCP服务器添加到克劳德代码中:

# With bot token
claude mcp add slack -- node /absolute/path/to/slack-mcp-server/build/index.js \
  -e SLACK_BOT_TOKEN=xoxb-your-token-here

# With user token (enables search)
claude mcp add slack -- node /absolute/path/to/slack-mcp-server/build/index.js \
  -e SLACK_USER_TOKEN=xoxc-your-token-here \
  -e SLACK_COOKIE_D=xoxd-your-cookie-here

要验证服务器是否已配置:

claude mcp list

工具参考

list_channels

列出工作区中所有可访问的公共频道。

参数:

  • limit (可选):返回的最大通道数(1-1000,默认值:100)
  • cursor (可选):来自上一个响应的分页光标
  • exclude_archived (可选):排除已存档的频道(默认值:true)

get_channel_历史

从特定频道检索消息历史记录。

参数:

  • channel_id (必填):通道ID(例如C1234567890)
  • limit (可选):要返回的最大消息数(1-1000,默认值:50)
  • cursor (可选):分页光标
  • oldest (可选):仅此时间戳之后的消息
  • latest (可选):仅此时间戳之前的消息

get_thread_replys

检索消息线程中的所有回复。

参数:

  • channel_id (必填):包含线程的通道ID
  • thread_ts (必填):父消息的时间戳
  • limit (可选):返回的最大回复数(1-1000,默认值:50)
  • cursor (可选):分页光标

list_users

列出工作区中的所有用户。

参数:

  • limit (可选):可返回的最大用户数(1-1000,默认值:200)
  • cursor (可选):分页光标

get_user_profile

获取特定用户的详细个人资料信息。

参数:

  • user_id (必填):用户ID(例如,U1234567890)

搜索消息

在所有可访问的渠道中搜索消息。 需要用户令牌身份验证。

参数:

  • query (必填):搜索查询(支持Slack修饰符: from:, in:, before:, after:)
  • sort (可选):排序方式 score 或 timestamp (默认值:分数)
  • sort_dir (可选):排序方向 asc 或 desc (默认值:desc)
  • count (可选):每页结果(1-100,默认值:20)
  • page (可选):页码(默认:1)

刷新凭证

手动触发Slack用户凭据的刷新。 需要用户令牌身份验证 SLACK_WORKSPACE 已配置。

参数: 无

退货:

  • 关于成功: { success: true, message, refreshedAt, totalRefreshes }
  • 失败时: { success: false, error: { code, message, retryable } }

错误代码:

  • REFRESH_NOT_AVAILABLE -未配置Bot令牌身份验证或工作区
  • REFRESH_IN_PROGRESS -另一个刷新已在运行
  • SESSION_REVOKED -凭据无效,需要手动重新验证
  • NETWORK_ERROR -连接问题(可重试)

免责声明

该项目不隶属于Slack Technologies,LLC。

用户令牌身份验证是非官方的,可能不符合Slack的服务条款。建议使用Bot令牌身份验证。